github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/worker/peergrouper/worker_external_test.go (about) 1 // Copyright 2014 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package peergrouper_test 5 6 import ( 7 jc "github.com/juju/testing/checkers" 8 gc "gopkg.in/check.v1" 9 10 "github.com/juju/juju/instance" 11 "github.com/juju/juju/juju/testing" 12 "github.com/juju/juju/network" 13 statetesting "github.com/juju/juju/state/testing" 14 "github.com/juju/juju/worker" 15 "github.com/juju/juju/worker/peergrouper" 16 ) 17 18 type workerJujuConnSuite struct { 19 testing.JujuConnSuite 20 } 21 22 var _ = gc.Suite(&workerJujuConnSuite{}) 23 24 func (s *workerJujuConnSuite) TestStartStop(c *gc.C) { 25 w, err := peergrouper.New(s.State) 26 c.Assert(err, jc.ErrorIsNil) 27 err = worker.Stop(w) 28 c.Assert(err, jc.ErrorIsNil) 29 } 30 31 func (s *workerJujuConnSuite) TestPublisherSetsAPIHostPorts(c *gc.C) { 32 peergrouper.DoTestForIPv4AndIPv6(func(ipVersion peergrouper.TestIPVersion) { 33 st := peergrouper.NewFakeState() 34 peergrouper.InitState(c, st, 3, ipVersion) 35 36 watcher := s.State.WatchAPIHostPorts() 37 cwatch := statetesting.NewNotifyWatcherC(c, s.State, watcher) 38 cwatch.AssertOneChange() 39 40 statePublish := peergrouper.NewPublisher(s.State, false) 41 42 // Wrap the publisher so that we can call StartSync immediately 43 // after the publishAPIServers method is called. 44 publish := func(apiServers [][]network.HostPort, instanceIds []instance.Id) error { 45 err := statePublish.PublishAPIServers(apiServers, instanceIds) 46 s.State.StartSync() 47 return err 48 } 49 50 w := peergrouper.NewWorker(st, peergrouper.PublisherFunc(publish)) 51 defer func() { 52 c.Check(worker.Stop(w), gc.IsNil) 53 }() 54 55 cwatch.AssertOneChange() 56 hps, err := s.State.APIHostPorts() 57 c.Assert(err, jc.ErrorIsNil) 58 peergrouper.AssertAPIHostPorts(c, hps, peergrouper.ExpectedAPIHostPorts(3, ipVersion)) 59 }) 60 } 61 62 func (s *workerJujuConnSuite) TestPublisherRejectsNoServers(c *gc.C) { 63 peergrouper.DoTestForIPv4AndIPv6(func(ipVersion peergrouper.TestIPVersion) { 64 st := peergrouper.NewFakeState() 65 peergrouper.InitState(c, st, 3, ipVersion) 66 statePublish := peergrouper.NewPublisher(s.State, false) 67 err := statePublish.PublishAPIServers(nil, nil) 68 c.Assert(err, gc.ErrorMatches, "no api servers specified") 69 }) 70 }