func (resourceSuite) TestConcurrency(c *C) { // This test is designed to cause the race detector // to fail if the locking is not done correctly. var wg sync.WaitGroup rs := common.NewResources() start := func(f func()) { wg.Add(1) go func() { f() wg.Done() }() } rs.Register(&fakeResource{}) start(func() { rs.Register(&fakeResource{}) }) start(func() { rs.Stop("1") }) start(func() { rs.Count() }) start(func() { rs.StopAll() }) start(func() { rs.Get("2") }) wg.Wait() }
func (*agentEntityWatcherSuite) TestWatch(c *gc.C) { st := &fakeState{ entities: map[string]entityWithError{ "x0": &fakeAgentEntityWatcher{fetchError: "x0 fails"}, "x1": &fakeAgentEntityWatcher{}, "x2": &fakeAgentEntityWatcher{}, }, } getCanWatch := func() (common.AuthFunc, error) { return func(tag string) bool { switch tag { case "x0", "x1": return true } return false }, nil } resources := common.NewResources() a := common.NewAgentEntityWatcher(st, resources, getCanWatch) entities := params.Entities{[]params.Entity{ {"x0"}, {"x1"}, {"x2"}, {"x3"}, }} result, err := a.Watch(entities) c.Assert(err, gc.IsNil) c.Assert(result, gc.DeepEquals, params.NotifyWatchResults{ Results: []params.NotifyWatchResult{ {Error: ¶ms.Error{Message: "x0 fails"}}, {"1", nil}, {Error: apiservertesting.ErrUnauthorized}, {Error: apiservertesting.ErrUnauthorized}, }, }) }
func newSrvRoot(srv *Server, entity state.TaggedAuthenticator) *srvRoot { r := &srvRoot{ srv: srv, resources: common.NewResources(), entity: entity, } r.clientAPI.API = client.NewAPI(srv.state, r.resources, r) return r }
func (resourceSuite) TestStop(c *C) { rs := common.NewResources() r1 := &fakeResource{} rs.Register(r1) r2 := &fakeResource{} rs.Register(r2) rs.Stop("1") c.Assert(r1.stopped, Equals, true) c.Assert(rs.Get("1"), IsNil) c.Assert(r2.stopped, Equals, false) c.Assert(rs.Get("2"), Equals, r2) c.Assert(rs.Count(), Equals, 1) }
func (*agentEntityWatcherSuite) TestWatchError(c *gc.C) { getCanWatch := func() (common.AuthFunc, error) { return nil, fmt.Errorf("pow") } resources := common.NewResources() a := common.NewAgentEntityWatcher( &fakeState{}, resources, getCanWatch, ) _, err := a.Watch(params.Entities{[]params.Entity{{"x0"}}}) c.Assert(err, gc.ErrorMatches, "pow") }
func (resourceSuite) TestRegisterGetCount(c *C) { rs := common.NewResources() r1 := &fakeResource{} id := rs.Register(r1) c.Assert(id, Equals, "1") c.Assert(rs.Get("1"), Equals, r1) c.Assert(rs.Count(), Equals, 1) r2 := &fakeResource{} id = rs.Register(r2) c.Assert(id, Equals, "2") c.Assert(rs.Get("2"), Equals, r2) c.Assert(rs.Count(), Equals, 2) }
func (*agentEntityWatcherSuite) TestWatchNoArgsNoError(c *gc.C) { getCanWatch := func() (common.AuthFunc, error) { return nil, fmt.Errorf("pow") } resources := common.NewResources() a := common.NewAgentEntityWatcher( &fakeState{}, resources, getCanWatch, ) result, err := a.Watch(params.Entities{}) c.Assert(err, gc.IsNil) c.Assert(result.Results, gc.HasLen, 0) }
func (resourceSuite) TestStopAll(c *gc.C) { rs := common.NewResources() r1 := &fakeResource{} rs.Register(r1) r2 := &fakeResource{} rs.Register(r2) rs.StopAll() c.Assert(r1.stopped, gc.Equals, true) c.Assert(rs.Get("1"), gc.IsNil) c.Assert(r2.stopped, gc.Equals, true) c.Assert(rs.Get("2"), gc.IsNil) c.Assert(rs.Count(), gc.Equals, 0) }
func (s *machinerSuite) SetUpTest(c *C) { s.commonSuite.SetUpTest(c) // Create the resource registry separately to track invocations to // Register. s.resources = common.NewResources() // Create a machiner API for machine 1. machiner, err := machine.NewMachinerAPI( s.State, s.resources, s.authorizer, ) c.Assert(err, IsNil) s.machiner = machiner }
func (s *uniterSuite) SetUpTest(c *gc.C) { s.JujuConnSuite.SetUpTest(c) // Create two machines, two services and add a unit to each service. var err error s.machine0, err = s.State.AddMachine("series", state.JobHostUnits) c.Assert(err, gc.IsNil) s.machine1, err = s.State.AddMachine("series", state.JobHostUnits) c.Assert(err, gc.IsNil) s.wordpress, err = s.State.AddService("wordpress", s.AddTestingCharm(c, "wordpress")) c.Assert(err, gc.IsNil) s.mysql, err = s.State.AddService("mysql", s.AddTestingCharm(c, "mysql")) c.Assert(err, gc.IsNil) s.wordpressUnit, err = s.wordpress.AddUnit() c.Assert(err, gc.IsNil) s.mysqlUnit, err = s.mysql.AddUnit() c.Assert(err, gc.IsNil) // Assign each unit to each machine. err = s.wordpressUnit.AssignToMachine(s.machine0) c.Assert(err, gc.IsNil) err = s.mysqlUnit.AssignToMachine(s.machine1) c.Assert(err, gc.IsNil) // Create a FakeAuthorizer so we can check permissions, // set up assuming unit 0 has logged in. s.authorizer = apiservertesting.FakeAuthorizer{ Tag: s.wordpressUnit.Tag(), LoggedIn: true, Manager: false, UnitAgent: true, } // Create the resource registry separately to track invocations to // Register. s.resources = common.NewResources() // Create a uniter API for unit 0. s.uniter, err = uniter.NewUniterAPI( s.State, s.resources, s.authorizer, ) c.Assert(err, gc.IsNil) }
func (s *upgraderSuite) SetUpTest(c *C) { s.JujuConnSuite.SetUpTest(c) s.resources = common.NewResources() // Create a machine to work with var err error s.rawMachine, err = s.State.AddMachine("series", state.JobHostUnits) c.Assert(err, IsNil) err = s.rawMachine.SetPassword("test-password") c.Assert(err, IsNil) // The default auth is as the machine agent s.authorizer = apiservertesting.FakeAuthorizer{ Tag: s.rawMachine.Tag(), LoggedIn: true, Manager: false, MachineAgent: true, Client: false, } s.upgrader, err = upgrader.NewUpgraderAPI(s.State, s.resources, s.authorizer) c.Assert(err, IsNil) }
func (s *deployerSuite) SetUpTest(c *gc.C) { s.JujuConnSuite.SetUpTest(c) // The two known machines now contain the following units: // machine 0 (not authorized): mysql/1 (principal1) // machine 1 (authorized): mysql/0 (principal0), logging/0 (subordinate0) var err error s.machine0, err = s.State.AddMachine("series", state.JobManageState, state.JobHostUnits) c.Assert(err, gc.IsNil) s.machine1, err = s.State.AddMachine("series", state.JobHostUnits) c.Assert(err, gc.IsNil) s.service0, err = s.State.AddService("mysql", s.AddTestingCharm(c, "mysql")) c.Assert(err, gc.IsNil) s.service1, err = s.State.AddService("logging", s.AddTestingCharm(c, "logging")) c.Assert(err, gc.IsNil) eps, err := s.State.InferEndpoints([]string{"mysql", "logging"}) c.Assert(err, gc.IsNil) rel, err := s.State.AddRelation(eps...) c.Assert(err, gc.IsNil) s.principal0, err = s.service0.AddUnit() c.Assert(err, gc.IsNil) err = s.principal0.AssignToMachine(s.machine1) c.Assert(err, gc.IsNil) s.principal1, err = s.service0.AddUnit() c.Assert(err, gc.IsNil) err = s.principal1.AssignToMachine(s.machine0) c.Assert(err, gc.IsNil) relUnit0, err := rel.Unit(s.principal0) c.Assert(err, gc.IsNil) err = relUnit0.EnterScope(nil) c.Assert(err, gc.IsNil) s.subordinate0, err = s.service1.Unit("logging/0") c.Assert(err, gc.IsNil) // Create a FakeAuthorizer so we can check permissions, // set up assuming machine 1 has logged in. s.authorizer = apiservertesting.FakeAuthorizer{ Tag: state.MachineTag(s.machine1.Id()), LoggedIn: true, Manager: false, MachineAgent: true, } // Create the resource registry separately to track invocations to // Register. s.resources = common.NewResources() // Create a deployer API for machine 1. deployer, err := deployer.NewDeployerAPI( s.State, s.resources, s.authorizer, ) c.Assert(err, gc.IsNil) s.deployer = deployer }