github.com/mattyw/juju@v0.0.0-20140610034352-732aecd63861/worker/apiaddressupdater/apiaddressupdater_test.go (about) 1 // Copyright 2014 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package apiaddressupdater_test 5 6 import ( 7 stdtesting "testing" 8 "time" 9 10 gc "launchpad.net/gocheck" 11 12 "github.com/juju/juju/instance" 13 jujutesting "github.com/juju/juju/juju/testing" 14 "github.com/juju/juju/state" 15 coretesting "github.com/juju/juju/testing" 16 "github.com/juju/juju/worker/apiaddressupdater" 17 ) 18 19 func TestPackage(t *stdtesting.T) { 20 coretesting.MgoTestPackage(t) 21 } 22 23 type APIAddressUpdaterSuite struct { 24 jujutesting.JujuConnSuite 25 } 26 27 var _ = gc.Suite(&APIAddressUpdaterSuite{}) 28 29 type apiAddressSetter struct { 30 servers chan [][]instance.HostPort 31 err error 32 } 33 34 func (s *apiAddressSetter) SetAPIHostPorts(servers [][]instance.HostPort) error { 35 s.servers <- servers 36 return s.err 37 } 38 39 func (s *APIAddressUpdaterSuite) TestStartStop(c *gc.C) { 40 st, _ := s.OpenAPIAsNewMachine(c, state.JobHostUnits) 41 worker := apiaddressupdater.NewAPIAddressUpdater(st.Machiner(), &apiAddressSetter{}) 42 worker.Kill() 43 c.Assert(worker.Wait(), gc.IsNil) 44 } 45 46 func (s *APIAddressUpdaterSuite) TestAddressInitialUpdate(c *gc.C) { 47 updatedServers := [][]instance.HostPort{instance.AddressesWithPort( 48 instance.NewAddresses("localhost", "127.0.0.1"), 49 1234, 50 )} 51 err := s.State.SetAPIHostPorts(updatedServers) 52 c.Assert(err, gc.IsNil) 53 54 setter := &apiAddressSetter{servers: make(chan [][]instance.HostPort, 1)} 55 st, _ := s.OpenAPIAsNewMachine(c, state.JobHostUnits) 56 worker := apiaddressupdater.NewAPIAddressUpdater(st.Machiner(), setter) 57 defer func() { c.Assert(worker.Wait(), gc.IsNil) }() 58 defer worker.Kill() 59 60 // SetAPIHostPorts should be called with the initial value. 61 select { 62 case <-time.After(coretesting.LongWait): 63 c.Fatalf("timed out waiting for SetAPIHostPorts to be called") 64 case servers := <-setter.servers: 65 c.Assert(servers, gc.DeepEquals, updatedServers) 66 } 67 } 68 69 func (s *APIAddressUpdaterSuite) TestAddressChange(c *gc.C) { 70 setter := &apiAddressSetter{servers: make(chan [][]instance.HostPort, 1)} 71 st, _ := s.OpenAPIAsNewMachine(c, state.JobHostUnits) 72 worker := apiaddressupdater.NewAPIAddressUpdater(st.Machiner(), setter) 73 defer func() { c.Assert(worker.Wait(), gc.IsNil) }() 74 defer worker.Kill() 75 s.BackingState.StartSync() 76 updatedServers := [][]instance.HostPort{instance.AddressesWithPort( 77 instance.NewAddresses("localhost", "127.0.0.1"), 78 1234, 79 )} 80 // SetAPIHostPorts should be called with the initial value (empty), 81 // and then the updated value. 82 select { 83 case <-time.After(coretesting.LongWait): 84 c.Fatalf("timed out waiting for SetAPIHostPorts to be called first") 85 case servers := <-setter.servers: 86 c.Assert(servers, gc.HasLen, 0) 87 } 88 err := s.State.SetAPIHostPorts(updatedServers) 89 c.Assert(err, gc.IsNil) 90 s.BackingState.StartSync() 91 select { 92 case <-time.After(coretesting.LongWait): 93 c.Fatalf("timed out waiting for SetAPIHostPorts to be called second") 94 case servers := <-setter.servers: 95 c.Assert(servers, gc.DeepEquals, updatedServers) 96 } 97 }