github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/api/agent/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  	"github.com/juju/names/v5"
     8  	"github.com/juju/proxy"
     9  	jc "github.com/juju/testing/checkers"
    10  	gc "gopkg.in/check.v1"
    11  
    12  	"github.com/juju/juju/api/agent/proxyupdater"
    13  	"github.com/juju/juju/api/base"
    14  	apitesting "github.com/juju/juju/api/base/testing"
    15  	"github.com/juju/juju/core/watcher"
    16  	"github.com/juju/juju/rpc/params"
    17  	coretesting "github.com/juju/juju/testing"
    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.APICall) (*int, *proxyupdater.API) {
    27  	apiCaller := apitesting.APICallChecker(c, args...)
    28  	api, err := proxyupdater.NewAPI(apiCaller.APICallerFunc, names.NewUnitTag("u/0"))
    29  	c.Assert(err, gc.IsNil)
    30  	c.Assert(api, gc.NotNil)
    31  	c.Assert(apiCaller.CallCount, gc.Equals, 0)
    32  
    33  	return &apiCaller.CallCount, api
    34  }
    35  
    36  func (s *ProxyUpdaterSuite) TestNewAPISuccess(c *gc.C) {
    37  	newAPI(c)
    38  }
    39  
    40  func (s *ProxyUpdaterSuite) TestNilAPICallerFails(c *gc.C) {
    41  	api, err := proxyupdater.NewAPI(nil, names.NewUnitTag("u/0"))
    42  	c.Check(api, gc.IsNil)
    43  	c.Check(err, gc.ErrorMatches, "caller is nil")
    44  }
    45  
    46  func (s *ProxyUpdaterSuite) TestNilTagFails(c *gc.C) {
    47  	apiCaller := apitesting.APICallChecker(c)
    48  	api, err := proxyupdater.NewAPI(apiCaller, nil)
    49  	c.Check(api, gc.IsNil)
    50  	c.Check(err, gc.ErrorMatches, "tag is nil")
    51  }
    52  
    53  func (s *ProxyUpdaterSuite) TestWatchForProxyConfigAndAPIHostPortChanges(c *gc.C) {
    54  	res := params.NotifyWatchResults{
    55  		Results: []params.NotifyWatchResult{{
    56  			NotifyWatcherId: "4242",
    57  		}},
    58  	}
    59  
    60  	fake := &struct {
    61  		watcher.NotifyWatcher
    62  	}{}
    63  	s.PatchValue(proxyupdater.NewNotifyWatcher, func(caller base.APICaller, result params.NotifyWatchResult) watcher.NotifyWatcher {
    64  		c.Assert(result, gc.DeepEquals, res.Results[0])
    65  		return fake
    66  	})
    67  
    68  	called, api := newAPI(c, apitesting.APICall{
    69  		Facade:  "ProxyUpdater",
    70  		Method:  "WatchForProxyConfigAndAPIHostPortChanges",
    71  		Results: res,
    72  	})
    73  
    74  	watcher, err := api.WatchForProxyConfigAndAPIHostPortChanges()
    75  	c.Check(*called, jc.GreaterThan, 0)
    76  	c.Check(err, jc.ErrorIsNil)
    77  	c.Check(watcher, gc.Equals, fake)
    78  }
    79  
    80  func (s *ProxyUpdaterSuite) TestProxyConfig(c *gc.C) {
    81  	conf := params.ProxyConfigResult{
    82  		LegacyProxySettings: params.ProxyConfig{
    83  			HTTP:    "http-legacy",
    84  			HTTPS:   "https-legacy",
    85  			FTP:     "ftp-legacy",
    86  			NoProxy: "no-proxy-legacy",
    87  		},
    88  		JujuProxySettings: params.ProxyConfig{
    89  			HTTP:    "http-juju",
    90  			HTTPS:   "https-juju",
    91  			FTP:     "ftp-juju",
    92  			NoProxy: "no-proxy-juju",
    93  		},
    94  		APTProxySettings: params.ProxyConfig{
    95  			HTTP:  "http-apt",
    96  			HTTPS: "https-apt",
    97  			FTP:   "ftp-apt",
    98  		},
    99  		SnapProxySettings: params.ProxyConfig{
   100  			HTTP:  "http-snap",
   101  			HTTPS: "https-snap",
   102  		},
   103  		AptMirror: "http://mirror",
   104  	}
   105  
   106  	called, api := newAPI(c, apitesting.APICall{
   107  		Facade: "ProxyUpdater",
   108  		Method: "ProxyConfig",
   109  		Results: params.ProxyConfigResults{
   110  			Results: []params.ProxyConfigResult{conf},
   111  		},
   112  	})
   113  
   114  	config, err := api.ProxyConfig()
   115  	c.Assert(*called, gc.Equals, 1)
   116  	c.Assert(err, jc.ErrorIsNil)
   117  	c.Check(config.LegacyProxy, jc.DeepEquals, proxy.Settings{
   118  		Http:    "http-legacy",
   119  		Https:   "https-legacy",
   120  		Ftp:     "ftp-legacy",
   121  		NoProxy: "no-proxy-legacy",
   122  	})
   123  	c.Check(config.JujuProxy, jc.DeepEquals, proxy.Settings{
   124  		Http:    "http-juju",
   125  		Https:   "https-juju",
   126  		Ftp:     "ftp-juju",
   127  		NoProxy: "no-proxy-juju",
   128  	})
   129  	c.Check(config.APTProxy, jc.DeepEquals, proxy.Settings{
   130  		Http:  "http-apt",
   131  		Https: "https-apt",
   132  		Ftp:   "ftp-apt",
   133  	})
   134  	c.Check(config.SnapProxy, jc.DeepEquals, proxy.Settings{
   135  		Http:  "http-snap",
   136  		Https: "https-snap",
   137  	})
   138  	c.Check(config.AptMirror, gc.Equals, "http://mirror")
   139  }