func (*diskStoreSuite) TestNewDisk(c *gc.C) { dir := c.MkDir() store, err := configstore.NewDisk(filepath.Join(dir, "foo")) c.Assert(err, jc.Satisfies, os.IsNotExist) c.Assert(store, gc.IsNil) store, err = configstore.NewDisk(filepath.Join(dir)) c.Assert(err, gc.IsNil) c.Assert(store, gc.NotNil) }
func (*diskStoreSuite) TestRead(c *gc.C) { dir := c.MkDir() err := os.Mkdir(storePath(dir, ""), 0700) c.Assert(err, gc.IsNil) err = ioutil.WriteFile(storePath(dir, "someenv"), []byte(sampleInfo), 0666) c.Assert(err, gc.IsNil) store, err := configstore.NewDisk(dir) c.Assert(err, gc.IsNil) info, err := store.ReadInfo("someenv") c.Assert(err, gc.IsNil) c.Assert(info.Initialized(), jc.IsTrue) c.Assert(info.APICredentials(), gc.DeepEquals, configstore.APICredentials{ User: "******", Password: "******", }) c.Assert(info.APIEndpoint(), gc.DeepEquals, configstore.APIEndpoint{ Addresses: []string{"example.com", "kremvax.ru"}, CACert: "first line\nsecond line", }) c.Assert(info.Location(), gc.Equals, fmt.Sprintf("file %q", dir+"/environments/someenv.jenv")) c.Assert(info.BootstrapConfig(), gc.DeepEquals, map[string]interface{}{ "secret": "blah", "arble": "bletch", }) }
func (*diskStoreSuite) TestCreate(c *gc.C) { dir := c.MkDir() store, err := configstore.NewDisk(dir) c.Assert(err, gc.IsNil) // Create some new environment info. info, err := store.CreateInfo("someenv") c.Assert(err, gc.IsNil) c.Assert(info.APIEndpoint(), gc.DeepEquals, configstore.APIEndpoint{}) c.Assert(info.APICredentials(), gc.DeepEquals, configstore.APICredentials{}) c.Assert(info.Initialized(), jc.IsFalse) data, err := ioutil.ReadFile(storePath(dir, "someenv")) c.Assert(err, gc.IsNil) c.Assert(data, gc.HasLen, 0) // Check that we can't create it twice. info, err = store.CreateInfo("someenv") c.Assert(err, gc.Equals, configstore.ErrEnvironInfoAlreadyExists) c.Assert(info, gc.IsNil) // Check that we can read it again. info, err = store.ReadInfo("someenv") c.Assert(err, gc.IsNil) c.Assert(info.Initialized(), jc.IsFalse) }
func (s *diskInterfaceSuite) SetUpTest(c *gc.C) { s.dir = c.MkDir() s.NewStore = func(c *gc.C) configstore.Storage { store, err := configstore.NewDisk(s.dir) c.Assert(err, gc.IsNil) return store } }
func (*diskStoreSuite) TestReadNotFound(c *gc.C) { dir := c.MkDir() store, err := configstore.NewDisk(dir) c.Assert(err, gc.IsNil) info, err := store.ReadInfo("someenv") c.Assert(err, jc.Satisfies, errors.IsNotFound) c.Assert(info, gc.IsNil) }
func (*diskStoreSuite) TestRenameFails(c *gc.C) { dir := c.MkDir() store, err := configstore.NewDisk(dir) c.Assert(err, gc.IsNil) info, err := store.CreateInfo("someenv") c.Assert(err, gc.IsNil) // Replace the file by an directory which can't be renamed over. path := storePath(dir, "someenv") err = os.Remove(path) c.Assert(err, gc.IsNil) err = os.Mkdir(path, 0777) c.Assert(err, gc.IsNil) err = info.Write() c.Assert(err, gc.ErrorMatches, "cannot rename new environment info file: .*") }
func (*diskStoreSuite) TestWriteTempFileFails(c *gc.C) { dir := c.MkDir() store, err := configstore.NewDisk(dir) c.Assert(err, gc.IsNil) info, err := store.CreateInfo("someenv") c.Assert(err, gc.IsNil) // Make the directory non-writable err = os.Chmod(storePath(dir, ""), 0555) c.Assert(err, gc.IsNil) err = info.Write() c.Assert(err, gc.ErrorMatches, "cannot create temporary file: .*") // Make the directory writable again so that gocheck can clean it up. err = os.Chmod(storePath(dir, ""), 0777) c.Assert(err, gc.IsNil) }
func (*diskStoreSuite) TestDestroyRemovesFiles(c *gc.C) { dir := c.MkDir() store, err := configstore.NewDisk(dir) c.Assert(err, gc.IsNil) info, err := store.CreateInfo("someenv") c.Assert(err, gc.IsNil) _, err = os.Stat(storePath(dir, "someenv")) c.Assert(err, gc.IsNil) err = info.Destroy() c.Assert(err, gc.IsNil) _, err = os.Stat(storePath(dir, "someenv")) c.Assert(err, jc.Satisfies, os.IsNotExist) err = info.Destroy() c.Assert(err, gc.ErrorMatches, "environment info has already been removed") }
func (s *diskStoreSuite) TestCreatePermissions(c *gc.C) { // Even though it doesn't test the actual chown, it does test the code path. user, err := user.Current() c.Assert(err, gc.IsNil) s.PatchEnvironment("SUDO_UID", user.Uid) s.PatchEnvironment("SUDO_GID", user.Gid) dir := c.MkDir() store, err := configstore.NewDisk(dir) c.Assert(err, gc.IsNil) // Create some new environment info. _, err = store.CreateInfo("someenv") c.Assert(err, gc.IsNil) checkPath := func(path string) { stat, err := os.Stat(path) c.Assert(err, gc.IsNil) c.Assert(fmt.Sprint(stat.Sys().(*syscall.Stat_t).Uid), gc.Equals, user.Uid) c.Assert(fmt.Sprint(stat.Sys().(*syscall.Stat_t).Gid), gc.Equals, user.Gid) } checkPath(storePath(dir, "")) checkPath(storePath(dir, "someenv")) }