Skip to content

Commit 3238edf

Browse files
committed
add a test
1 parent 3ebe5a4 commit 3238edf

File tree

2 files changed

+82
-43
lines changed

2 files changed

+82
-43
lines changed

coderd/tailnet.go

+2
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,8 @@ type ServerTailnet struct {
215215
transport *http.Transport
216216
}
217217

218+
// insureTLSConfig returns a tls config that does not verify
219+
// the server's certificate chain.
218220
func insecureTLSConfig() *tls.Config {
219221
return &tls.Config{
220222
MinVersion: tls.VersionTLS12,

coderd/tailnet_test.go

+80-43
Original file line numberDiff line numberDiff line change
@@ -62,66 +62,103 @@ func TestServerTailnet_AgentConn_Legacy(t *testing.T) {
6262
assert.True(t, conn.AwaitReachable(ctx))
6363
}
6464

65-
func TestServerTailnet_ReverseProxy_OK(t *testing.T) {
65+
func TestServerTailnet_ReverseProxy(t *testing.T) {
6666
t.Parallel()
6767

68-
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
69-
defer cancel()
68+
t.Run("OK", func(t *testing.T) {
69+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
70+
defer cancel()
7071

71-
// Force a connection through wsconncache using the legacy hardcoded ip.
72-
agentID, _, serverTailnet := setupAgent(t, nil)
72+
agentID, _, serverTailnet := setupAgent(t, nil)
7373

74-
u, err := url.Parse(fmt.Sprintf("http://127.0.0.1:%d", codersdk.WorkspaceAgentHTTPAPIServerPort))
75-
require.NoError(t, err)
74+
u, err := url.Parse(fmt.Sprintf("http://127.0.0.1:%d", codersdk.WorkspaceAgentHTTPAPIServerPort))
75+
require.NoError(t, err)
7676

77-
rp, release, err := serverTailnet.ReverseProxy(u, u, agentID)
78-
require.NoError(t, err)
79-
defer release()
77+
rp, release, err := serverTailnet.ReverseProxy(u, u, agentID)
78+
require.NoError(t, err)
79+
defer release()
8080

81-
rw := httptest.NewRecorder()
82-
req := httptest.NewRequest(
83-
http.MethodGet,
84-
u.String(),
85-
nil,
86-
).WithContext(ctx)
81+
rw := httptest.NewRecorder()
82+
req := httptest.NewRequest(
83+
http.MethodGet,
84+
u.String(),
85+
nil,
86+
).WithContext(ctx)
8787

88-
rp.ServeHTTP(rw, req)
89-
res := rw.Result()
90-
defer res.Body.Close()
88+
rp.ServeHTTP(rw, req)
89+
res := rw.Result()
90+
defer res.Body.Close()
9191

92-
assert.Equal(t, http.StatusOK, res.StatusCode)
93-
}
92+
assert.Equal(t, http.StatusOK, res.StatusCode)
93+
})
9494

95-
func TestServerTailnet_ReverseProxy_Legacy(t *testing.T) {
96-
t.Parallel()
95+
t.Run("HTTPSProxy", func(t *testing.T) {
96+
t.Parallel()
9797

98-
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
99-
defer cancel()
98+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
99+
defer cancel()
100100

101-
// Force a connection through wsconncache using the legacy hardcoded ip.
102-
agentID, _, serverTailnet := setupAgent(t, []netip.Prefix{
103-
netip.PrefixFrom(codersdk.WorkspaceAgentIP, 128),
101+
agentID, _, serverTailnet := setupAgent(t, nil)
102+
103+
const expectedResponseCode = 209
104+
// Test that we can proxy HTTPS traffic.
105+
s := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
106+
w.WriteHeader(expectedResponseCode)
107+
}))
108+
defer s.Close()
109+
110+
uri, err := url.Parse(s.URL)
111+
require.NoError(t, err)
112+
113+
rp, release, err := serverTailnet.ReverseProxy(uri, uri, agentID)
114+
require.NoError(t, err)
115+
defer release()
116+
117+
rw := httptest.NewRecorder()
118+
req := httptest.NewRequest(
119+
http.MethodGet,
120+
uri.String(),
121+
nil,
122+
).WithContext(ctx)
123+
124+
rp.ServeHTTP(rw, req)
125+
res := rw.Result()
126+
defer res.Body.Close()
127+
128+
assert.Equal(t, expectedResponseCode, res.StatusCode)
104129
})
105130

106-
u, err := url.Parse(fmt.Sprintf("http://127.0.0.1:%d", codersdk.WorkspaceAgentHTTPAPIServerPort))
107-
require.NoError(t, err)
131+
t.Run("Legacy", func(t *testing.T) {
132+
t.Parallel()
108133

109-
rp, release, err := serverTailnet.ReverseProxy(u, u, agentID)
110-
require.NoError(t, err)
111-
defer release()
134+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
135+
defer cancel()
136+
137+
// Force a connection through wsconncache using the legacy hardcoded ip.
138+
agentID, _, serverTailnet := setupAgent(t, []netip.Prefix{
139+
netip.PrefixFrom(codersdk.WorkspaceAgentIP, 128),
140+
})
141+
142+
u, err := url.Parse(fmt.Sprintf("http://127.0.0.1:%d", codersdk.WorkspaceAgentHTTPAPIServerPort))
143+
require.NoError(t, err)
144+
145+
rp, release, err := serverTailnet.ReverseProxy(u, u, agentID)
146+
require.NoError(t, err)
147+
defer release()
112148

113-
rw := httptest.NewRecorder()
114-
req := httptest.NewRequest(
115-
http.MethodGet,
116-
u.String(),
117-
nil,
118-
).WithContext(ctx)
149+
rw := httptest.NewRecorder()
150+
req := httptest.NewRequest(
151+
http.MethodGet,
152+
u.String(),
153+
nil,
154+
).WithContext(ctx)
119155

120-
rp.ServeHTTP(rw, req)
121-
res := rw.Result()
122-
defer res.Body.Close()
156+
rp.ServeHTTP(rw, req)
157+
res := rw.Result()
158+
defer res.Body.Close()
123159

124-
assert.Equal(t, http.StatusOK, res.StatusCode)
160+
assert.Equal(t, http.StatusOK, res.StatusCode)
161+
})
125162
}
126163

127164
func setupAgent(t *testing.T, agentAddresses []netip.Prefix) (uuid.UUID, agent.Agent, *coderd.ServerTailnet) {

0 commit comments

Comments
 (0)