github.com/altoros/juju-vmware@v0.0.0-20150312064031-f19ae857ccca/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 jc "github.com/juju/testing/checkers" 11 gc "gopkg.in/check.v1" 12 13 jujutesting "github.com/juju/juju/juju/testing" 14 "github.com/juju/juju/network" 15 "github.com/juju/juju/state" 16 coretesting "github.com/juju/juju/testing" 17 "github.com/juju/juju/worker/apiaddressupdater" 18 ) 19 20 func TestPackage(t *stdtesting.T) { 21 coretesting.MgoTestPackage(t) 22 } 23 24 type APIAddressUpdaterSuite struct { 25 jujutesting.JujuConnSuite 26 } 27 28 var _ = gc.Suite(&APIAddressUpdaterSuite{}) 29 30 func (s *APIAddressUpdaterSuite) SetUpTest(c *gc.C) { 31 s.JujuConnSuite.SetUpTest(c) 32 err := s.State.SetAPIHostPorts(nil) 33 c.Assert(err, jc.ErrorIsNil) 34 } 35 36 type apiAddressSetter struct { 37 servers chan [][]network.HostPort 38 err error 39 } 40 41 func (s *apiAddressSetter) SetAPIHostPorts(servers [][]network.HostPort) error { 42 s.servers <- servers 43 return s.err 44 } 45 46 func (s *APIAddressUpdaterSuite) TestStartStop(c *gc.C) { 47 st, _ := s.OpenAPIAsNewMachine(c, state.JobHostUnits) 48 worker := apiaddressupdater.NewAPIAddressUpdater(st.Machiner(), &apiAddressSetter{}) 49 worker.Kill() 50 c.Assert(worker.Wait(), gc.IsNil) 51 } 52 53 func (s *APIAddressUpdaterSuite) TestAddressInitialUpdate(c *gc.C) { 54 updatedServers := [][]network.HostPort{ 55 network.NewHostPorts(1234, "localhost", "127.0.0.1"), 56 } 57 err := s.State.SetAPIHostPorts(updatedServers) 58 c.Assert(err, jc.ErrorIsNil) 59 60 setter := &apiAddressSetter{servers: make(chan [][]network.HostPort, 1)} 61 st, _ := s.OpenAPIAsNewMachine(c, state.JobHostUnits) 62 worker := apiaddressupdater.NewAPIAddressUpdater(st.Machiner(), setter) 63 defer func() { c.Assert(worker.Wait(), gc.IsNil) }() 64 defer worker.Kill() 65 66 // SetAPIHostPorts should be called with the initial value. 67 select { 68 case <-time.After(coretesting.LongWait): 69 c.Fatalf("timed out waiting for SetAPIHostPorts to be called") 70 case servers := <-setter.servers: 71 c.Assert(servers, gc.DeepEquals, updatedServers) 72 } 73 } 74 75 func (s *APIAddressUpdaterSuite) TestAddressChange(c *gc.C) { 76 setter := &apiAddressSetter{servers: make(chan [][]network.HostPort, 1)} 77 st, _ := s.OpenAPIAsNewMachine(c, state.JobHostUnits) 78 worker := apiaddressupdater.NewAPIAddressUpdater(st.Machiner(), setter) 79 defer func() { c.Assert(worker.Wait(), gc.IsNil) }() 80 defer worker.Kill() 81 s.BackingState.StartSync() 82 updatedServers := [][]network.HostPort{ 83 network.NewHostPorts(1234, "localhost", "127.0.0.1"), 84 } 85 // SetAPIHostPorts should be called with the initial value (empty), 86 // and then the updated value. 87 select { 88 case <-time.After(coretesting.LongWait): 89 c.Fatalf("timed out waiting for SetAPIHostPorts to be called first") 90 case servers := <-setter.servers: 91 c.Assert(servers, gc.HasLen, 0) 92 } 93 err := s.State.SetAPIHostPorts(updatedServers) 94 c.Assert(err, jc.ErrorIsNil) 95 s.BackingState.StartSync() 96 select { 97 case <-time.After(coretesting.LongWait): 98 c.Fatalf("timed out waiting for SetAPIHostPorts to be called second") 99 case servers := <-setter.servers: 100 c.Assert(servers, gc.DeepEquals, updatedServers) 101 } 102 }