// TestStatusHandlerDoesNotRerunAfterRestart tests that the status handler will not rerun a meter-status-changed // hook if it is restarted, but no actual changes are recorded. func (s *ConnectedWorkerSuite) TestStatusHandlerDoesNotRerunAfterRestart(c *gc.C) { handler, err := meterstatus.NewConnectedStatusHandler( meterstatus.ConnectedConfig{ Runner: &stubRunner{stub: s.stub}, StateFile: meterstatus.NewStateFile(path.Join(s.dataDir, "meter-status.yaml")), Status: s.msClient, }) c.Assert(err, jc.ErrorIsNil) c.Assert(handler, gc.NotNil) _, err = handler.SetUp() c.Assert(err, jc.ErrorIsNil) err = handler.Handle(nil) c.Assert(err, jc.ErrorIsNil) s.stub.CheckCallNames(c, "WatchMeterStatus", "MeterStatus", "RunHook") s.stub.ResetCalls() // Create a new handler (imitating worker restart). handler, err = meterstatus.NewConnectedStatusHandler( meterstatus.ConnectedConfig{ Runner: &stubRunner{stub: s.stub}, StateFile: meterstatus.NewStateFile(path.Join(s.dataDir, "meter-status.yaml")), Status: s.msClient}) c.Assert(err, jc.ErrorIsNil) c.Assert(handler, gc.NotNil) _, err = handler.SetUp() c.Assert(err, jc.ErrorIsNil) err = handler.Handle(nil) c.Assert(err, jc.ErrorIsNil) s.stub.CheckCallNames(c, "WatchMeterStatus", "MeterStatus") }
// TestStatusHandlerHandlesHookMissingError tests that the handler does not report errors // caused by a missing meter-status-changed hook. func (s *ConnectedWorkerSuite) TestStatusHandlerHandlesHookMissingError(c *gc.C) { s.stub.SetErrors(context.NewMissingHookError("meter-status-changed")) handler, err := meterstatus.NewConnectedStatusHandler( meterstatus.ConnectedConfig{ Runner: &stubRunner{stub: s.stub}, StateFile: meterstatus.NewStateFile(path.Join(s.dataDir, "meter-status.yaml")), Status: s.msClient, }) c.Assert(err, jc.ErrorIsNil) c.Assert(handler, gc.NotNil) _, err = handler.SetUp() c.Assert(err, jc.ErrorIsNil) err = handler.Handle(nil) c.Assert(err, jc.ErrorIsNil) s.stub.CheckCallNames(c, "WatchMeterStatus", "MeterStatus", "RunHook") }
// TestStatusHandlerRunsHookOnChanges ensures that the handler runs the meter-status-changed hook // if an actual meter status change is detected. func (s *ConnectedWorkerSuite) TestStatusHandlerRunsHookOnChanges(c *gc.C) { handler, err := meterstatus.NewConnectedStatusHandler( meterstatus.ConnectedConfig{ Runner: &stubRunner{stub: s.stub}, StateFile: meterstatus.NewStateFile(path.Join(s.dataDir, "meter-status.yaml")), Status: s.msClient, }) c.Assert(err, jc.ErrorIsNil) c.Assert(handler, gc.NotNil) _, err = handler.SetUp() c.Assert(err, jc.ErrorIsNil) handler.Handle(nil) s.msClient.SetStatus("RED") handler.Handle(nil) c.Assert(err, jc.ErrorIsNil) s.stub.CheckCallNames(c, "WatchMeterStatus", "MeterStatus", "RunHook", "MeterStatus", "RunHook") }