func (s *metricsAdderSuite) TestNewMetricsAdderAPIRefusesNonAgent(c *gc.C) { tests := []struct { tag names.Tag environManager bool expectedError string }{ // TODO(cmars): unit agent should get permission denied when callers are // moved to machine agent. {names.NewUnitTag("mysql/0"), false, ""}, {names.NewLocalUserTag("admin"), true, "permission denied"}, {names.NewMachineTag("0"), false, ""}, {names.NewMachineTag("0"), true, ""}, } for i, test := range tests { c.Logf("test %d", i) anAuthoriser := s.authorizer anAuthoriser.EnvironManager = test.environManager anAuthoriser.Tag = test.tag endPoint, err := metricsadder.NewMetricsAdderAPI(s.State, nil, anAuthoriser) if test.expectedError == "" { c.Assert(err, jc.ErrorIsNil) c.Assert(endPoint, gc.NotNil) } else { c.Assert(err, gc.ErrorMatches, test.expectedError) c.Assert(endPoint, gc.IsNil) } } }
func (s *metricsAdderSuite) SetUpTest(c *gc.C) { s.JujuConnSuite.SetUpTest(c) s.factory = jujuFactory.NewFactory(s.State) s.machine0 = s.factory.MakeMachine(c, &jujuFactory.MachineParams{ Series: "quantal", Jobs: []state.MachineJob{state.JobHostUnits, state.JobManageModel}, }) s.machine1 = s.factory.MakeMachine(c, &jujuFactory.MachineParams{ Series: "quantal", Jobs: []state.MachineJob{state.JobHostUnits}, }) mysqlCharm := s.factory.MakeCharm(c, &jujuFactory.CharmParams{ Name: "mysql", }) s.mysql = s.factory.MakeService(c, &jujuFactory.ServiceParams{ Name: "mysql", Charm: mysqlCharm, Creator: s.AdminUserTag(c), }) s.mysqlUnit = s.factory.MakeUnit(c, &jujuFactory.UnitParams{ Service: s.mysql, Machine: s.machine0, }) s.meteredCharm = s.factory.MakeCharm(c, &jujuFactory.CharmParams{ Name: "metered", URL: "cs:quantal/metered", }) s.meteredService = s.factory.MakeService(c, &jujuFactory.ServiceParams{ Charm: s.meteredCharm, }) s.meteredUnit = s.factory.MakeUnit(c, &jujuFactory.UnitParams{ Service: s.meteredService, SetCharmURL: true, Machine: s.machine1, }) // Create a FakeAuthorizer so we can check permissions, // set up assuming unit 0 has logged in. s.authorizer = apiservertesting.FakeAuthorizer{ Tag: names.NewMachineTag("1"), } // Create the resource registry separately to track invocations to // Register. s.resources = common.NewResources() s.AddCleanup(func(_ *gc.C) { s.resources.StopAll() }) adder, err := metricsadder.NewMetricsAdderAPI(s.State, s.resources, s.authorizer) c.Assert(err, jc.ErrorIsNil) s.adder = adder }