func (s *UpgraderSuite) TestDelayedStop(c *C) { defer dummy.SetStorageDelay(0) 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")) s.poisonVersion(version.MustParseBinary("2.0.7-foo-bar")) for i, test := range delayedStopTests { c.Logf("%d. %v", i, test.about) upgraderKillDelay = test.upgraderKillDelay dummy.SetStorageDelay(test.storageDelay) proposed := version.MustParse(test.propose) s.proposeVersion(c, proposed, true) u := s.startUpgrader(c, tools) t0 := time.Now() err := u.Stop() d := time.Now().Sub(t0) if d > 100*time.Millisecond { c.Errorf("upgrader took took too long: %v", d) } if test.err == "" { c.Check(err, IsNil) } else { c.Check(err, ErrorMatches, test.err) } } }
func (s *UpgraderSuite) TestUpgraderUpgradesImmediately(c *gc.C) { oldTools := s.primeTools(c, version.MustParseBinary("5.4.3-foo-bar")) newTools := s.uploadTools(c, version.MustParseBinary("5.4.5-foo-bar")) err := statetesting.SetAgentVersion(s.State, newTools.Version.Number) c.Assert(err, gc.IsNil) // Make the download take a while so that we verify that // the download happens before the upgrader checks if // it's been stopped. dummy.SetStorageDelay(coretesting.ShortWait) u := upgrader.New(s.state.Upgrader(), s.machine.Tag(), s.DataDir()) err = u.Stop() c.Assert(err, gc.DeepEquals, &upgrader.UpgradeReadyError{ AgentName: s.machine.Tag(), OldTools: oldTools, NewTools: newTools, DataDir: s.DataDir(), }) foundTools, err := tools.ReadTools(s.DataDir(), newTools.Version) c.Assert(err, gc.IsNil) c.Assert(foundTools, gc.DeepEquals, newTools) }