public void TestCreateIndex()
{
var expectedIndexVersion = (_server.BuildInfo.Version >= new Version(2, 0, 0)) ? 1 : 0;
_collection.Insert(new BsonDocument("x", 1));
_collection.DropAllIndexes(); // doesn't drop the index on _id
var indexes = _collection.GetIndexes();
Assert.AreEqual(1, indexes.Count);
Assert.AreEqual(false, indexes[0].DroppedDups);
Assert.AreEqual(false, indexes[0].IsBackground);
Assert.AreEqual(false, indexes[0].IsSparse);
Assert.AreEqual(false, indexes[0].IsUnique);
Assert.AreEqual(new BsonDocument("_id", 1), indexes[0].Key);
Assert.AreEqual("_id_", indexes[0].Name);
Assert.AreEqual(_collection.FullName, indexes[0].Namespace);
Assert.AreEqual(expectedIndexVersion, indexes[0].Version);
_collection.DropAllIndexes();
_collection.CreateIndex("x");
indexes = _collection.GetIndexes();
Assert.AreEqual(2, indexes.Count);
Assert.AreEqual(false, indexes[0].DroppedDups);
Assert.AreEqual(false, indexes[0].IsBackground);
Assert.AreEqual(false, indexes[0].IsSparse);
Assert.AreEqual(false, indexes[0].IsUnique);
Assert.AreEqual(new BsonDocument("_id", 1), indexes[0].Key);
Assert.AreEqual("_id_", indexes[0].Name);
Assert.AreEqual(_collection.FullName, indexes[0].Namespace);
Assert.AreEqual(expectedIndexVersion, indexes[0].Version);
Assert.AreEqual(false, indexes[1].DroppedDups);
Assert.AreEqual(false, indexes[1].IsBackground);
Assert.AreEqual(false, indexes[1].IsSparse);
Assert.AreEqual(false, indexes[1].IsUnique);
Assert.AreEqual(new BsonDocument("x", 1), indexes[1].Key);
Assert.AreEqual("x_1", indexes[1].Name);
Assert.AreEqual(_collection.FullName, indexes[1].Namespace);
Assert.AreEqual(expectedIndexVersion, indexes[1].Version);
_collection.DropAllIndexes();
var options = IndexOptions.SetBackground(true).SetDropDups(true).SetSparse(true).SetUnique(true);
_collection.CreateIndex(IndexKeys.Ascending("x").Descending("y"), options);
indexes = _collection.GetIndexes();
Assert.AreEqual(2, indexes.Count);
Assert.AreEqual(false, indexes[0].DroppedDups);
Assert.AreEqual(false, indexes[0].IsBackground);
Assert.AreEqual(false, indexes[0].IsSparse);
Assert.AreEqual(false, indexes[0].IsUnique);
Assert.AreEqual(new BsonDocument("_id", 1), indexes[0].Key);
Assert.AreEqual("_id_", indexes[0].Name);
Assert.AreEqual(_collection.FullName, indexes[0].Namespace);
Assert.AreEqual(expectedIndexVersion, indexes[0].Version);
Assert.AreEqual(true, indexes[1].DroppedDups);
Assert.AreEqual(true, indexes[1].IsBackground);
Assert.AreEqual(true, indexes[1].IsSparse);
Assert.AreEqual(true, indexes[1].IsUnique);
Assert.AreEqual(new BsonDocument { { "x", 1 }, { "y", -1 } }, indexes[1].Key);
Assert.AreEqual("x_1_y_-1", indexes[1].Name);
Assert.AreEqual(_collection.FullName, indexes[1].Namespace);
Assert.AreEqual(expectedIndexVersion, indexes[1].Version);
}