func (s *IsolatedWorkerSuite) SetUpTest(c *gc.C) { s.BaseSuite.SetUpTest(c) s.stub = &testing.Stub{} s.dataDir = c.MkDir() s.hookRan = make(chan struct{}) s.triggersCreated = make(chan struct{}) triggerFactory := func(state meterstatus.WorkerState, status string, disconectedAt time.Time, clk clock.Clock, amber time.Duration, red time.Duration) (<-chan time.Time, <-chan time.Time) { select { case s.triggersCreated <- struct{}{}: case <-time.After(coretesting.LongWait): c.Fatalf("failed to signal trigger creation") } return meterstatus.GetTriggers(state, status, disconectedAt, clk, amber, red) } s.clk = testing.NewClock(time.Now()) wrk, err := meterstatus.NewIsolatedStatusWorker( meterstatus.IsolatedConfig{ Runner: &stubRunner{stub: s.stub, ran: s.hookRan}, StateFile: meterstatus.NewStateFile(path.Join(s.dataDir, "meter-status.yaml")), Clock: s.clk, AmberGracePeriod: AmberGracePeriod, RedGracePeriod: RedGracePeriod, TriggerFactory: triggerFactory, }) c.Assert(err, jc.ErrorIsNil) c.Assert(wrk, gc.NotNil) s.worker = wrk }
// TestInactiveWorker ensures that the manifold correctly sets up the isolated worker. func (s *PatchedManifoldSuite) TestIsolatedWorker(c *gc.C) { delete(s.resources, "apicaller-name") var called bool s.manifoldConfig.NewIsolatedStatusWorker = func(cfg meterstatus.IsolatedConfig) (worker.Worker, error) { called = true return meterstatus.NewIsolatedStatusWorker(cfg) } manifold := meterstatus.Manifold(s.manifoldConfig) worker, err := manifold.Start(s.resources.Context()) c.Assert(called, jc.IsTrue) c.Assert(err, jc.ErrorIsNil) c.Assert(worker, gc.NotNil) worker.Kill() err = worker.Wait() c.Assert(err, jc.ErrorIsNil) s.stub.CheckCallNames(c, "MeterStatus", "RunHook", "WatchMeterStatus") }