func (s *GitDeployerSuite) TestInstall(c *gc.C) { // Prepare. info := s.bundles.AddCustomBundle(c, corecharm.MustParseURL("cs:s/c-1"), func(path string) { err := ioutil.WriteFile(filepath.Join(path, "some-file"), []byte("hello"), 0644) c.Assert(err, jc.ErrorIsNil) }) err := s.deployer.Stage(info, nil) c.Assert(err, jc.ErrorIsNil) checkCleanup(c, s.deployer) // Install. err = s.deployer.Deploy() c.Assert(err, jc.ErrorIsNil) checkCleanup(c, s.deployer) // Check content. data, err := ioutil.ReadFile(filepath.Join(s.targetPath, "some-file")) c.Assert(err, jc.ErrorIsNil) c.Assert(string(data), gc.Equals, "hello") target := charm.NewGitDir(s.targetPath) url, err := target.ReadCharmURL() c.Assert(err, jc.ErrorIsNil) c.Assert(url, gc.DeepEquals, corecharm.MustParseURL("cs:s/c-1")) lines, err := target.Log() c.Assert(err, jc.ErrorIsNil) c.Assert(lines, gc.HasLen, 2) c.Assert(lines[0], gc.Matches, `[0-9a-f]{7} Deployed charm "cs:s/c-1"\.`) c.Assert(lines[1], gc.Matches, `[0-9a-f]{7} Imported charm "cs:s/c-1"\.`) }
func (s *GitDirSuite) TestAddCommitPullRevert(c *gc.C) { target := charm.NewGitDir(c.MkDir()) err := target.Init() c.Assert(err, gc.IsNil) err = ioutil.WriteFile(filepath.Join(target.Path(), "initial"), []byte("initial"), 0644) c.Assert(err, gc.IsNil) err = target.WriteCharmURL(curl) c.Assert(err, gc.IsNil) err = target.AddAll() c.Assert(err, gc.IsNil) dirty, err := target.Dirty() c.Assert(err, gc.IsNil) c.Assert(dirty, jc.IsTrue) err = target.Commitf("initial") c.Assert(err, gc.IsNil) dirty, err = target.Dirty() c.Assert(err, gc.IsNil) c.Assert(dirty, jc.IsFalse) source := newRepo(c) err = target.Pull(source) c.Assert(err, gc.IsNil) url, err := target.ReadCharmURL() c.Assert(err, gc.IsNil) c.Assert(url, gc.DeepEquals, curl) fi, err := os.Stat(filepath.Join(target.Path(), "some-dir")) c.Assert(err, gc.IsNil) c.Assert(fi, jc.Satisfies, os.FileInfo.IsDir) data, err := ioutil.ReadFile(filepath.Join(target.Path(), "some-file")) c.Assert(err, gc.IsNil) c.Assert(string(data), gc.Equals, "hello") dirty, err = target.Dirty() c.Assert(err, gc.IsNil) c.Assert(dirty, jc.IsFalse) err = ioutil.WriteFile(filepath.Join(target.Path(), "another-file"), []byte("blah"), 0644) c.Assert(err, gc.IsNil) dirty, err = target.Dirty() c.Assert(err, gc.IsNil) c.Assert(dirty, jc.IsTrue) err = source.AddAll() c.Assert(err, gc.IsNil) dirty, err = target.Dirty() c.Assert(err, gc.IsNil) c.Assert(dirty, jc.IsTrue) err = target.Revert() c.Assert(err, gc.IsNil) _, err = os.Stat(filepath.Join(target.Path(), "some-file")) c.Assert(err, jc.Satisfies, os.IsNotExist) _, err = os.Stat(filepath.Join(target.Path(), "some-dir")) c.Assert(err, jc.Satisfies, os.IsNotExist) data, err = ioutil.ReadFile(filepath.Join(target.Path(), "initial")) c.Assert(err, gc.IsNil) c.Assert(string(data), gc.Equals, "initial") dirty, err = target.Dirty() c.Assert(err, gc.IsNil) c.Assert(dirty, jc.IsFalse) }
func (s *GitDirSuite) TestInitConfig(c *gc.C) { base := c.MkDir() repo := charm.NewGitDir(filepath.Join(base, "repo")) err := repo.Init() c.Assert(err, gc.IsNil) cmd := exec.Command("git", "config", "--list", "--local") cmd.Dir = repo.Path() out, err := cmd.Output() c.Assert(err, gc.IsNil) outstr := string(out) c.Assert(outstr, jc.Contains, "user.email=juju@localhost") c.Assert(outstr, jc.Contains, "user.name=juju") }
func newRepo(c *gc.C) *charm.GitDir { repo := charm.NewGitDir(c.MkDir()) err := repo.Init() c.Assert(err, gc.IsNil) err = os.Mkdir(filepath.Join(repo.Path(), "some-dir"), 0755) c.Assert(err, gc.IsNil) err = ioutil.WriteFile(filepath.Join(repo.Path(), "some-file"), []byte("hello"), 0644) c.Assert(err, gc.IsNil) err = repo.AddAll() c.Assert(err, gc.IsNil) err = repo.Commitf("im in ur repo committin ur %s", "files") c.Assert(err, gc.IsNil) return repo }
func (s *GitDeployerSuite) TestUpgrade(c *gc.C) { // Install. info1 := s.bundles.AddCustomBundle(c, corecharm.MustParseURL("cs:s/c-1"), func(path string) { err := ioutil.WriteFile(filepath.Join(path, "some-file"), []byte("hello"), 0644) c.Assert(err, jc.ErrorIsNil) err = symlink.New("./some-file", filepath.Join(path, "a-symlink")) c.Assert(err, jc.ErrorIsNil) }) err := s.deployer.Stage(info1, nil) c.Assert(err, jc.ErrorIsNil) err = s.deployer.Deploy() c.Assert(err, jc.ErrorIsNil) // Upgrade. info2 := s.bundles.AddCustomBundle(c, corecharm.MustParseURL("cs:s/c-2"), func(path string) { err := ioutil.WriteFile(filepath.Join(path, "some-file"), []byte("goodbye"), 0644) c.Assert(err, jc.ErrorIsNil) err = ioutil.WriteFile(filepath.Join(path, "a-symlink"), []byte("not any more!"), 0644) c.Assert(err, jc.ErrorIsNil) }) err = s.deployer.Stage(info2, nil) c.Assert(err, jc.ErrorIsNil) checkCleanup(c, s.deployer) err = s.deployer.Deploy() c.Assert(err, jc.ErrorIsNil) checkCleanup(c, s.deployer) // Check content. data, err := ioutil.ReadFile(filepath.Join(s.targetPath, "some-file")) c.Assert(err, jc.ErrorIsNil) c.Assert(string(data), gc.Equals, "goodbye") data, err = ioutil.ReadFile(filepath.Join(s.targetPath, "a-symlink")) c.Assert(err, jc.ErrorIsNil) c.Assert(string(data), gc.Equals, "not any more!") target := charm.NewGitDir(s.targetPath) url, err := target.ReadCharmURL() c.Assert(err, jc.ErrorIsNil) c.Assert(url, gc.DeepEquals, corecharm.MustParseURL("cs:s/c-2")) lines, err := target.Log() c.Assert(err, jc.ErrorIsNil) c.Assert(lines, gc.HasLen, 5) c.Assert(lines[0], gc.Matches, `[0-9a-f]{7} Upgraded charm to "cs:s/c-2".`) }
func (s *GitDirSuite) TestConflictRevert(c *gc.C) { source := newRepo(c) updated, err := source.Clone(c.MkDir()) c.Assert(err, gc.IsNil) err = ioutil.WriteFile(filepath.Join(updated.Path(), "some-dir"), []byte("hello"), 0644) c.Assert(err, gc.IsNil) err = updated.Snapshotf("potential conflict src") c.Assert(err, gc.IsNil) conflicted, err := updated.Conflicted() c.Assert(err, gc.IsNil) c.Assert(conflicted, jc.IsFalse) target := charm.NewGitDir(c.MkDir()) err = target.Init() c.Assert(err, gc.IsNil) err = target.Pull(source) c.Assert(err, gc.IsNil) err = ioutil.WriteFile(filepath.Join(target.Path(), "some-dir", "conflicting-file"), []byte("hello"), 0644) c.Assert(err, gc.IsNil) err = target.Snapshotf("potential conflict dst") c.Assert(err, gc.IsNil) conflicted, err = target.Conflicted() c.Assert(err, gc.IsNil) c.Assert(conflicted, jc.IsFalse) err = target.Pull(updated) c.Assert(err, gc.Equals, charm.ErrConflict) conflicted, err = target.Conflicted() c.Assert(err, gc.IsNil) c.Assert(conflicted, jc.IsTrue) dirty, err := target.Dirty() c.Assert(err, gc.IsNil) c.Assert(dirty, jc.IsTrue) err = target.Revert() c.Assert(err, gc.IsNil) conflicted, err = target.Conflicted() c.Assert(err, gc.IsNil) c.Assert(conflicted, jc.IsFalse) dirty, err = target.Dirty() c.Assert(err, gc.IsNil) c.Assert(dirty, jc.IsFalse) }
func (s *GitDirSuite) TestCreate(c *gc.C) { base := c.MkDir() repo := charm.NewGitDir(filepath.Join(base, "repo")) exists, err := repo.Exists() c.Assert(err, gc.IsNil) c.Assert(exists, jc.IsFalse) err = ioutil.WriteFile(repo.Path(), nil, 0644) c.Assert(err, gc.IsNil) _, err = repo.Exists() c.Assert(err, gc.ErrorMatches, `".*/repo" is not a directory`) err = os.Remove(repo.Path()) c.Assert(err, gc.IsNil) err = os.Chmod(base, 0555) c.Assert(err, gc.IsNil) defer os.Chmod(base, 0755) err = repo.Init() c.Assert(err, gc.ErrorMatches, ".* permission denied") exists, err = repo.Exists() c.Assert(err, gc.IsNil) c.Assert(exists, jc.IsFalse) err = os.Chmod(base, 0755) c.Assert(err, gc.IsNil) err = repo.Init() c.Assert(err, gc.IsNil) exists, err = repo.Exists() c.Assert(err, gc.IsNil) c.Assert(exists, jc.IsTrue) _, err = repo.ReadCharmURL() c.Assert(err, jc.Satisfies, os.IsNotExist) err = repo.Init() c.Assert(err, gc.IsNil) }
func (s *GitDeployerSuite) TestConflictRevertResolve(c *gc.C) { // Install. info1 := s.bundles.AddCustomBundle(c, corecharm.MustParseURL("cs:s/c-1"), func(path string) { err := ioutil.WriteFile(filepath.Join(path, "some-file"), []byte("hello"), 0644) c.Assert(err, jc.ErrorIsNil) }) err := s.deployer.Stage(info1, nil) c.Assert(err, jc.ErrorIsNil) err = s.deployer.Deploy() c.Assert(err, jc.ErrorIsNil) // Mess up target. err = ioutil.WriteFile(filepath.Join(s.targetPath, "some-file"), []byte("mu!"), 0644) c.Assert(err, jc.ErrorIsNil) // Upgrade. info2 := s.bundles.AddCustomBundle(c, corecharm.MustParseURL("cs:s/c-2"), func(path string) { err := ioutil.WriteFile(filepath.Join(path, "some-file"), []byte("goodbye"), 0644) c.Assert(err, jc.ErrorIsNil) }) err = s.deployer.Stage(info2, nil) c.Assert(err, jc.ErrorIsNil) err = s.deployer.Deploy() c.Assert(err, gc.Equals, charm.ErrConflict) checkCleanup(c, s.deployer) // Check state. target := charm.NewGitDir(s.targetPath) conflicted, err := target.Conflicted() c.Assert(err, jc.ErrorIsNil) c.Assert(conflicted, jc.IsTrue) // Revert and check initial content. err = s.deployer.NotifyRevert() c.Assert(err, jc.ErrorIsNil) data, err := ioutil.ReadFile(filepath.Join(s.targetPath, "some-file")) c.Assert(err, jc.ErrorIsNil) c.Assert(string(data), gc.Equals, "mu!") conflicted, err = target.Conflicted() c.Assert(err, jc.ErrorIsNil) c.Assert(conflicted, jc.IsFalse) // Try to upgrade again. err = s.deployer.Deploy() c.Assert(err, gc.Equals, charm.ErrConflict) conflicted, err = target.Conflicted() c.Assert(err, jc.ErrorIsNil) c.Assert(conflicted, jc.IsTrue) checkCleanup(c, s.deployer) // And again. err = s.deployer.Deploy() c.Assert(err, gc.Equals, charm.ErrConflict) conflicted, err = target.Conflicted() c.Assert(err, jc.ErrorIsNil) c.Assert(conflicted, jc.IsTrue) checkCleanup(c, s.deployer) // Manually resolve, and commit. err = ioutil.WriteFile(filepath.Join(target.Path(), "some-file"), []byte("nu!"), 0644) c.Assert(err, jc.ErrorIsNil) err = s.deployer.NotifyResolved() c.Assert(err, jc.ErrorIsNil) conflicted, err = target.Conflicted() c.Assert(err, jc.ErrorIsNil) c.Assert(conflicted, jc.IsFalse) // Try a final upgrade to the same charm and check it doesn't write anything // except the upgrade log line. err = s.deployer.Deploy() c.Assert(err, jc.ErrorIsNil) checkCleanup(c, s.deployer) data, err = ioutil.ReadFile(filepath.Join(target.Path(), "some-file")) c.Assert(err, jc.ErrorIsNil) c.Assert(string(data), gc.Equals, "nu!") conflicted, err = target.Conflicted() c.Assert(err, jc.ErrorIsNil) c.Assert(conflicted, jc.IsFalse) lines, err := target.Log() c.Assert(err, jc.ErrorIsNil) c.Assert(lines[0], gc.Matches, `[0-9a-f]{7} Upgraded charm to "cs:s/c-2".`) }