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
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());
|
|
}
|
|
}
|
|
}
|