@@ -29,176 +29,34 @@ func (m *mockAuditor) AuditRequest(req audit.Request) {
2929
3030// TestProxyServerBasicHTTP tests basic HTTP request handling
3131func TestProxyServerBasicHTTP (t * testing.T ) {
32- // Create test logger
33- logger := slog .New (slog .NewTextHandler (os .Stderr , & slog.HandlerOptions {
34- Level : slog .LevelError ,
35- }))
36-
37- // Create test rules (allow all for testing)
38- testRules , err := rulesengine .ParseAllowSpecs ([]string {"method=*" })
39- if err != nil {
40- t .Fatalf ("Failed to parse test rules: %v" , err )
41- }
42-
43- // Create rule engine
44- ruleEngine := rulesengine .NewRuleEngine (testRules , logger )
45-
46- // Create mock auditor
47- auditor := & mockAuditor {}
48-
49- // Create TLS config (minimal for testing)
50- tlsConfig := & tls.Config {
51- MinVersion : tls .VersionTLS12 ,
52- }
53-
54- // Create proxy server
55- server := NewProxyServer (Config {
56- HTTPPort : 8080 ,
57- RuleEngine : ruleEngine ,
58- Auditor : auditor ,
59- Logger : logger ,
60- TLSConfig : tlsConfig ,
61- })
62-
63- // Start server
64- err = server .Start ()
65- require .NoError (t , err )
66-
67- // Give server time to start
68- time .Sleep (100 * time .Millisecond )
32+ pt := NewProxyTest (t ).
33+ Start ()
34+ defer pt .Stop ()
6935
70- // Test basic HTTP request
7136 t .Run ("BasicHTTPRequest" , func (t * testing.T ) {
72- // Create HTTP client
73- client := & http.Client {
74- Transport : & http.Transport {
75- TLSClientConfig : & tls.Config {
76- InsecureSkipVerify : true , // Skip cert verification for testing
77- },
78- },
79- Timeout : 5 * time .Second ,
80- }
81-
82- // Make request to proxy
83- req , err := http .NewRequest ("GET" , "http://localhost:8080/todos/1" , nil )
84- if err != nil {
85- t .Fatalf ("Failed to create request: %v" , err )
86- }
87- // Override the Host header
88- req .Host = "jsonplaceholder.typicode.com"
89-
90- // Make the request
91- resp , err := client .Do (req )
92- require .NoError (t , err )
93-
94- body , err := io .ReadAll (resp .Body )
95- require .NoError (t , err )
96- require .NoError (t , resp .Body .Close ())
97-
9837 expectedResponse := `{
9938 "userId": 1,
10039 "id": 1,
10140 "title": "delectus aut autem",
10241 "completed": false
10342}`
104- require . Equal ( t , expectedResponse , string ( body ) )
43+ pt . ExpectAllowed ( "http://localhost:8080/todos/1" , "jsonplaceholder.typicode.com" , expectedResponse )
10544 })
106-
107- err = server .Stop ()
108- require .NoError (t , err )
10945}
11046
11147// TestProxyServerBasicHTTPS tests basic HTTPS request handling
11248func TestProxyServerBasicHTTPS (t * testing.T ) {
113- // Create test logger
114- logger := slog .New (slog .NewTextHandler (os .Stderr , & slog.HandlerOptions {
115- Level : slog .LevelError ,
116- }))
49+ pt := NewProxyTest (t ,
50+ WithCertManager ("/tmp/boundary" ),
51+ ).
52+ Start ()
53+ defer pt .Stop ()
11754
118- // Create test rules (allow all for testing)
119- testRules , err := rulesengine .ParseAllowSpecs ([]string {"method=*" })
120- if err != nil {
121- t .Fatalf ("Failed to parse test rules: %v" , err )
122- }
123-
124- // Create rule engine
125- ruleEngine := rulesengine .NewRuleEngine (testRules , logger )
126-
127- // Create mock auditor
128- auditor := & mockAuditor {}
129-
130- currentUser , err := user .Current ()
131- if err != nil {
132- log .Fatal (err )
133- }
134-
135- uid , _ := strconv .Atoi (currentUser .Uid )
136- gid , _ := strconv .Atoi (currentUser .Gid )
137-
138- // Create TLS certificate manager
139- certManager , err := boundary_tls .NewCertificateManager (boundary_tls.Config {
140- Logger : logger ,
141- ConfigDir : "/tmp/boundary" ,
142- Uid : uid ,
143- Gid : gid ,
144- })
145- require .NoError (t , err )
146-
147- // Setup TLS to get cert path for jailer
148- tlsConfig , err := certManager .SetupTLSAndWriteCACert ()
149- require .NoError (t , err )
150-
151- // Create proxy server
152- server := NewProxyServer (Config {
153- HTTPPort : 8080 ,
154- RuleEngine : ruleEngine ,
155- Auditor : auditor ,
156- Logger : logger ,
157- TLSConfig : tlsConfig ,
158- })
159-
160- // Start server
161- err = server .Start ()
162- require .NoError (t , err )
163-
164- // Give server time to start
165- time .Sleep (100 * time .Millisecond )
166-
167- // Test basic HTTPS request
16855 t .Run ("BasicHTTPSRequest" , func (t * testing.T ) {
169- // Create HTTP client
170- client := & http.Client {
171- Transport : & http.Transport {
172- TLSClientConfig : & tls.Config {
173- InsecureSkipVerify : true , // Skip cert verification for testing
174- },
175- },
176- Timeout : 5 * time .Second ,
177- }
178-
179- // Make request to proxy
180- req , err := http .NewRequest ("GET" , "https://localhost:8080/api/v2" , nil )
181- if err != nil {
182- t .Fatalf ("Failed to create request: %v" , err )
183- }
184- // Override the Host header
185- req .Host = "dev.coder.com"
186-
187- // Make the request
188- resp , err := client .Do (req )
189- require .NoError (t , err )
190-
191- body , err := io .ReadAll (resp .Body )
192- require .NoError (t , err )
193- require .NoError (t , resp .Body .Close ())
194-
19556 expectedResponse := `{"message":"👋"}
19657`
197- require . Equal ( t , expectedResponse , string ( body ) )
58+ pt . ExpectAllowed ( "https://localhost:8080/api/v2" , "dev.coder.com" , expectedResponse )
19859 })
199-
200- err = server .Stop ()
201- require .NoError (t , err )
20260}
20361
20462// TestProxyServerCONNECT tests HTTP CONNECT method for HTTPS tunneling
0 commit comments