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, gc.IsNil) }) err := s.deployer.Stage(info, nil) c.Assert(err, gc.IsNil) checkCleanup(c, s.deployer) // Install. err = s.deployer.Deploy() c.Assert(err, gc.IsNil) checkCleanup(c, s.deployer) // Check content. data, err := ioutil.ReadFile(filepath.Join(s.targetPath, "some-file")) c.Assert(err, gc.IsNil) c.Assert(string(data), gc.Equals, "hello") target := charm.NewGitDir(s.targetPath) url, err := target.ReadCharmURL() c.Assert(err, gc.IsNil) c.Assert(url, gc.DeepEquals, corecharm.MustParseURL("cs:s/c-1")) lines, err := target.Log() c.Assert(err, gc.IsNil) 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 *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, gc.IsNil) err = symlink.New("./some-file", filepath.Join(path, "a-symlink")) c.Assert(err, gc.IsNil) }) err := s.deployer.Stage(info1, nil) c.Assert(err, gc.IsNil) err = s.deployer.Deploy() c.Assert(err, gc.IsNil) // 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, gc.IsNil) err = ioutil.WriteFile(filepath.Join(path, "a-symlink"), []byte("not any more!"), 0644) c.Assert(err, gc.IsNil) }) err = s.deployer.Stage(info2, nil) c.Assert(err, gc.IsNil) checkCleanup(c, s.deployer) err = s.deployer.Deploy() c.Assert(err, gc.IsNil) checkCleanup(c, s.deployer) // Check content. data, err := ioutil.ReadFile(filepath.Join(s.targetPath, "some-file")) c.Assert(err, gc.IsNil) c.Assert(string(data), gc.Equals, "goodbye") data, err = ioutil.ReadFile(filepath.Join(s.targetPath, "a-symlink")) c.Assert(err, gc.IsNil) c.Assert(string(data), gc.Equals, "not any more!") target := charm.NewGitDir(s.targetPath) url, err := target.ReadCharmURL() c.Assert(err, gc.IsNil) c.Assert(url, gc.DeepEquals, corecharm.MustParseURL("cs:s/c-2")) lines, err := target.Log() c.Assert(err, gc.IsNil) 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 *BundlesDirSuite) AddCharm(c *gc.C) (*uniter.Charm, *state.Charm, []byte) { curl := corecharm.MustParseURL("cs:quantal/dummy-1") surl, err := url.Parse(s.URL("/some/charm.bundle")) c.Assert(err, gc.IsNil) bunpath := charmtesting.Charms.CharmArchivePath(c.MkDir(), "dummy") bun, err := corecharm.ReadCharmArchive(bunpath) c.Assert(err, gc.IsNil) bundata, hash := readHash(c, bunpath) sch, err := s.State.AddCharm(bun, curl, surl, hash) c.Assert(err, gc.IsNil) apiCharm, err := s.uniter.Charm(sch.URL()) c.Assert(err, gc.IsNil) return apiCharm, sch, bundata }
func charmURL(revision int) *corecharm.URL { baseURL := corecharm.MustParseURL("cs:s/c") return baseURL.WithRevision(revision) }
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, gc.IsNil) }) err := s.deployer.Stage(info1, nil) c.Assert(err, gc.IsNil) err = s.deployer.Deploy() c.Assert(err, gc.IsNil) // Mess up target. err = ioutil.WriteFile(filepath.Join(s.targetPath, "some-file"), []byte("mu!"), 0644) c.Assert(err, gc.IsNil) // 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, gc.IsNil) }) err = s.deployer.Stage(info2, nil) c.Assert(err, gc.IsNil) 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, gc.IsNil) c.Assert(conflicted, gc.Equals, true) // Revert and check initial content. err = s.deployer.NotifyRevert() c.Assert(err, gc.IsNil) data, err := ioutil.ReadFile(filepath.Join(s.targetPath, "some-file")) c.Assert(err, gc.IsNil) c.Assert(string(data), gc.Equals, "mu!") conflicted, err = target.Conflicted() c.Assert(err, gc.IsNil) c.Assert(conflicted, gc.Equals, false) // Try to upgrade again. err = s.deployer.Deploy() c.Assert(err, gc.Equals, charm.ErrConflict) conflicted, err = target.Conflicted() c.Assert(err, gc.IsNil) c.Assert(conflicted, gc.Equals, true) checkCleanup(c, s.deployer) // And again. err = s.deployer.Deploy() c.Assert(err, gc.Equals, charm.ErrConflict) conflicted, err = target.Conflicted() c.Assert(err, gc.IsNil) c.Assert(conflicted, gc.Equals, true) checkCleanup(c, s.deployer) // Manually resolve, and commit. err = ioutil.WriteFile(filepath.Join(target.Path(), "some-file"), []byte("nu!"), 0644) c.Assert(err, gc.IsNil) err = s.deployer.NotifyResolved() c.Assert(err, gc.IsNil) conflicted, err = target.Conflicted() c.Assert(err, gc.IsNil) c.Assert(conflicted, gc.Equals, false) // 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, gc.IsNil) checkCleanup(c, s.deployer) data, err = ioutil.ReadFile(filepath.Join(target.Path(), "some-file")) c.Assert(err, gc.IsNil) c.Assert(string(data), gc.Equals, "nu!") conflicted, err = target.Conflicted() c.Assert(err, gc.IsNil) c.Assert(conflicted, gc.Equals, false) lines, err := target.Log() c.Assert(err, gc.IsNil) c.Assert(lines[0], gc.Matches, `[0-9a-f]{7} Upgraded charm to "cs:s/c-2".`) }
import ( "io/ioutil" "os" "os/exec" "path/filepath" jc "github.com/juju/testing/checkers" corecharm "gopkg.in/juju/charm.v3" gc "launchpad.net/gocheck" "github.com/juju/juju/testing" "github.com/juju/juju/worker/uniter/charm" ) var curl = corecharm.MustParseURL("cs:series/blah-blah-123") type GitDirSuite struct { testing.GitSuite } var _ = gc.Suite(&GitDirSuite{}) 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()