You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

205 lines
8.2 KiB

/* Copyright 2010-2011 10gen Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Driver.Builders;
namespace MongoDB.DriverOnlineTests {
[TestFixture]
public class MongoDatabaseTests {
private MongoServer server;
private MongoDatabase database;
[TestFixtureSetUp]
public void Setup() {
server = MongoServer.Create("mongodb://localhost/?safe=true");
server.Connect();
server.DropDatabase("onlinetests");
database = server["onlinetests"];
}
// TODO: more tests for MongoDatabase
[Test]
public void TestCollectionExists() {
var collectionName = "testcollectionexists";
Assert.IsFalse(database.CollectionExists(collectionName));
database[collectionName].Insert(new BsonDocument());
Assert.IsTrue(database.CollectionExists(collectionName));
}
[Test]
public void TestCreateCollection() {
var collectionName = "testcreatecollection";
Assert.IsFalse(database.CollectionExists(collectionName));
database.CreateCollection(collectionName);
Assert.IsTrue(database.CollectionExists(collectionName));
}
[Test]
public void TestDropCollection() {
var collectionName = "testdropcollection";
Assert.IsFalse(database.CollectionExists(collectionName));
database[collectionName].Insert(new BsonDocument());
Assert.IsTrue(database.CollectionExists(collectionName));
database.DropCollection(collectionName);
Assert.IsFalse(database.CollectionExists(collectionName));
}
[Test]
public void TestEvalNoArgs() {
var code = "function() { return 1; }";
var result = database.Eval(code);
Assert.AreEqual(1, result.ToInt32());
}
[Test]
public void TestEvalNoArgsNoLock() {
var code = "function() { return 1; }";
var result = database.Eval(code, null, true);
Assert.AreEqual(1, result.ToInt32());
}
[Test]
public void TestEvalWithArgs() {
var code = "function(x, y) { return x / y; }";
var result = database.Eval(code, 6, 2);
Assert.AreEqual(3, result.ToInt32());
}
[Test]
public void TestEvalWithArgsNoLock() {
var code = "function(x, y) { return x / y; }";
var result = database.Eval(code, new object[] { 6, 2 }, true);
Assert.AreEqual(3, result.ToInt32());
}
[Test]
public void TestFetchDBRef() {
var collectionName = "testdbref";
var collection = database.GetCollection(collectionName);
var document = new BsonDocument { { "_id", ObjectId.GenerateNewId() }, { "P", "x" } };
collection.Insert(document);
var dbRef = new MongoDBRef(collectionName, document["_id"].AsObjectId);
var fetched = database.FetchDBRef(dbRef);
Assert.AreEqual(document, fetched);
Assert.AreEqual(document.ToJson(), fetched.ToJson());
var dbRefWithDatabaseName = new MongoDBRef(database.Name, collectionName, document["_id"].AsObjectId);
fetched = server.FetchDBRef(dbRefWithDatabaseName);
Assert.AreEqual(document, fetched);
Assert.AreEqual(document.ToJson(), fetched.ToJson());
Assert.Throws<ArgumentException>(() => { server.FetchDBRef(dbRef); });
}
[Test]
public void TestGetCollection() {
var collectionName = "testgetcollection";
var collection = database.GetCollection(typeof(BsonDocument), collectionName);
Assert.AreSame(database, collection.Database);
Assert.AreEqual(database.Name + "." + collectionName, collection.FullName);
Assert.AreEqual(collectionName, collection.Name);
Assert.AreEqual(database.Settings.SafeMode, collection.Settings.SafeMode);
}
[Test]
public void TestGetCollectionGeneric() {
var collectionName = "testgetcollection";
var collection = database.GetCollection(collectionName);
Assert.AreSame(database, collection.Database);
Assert.AreEqual(database.Name + "." + collectionName, collection.FullName);
Assert.AreEqual(collectionName, collection.Name);
Assert.AreEqual(database.Settings.SafeMode, collection.Settings.SafeMode);
}
[Test]
public void TestGetCollectionNames() {
server.DropDatabase("onlinetests");
database["a"].Insert(new BsonDocument("a", 1));
database["b"].Insert(new BsonDocument("b", 1));
database["c"].Insert(new BsonDocument("c", 1));
var collectionNames = database.GetCollectionNames();
Assert.AreEqual(new[] { "a", "b", "c", "system.indexes" }, collectionNames);
}
[Test]
public void TestRenameCollection() {
var collectionName1 = "testrenamecollection1";
var collectionName2 = "testrenamecollection2";
Assert.IsFalse(database.CollectionExists(collectionName1));
Assert.IsFalse(database.CollectionExists(collectionName2));
database[collectionName1].Insert(new BsonDocument());
Assert.IsTrue(database.CollectionExists(collectionName1));
Assert.IsFalse(database.CollectionExists(collectionName2));
database.RenameCollection(collectionName1, collectionName2);
Assert.IsFalse(database.CollectionExists(collectionName1));
Assert.IsTrue(database.CollectionExists(collectionName2));
}
[Test]
public void TestRenameCollectionDropTarget() {
const string collectionName1 = "testrenamecollection3";
const string collectionName2 = "testrenamecollection4";
Assert.IsFalse(database.CollectionExists(collectionName1));
Assert.IsFalse(database.CollectionExists(collectionName2));
database[collectionName1].Insert(new BsonDocument());
database[collectionName2].Insert(new BsonDocument());
Assert.IsTrue(database.CollectionExists(collectionName1));
Assert.True(database.CollectionExists(collectionName2));
Assert.Throws(typeof(MongoCommandException), () => database.RenameCollection(collectionName1, collectionName2));
database.RenameCollection(collectionName1, collectionName2, true);
Assert.IsFalse(database.CollectionExists(collectionName1));
Assert.IsTrue(database.CollectionExists(collectionName2));
}
[Test]
public void TestUserMethods() {
var collection = database["system.users"];
collection.RemoveAll();
database.AddUser(new MongoCredentials("username", "password"), true);
Assert.AreEqual(1, collection.Count());
var user = database.FindUser("username");
Assert.AreEqual("username", user.Username);
Assert.AreEqual(MongoUtils.Hash("username:mongo:password"), user.PasswordHash);
Assert.AreEqual(true, user.IsReadOnly);
var users = database.FindAllUsers();
Assert.AreEqual(1, users.Length);
Assert.AreEqual("username", users[0].Username);
Assert.AreEqual(MongoUtils.Hash("username:mongo:password"), users[0].PasswordHash);
Assert.AreEqual(true, users[0].IsReadOnly);
database.RemoveUser(user);
Assert.AreEqual(0, collection.Count());
}
}
}