1
// Copyright 2013 Canonical Ltd.
2
// Licensed under the LGPLv3, see LICENCE file for details.
9
"github.com/juju/testing"
10
gc "gopkg.in/check.v1"
12
"github.com/juju/utils/proxy"
15
type proxySuite struct {
16
testing.IsolationSuite
19
var _ = gc.Suite(&proxySuite{})
21
func (s *proxySuite) TestDetectNoSettings(c *gc.C) {
22
// Patch all of the environment variables we check out just in case the
24
s.PatchEnvironment("http_proxy", "")
25
s.PatchEnvironment("HTTP_PROXY", "")
26
s.PatchEnvironment("https_proxy", "")
27
s.PatchEnvironment("HTTPS_PROXY", "")
28
s.PatchEnvironment("ftp_proxy", "")
29
s.PatchEnvironment("FTP_PROXY", "")
30
s.PatchEnvironment("no_proxy", "")
31
s.PatchEnvironment("NO_PROXY", "")
33
proxies := proxy.DetectProxies()
35
c.Assert(proxies, gc.DeepEquals, proxy.Settings{})
38
func (s *proxySuite) TestDetectPrimary(c *gc.C) {
39
// Patch all of the environment variables we check out just in case the
41
s.PatchEnvironment("http_proxy", "http://user@10.0.0.1")
42
s.PatchEnvironment("HTTP_PROXY", "")
43
s.PatchEnvironment("https_proxy", "https://user@10.0.0.1")
44
s.PatchEnvironment("HTTPS_PROXY", "")
45
s.PatchEnvironment("ftp_proxy", "ftp://user@10.0.0.1")
46
s.PatchEnvironment("FTP_PROXY", "")
47
s.PatchEnvironment("no_proxy", "10.0.3.1,localhost")
48
s.PatchEnvironment("NO_PROXY", "")
50
proxies := proxy.DetectProxies()
52
c.Assert(proxies, gc.DeepEquals, proxy.Settings{
53
Http: "http://user@10.0.0.1",
54
Https: "https://user@10.0.0.1",
55
Ftp: "ftp://user@10.0.0.1",
56
NoProxy: "10.0.3.1,localhost",
60
func (s *proxySuite) TestDetectFallback(c *gc.C) {
61
// Patch all of the environment variables we check out just in case the
63
s.PatchEnvironment("http_proxy", "")
64
s.PatchEnvironment("HTTP_PROXY", "http://user@10.0.0.2")
65
s.PatchEnvironment("https_proxy", "")
66
s.PatchEnvironment("HTTPS_PROXY", "https://user@10.0.0.2")
67
s.PatchEnvironment("ftp_proxy", "")
68
s.PatchEnvironment("FTP_PROXY", "ftp://user@10.0.0.2")
69
s.PatchEnvironment("no_proxy", "")
70
s.PatchEnvironment("NO_PROXY", "10.0.3.1,localhost")
72
proxies := proxy.DetectProxies()
74
c.Assert(proxies, gc.DeepEquals, proxy.Settings{
75
Http: "http://user@10.0.0.2",
76
Https: "https://user@10.0.0.2",
77
Ftp: "ftp://user@10.0.0.2",
78
NoProxy: "10.0.3.1,localhost",
82
func (s *proxySuite) TestDetectPrimaryPreference(c *gc.C) {
83
// Patch all of the environment variables we check out just in case the
85
s.PatchEnvironment("http_proxy", "http://user@10.0.0.1")
86
s.PatchEnvironment("https_proxy", "https://user@10.0.0.1")
87
s.PatchEnvironment("ftp_proxy", "ftp://user@10.0.0.1")
88
s.PatchEnvironment("no_proxy", "10.0.3.1,localhost")
89
s.PatchEnvironment("HTTP_PROXY", "http://user@10.0.0.2")
90
s.PatchEnvironment("HTTPS_PROXY", "https://user@10.0.0.2")
91
s.PatchEnvironment("FTP_PROXY", "ftp://user@10.0.0.2")
92
s.PatchEnvironment("NO_PROXY", "localhost")
94
proxies := proxy.DetectProxies()
96
c.Assert(proxies, gc.DeepEquals, proxy.Settings{
97
Http: "http://user@10.0.0.1",
98
Https: "https://user@10.0.0.1",
99
Ftp: "ftp://user@10.0.0.1",
100
NoProxy: "10.0.3.1,localhost",
104
func (s *proxySuite) TestAsScriptEnvironmentEmpty(c *gc.C) {
105
proxies := proxy.Settings{}
106
c.Assert(proxies.AsScriptEnvironment(), gc.Equals, "")
109
func (s *proxySuite) TestAsScriptEnvironmentOneValue(c *gc.C) {
110
proxies := proxy.Settings{
114
export http_proxy=some-value
115
export HTTP_PROXY=some-value`[1:]
116
c.Assert(proxies.AsScriptEnvironment(), gc.Equals, expected)
119
func (s *proxySuite) TestAsScriptEnvironmentAllValue(c *gc.C) {
120
proxies := proxy.Settings{
123
Ftp: "who uses this?",
124
NoProxy: "10.0.3.1,localhost",
127
export http_proxy=some-value
128
export HTTP_PROXY=some-value
129
export https_proxy=special
130
export HTTPS_PROXY=special
131
export ftp_proxy=who uses this?
132
export FTP_PROXY=who uses this?
133
export no_proxy=10.0.3.1,localhost
134
export NO_PROXY=10.0.3.1,localhost`[1:]
135
c.Assert(proxies.AsScriptEnvironment(), gc.Equals, expected)
138
func (s *proxySuite) TestAsEnvironmentValuesEmpty(c *gc.C) {
139
proxies := proxy.Settings{}
140
c.Assert(proxies.AsEnvironmentValues(), gc.HasLen, 0)
143
func (s *proxySuite) TestAsEnvironmentValuesOneValue(c *gc.C) {
144
proxies := proxy.Settings{
147
expected := []string{
148
"http_proxy=some-value",
149
"HTTP_PROXY=some-value",
151
c.Assert(proxies.AsEnvironmentValues(), gc.DeepEquals, expected)
154
func (s *proxySuite) TestAsEnvironmentValuesAllValue(c *gc.C) {
155
proxies := proxy.Settings{
158
Ftp: "who uses this?",
159
NoProxy: "10.0.3.1,localhost",
161
expected := []string{
162
"http_proxy=some-value",
163
"HTTP_PROXY=some-value",
164
"https_proxy=special",
165
"HTTPS_PROXY=special",
166
"ftp_proxy=who uses this?",
167
"FTP_PROXY=who uses this?",
168
"no_proxy=10.0.3.1,localhost",
169
"NO_PROXY=10.0.3.1,localhost",
171
c.Assert(proxies.AsEnvironmentValues(), gc.DeepEquals, expected)
174
func (s *proxySuite) TestSetEnvironmentValues(c *gc.C) {
175
s.PatchEnvironment("http_proxy", "initial")
176
s.PatchEnvironment("HTTP_PROXY", "initial")
177
s.PatchEnvironment("https_proxy", "initial")
178
s.PatchEnvironment("HTTPS_PROXY", "initial")
179
s.PatchEnvironment("ftp_proxy", "initial")
180
s.PatchEnvironment("FTP_PROXY", "initial")
181
s.PatchEnvironment("no_proxy", "initial")
182
s.PatchEnvironment("NO_PROXY", "initial")
184
proxySettings := proxy.Settings{
186
Https: "https proxy",
187
// Ftp left blank to show clearing env.
188
NoProxy: "10.0.3.1,localhost",
190
proxySettings.SetEnvironmentValues()
192
obtained := proxy.DetectProxies()
194
c.Assert(obtained, gc.DeepEquals, proxySettings)
196
c.Assert(os.Getenv("http_proxy"), gc.Equals, "http proxy")
197
c.Assert(os.Getenv("HTTP_PROXY"), gc.Equals, "http proxy")
198
c.Assert(os.Getenv("https_proxy"), gc.Equals, "https proxy")
199
c.Assert(os.Getenv("HTTPS_PROXY"), gc.Equals, "https proxy")
200
c.Assert(os.Getenv("ftp_proxy"), gc.Equals, "")
201
c.Assert(os.Getenv("FTP_PROXY"), gc.Equals, "")
202
c.Assert(os.Getenv("no_proxy"), gc.Equals, "10.0.3.1,localhost")
203
c.Assert(os.Getenv("NO_PROXY"), gc.Equals, "10.0.3.1,localhost")