func (s *MongoSuite) TestEnsureServer(c *gc.C) { dataDir := c.MkDir() dbDir := filepath.Join(dataDir, "db") namespace := "namespace" mockShellCommand(c, &s.CleanupSuite, "apt-get") err := mongo.EnsureServer(dataDir, namespace, testInfo) c.Assert(err, gc.IsNil) testJournalDirs(dbDir, c) assertInstalled := func() { c.Assert(s.installed, gc.HasLen, 1) conf := s.installed[0] c.Assert(conf.Name, gc.Equals, "juju-db-namespace") c.Assert(conf.InitDir, gc.Equals, "/etc/init") c.Assert(conf.Desc, gc.Equals, "juju state database") c.Assert(conf.Cmd, gc.Matches, regexp.QuoteMeta(s.mongodPath)+".*") // TODO(nate) set Out so that mongod output goes somewhere useful? c.Assert(conf.Out, gc.Equals, "") } assertInstalled() contents, err := ioutil.ReadFile(s.mongodConfigPath) c.Assert(err, gc.IsNil) c.Assert(contents, jc.DeepEquals, []byte("ENABLE_MONGODB=no")) contents, err = ioutil.ReadFile(mongo.SSLKeyPath(dataDir)) c.Assert(err, gc.IsNil) c.Assert(string(contents), gc.Equals, testInfo.Cert+"\n"+testInfo.PrivateKey) contents, err = ioutil.ReadFile(mongo.SharedSecretPath(dataDir)) c.Assert(err, gc.IsNil) c.Assert(string(contents), gc.Equals, testInfo.SharedSecret) s.installed = nil // now check we can call it multiple times without error err = mongo.EnsureServer(dataDir, namespace, testInfo) c.Assert(err, gc.IsNil) assertInstalled() // make sure that we log the version of mongodb as we get ready to // start it tlog := c.GetTestLog() any := `(.|\n)*` start := "^" + any tail := any + "$" c.Assert(tlog, gc.Matches, start+`using mongod: .*/mongod --version: "db version v2\.4\.9`+tail) }
func (s *MongoSuite) TestQuantalAptAddRepo(c *gc.C) { dir := c.MkDir() s.PatchEnvPathPrepend(dir) failCmd(filepath.Join(dir, "add-apt-repository")) mockShellCommand(c, &s.CleanupSuite, "apt-get") // test that we call add-apt-repository only for quantal (and that if it // fails, we return the error) s.PatchValue(&version.Current.Series, "quantal") err := mongo.EnsureServer(dir, "", testInfo) c.Assert(err, gc.ErrorMatches, "cannot install mongod: cannot add apt repository: exit status 1.*") s.PatchValue(&version.Current.Series, "trusty") err = mongo.EnsureServer(dir, "", testInfo) c.Assert(err, gc.IsNil) }
func (s *MongoSuite) TestNoMongoDir(c *gc.C) { // Make a non-existent directory that can nonetheless be // created. mockShellCommand(c, &s.CleanupSuite, "apt-get") dataDir := filepath.Join(c.MkDir(), "dir", "data") err := mongo.EnsureServer(dataDir, "", testInfo) c.Check(err, gc.IsNil) _, err = os.Stat(filepath.Join(dataDir, "db")) c.Assert(err, gc.IsNil) }
func (s *MongoSuite) TestAddPPAInQuantal(c *gc.C) { mockShellCommand(c, &s.CleanupSuite, "apt-get") addAptRepoOut := mockShellCommand(c, &s.CleanupSuite, "add-apt-repository") s.PatchValue(&version.Current.Series, "quantal") dataDir := c.MkDir() err := mongo.EnsureServer(dataDir, "", testInfo) c.Assert(err, gc.IsNil) c.Assert(getMockShellCalls(c, addAptRepoOut), gc.DeepEquals, [][]string{{ "-y", "ppa:juju/stable", }}) }
func (s *MongoSuite) TestInstallMongod(c *gc.C) { type installs struct { series string pkg string } tests := []installs{ {"precise", "mongodb-server"}, {"quantal", "mongodb-server"}, {"raring", "mongodb-server"}, {"saucy", "mongodb-server"}, {"trusty", "juju-mongodb"}, {"u-series", "juju-mongodb"}, } mockShellCommand(c, &s.CleanupSuite, "add-apt-repository") output := mockShellCommand(c, &s.CleanupSuite, "apt-get") for _, test := range tests { c.Logf("Testing %s", test.series) dataDir := c.MkDir() namespace := "namespace" + test.series s.PatchValue(&version.Current.Series, test.series) err := mongo.EnsureServer(dataDir, namespace, testInfo) c.Assert(err, gc.IsNil) cmds := getMockShellCalls(c, output) // quantal does an extra apt-get install for python software properties // so we need to remember to skip that one index := 0 if test.series == "quantal" { index = 1 } match := fmt.Sprintf(`.* install .*%s`, test.pkg) c.Assert(strings.Join(cmds[index], " "), gc.Matches, match) // remove the temp file between tests c.Assert(os.Remove(output), gc.IsNil) } }