github.com/altoros/juju-vmware@v0.0.0-20150312064031-f19ae857ccca/state/backups/db_restore_test.go (about) 1 // Copyright 2014 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package backups_test 5 6 import ( 7 jc "github.com/juju/testing/checkers" 8 gc "gopkg.in/check.v1" 9 10 "github.com/juju/juju/state/backups" 11 "github.com/juju/juju/testing" 12 "github.com/juju/juju/version" 13 ) 14 15 var _ = gc.Suite(&mongoRestoreSuite{}) 16 17 type mongoRestoreSuite struct { 18 testing.BaseSuite 19 } 20 21 func (s *mongoRestoreSuite) TestMongoRestoreArgsForVersion(c *gc.C) { 22 versionNumber := version.Number{} 23 versionNumber.Major = 1 24 versionNumber.Minor = 21 25 args, err := backups.MongoRestoreArgsForVersion(versionNumber, "/some/fake/path") 26 c.Assert(err, jc.ErrorIsNil) 27 c.Assert(args, gc.DeepEquals, []string{"--drop", "--dbpath", "/var/lib/juju/db", "/some/fake/path"}) 28 29 versionNumber.Major = 1 30 versionNumber.Minor = 22 31 args, err = backups.MongoRestoreArgsForVersion(versionNumber, "/some/fake/path") 32 c.Assert(err, jc.ErrorIsNil) 33 c.Assert(args, gc.DeepEquals, []string{"--drop", "--oplogReplay", "--dbpath", "/var/lib/juju/db", "/some/fake/path"}) 34 35 versionNumber.Major = 0 36 versionNumber.Minor = 0 37 args, err = backups.MongoRestoreArgsForVersion(versionNumber, "/some/fake/path") 38 c.Assert(err, gc.ErrorMatches, "this backup file is incompatible with the current version of juju") 39 } 40 41 func (s *mongoRestoreSuite) TestPlaceNewMongo(c *gc.C) { 42 var argsVersion version.Number 43 var newMongoDumpPath string 44 ranArgs := make([][]string, 0, 3) 45 ranCommands := []string{} 46 47 restorePathCalled := false 48 49 runCommand := func(command string, mongoRestoreArgs ...string) error { 50 mgoArgs := make([]string, len(mongoRestoreArgs), len(mongoRestoreArgs)) 51 for i, v := range mongoRestoreArgs { 52 mgoArgs[i] = v 53 } 54 ranArgs = append(ranArgs, mgoArgs) 55 ranCommands = append(ranCommands, command) 56 return nil 57 } 58 s.PatchValue(backups.RunCommand, runCommand) 59 60 restorePath := func() (string, error) { 61 restorePathCalled = true 62 return "/fake/mongo/restore/path", nil 63 } 64 s.PatchValue(backups.RestorePath, restorePath) 65 66 ver := version.Number{Major: 1, Minor: 22} 67 args := []string{"a", "set", "of", "args"} 68 restoreArgsForVersion := func(versionNumber version.Number, mongoDumpPath string) ([]string, error) { 69 newMongoDumpPath = mongoDumpPath 70 argsVersion = versionNumber 71 return args, nil 72 } 73 s.PatchValue(backups.RestoreArgsForVersion, restoreArgsForVersion) 74 75 err := backups.PlaceNewMongo("fakemongopath", ver) 76 c.Assert(err, jc.ErrorIsNil) 77 c.Assert(argsVersion, gc.DeepEquals, ver) 78 c.Assert(newMongoDumpPath, gc.Equals, "fakemongopath") 79 expectedCommands := []string{"initctl", "/fake/mongo/restore/path", "initctl"} 80 c.Assert(ranCommands, gc.DeepEquals, expectedCommands) 81 c.Assert(len(ranArgs), gc.Equals, 3) 82 expectedArgs := [][]string{{"stop", "juju-db"}, {"a", "set", "of", "args"}, {"start", "juju-db"}} 83 c.Assert(ranArgs, gc.DeepEquals, expectedArgs) 84 }