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  }