func (s *watcherSuite) TestStringsWatcherStopsWithPendingSend(c *gc.C) { // Call the Deployer facade's WatchUnits for machine-0. var results params.StringsWatchResults args := params.Entities{Entities: []params.Entity{{Tag: s.rawMachine.Tag().String()}}} err := s.stateAPI.Call("Deployer", "", "WatchUnits", args, &results) c.Assert(err, gc.IsNil) c.Assert(results.Results, gc.HasLen, 1) result := results.Results[0] c.Assert(result.Error, gc.IsNil) // Start a StringsWatcher and check the initial event. w := watcher.NewStringsWatcher(s.stateAPI, result) wc := statetesting.NewStringsWatcherC(c, s.State, w) // Create a service, deploy a unit of it on the machine. mysql := s.AddTestingService(c, "mysql", s.AddTestingCharm(c, "mysql")) principal, err := mysql.AddUnit() c.Assert(err, gc.IsNil) err = principal.AssignToMachine(s.rawMachine) c.Assert(err, gc.IsNil) // Ensure the initial event is delivered. Then test the watcher // can be stopped cleanly without reading the pending change. s.BackingState.StartSync() statetesting.AssertCanStopWhenSending(c, w) wc.AssertClosed() }
func (*multiNotifyWatcherSuite) TestMultiNotifyWatcherStop(c *gc.C) { w0 := apiservertesting.NewFakeNotifyWatcher() w1 := apiservertesting.NewFakeNotifyWatcher() mw := common.NewMultiNotifyWatcher(w0, w1) wc := statetesting.NewNotifyWatcherC(c, nopSyncStarter{}, mw) wc.AssertOneChange() statetesting.AssertCanStopWhenSending(c, mw) wc.AssertClosed() }
func (*multiNotifyWatcherSuite) TestMultiNotifyWatcherStop(c *gc.C) { w0 := &fakeNotifyWatcher{changes: make(chan struct{}, 1)} w1 := &fakeNotifyWatcher{changes: make(chan struct{}, 1)} w0.changes <- struct{}{} w1.changes <- struct{}{} mw := common.NewMultiNotifyWatcher(w0, w1) wc := statetesting.NewNotifyWatcherC(c, nopSyncStarter{}, mw) wc.AssertOneChange() statetesting.AssertCanStopWhenSending(c, mw) wc.AssertClosed() }
func (s *watcherSuite) TestNotifyWatcherStopsWithPendingSend(c *gc.C) { var results params.NotifyWatchResults args := params.Entities{Entities: []params.Entity{{Tag: s.rawMachine.Tag().String()}}} err := s.stateAPI.Call("Machiner", "", "Watch", args, &results) c.Assert(err, gc.IsNil) c.Assert(results.Results, gc.HasLen, 1) result := results.Results[0] c.Assert(result.Error, gc.IsNil) // params.NotifyWatcher conforms to the state.NotifyWatcher interface w := watcher.NewNotifyWatcher(s.stateAPI, result) wc := statetesting.NewNotifyWatcherC(c, s.State, w) // Now, without reading any changes try stopping the watcher. statetesting.AssertCanStopWhenSending(c, w) wc.AssertClosed() }