55import time
66import shlex
77from datetime import datetime
8-
9- def run_command (cmd , ** kwargs ):
10- print ("[CMD]" , " " .join (cmd ))
11- subprocess .run (cmd , check = True , ** kwargs )
8+ from utils import run_command
129
1310def container_exists (name ):
1411 result = subprocess .run (
@@ -17,18 +14,18 @@ def container_exists(name):
1714 )
1815 return name in result .stdout .strip ().splitlines ()
1916
20- def start_db_container (dbms , cfg ):
17+ def start_db_container (dbms , cfg , script_log , docker_log ):
2118 image = cfg .get ("image" )
2219 container_name = cfg .get ("container_name" , f"{ dbms } -sqlancer" )
2320 env_dict = cfg .get ("env" , {})
2421
2522 if not image :
26- print ( "[ERROR] Missing 'image' field in config.json" )
23+ script_log . error ( " Missing 'image' field in config.json" )
2724 sys .exit (1 )
2825
2926 if container_exists (container_name ):
30- print ( f"[INFO] Container ' { container_name } ' already exists. Remove the old container and restart." )
31- remove_container (container_name )
27+ script_log . info ( " Container %s already exists, remove the old container and restart" , container_name )
28+ remove_container (container_name , script_log , docker_log )
3229
3330 env_vars = []
3431 for k , v in env_dict .items ():
@@ -40,13 +37,12 @@ def start_db_container(dbms, cfg):
4037 "--network" , "sqlancer-net" ,
4138 * env_vars ,
4239 image
43- ])
44-
40+ ], docker_log )
4541
46- print ( f"[INFO] Waiting for DBMS container ' { container_name } ' to be ready ..." )
42+ script_log . info ( "Starting DBMS container: %s ...", container_name )
4743 time .sleep (10 )
4844
49- # Optional init SQL
45+
5046 init_sql = cfg .get ("init_sql" )
5147 init_cmd_template = cfg .get ("init_sql_command_template" )
5248 if init_sql and init_cmd_template :
@@ -57,18 +53,22 @@ def start_db_container(dbms, cfg):
5753 sql = init_sql
5854 )
5955 full_cmd = ["docker" , "exec" , container_name ] + shlex .split (cmd_str )
60- print ( f"[INFO] Running init SQL inside container: { init_sql } " )
61- run_command (full_cmd )
56+ script_log . info ( " Running init SQL inside container... " )
57+ run_command (full_cmd , docker_log )
6258 except Exception as e :
63- print ( f"[WARNING] Failed to run init SQL: { e } " )
59+ script_log . warning ( "Init SQL running failed " )
6460
65- def start_sqlancer_container (dbms , host_container_name , username , password , oracle , threads , timeout ):
66- date = datetime .today ().strftime ("%y-%m-%d-%H-%M-%S" )
67- log_dir_host = os .path .abspath (os .path .join ("logs" , date ))
68- os .makedirs (log_dir_host , exist_ok = True )
61+ script_log .info ("DBMS container started: %s" , container_name )
62+
63+ def start_sqlancer_container (dbms , host_container_name , username , password , oracle , threads , timeout , script_log , docker_log , sqlancer_log , run_dir ):
64+ cmd = f"java -jar sqlancer-*.jar --num-threads { threads } --timeout-seconds { timeout } --username { username } --password { password } --host { host_container_name } { dbms } --oracle { oracle } "
65+ script_log .info ("Executing test: %s" , cmd )
66+ # date = datetime.today().strftime("%y-%m-%d-%H-%M-%S")
67+ # log_dir_host = os.path.abspath(os.path.join("logs", date))
68+ # os.makedirs(log_dir_host, exist_ok=True)
6969
70- run_log_container_dir = "/logs"
71- sqlancer_logs_container_dir = "/root/sqlancer/target/logs"
70+ log_dir_host = os . path . abspath ( run_dir )
71+ os . makedirs ( log_dir_host , exist_ok = True )
7272
7373 run_command ([
7474 "docker" , "run" , "--rm" ,
@@ -81,15 +81,17 @@ def start_sqlancer_container(dbms, host_container_name, username, password, orac
8181 "-e" , f"SQLANCER_ORACLE={ oracle } " ,
8282 "-e" , f"SQLANCER_THREADS={ threads } " ,
8383 "-e" , f"SQLANCER_TIMEOUT={ timeout } " ,
84- "-v" , f"{ log_dir_host } :{ run_log_container_dir } " ,
85- "-v" , f"{ log_dir_host } :{ sqlancer_logs_container_dir } " ,
84+ # "-v", f"{log_dir_host}:/logs ",
85+ "-v" , f"{ log_dir_host } :/root/sqlancer/target/logs " ,
8686 "sqlancer:latest"
87- ])
87+ ], sqlancer_log )
88+ script_log .info ("Test executed" )
8889
8990
90- def test_single (cfg , use_cache = False ):
91+ def test_single (cfg , script_log , docker_log , sqlancer_log , run_dir , use_cache = False ):
92+ script_log .info ("==============================Executing test==============================" )
9193 if cfg ["embedded" ] == "no" :
92- start_db_container (cfg ["dbms" ], cfg )
94+ start_db_container (cfg ["dbms" ], cfg , script_log , docker_log )
9395
9496 start_sqlancer_container (
9597 dbms = cfg ["dbms" ],
@@ -98,36 +100,46 @@ def test_single(cfg, use_cache=False):
98100 password = cfg ["password" ],
99101 oracle = cfg ["oracle" ],
100102 threads = cfg ["num_threads" ],
101- timeout = cfg ["timeout_seconds" ]
103+ timeout = cfg ["timeout_seconds" ],
104+ script_log = script_log ,
105+ sqlancer_log = sqlancer_log ,
106+ docker_log = docker_log ,
107+ run_dir = run_dir
102108 )
103109
104110 if cfg ["embedded" ] == "no" :
105- remove_container (cfg ["container_name" ])
111+ remove_container (cfg ["container_name" ], script_log , docker_log )
112+ script_log .info ("==============================Executing test==============================" )
106113
107- def remove_container (container_name ):
114+ def remove_container (container_name , script_log , docker_log ):
115+ script_log .info ("Removing container: %s..." , container_name )
108116 try :
109- print ( f"[INFO] Removing container: { container_name } " )
110- subprocess . run ([ "docker" , "rm" , "-f" , container_name ], check = True )
117+ run_command ([ "docker" , "rm" , "-f" , container_name ], docker_log )
118+ script_log . info ( "Container removed: %s" , container_name )
111119 except subprocess .CalledProcessError as e :
112- print (f"[WARNING] Failed to remove container { container_name } : { e } " )
113-
120+ script_log .warning ("Container removing failed: %s" , container_name )
114121
115122
116-
117- def test_custom_dockerfile (dockerfile_path , cfg , use_cache = False ):
123+ def test_custom_dockerfile (dockerfile_path , cfg , script_log , docker_log , sqlancer_log , run_dir , use_cache = False ):
124+ script_log .info ("==============================Executing test==============================" )
125+
118126 dbms = cfg ["dbms" ]
119127
120- start_db_container (dbms , cfg )
128+ start_db_container (dbms , cfg , script_log , docker_log )
121129 start_sqlancer_container (
122130 dbms = dbms ,
123131 host_container_name = cfg ["container_name" ],
124132 username = cfg ["username" ],
125133 password = cfg ["password" ],
126134 oracle = cfg ["oracle" ],
127135 threads = cfg ["num_threads" ],
128- timeout = cfg ["timeout_seconds" ]
136+ timeout = cfg ["timeout_seconds" ],
137+ script_log = script_log ,
138+ sqlancer_log = sqlancer_log ,
139+ docker_log = docker_log ,
140+ run_dir = run_dir
129141 )
130142
131- remove_container (cfg ["container_name" ])
132-
143+ remove_container (cfg ["container_name" ], script_log , docker_log )
144+ script_log . info ( "==============================Executing test==============================" )
133145
0 commit comments