func (*lifeSuite) TestLife(c *C) { st := &fakeLifeState{ entities: map[string]*fakeLifer{ "x0": {life: state.Alive}, "x1": {life: state.Dying}, "x2": {life: state.Dead}, "x3": {err: fmt.Errorf("x3 error")}, }, } getCanRead := func() (common.AuthFunc, error) { return func(tag string) bool { switch tag { case "x0", "x2", "x3": return true } return false }, nil } lg := common.NewLifeGetter(st, getCanRead) entities := params.Entities{[]params.Entity{ {"x0"}, {"x1"}, {"x2"}, {"x3"}, {"x4"}, }} results, err := lg.Life(entities) c.Assert(err, IsNil) c.Assert(results, DeepEquals, params.LifeResults{ Results: []params.LifeResult{ {Life: params.Alive}, {Error: apiservertesting.ErrUnauthorized}, {Life: params.Dead}, {Error: ¶ms.Error{Message: "x3 error"}}, {Error: apiservertesting.ErrUnauthorized}, }, }) }
// NewDeployerAPI creates a new client-side DeployerAPI facade. func NewDeployerAPI( st *state.State, resources *common.Resources, authorizer common.Authorizer, ) (*DeployerAPI, error) { if !authorizer.AuthMachineAgent() { return nil, common.ErrPerm } getAuthFunc := func() (common.AuthFunc, error) { // Get all units of the machine and cache them. thisMachineTag := authorizer.GetAuthTag() units, err := getAllUnits(st, thisMachineTag) if err != nil { return nil, err } // Then we just check if the unit is already known. return func(tag string) bool { for _, unit := range units { if names.UnitTag(unit) == tag { return true } } return false }, nil } return &DeployerAPI{ Remover: common.NewRemover(st, getAuthFunc), PasswordChanger: common.NewPasswordChanger(st, getAuthFunc), LifeGetter: common.NewLifeGetter(st, getAuthFunc), st: st, resources: resources, authorizer: authorizer, }, nil }
// NewDeployerAPI creates a new client-side DeployerAPI facade. func NewDeployerAPI( st *state.State, resources *common.Resources, authorizer common.Authorizer, ) (*DeployerAPI, error) { if !authorizer.AuthMachineAgent() { return nil, common.ErrPerm } getAuthFunc := func() (common.AuthFunc, error) { // Get all units of the machine and cache them. knownUnits := set.NewStrings() thisMachineTag := authorizer.GetAuthTag() if units, err := getAllUnits(st, thisMachineTag); err != nil { return nil, err } else { for _, unit := range units { knownUnits.Add(unit) } } // Then we just check if the unit is already known. return func(tag string) bool { unitName := state.UnitNameFromTag(tag) return knownUnits.Contains(unitName) }, nil } return &DeployerAPI{ Remover: common.NewRemover(st, getAuthFunc), PasswordChanger: common.NewPasswordChanger(st, getAuthFunc), LifeGetter: common.NewLifeGetter(st, getAuthFunc), st: st, resources: resources, authorizer: authorizer, }, nil }
func (*lifeSuite) TestLifeError(c *C) { getCanRead := func() (common.AuthFunc, error) { return nil, fmt.Errorf("pow") } lg := common.NewLifeGetter(&fakeLifeState{}, getCanRead) _, err := lg.Life(params.Entities{[]params.Entity{{"x0"}}}) c.Assert(err, ErrorMatches, "pow") }
func (*lifeSuite) TestLifeNoArgsNoError(c *C) { getCanRead := func() (common.AuthFunc, error) { return nil, fmt.Errorf("pow") } lg := common.NewLifeGetter(&fakeLifeState{}, getCanRead) result, err := lg.Life(params.Entities{}) c.Assert(err, IsNil) c.Assert(result.Results, HasLen, 0) }
// NewUniterAPI creates a new instance of the Uniter API. func NewUniterAPI(st *state.State, resources *common.Resources, authorizer common.Authorizer) (*UniterAPI, error) { if !authorizer.AuthUnitAgent() { return nil, common.ErrPerm } getCanRead := func() (common.AuthFunc, error) { return authorizer.AuthOwner, nil } return &UniterAPI{ LifeGetter: common.NewLifeGetter(st, getCanRead), StatusSetter: common.NewStatusSetter(st, getCanRead), DeadEnsurer: common.NewDeadEnsurer(st, getCanRead), AgentEntityWatcher: common.NewAgentEntityWatcher(st, resources, getCanRead), st: st, auth: authorizer, }, nil }
// NewMachinerAPI creates a new instance of the Machiner API. func NewMachinerAPI(st *state.State, resources *common.Resources, authorizer common.Authorizer) (*MachinerAPI, error) { if !authorizer.AuthMachineAgent() { return nil, common.ErrPerm } getCanRead := func() (common.AuthFunc, error) { return func(tag string) bool { // TODO(go1.1): method expression return authorizer.AuthOwner(tag) }, nil } return &MachinerAPI{ LifeGetter: common.NewLifeGetter(st, getCanRead), st: st, resources: resources, auth: authorizer, }, nil }