Skip to content

Commit 9394cbc

Browse files
committed
add a test
1 parent 77f6c45 commit 9394cbc

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
@@ -201,6 +201,8 @@ type ServerTailnet struct {
201201
transport *http.Transport
202202
}
203203

204+
// insureTLSConfig returns a tls config that does not verify
205+
// the server's certificate chain.
204206
func insecureTLSConfig() *tls.Config {
205207
return &tls.Config{
206208
MinVersion: tls.VersionTLS12,

coderd/tailnet_test.go

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

66-
func TestServerTailnet_ReverseProxy_OK(t *testing.T) {
66+
func TestServerTailnet_ReverseProxy(t *testing.T) {
6767
t.Parallel()
6868

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

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

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

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

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

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

93-
assert.Equal(t, http.StatusOK, res.StatusCode)
94-
}
93+
assert.Equal(t, http.StatusOK, res.StatusCode)
94+
})
9595

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

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

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

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

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

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

121-
rp.ServeHTTP(rw, req)
122-
res := rw.Result()
123-
defer res.Body.Close()
157+
rp.ServeHTTP(rw, req)
158+
res := rw.Result()
159+
defer res.Body.Close()
124160

125-
assert.Equal(t, http.StatusOK, res.StatusCode)
161+
assert.Equal(t, http.StatusOK, res.StatusCode)
162+
})
126163
}
127164

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

0 commit comments

Comments
 (0)