Passed
Push — master ( d53f06...3b5095 )
by Stefano
02:29
created

oSlowClientShouldTimeout   A

Complexity

Conditions 2

Size

Total Lines 23
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 17
nop 1
dl 0
loc 23
rs 9.55
c 0
b 0
f 0
1
package client_test
2
3
import (
4
	"net/http"
5
	"net/url"
6
	"testing"
7
	"time"
8
9
	"github.com/stefanoj3/dirstalk/pkg/common/test"
10
	"github.com/stefanoj3/dirstalk/pkg/scan/client"
11
	"github.com/stretchr/testify/assert"
12
)
13
14
func TestWhenRemoteIsTooSlowClientShouldTimeout(t *testing.T) {
15
	testServer, _ := test.NewServerWithAssertion(
16
		http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
17
			time.Sleep(time.Millisecond * 50)
18
		}),
19
	)
20
	defer testServer.Close()
21
22
	c, err := client.NewClientFromConfig(
23
		10,
24
		nil,
25
		"",
26
		false,
27
		nil,
28
		nil,
29
	)
30
	assert.NoError(t, err)
31
32
	res, err := c.Get(testServer.URL)
33
	assert.Error(t, err)
34
	assert.Nil(t, res)
35
36
	assert.Contains(t, err.Error(), "Client.Timeout")
37
}
38
39
func TestShouldForwardProvidedCookiesWhenUsingJar(t *testing.T) {
40
	const (
41
		serverCookieName  = "server_cookie_name"
42
		serverCookieValue = "server_cookie_value"
43
	)
44
45
	testServer, serverAssertion := test.NewServerWithAssertion(
46
		http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
47
			http.SetCookie(
48
				w,
49
				&http.Cookie{
50
					Name:    serverCookieName,
51
					Value:   serverCookieValue,
52
					Expires: time.Now().AddDate(0, 1, 0),
53
				},
54
			)
55
		}),
56
	)
57
	defer testServer.Close()
58
59
	u, err := url.Parse(testServer.URL)
60
	assert.NoError(t, err)
61
62
	cookies := []*http.Cookie{
63
		{
64
			Name:  "a_cookie_name",
65
			Value: "a_cookie_value",
66
		},
67
	}
68
69
	c, err := client.NewClientFromConfig(
70
		100,
71
		nil,
72
		"",
73
		true,
74
		cookies,
75
		u,
76
	)
77
	assert.NoError(t, err)
78
79
	res, err := c.Get(testServer.URL)
80
	assert.NoError(t, err)
81
	assert.NotNil(t, res)
82
83
	assert.Equal(t, 1, serverAssertion.Len())
84
85
	serverAssertion.At(0, func(r http.Request) {
86
		assert.Equal(t, 1, len(r.Cookies()))
87
88
		assert.Equal(t, r.Cookies()[0].Name, cookies[0].Name)
89
		assert.Equal(t, r.Cookies()[0].Value, cookies[0].Value)
90
		assert.Equal(t, r.Cookies()[0].Expires, cookies[0].Expires)
91
	})
92
93
	res, err = c.Get(testServer.URL)
94
	assert.NoError(t, err)
95
	assert.NotNil(t, res)
96
97
	assert.Equal(t, 2, serverAssertion.Len())
98
99
	serverAssertion.At(1, func(r http.Request) {
100
		assert.Equal(t, 2, len(r.Cookies()))
101
102
		assert.Equal(t, r.Cookies()[0].Name, cookies[0].Name)
103
		assert.Equal(t, r.Cookies()[0].Value, cookies[0].Value)
104
		assert.Equal(t, r.Cookies()[0].Expires, cookies[0].Expires)
105
106
		assert.Equal(t, r.Cookies()[1].Name, serverCookieName)
107
		assert.Equal(t, r.Cookies()[1].Value, serverCookieValue)
108
	})
109
}
110
111
func TestShouldForwardCookiesWhenJarIsDisabled(t *testing.T) {
112
	testServer, serverAssertion := test.NewServerWithAssertion(
113
		http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {}),
114
	)
115
	defer testServer.Close()
116
117
	u, err := url.Parse(testServer.URL)
118
	assert.NoError(t, err)
119
120
	cookies := []*http.Cookie{
121
		{
122
			Name:  "a_cookie_name",
123
			Value: "a_cookie_value",
124
		},
125
	}
126
127
	c, err := client.NewClientFromConfig(
128
		100,
129
		nil,
130
		"",
131
		false,
132
		cookies,
133
		u,
134
	)
135
	assert.NoError(t, err)
136
137
	res, err := c.Get(testServer.URL)
138
	assert.NoError(t, err)
139
	assert.NotNil(t, res)
140
141
	assert.Equal(t, 1, serverAssertion.Len())
142
143
	serverAssertion.At(0, func(r http.Request) {
144
		assert.Equal(t, 1, len(r.Cookies()))
145
146
		assert.Equal(t, r.Cookies()[0].Name, cookies[0].Name)
147
		assert.Equal(t, r.Cookies()[0].Value, cookies[0].Value)
148
		assert.Equal(t, r.Cookies()[0].Expires, cookies[0].Expires)
149
	})
150
}
151
152
func TestShouldFailToCreateAClientWithInvalidSocks5Url(t *testing.T) {
153
	u := url.URL{Scheme: "potatoscheme"}
154
155
	c, err := client.NewClientFromConfig(
156
		100,
157
		&u,
158
		"",
159
		false,
160
		nil,
161
		nil,
162
	)
163
	assert.Nil(t, c)
164
	assert.Error(t, err)
165
166
	assert.Contains(t, err.Error(), "unknown scheme")
167
}
168