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 *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 *NewExecutorSuite) TestNewExecutorNoFile(c *gc.C) { charmURL := corecharm.MustParseURL("cs:quantal/nyancat-323") getInstallCharm := func() (*corecharm.URL, error) { return charmURL, nil } executor, err := operation.NewExecutor(s.path("missing"), getInstallCharm, failAcquireLock) c.Assert(err, jc.ErrorIsNil) c.Assert(executor.State(), gc.DeepEquals, operation.State{ Kind: operation.Install, Step: operation.Queued, CharmURL: charmURL, }) ft.Removed{"missing"}.Check(c, s.basePath) }
func (s *BundlesDirSuite) AddCharm(c *gc.C) (charm.BundleInfo, *state.Charm, []byte) { curl := corecharm.MustParseURL("cs:quantal/dummy-1") storagePath := "dummy-1" bunpath := testcharms.Repo.CharmArchivePath(c.MkDir(), "dummy") bun, err := corecharm.ReadCharmArchive(bunpath) c.Assert(err, jc.ErrorIsNil) bundata, hash := readHash(c, bunpath) sch, err := s.State.AddCharm(bun, curl, storagePath, hash) c.Assert(err, jc.ErrorIsNil) apiCharm, err := s.uniter.Charm(sch.URL()) c.Assert(err, jc.ErrorIsNil) surlBad, err := url.Parse(s.URL("/some/charm.bundle?bad")) c.Assert(err, jc.ErrorIsNil) surlGood, err := url.Parse(s.URL("/some/charm.bundle?good")) c.Assert(err, jc.ErrorIsNil) mock := &mockArchiveURLCharm{ apiCharm, []*url.URL{surlBad, surlGood}, } return mock, sch, bundata }
func (s *FactorySuite) testNewDeployString(c *gc.C, newDeploy newDeploy, expectPrefix string) { op, err := newDeploy(s.factory, corecharm.MustParseURL("cs:quantal/wordpress-1")) c.Check(err, jc.ErrorIsNil) c.Check(op.String(), gc.Equals, expectPrefix+" cs:quantal/wordpress-1") }
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".`) }
func curl(revision int) *corecharm.URL { return corecharm.MustParseURL("cs:quantal/wordpress").WithRevision(revision) }
func charmURL(revision int) *corecharm.URL { baseURL := corecharm.MustParseURL("cs:s/c") return baseURL.WithRevision(revision) }
import ( "io/ioutil" "os" "os/exec" "path/filepath" jc "github.com/juju/testing/checkers" gc "gopkg.in/check.v1" corecharm "gopkg.in/juju/charm.v5" "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, jc.ErrorIsNil) cmd := exec.Command("git", "config", "--list", "--local") cmd.Dir = repo.Path()