github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/apiserver/observer/observer_test.go (about)

     1  // Copyright 2016 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package observer_test
     5  
     6  import (
     7  	"net/http"
     8  
     9  	"github.com/juju/testing"
    10  	gc "gopkg.in/check.v1"
    11  	"gopkg.in/juju/names.v2"
    12  
    13  	"github.com/juju/juju/apiserver/observer"
    14  	"github.com/juju/juju/apiserver/observer/fakeobserver"
    15  )
    16  
    17  type multiplexerSuite struct {
    18  	testing.IsolationSuite
    19  }
    20  
    21  var _ = gc.Suite(&multiplexerSuite{})
    22  
    23  func (*multiplexerSuite) TestObserverFactoryMultiplexer_CallsAllFactories(c *gc.C) {
    24  	callCount := 0
    25  	factories := []observer.ObserverFactory{
    26  		func() observer.Observer { callCount++; return nil },
    27  		func() observer.Observer { callCount++; return nil },
    28  	}
    29  
    30  	newMultiplexObserver := observer.ObserverFactoryMultiplexer(factories...)
    31  	c.Assert(callCount, gc.Equals, 0)
    32  
    33  	multiplexedObserver := newMultiplexObserver()
    34  	c.Check(multiplexedObserver, gc.NotNil)
    35  	c.Check(callCount, gc.Equals, 2)
    36  }
    37  
    38  func (*multiplexerSuite) TestJoin_CallsAllObservers(c *gc.C) {
    39  	observers := []*fakeobserver.Instance{
    40  		&fakeobserver.Instance{},
    41  		&fakeobserver.Instance{},
    42  	}
    43  
    44  	o := observer.NewMultiplexer(observers[0], observers[1])
    45  	var req http.Request
    46  	o.Join(&req, 1234)
    47  
    48  	for _, f := range observers {
    49  		f.CheckCall(c, 0, "Join", &req, uint64(1234))
    50  	}
    51  }
    52  
    53  func (*multiplexerSuite) TestLeave_CallsAllObservers(c *gc.C) {
    54  	observers := []*fakeobserver.Instance{
    55  		&fakeobserver.Instance{},
    56  		&fakeobserver.Instance{},
    57  	}
    58  
    59  	o := observer.NewMultiplexer(observers[0], observers[1])
    60  	o.Leave()
    61  
    62  	for _, f := range observers {
    63  		f.CheckCall(c, 0, "Leave")
    64  	}
    65  }
    66  
    67  func (*multiplexerSuite) TestRPCObserver_CallsAllObservers(c *gc.C) {
    68  	observers := []*fakeobserver.Instance{
    69  		&fakeobserver.Instance{},
    70  		&fakeobserver.Instance{},
    71  	}
    72  
    73  	o := observer.NewMultiplexer(observers[0], observers[1])
    74  	o.RPCObserver()
    75  
    76  	for _, f := range observers {
    77  		f.CheckCall(c, 0, "RPCObserver")
    78  	}
    79  }
    80  
    81  func (*multiplexerSuite) TestLogin_CallsAllObservers(c *gc.C) {
    82  	observers := []*fakeobserver.Instance{
    83  		&fakeobserver.Instance{},
    84  		&fakeobserver.Instance{},
    85  	}
    86  
    87  	o := observer.NewMultiplexer(observers[0], observers[1])
    88  	entity := names.NewMachineTag("42")
    89  	model := names.NewModelTag("fake-uuid")
    90  	fromController := false
    91  	userData := "foo"
    92  	o.Login(entity, model, fromController, userData)
    93  
    94  	for _, f := range observers {
    95  		f.CheckCall(c, 0, "Login", entity, model, fromController, userData)
    96  	}
    97  }