Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(72)

Unified Diff: cmd/jujud/upgrade_test.go

Issue 6567067: cmd/jujud: allow for a clean exit
Patch Set: Created 13 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: cmd/jujud/upgrade_test.go
=== modified file 'cmd/jujud/upgrade_test.go'
--- cmd/jujud/upgrade_test.go 2012-09-28 14:18:22 +0000
+++ cmd/jujud/upgrade_test.go 2012-09-28 14:25:02 +0000
@@ -8,6 +8,7 @@
"launchpad.net/juju-core/environs"
"launchpad.net/juju-core/environs/config"
"launchpad.net/juju-core/environs/dummy"
+ "launchpad.net/juju-core/juju"
"launchpad.net/juju-core/juju/testing"
"launchpad.net/juju-core/state"
coretesting "launchpad.net/juju-core/testing"
@@ -40,32 +41,6 @@
c.Assert(err, IsNil)
}
-func (s *UpgraderSuite) proposeVersion(c *C, vers version.Number, development bool) {
- cfg, err := s.State.EnvironConfig()
- c.Assert(err, IsNil)
- attrs := cfg.AllAttrs()
- attrs["agent-version"] = vers.String()
- attrs["development"] = development
- newCfg, err := config.New(attrs)
- c.Assert(err, IsNil)
- err = s.State.SetEnvironConfig(newCfg)
- c.Assert(err, IsNil)
-}
-
-func (s *UpgraderSuite) uploadTools(c *C, vers version.Binary) *state.Tools {
- tgz := coretesting.TarGz(
- coretesting.NewTarFile("juju", 0777, "juju contents "+vers.String()),
- coretesting.NewTarFile("jujuc", 0777, "jujuc contents "+vers.String()),
- coretesting.NewTarFile("jujud", 0777, "jujud contents "+vers.String()),
- )
- storage := s.Conn.Environ.Storage()
- err := storage.Put(environs.ToolsStoragePath(vers), bytes.NewReader(tgz), int64(len(tgz)))
- c.Assert(err, IsNil)
- url, err := s.Conn.Environ.Storage().URL(environs.ToolsStoragePath(vers))
- c.Assert(err, IsNil)
- return &state.Tools{URL: url, Binary: vers}
-}
-
type proposal struct {
version string
devVersion bool
@@ -120,7 +95,7 @@
}
func (s *UpgraderSuite) TestUpgrader(c *C) {
- dataDir, currentTools := s.primeTools(c, version.MustParseBinary("2.0.0-foo-bar"))
+ dataDir, currentTools := primeTools(c, s.Conn, version.MustParseBinary("2.0.0-foo-bar"))
// Remove the tools from the storage so that we're sure that the
// uploader isn't trying to fetch them.
resp, err := http.Get(currentTools.URL)
@@ -146,7 +121,7 @@
for _, v := range test.upload {
vers := version.Current
vers.Number = version.MustParse(v)
- tools := s.uploadTools(c, vers)
+ tools := uploadTools(c, s.Conn, vers)
uploaded[vers.Number] = tools
}
if test.current != "" {
@@ -158,7 +133,7 @@
u = startUpgrader(c, s.State, dataDir, currentTools)
}
if test.propose != "" {
- s.proposeVersion(c, version.MustParse(test.propose), test.devVersion)
+ proposeVersion(c, s.State, version.MustParse(test.propose), test.devVersion)
s.State.StartSync()
}
if test.upgradeTo == "" {
@@ -226,11 +201,11 @@
func (s *UpgraderSuite) TestDelayedStop(c *C) {
defer dummy.SetStorageDelay(0)
- dataDir, tools := s.primeTools(c, version.MustParseBinary("2.0.3-foo-bar"))
- s.uploadTools(c, version.MustParseBinary("2.0.5-foo-bar"))
- s.uploadTools(c, version.MustParseBinary("2.0.6-foo-bar"))
- s.uploadTools(c, version.MustParseBinary("2.0.6-foo-bar"))
- s.uploadTools(c, version.MustParseBinary("2.0.7-foo-bar"))
+ dataDir, tools := primeTools(c, s.Conn, version.MustParseBinary("2.0.3-foo-bar"))
+ uploadTools(c, s.Conn, version.MustParseBinary("2.0.5-foo-bar"))
+ uploadTools(c, s.Conn, version.MustParseBinary("2.0.6-foo-bar"))
+ uploadTools(c, s.Conn, version.MustParseBinary("2.0.6-foo-bar"))
+ uploadTools(c, s.Conn, version.MustParseBinary("2.0.7-foo-bar"))
s.poisonVersion(version.MustParseBinary("2.0.7-foo-bar"))
for i, test := range delayedStopTests {
@@ -238,7 +213,7 @@
upgraderKillDelay = test.upgraderKillDelay
dummy.SetStorageDelay(test.storageDelay)
proposed := version.MustParse(test.propose)
- s.proposeVersion(c, proposed, true)
+ proposeVersion(c, s.State, proposed, true)
u := startUpgrader(c, s.State, dataDir, tools)
t0 := time.Now()
err := u.Stop()
@@ -265,23 +240,8 @@
c.Assert(err, IsNil)
}
-// primeTools sets up the current version of the tools to vers and
-// makes sure that they're available in the returned dataDir.
-func (s *UpgraderSuite) primeTools(c *C, vers version.Binary) (dataDir string, tools *state.Tools) {
- dataDir = c.MkDir()
- // Set up the current version and tools.
- version.Current = vers
- tools = s.uploadTools(c, vers)
- resp, err := http.Get(tools.URL)
- c.Assert(err, IsNil)
- defer resp.Body.Close()
- err = environs.UnpackTools(dataDir, tools, resp.Body)
- c.Assert(err, IsNil)
- return dataDir, tools
-}
-
func (s *UpgraderSuite) TestUpgraderReadyErrorUpgrade(c *C) {
- dataDir, currentTools := s.primeTools(c, version.MustParseBinary("2.0.2-foo-bar"))
+ dataDir, currentTools := primeTools(c, s.Conn, version.MustParseBinary("2.0.2-foo-bar"))
ug := &UpgradeReadyError{
AgentName: "foo",
OldTools: &state.Tools{Binary: version.MustParseBinary("2.0.0-foo-bar")},
@@ -353,3 +313,44 @@
func (as testAgentState) PathKey() string {
return "testagent"
}
+
+func proposeVersion(c *C, st *state.State, vers version.Number, development bool) {
+ cfg, err := st.EnvironConfig()
+ c.Assert(err, IsNil)
+ attrs := cfg.AllAttrs()
+ attrs["agent-version"] = vers.String()
+ attrs["development"] = development
+ newCfg, err := config.New(attrs)
+ c.Assert(err, IsNil)
+ err = st.SetEnvironConfig(newCfg)
+ c.Assert(err, IsNil)
+}
+
+func uploadTools(c *C, conn *juju.Conn, vers version.Binary) *state.Tools {
+ tgz := coretesting.TarGz(
+ coretesting.NewTarFile("juju", 0777, "juju contents "+vers.String()),
+ coretesting.NewTarFile("jujuc", 0777, "jujuc contents "+vers.String()),
+ coretesting.NewTarFile("jujud", 0777, "jujud contents "+vers.String()),
+ )
+ storage := conn.Environ.Storage()
+ err := storage.Put(environs.ToolsStoragePath(vers), bytes.NewReader(tgz), int64(len(tgz)))
+ c.Assert(err, IsNil)
+ url, err := conn.Environ.Storage().URL(environs.ToolsStoragePath(vers))
+ c.Assert(err, IsNil)
+ return &state.Tools{URL: url, Binary: vers}
+}
+
+// primeTools sets up the current version of the tools to vers and
+// makes sure that they're available in the returned dataDir.
+func primeTools(c *C, conn *juju.Conn, vers version.Binary) (dataDir string, tools *state.Tools) {
+ dataDir = c.MkDir()
+ // Set up the current version and tools.
+ version.Current = vers
+ tools = uploadTools(c, conn, vers)
+ resp, err := http.Get(tools.URL)
+ c.Assert(err, IsNil)
+ defer resp.Body.Close()
+ err = environs.UnpackTools(dataDir, tools, resp.Body)
+ c.Assert(err, IsNil)
+ return dataDir, tools
+}

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b