@@ -62,66 +62,103 @@ func TestServerTailnet_AgentConn_Legacy(t *testing.T) {
62
62
assert .True (t , conn .AwaitReachable (ctx ))
63
63
}
64
64
65
- func TestServerTailnet_ReverseProxy_OK (t * testing.T ) {
65
+ func TestServerTailnet_ReverseProxy (t * testing.T ) {
66
66
t .Parallel ()
67
67
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 ()
70
71
71
- // Force a connection through wsconncache using the legacy hardcoded ip.
72
- agentID , _ , serverTailnet := setupAgent (t , nil )
72
+ agentID , _ , serverTailnet := setupAgent (t , nil )
73
73
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 )
76
76
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 ()
80
80
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 )
87
87
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 ()
91
91
92
- assert .Equal (t , http .StatusOK , res .StatusCode )
93
- }
92
+ assert .Equal (t , http .StatusOK , res .StatusCode )
93
+ })
94
94
95
- func TestServerTailnet_ReverseProxy_Legacy (t * testing.T ) {
96
- t .Parallel ()
95
+ t . Run ( "HTTPSProxy" , func (t * testing.T ) {
96
+ t .Parallel ()
97
97
98
- ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
99
- defer cancel ()
98
+ ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
99
+ defer cancel ()
100
100
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 )
104
129
})
105
130
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 ( )
108
133
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 ()
112
148
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 )
119
155
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 ()
123
159
124
- assert .Equal (t , http .StatusOK , res .StatusCode )
160
+ assert .Equal (t , http .StatusOK , res .StatusCode )
161
+ })
125
162
}
126
163
127
164
func setupAgent (t * testing.T , agentAddresses []netip.Prefix ) (uuid.UUID , agent.Agent , * coderd.ServerTailnet ) {
0 commit comments