@@ -63,66 +63,103 @@ func TestServerTailnet_AgentConn_Legacy(t *testing.T) {
63
63
assert .True (t , conn .AwaitReachable (ctx ))
64
64
}
65
65
66
- func TestServerTailnet_ReverseProxy_OK (t * testing.T ) {
66
+ func TestServerTailnet_ReverseProxy (t * testing.T ) {
67
67
t .Parallel ()
68
68
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 ()
71
72
72
- // Force a connection through wsconncache using the legacy hardcoded ip.
73
- agentID , _ , serverTailnet := setupAgent (t , nil )
73
+ agentID , _ , serverTailnet := setupAgent (t , nil )
74
74
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 )
77
77
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 ()
81
81
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 )
88
88
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 ()
92
92
93
- assert .Equal (t , http .StatusOK , res .StatusCode )
94
- }
93
+ assert .Equal (t , http .StatusOK , res .StatusCode )
94
+ })
95
95
96
- func TestServerTailnet_ReverseProxy_Legacy (t * testing.T ) {
97
- t .Parallel ()
96
+ t . Run ( "HTTPSProxy" , func (t * testing.T ) {
97
+ t .Parallel ()
98
98
99
- ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
100
- defer cancel ()
99
+ ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
100
+ defer cancel ()
101
101
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 )
105
130
})
106
131
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 ( )
109
134
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 ()
113
149
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 )
120
156
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 ()
124
160
125
- assert .Equal (t , http .StatusOK , res .StatusCode )
161
+ assert .Equal (t , http .StatusOK , res .StatusCode )
162
+ })
126
163
}
127
164
128
165
func setupAgent (t * testing.T , agentAddresses []netip.Prefix ) (uuid.UUID , agent.Agent , * coderd.ServerTailnet ) {
0 commit comments