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  }