~ubuntu-branches/ubuntu/utopic/golang/utopic

1.1.13 by Ondřej Surý
Import upstream version 1
1
// Copyright 2009 The Go Authors. All rights reserved.
2
// Use of this source code is governed by a BSD-style
3
// license that can be found in the LICENSE file.
4
5
package http
6
7
import (
1.1.15 by Ondřej Surý
Import upstream version 1.0.2
8
	"net/url"
1.1.13 by Ondřej Surý
Import upstream version 1
9
	"os"
10
	"testing"
11
)
12
13
// TODO(mattn):
14
//	test ProxyAuth
15
16
var UseProxyTests = []struct {
17
	host  string
18
	match bool
19
}{
20
	// Never proxy localhost:
21
	{"localhost:80", false},
22
	{"127.0.0.1", false},
23
	{"127.0.0.2", false},
24
	{"[::1]", false},
25
	{"[::2]", true}, // not a loopback address
26
27
	{"barbaz.net", false},     // match as .barbaz.net
1.2.1 by Michael Stapelberg
Import upstream version 1.1~hg20130304
28
	{"foobar.com", false},     // have a port but match
1.1.13 by Ondřej Surý
Import upstream version 1
29
	{"foofoobar.com", true},   // not match as a part of foobar.com
30
	{"baz.com", true},         // not match as a part of barbaz.com
31
	{"localhost.net", true},   // not match as suffix of address
32
	{"local.localhost", true}, // not match as prefix as address
33
	{"barbarbaz.net", true},   // not match because NO_PROXY have a '.'
1.2.1 by Michael Stapelberg
Import upstream version 1.1~hg20130304
34
	{"www.foobar.com", false}, // match because NO_PROXY includes "foobar.com"
1.1.13 by Ondřej Surý
Import upstream version 1
35
}
36
37
func TestUseProxy(t *testing.T) {
38
	oldenv := os.Getenv("NO_PROXY")
39
	defer os.Setenv("NO_PROXY", oldenv)
40
41
	no_proxy := "foobar.com, .barbaz.net"
42
	os.Setenv("NO_PROXY", no_proxy)
43
44
	for _, test := range UseProxyTests {
45
		if useProxy(test.host+":80") != test.match {
46
			t.Errorf("useProxy(%v) = %v, want %v", test.host, !test.match, test.match)
47
		}
48
	}
49
}
1.1.15 by Ondřej Surý
Import upstream version 1.0.2
50
51
var cacheKeysTests = []struct {
52
	proxy  string
53
	scheme string
54
	addr   string
55
	key    string
56
}{
57
	{"", "http", "foo.com", "|http|foo.com"},
58
	{"", "https", "foo.com", "|https|foo.com"},
59
	{"http://foo.com", "http", "foo.com", "http://foo.com|http|"},
60
	{"http://foo.com", "https", "foo.com", "http://foo.com|https|foo.com"},
61
}
62
63
func TestCacheKeys(t *testing.T) {
64
	for _, tt := range cacheKeysTests {
65
		var proxy *url.URL
66
		if tt.proxy != "" {
67
			u, err := url.Parse(tt.proxy)
68
			if err != nil {
69
				t.Fatal(err)
70
			}
71
			proxy = u
72
		}
73
		cm := connectMethod{proxy, tt.scheme, tt.addr}
74
		if cm.String() != tt.key {
75
			t.Fatalf("{%q, %q, %q} cache key %q; want %q", tt.proxy, tt.scheme, tt.addr, cm.String(), tt.key)
76
		}
77
	}
78
}