func (s *resolverSuite) SetUpTest(c *gc.C) { s.stub = testing.Stub{} s.charmURL = charm.MustParseURL("cs:precise/mysql-2") s.remoteState = remotestate.Snapshot{ CharmModifiedVersion: s.charmModifiedVersion, CharmURL: s.charmURL, } s.opFactory = operation.NewFactory(operation.FactoryParams{}) attachments, err := storage.NewAttachments(&dummyStorageAccessor{}, names.NewUnitTag("u/0"), c.MkDir(), nil) c.Assert(err, jc.ErrorIsNil) s.clearResolved = func() error { return errors.New("unexpected resolved") } s.reportHookError = func(hook.Info) error { return errors.New("unexpected report hook error") } s.resolverConfig = uniter.ResolverConfig{ ClearResolved: func() error { return s.clearResolved() }, ReportHookError: func(info hook.Info) error { return s.reportHookError(info) }, StartRetryHookTimer: func() { s.stub.AddCall("StartRetryHookTimer") }, StopRetryHookTimer: func() { s.stub.AddCall("StopRetryHookTimer") }, ShouldRetryHooks: true, Leadership: leadership.NewResolver(), Actions: uniteractions.NewResolver(), Relations: relation.NewRelationsResolver(&dummyRelations{}), Storage: storage.NewResolver(attachments), Commands: nopResolver{}, } s.resolver = uniter.NewUniterResolver(s.resolverConfig) }
func (s *resolverSuite) SetUpTest(c *gc.C) { s.charmURL = charm.MustParseURL("cs:precise/mysql-2") s.remoteState = remotestate.Snapshot{ CharmURL: s.charmURL, } s.opFactory = operation.NewFactory(operation.FactoryParams{}) attachments, err := storage.NewAttachments(&dummyStorageAccessor{}, names.NewUnitTag("u/0"), c.MkDir(), nil) c.Assert(err, jc.ErrorIsNil) s.resolver = uniter.NewUniterResolver( func() error { return errors.New("unexpected resolved") }, func(_ hook.Info) error { return errors.New("unexpected report hook error") }, func() error { return nil }, uniteractions.NewResolver(), leadership.NewResolver(), relation.NewRelationsResolver(&dummyRelations{}), storage.NewResolver(attachments), ) }
func (s *resolverSuite) TestHookErrorDoesNotStartRetryTimerIfShouldRetryFalse(c *gc.C) { s.resolverConfig.ShouldRetryHooks = false s.resolver = uniter.NewUniterResolver(s.resolverConfig) s.reportHookError = func(hook.Info) error { return nil } localState := resolver.LocalState{ CharmURL: s.charmURL, State: operation.State{ Kind: operation.RunHook, Step: operation.Pending, Installed: true, Started: true, Hook: &hook.Info{ Kind: hooks.ConfigChanged, }, }, } // Run the resolver; we should not attempt a hook retry _, err := s.resolver.NextOp(localState, s.remoteState, s.opFactory) c.Assert(err, gc.Equals, resolver.ErrNoOperation) s.stub.CheckNoCalls(c) }