github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/apiserver/facades/controller/crosscontroller/crosscontroller_test.go (about)

     1  // Copyright 2017 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package crosscontroller_test
     5  
     6  import (
     7  	"errors"
     8  
     9  	jc "github.com/juju/testing/checkers"
    10  	gc "gopkg.in/check.v1"
    11  
    12  	"github.com/juju/juju/apiserver/common"
    13  	"github.com/juju/juju/apiserver/facades/controller/crosscontroller"
    14  	"github.com/juju/juju/apiserver/params"
    15  	"github.com/juju/juju/state"
    16  	coretesting "github.com/juju/juju/testing"
    17  )
    18  
    19  var _ = gc.Suite(&CrossControllerSuite{})
    20  
    21  type CrossControllerSuite struct {
    22  	coretesting.BaseSuite
    23  
    24  	resources                *common.Resources
    25  	watcher                  *mockNotifyWatcher
    26  	localControllerInfo      func() ([]string, string, error)
    27  	watchLocalControllerInfo func() state.NotifyWatcher
    28  	api                      *crosscontroller.CrossControllerAPI
    29  }
    30  
    31  func (s *CrossControllerSuite) SetUpTest(c *gc.C) {
    32  	s.BaseSuite.SetUpTest(c)
    33  	s.resources = common.NewResources()
    34  	s.AddCleanup(func(*gc.C) { s.resources.StopAll() })
    35  	s.localControllerInfo = func() ([]string, string, error) {
    36  		return []string{"addr1", "addr2"}, "ca-cert", nil
    37  	}
    38  	s.watchLocalControllerInfo = func() state.NotifyWatcher {
    39  		return s.watcher
    40  	}
    41  	api, err := crosscontroller.NewCrossControllerAPI(
    42  		s.resources,
    43  		func() ([]string, string, error) { return s.localControllerInfo() },
    44  		func() state.NotifyWatcher { return s.watchLocalControllerInfo() },
    45  	)
    46  	c.Assert(err, jc.ErrorIsNil)
    47  	s.api = api
    48  	s.watcher = newMockNotifyWatcher()
    49  	s.AddCleanup(func(*gc.C) { s.watcher.Stop() })
    50  }
    51  
    52  func (s *CrossControllerSuite) TestControllerInfo(c *gc.C) {
    53  	results, err := s.api.ControllerInfo()
    54  	c.Assert(err, jc.ErrorIsNil)
    55  	c.Assert(results, jc.DeepEquals, params.ControllerAPIInfoResults{
    56  		[]params.ControllerAPIInfoResult{{
    57  			Addresses: []string{"addr1", "addr2"},
    58  			CACert:    "ca-cert",
    59  		}},
    60  	})
    61  }
    62  
    63  func (s *CrossControllerSuite) TestControllerInfoError(c *gc.C) {
    64  	s.localControllerInfo = func() ([]string, string, error) {
    65  		return nil, "", errors.New("nope")
    66  	}
    67  	results, err := s.api.ControllerInfo()
    68  	c.Assert(err, jc.ErrorIsNil)
    69  	c.Assert(results, jc.DeepEquals, params.ControllerAPIInfoResults{
    70  		[]params.ControllerAPIInfoResult{{
    71  			Error: &params.Error{Message: "nope"},
    72  		}},
    73  	})
    74  }
    75  
    76  func (s *CrossControllerSuite) TestWatchControllerInfo(c *gc.C) {
    77  	s.watcher.changes <- struct{}{} // initial value
    78  	results, err := s.api.WatchControllerInfo()
    79  	c.Assert(err, jc.ErrorIsNil)
    80  	c.Assert(results, jc.DeepEquals, params.NotifyWatchResults{
    81  		[]params.NotifyWatchResult{{
    82  			NotifyWatcherId: "1",
    83  		}},
    84  	})
    85  	c.Assert(s.resources.Get("1"), gc.Equals, s.watcher)
    86  }
    87  
    88  func (s *CrossControllerSuite) TestWatchControllerInfoError(c *gc.C) {
    89  	s.watcher.tomb.Kill(errors.New("nope"))
    90  	close(s.watcher.changes)
    91  
    92  	results, err := s.api.WatchControllerInfo()
    93  	c.Assert(err, jc.ErrorIsNil)
    94  	c.Assert(results, jc.DeepEquals, params.NotifyWatchResults{
    95  		[]params.NotifyWatchResult{{
    96  			Error: &params.Error{Message: "nope"},
    97  		}},
    98  	})
    99  	c.Assert(s.resources.Get("1"), gc.IsNil)
   100  }