func (s *FilterSuite) TestUnitDeath(c *C) { f, err := newFilter(s.State, s.unit.Name()) c.Assert(err, IsNil) defer f.Stop() asserter := coretesting.NotifyAsserterC{ Precond: func() { s.State.StartSync() }, C: c, Chan: f.UnitDying(), } asserter.AssertNoReceive() // Irrelevant change. err = s.unit.SetResolved(state.ResolvedRetryHooks) c.Assert(err, IsNil) asserter.AssertNoReceive() // Set dying. err = s.unit.SetStatus(params.StatusStarted, "") c.Assert(err, IsNil) err = s.unit.Destroy() c.Assert(err, IsNil) asserter.AssertClosed() // Another irrelevant change. err = s.unit.ClearResolved() c.Assert(err, IsNil) asserter.AssertClosed() // Set dead. err = s.unit.EnsureDead() c.Assert(err, IsNil) s.assertAgentTerminates(c, f) }
func (s *FilterSuite) TestServiceDeath(c *C) { f, err := newFilter(s.State, s.unit.Name()) c.Assert(err, IsNil) defer f.Stop() dyingAsserter := coretesting.NotifyAsserterC{ C: c, Precond: func() { s.State.StartSync() }, Chan: f.UnitDying(), } dyingAsserter.AssertNoReceive() err = s.unit.SetStatus(params.StatusStarted, "") c.Assert(err, IsNil) err = s.wordpress.Destroy() c.Assert(err, IsNil) timeout := time.After(coretesting.LongWait) loop: for { select { case <-f.UnitDying(): break loop case <-time.After(coretesting.ShortWait): s.State.StartSync() case <-timeout: c.Fatalf("dead not detected") } } err = s.unit.Refresh() c.Assert(err, IsNil) c.Assert(s.unit.Life(), Equals, state.Dying) // Can't set s.wordpress to Dead while it still has units. }