summaryrefslogtreecommitdiff
path: root/src/mongo/gotools/mongorestore/metadata_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/gotools/mongorestore/metadata_test.go')
-rw-r--r--src/mongo/gotools/mongorestore/metadata_test.go177
1 files changed, 177 insertions, 0 deletions
diff --git a/src/mongo/gotools/mongorestore/metadata_test.go b/src/mongo/gotools/mongorestore/metadata_test.go
new file mode 100644
index 00000000000..b3b6018f8f2
--- /dev/null
+++ b/src/mongo/gotools/mongorestore/metadata_test.go
@@ -0,0 +1,177 @@
+package mongorestore
+
+import (
+ "testing"
+
+ "github.com/mongodb/mongo-tools/common/db"
+ "github.com/mongodb/mongo-tools/common/intents"
+ commonOpts "github.com/mongodb/mongo-tools/common/options"
+ "github.com/mongodb/mongo-tools/common/testutil"
+ . "github.com/smartystreets/goconvey/convey"
+ "gopkg.in/mgo.v2/bson"
+)
+
+const ExistsDB = "restore_collection_exists"
+
+func TestCollectionExists(t *testing.T) {
+
+ testutil.VerifyTestType(t, testutil.IntegrationTestType)
+
+ Convey("With a test mongorestore", t, func() {
+ ssl := testutil.GetSSLOptions()
+ auth := testutil.GetAuthOptions()
+ sessionProvider, err := db.NewSessionProvider(commonOpts.ToolOptions{
+ Connection: &commonOpts.Connection{
+ Host: "localhost",
+ Port: db.DefaultTestPort,
+ },
+ Auth: &auth,
+ SSL: &ssl,
+ })
+ So(err, ShouldBeNil)
+
+ restore := &MongoRestore{
+ SessionProvider: sessionProvider,
+ }
+
+ Convey("and some test data in a server", func() {
+ session, err := restore.SessionProvider.GetSession()
+ So(err, ShouldBeNil)
+ So(session.DB(ExistsDB).C("one").Insert(bson.M{}), ShouldBeNil)
+ So(session.DB(ExistsDB).C("two").Insert(bson.M{}), ShouldBeNil)
+ So(session.DB(ExistsDB).C("three").Insert(bson.M{}), ShouldBeNil)
+
+ Convey("collections that exist should return true", func() {
+ exists, err := restore.CollectionExists(&intents.Intent{DB: ExistsDB, C: "one"})
+ So(err, ShouldBeNil)
+ So(exists, ShouldBeTrue)
+ exists, err = restore.CollectionExists(&intents.Intent{DB: ExistsDB, C: "two"})
+ So(err, ShouldBeNil)
+ So(exists, ShouldBeTrue)
+ exists, err = restore.CollectionExists(&intents.Intent{DB: ExistsDB, C: "three"})
+ So(err, ShouldBeNil)
+ So(exists, ShouldBeTrue)
+
+ Convey("and those that do not exist should return false", func() {
+ exists, err = restore.CollectionExists(&intents.Intent{DB: ExistsDB, C: "four"})
+ So(err, ShouldBeNil)
+ So(exists, ShouldBeFalse)
+ })
+ })
+
+ Reset(func() {
+ session.DB(ExistsDB).DropDatabase()
+ })
+ })
+
+ Convey("and a fake cache should be used instead of the server when it exists", func() {
+ restore.knownCollections = map[string][]string{
+ ExistsDB: []string{"cats", "dogs", "snakes"},
+ }
+ exists, err := restore.CollectionExists(&intents.Intent{DB: ExistsDB, C: "dogs"})
+ So(err, ShouldBeNil)
+ So(exists, ShouldBeTrue)
+ exists, err = restore.CollectionExists(&intents.Intent{DB: ExistsDB, C: "two"})
+ So(err, ShouldBeNil)
+ So(exists, ShouldBeFalse)
+ })
+ })
+}
+
+func TestGetDumpAuthVersion(t *testing.T) {
+
+ testutil.VerifyTestType(t, testutil.UnitTestType)
+ restore := &MongoRestore{}
+
+ Convey("With a test mongorestore", t, func() {
+ Convey("and no --restoreDbUsersAndRoles", func() {
+ restore = &MongoRestore{
+ InputOptions: &InputOptions{},
+ ToolOptions: &commonOpts.ToolOptions{},
+ NSOptions: &NSOptions{},
+ }
+ Convey("auth version 1 should be detected", func() {
+ restore.manager = intents.NewIntentManager()
+ version, err := restore.GetDumpAuthVersion()
+ So(err, ShouldBeNil)
+ So(version, ShouldEqual, 1)
+ })
+
+ Convey("auth version 3 should be detected", func() {
+ restore.manager = intents.NewIntentManager()
+ intent := &intents.Intent{
+ DB: "admin",
+ C: "system.version",
+ Location: "testdata/auth_version_3.bson",
+ }
+ intent.BSONFile = &realBSONFile{path: "testdata/auth_version_3.bson", intent: intent}
+ restore.manager.Put(intent)
+ version, err := restore.GetDumpAuthVersion()
+ So(err, ShouldBeNil)
+ So(version, ShouldEqual, 3)
+ })
+
+ Convey("auth version 5 should be detected", func() {
+ restore.manager = intents.NewIntentManager()
+ intent := &intents.Intent{
+ DB: "admin",
+ C: "system.version",
+ Location: "testdata/auth_version_5.bson",
+ }
+ intent.BSONFile = &realBSONFile{path: "testdata/auth_version_5.bson", intent: intent}
+ restore.manager.Put(intent)
+ version, err := restore.GetDumpAuthVersion()
+ So(err, ShouldBeNil)
+ So(version, ShouldEqual, 5)
+ })
+ })
+
+ Convey("using --restoreDbUsersAndRoles", func() {
+ restore = &MongoRestore{
+ InputOptions: &InputOptions{
+ RestoreDBUsersAndRoles: true,
+ },
+ ToolOptions: &commonOpts.ToolOptions{},
+ NSOptions: &NSOptions{
+ DB: "TestDB",
+ },
+ }
+
+ Convey("auth version 3 should be detected when no file exists", func() {
+ restore.manager = intents.NewIntentManager()
+ version, err := restore.GetDumpAuthVersion()
+ So(err, ShouldBeNil)
+ So(version, ShouldEqual, 3)
+ })
+
+ Convey("auth version 3 should be detected when a version 3 file exists", func() {
+ restore.manager = intents.NewIntentManager()
+ intent := &intents.Intent{
+ DB: "admin",
+ C: "system.version",
+ Location: "testdata/auth_version_3.bson",
+ }
+ intent.BSONFile = &realBSONFile{path: "testdata/auth_version_3.bson", intent: intent}
+ restore.manager.Put(intent)
+ version, err := restore.GetDumpAuthVersion()
+ So(err, ShouldBeNil)
+ So(version, ShouldEqual, 3)
+ })
+
+ Convey("auth version 5 should be detected", func() {
+ restore.manager = intents.NewIntentManager()
+ intent := &intents.Intent{
+ DB: "admin",
+ C: "system.version",
+ Location: "testdata/auth_version_5.bson",
+ }
+ intent.BSONFile = &realBSONFile{path: "testdata/auth_version_5.bson", intent: intent}
+ restore.manager.Put(intent)
+ version, err := restore.GetDumpAuthVersion()
+ So(err, ShouldBeNil)
+ So(version, ShouldEqual, 5)
+ })
+ })
+ })
+
+}