func (s *FilterSuite) TestServiceDeath(c *gc.C) { f, err := newFilter(s.uniter, s.unit.Tag().String()) c.Assert(err, gc.IsNil) defer statetesting.AssertStop(c, f) dyingAsserter := coretesting.NotifyAsserterC{ C: c, Precond: func() { s.BackingState.StartSync() }, Chan: f.UnitDying(), } dyingAsserter.AssertNoReceive() err = s.unit.SetStatus(params.StatusStarted, "", nil) c.Assert(err, gc.IsNil) err = s.wordpress.Destroy() c.Assert(err, gc.IsNil) timeout := time.After(coretesting.LongWait) loop: for { select { case <-f.UnitDying(): break loop case <-time.After(coretesting.ShortWait): s.BackingState.StartSync() case <-timeout: c.Fatalf("dead not detected") } } err = s.unit.Refresh() c.Assert(err, gc.IsNil) c.Assert(s.unit.Life(), gc.Equals, state.Dying) // Can't set s.wordpress to Dead while it still has units. }
// Ensure we get a signal on f.Dead() func (s *FilterSuite) assertFilterDies(c *gc.C, f *filter) { asserter := coretesting.NotifyAsserterC{ Precond: func() { s.BackingState.StartSync() }, C: c, Chan: f.Dead(), } asserter.AssertClosed() }
func (s *FilterSuite) TestUnitDeath(c *gc.C) { f, err := newFilter(s.uniter, s.unit.Tag().String()) c.Assert(err, gc.IsNil) defer f.Stop() // no AssertStop, we test for an error below asserter := coretesting.NotifyAsserterC{ Precond: func() { s.BackingState.StartSync() }, C: c, Chan: f.UnitDying(), } asserter.AssertNoReceive() // Irrelevant change. err = s.unit.SetResolved(state.ResolvedRetryHooks) c.Assert(err, gc.IsNil) asserter.AssertNoReceive() // Set dying. err = s.unit.SetStatus(params.StatusStarted, "", nil) c.Assert(err, gc.IsNil) err = s.unit.Destroy() c.Assert(err, gc.IsNil) asserter.AssertClosed() // Another irrelevant change. err = s.unit.ClearResolved() c.Assert(err, gc.IsNil) asserter.AssertClosed() // Set dead. err = s.unit.EnsureDead() c.Assert(err, gc.IsNil) s.assertAgentTerminates(c, f) }