github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/api/proxyupdater/proxyupdater_test.go (about)

     1  // Copyright 2016 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package proxyupdater_test
     5  
     6  import (
     7  	jc "github.com/juju/testing/checkers"
     8  	"github.com/juju/utils/proxy"
     9  	gc "gopkg.in/check.v1"
    10  
    11  	"github.com/juju/juju/api/base"
    12  	apitesting "github.com/juju/juju/api/base/testing"
    13  	"github.com/juju/juju/api/proxyupdater"
    14  	"github.com/juju/juju/apiserver/params"
    15  	coretesting "github.com/juju/juju/testing"
    16  	"github.com/juju/juju/watcher"
    17  	"gopkg.in/juju/names.v2"
    18  )
    19  
    20  type ProxyUpdaterSuite struct {
    21  	coretesting.BaseSuite
    22  }
    23  
    24  var _ = gc.Suite(&ProxyUpdaterSuite{})
    25  
    26  func newAPI(c *gc.C, args []apitesting.CheckArgs) (*int, *proxyupdater.API) {
    27  	var called int
    28  	apiCaller := apitesting.CheckingAPICallerMultiArgs(c, args, &called, nil)
    29  	api, err := proxyupdater.NewAPI(apiCaller, names.NewUnitTag("u/0"))
    30  	c.Assert(err, gc.IsNil)
    31  	c.Assert(api, gc.NotNil)
    32  	c.Assert(called, gc.Equals, 0)
    33  
    34  	return &called, api
    35  }
    36  
    37  func (s *ProxyUpdaterSuite) TestNewAPISuccess(c *gc.C) {
    38  	newAPI(c, nil)
    39  }
    40  
    41  func (s *ProxyUpdaterSuite) TestNilAPICallerFails(c *gc.C) {
    42  	api, err := proxyupdater.NewAPI(nil, names.NewUnitTag("u/0"))
    43  	c.Check(api, gc.IsNil)
    44  	c.Check(err, gc.ErrorMatches, "caller is nil")
    45  }
    46  
    47  func (s *ProxyUpdaterSuite) TestNilTagFails(c *gc.C) {
    48  	var args []apitesting.CheckArgs
    49  	var calls int
    50  	apiCaller := apitesting.CheckingAPICallerMultiArgs(c, args, &calls, nil)
    51  	api, err := proxyupdater.NewAPI(apiCaller, nil)
    52  	c.Check(api, gc.IsNil)
    53  	c.Check(err, gc.ErrorMatches, "tag is nil")
    54  }
    55  
    56  func (s *ProxyUpdaterSuite) TestWatchForProxyConfigAndAPIHostPortChanges(c *gc.C) {
    57  	res := params.NotifyWatchResults{
    58  		Results: []params.NotifyWatchResult{params.NotifyWatchResult{
    59  			NotifyWatcherId: "4242",
    60  		}},
    61  	}
    62  
    63  	fake := &struct {
    64  		watcher.NotifyWatcher
    65  	}{}
    66  	s.PatchValue(proxyupdater.NewNotifyWatcher, func(caller base.APICaller, result params.NotifyWatchResult) watcher.NotifyWatcher {
    67  		c.Assert(result, gc.DeepEquals, res.Results[0])
    68  		return fake
    69  	})
    70  
    71  	args := []apitesting.CheckArgs{{
    72  		Facade:  "ProxyUpdater",
    73  		Method:  "WatchForProxyConfigAndAPIHostPortChanges",
    74  		Results: res,
    75  	}}
    76  	called, api := newAPI(c, args)
    77  
    78  	watcher, err := api.WatchForProxyConfigAndAPIHostPortChanges()
    79  	c.Check(*called, jc.GreaterThan, 0)
    80  	c.Check(err, jc.ErrorIsNil)
    81  	c.Check(watcher, gc.Equals, fake)
    82  }
    83  
    84  func (s *ProxyUpdaterSuite) TestProxyConfig(c *gc.C) {
    85  	conf := params.ProxyConfigResult{
    86  		ProxySettings: params.ProxyConfig{
    87  			HTTP:    "http",
    88  			HTTPS:   "https",
    89  			FTP:     "ftp",
    90  			NoProxy: "NoProxy",
    91  		},
    92  		APTProxySettings: params.ProxyConfig{
    93  			HTTP:    "http-apt",
    94  			HTTPS:   "https-apt",
    95  			FTP:     "ftp-apt",
    96  			NoProxy: "NoProxy-apt",
    97  		},
    98  	}
    99  	expected := params.ProxyConfigResults{
   100  		Results: []params.ProxyConfigResult{conf},
   101  	}
   102  
   103  	args := []apitesting.CheckArgs{{
   104  		Facade:  "ProxyUpdater",
   105  		Method:  "ProxyConfig",
   106  		Results: expected,
   107  	}}
   108  	called, api := newAPI(c, args)
   109  
   110  	proxySettings, APTProxySettings, err := api.ProxyConfig()
   111  	c.Assert(*called, gc.Equals, 1)
   112  	c.Assert(err, jc.ErrorIsNil)
   113  	c.Check(proxySettings, jc.DeepEquals, proxy.Settings{
   114  		Http:    "http",
   115  		Https:   "https",
   116  		Ftp:     "ftp",
   117  		NoProxy: "NoProxy",
   118  	})
   119  	c.Check(APTProxySettings, jc.DeepEquals, proxy.Settings{
   120  		Http:    "http-apt",
   121  		Https:   "https-apt",
   122  		Ftp:     "ftp-apt",
   123  		NoProxy: "NoProxy-apt",
   124  	})
   125  }