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  }