// TestWatchMeterStatus tests the meter status watcher functionality. func TestWatchMeterStatus(c *gc.C, status meterstatus.MeterStatus, unit *jujustate.Unit, state *jujustate.State, resources *common.Resources) { c.Assert(resources.Count(), gc.Equals, 0) args := params.Entities{Entities: []params.Entity{ {Tag: unit.UnitTag().String()}, {Tag: "unit-foo-42"}, }} result, err := status.WatchMeterStatus(args) c.Assert(err, jc.ErrorIsNil) c.Assert(result, gc.DeepEquals, params.NotifyWatchResults{ Results: []params.NotifyWatchResult{ {NotifyWatcherId: "1"}, {Error: apiservertesting.ErrUnauthorized}, }, }) // Verify the resource was registered and stop when done c.Assert(resources.Count(), gc.Equals, 1) resource := resources.Get("1") defer statetesting.AssertStop(c, resource) // Check that the Watch has consumed the initial event ("returned" in // the Watch call) wc := statetesting.NewNotifyWatcherC(c, state, resource.(jujustate.NotifyWatcher)) wc.AssertNoChange() err = unit.SetMeterStatus("GREEN", "No additional information.") c.Assert(err, jc.ErrorIsNil) wc.AssertOneChange() }