1+ #!/usr/bin/env python3
2+ """
3+ Mock server for testing CLI commands in CI
4+ """
5+
6+ import http .server
7+ import socketserver
8+ import json
9+ import threading
10+ import time
11+ import sys
12+
13+ class MockHandler (http .server .BaseHTTPRequestHandler ):
14+ def do_GET (self ):
15+ if self .path == '/project/test-123' :
16+ self .send_response (200 )
17+ self .send_header ('Content-Type' , 'application/json' )
18+ self .end_headers ()
19+ response = {
20+ 'project_id' : 'test-123' ,
21+ 'status' : 'completed' ,
22+ 'message' : 'Test project' ,
23+ 'files' : ['Cargo.toml' , 'src/main.rs' ]
24+ }
25+ self .wfile .write (json .dumps (response ).encode ())
26+ elif self .path == '/project/test-123/files/Cargo.toml' :
27+ self .send_response (200 )
28+ self .send_header ('Content-Type' , 'text/plain' )
29+ self .end_headers ()
30+ self .wfile .write (b'[package]\n name = "test"\n version = "0.1.0"' )
31+ elif self .path == '/project/test-123/files/src/main.rs' :
32+ self .send_response (200 )
33+ self .send_header ('Content-Type' , 'text/plain' )
34+ self .end_headers ()
35+ self .wfile .write (b'fn main() { println!("Hello"); }' )
36+ else :
37+ self .send_response (404 )
38+ self .end_headers ()
39+
40+ def do_POST (self ):
41+ if self .path == '/compile' :
42+ self .send_response (200 )
43+ self .send_header ('Content-Type' , 'application/json' )
44+ self .end_headers ()
45+ response = {'success' : True , 'run_output' : 'Hello' }
46+ self .wfile .write (json .dumps (response ).encode ())
47+ elif self .path == '/compile-and-fix' :
48+ self .send_response (200 )
49+ self .send_header ('Content-Type' , 'application/json' )
50+ self .end_headers ()
51+ response = {'success' : True , 'combined_text' : '[filename: src/main.rs]\n fn main() { println!("Fixed!"); }' }
52+ self .wfile .write (json .dumps (response ).encode ())
53+ else :
54+ self .send_response (404 )
55+ self .end_headers ()
56+
57+ def log_message (self , format , * args ):
58+ pass
59+
60+ def main ():
61+ port = 8001
62+ if len (sys .argv ) > 1 :
63+ port = int (sys .argv [1 ])
64+
65+ with socketserver .TCPServer (('' , port ), MockHandler ) as httpd :
66+ print (f'Mock server running on port { port } ' )
67+ server_thread = threading .Thread (target = httpd .serve_forever )
68+ server_thread .daemon = True
69+ server_thread .start ()
70+
71+ try :
72+ while True :
73+ time .sleep (1 )
74+ except KeyboardInterrupt :
75+ print ("Shutting down mock server..." )
76+
77+ if __name__ == '__main__' :
78+ main ()
0 commit comments