diff options
Diffstat (limited to 'src/mongo/gotools/mongorestore')
| -rw-r--r-- | src/mongo/gotools/mongorestore/options.go | 9 | ||||
| -rw-r--r-- | src/mongo/gotools/mongorestore/options_test.go | 74 |
2 files changed, 80 insertions, 3 deletions
diff --git a/src/mongo/gotools/mongorestore/options.go b/src/mongo/gotools/mongorestore/options.go index 93965cc3e2b..0913cf52e21 100644 --- a/src/mongo/gotools/mongorestore/options.go +++ b/src/mongo/gotools/mongorestore/options.go @@ -29,9 +29,12 @@ func (*InputOptions) Name() string { // OutputOptions defines the set of options for restoring dump data. type OutputOptions struct { - Drop bool `long:"drop" description:"drop each collection before import"` - DryRun bool `long:"dryRun" description:"view summary without importing anything. recommended with verbosity"` - WriteConcern string `long:"writeConcern" value-name:"<write-concern>" default:"majority" default-mask:"-" description:"write concern options e.g. --writeConcern majority, --writeConcern '{w: 3, wtimeout: 500, fsync: true, j: true}' (defaults to 'majority')"` + Drop bool `long:"drop" description:"drop each collection before import"` + DryRun bool `long:"dryRun" description:"view summary without importing anything. recommended with verbosity"` + + // By default mongorestore uses a write concern of 'majority'. + // Cannot be used simultaneously with write concern options in a URI. + WriteConcern string `long:"writeConcern" value-name:"<write-concern>" default-mask:"-" description:"write concern options e.g. --writeConcern majority, --writeConcern '{w: 3, wtimeout: 500, fsync: true, j: true}'"` NoIndexRestore bool `long:"noIndexRestore" description:"don't restore indexes"` NoOptionsRestore bool `long:"noOptionsRestore" description:"don't restore collection options"` KeepIndexVersion bool `long:"keepIndexVersion" description:"don't update index version"` diff --git a/src/mongo/gotools/mongorestore/options_test.go b/src/mongo/gotools/mongorestore/options_test.go new file mode 100644 index 00000000000..5513ecf2f02 --- /dev/null +++ b/src/mongo/gotools/mongorestore/options_test.go @@ -0,0 +1,74 @@ +package mongorestore + +import ( + "fmt" + "testing" + + "github.com/mongodb/mongo-tools/common/db" + "github.com/mongodb/mongo-tools/common/options" + . "github.com/smartystreets/goconvey/convey" +) + +// Regression test for TOOLS-1741 +func TestWriteConcernWithURIParsing(t *testing.T) { + Convey("With an IngestOptions and ToolsOptions", t, func() { + + // create an 'EnabledOptions' to determine what options should be able to be + // parsed and set form the input. + enabled := options.EnabledOptions{URI: true} + + // create a new tools options to hold the parsed options + opts := options.New("", "", enabled) + + // create a 'OutputOptions', which holds the value of the write concern + // for mongorestore. + outputOpts := &OutputOptions{} + opts.AddOptions(outputOpts) + + // Specify that a write concern set on the URI is not an error and is a known + // possible option. + opts.URI.AddKnownURIParameters(options.KnownURIOptionsWriteConcern) + + Convey("Parsing with no value should leave write concern empty", func() { + _, err := opts.ParseArgs([]string{}) + So(err, ShouldBeNil) + So(outputOpts.WriteConcern, ShouldEqual, "") + Convey("and building write concern object, WMode should be majority", func() { + sessionSafety, err := db.BuildWriteConcern(outputOpts.WriteConcern, "", + opts.ParsedConnString()) + So(err, ShouldBeNil) + So(sessionSafety.WMode, ShouldEqual, "majority") + }) + }) + + Convey("Parsing with no writeconcern in URI should not error", func() { + args := []string{ + "--uri", "mongodb://localhost:27017/test", + } + _, err := opts.ParseArgs(args) + So(err, ShouldBeNil) + So(outputOpts.WriteConcern, ShouldEqual, "") + Convey("and parsing write concern, WMode should be majority", func() { + sessionSafety, err := db.BuildWriteConcern(outputOpts.WriteConcern, "", + opts.ParsedConnString()) + So(err, ShouldBeNil) + So(sessionSafety, ShouldNotBeNil) + So(sessionSafety.WMode, ShouldEqual, "majority") + }) + }) + Convey("Parsing with both writeconcern in URI and command line should error", func() { + args := []string{ + "--uri", "mongodb://localhost:27017/test", + "--writeConcern", "majority", + } + _, err := opts.ParseArgs(args) + So(err, ShouldBeNil) + So(outputOpts.WriteConcern, ShouldEqual, "majority") + Convey("and parsing write concern, WMode should be majority", func() { + _, err := db.BuildWriteConcern(outputOpts.WriteConcern, "", + opts.ParsedConnString()) + So(err, ShouldResemble, fmt.Errorf("cannot specify writeConcern string and connectionString object")) + }) + }) + }) +} |
