2525import logging
2626import os
2727import re
28+ import shutil
2829import sys
2930import tempfile
3031import time
@@ -49,11 +50,11 @@ def smokeTest():
4950 import doctest
5051 retVal = True
5152 count , length = 0 , 0
52-
53+
5354 for root , _ , files in os .walk (paths .SQLMAP_ROOT_PATH ):
5455 for file in files :
5556 length += 1
56-
57+
5758 for root , _ , files in os .walk (paths .SQLMAP_ROOT_PATH ):
5859 for file in files :
5960 if os .path .splitext (file )[1 ].lower () == '.py' and file != '__init__.py' :
@@ -81,10 +82,10 @@ def smokeTest():
8182
8283 dataToStdout ("\r %s\r " % (" " * (getConsoleWidth ()- 1 )))
8384 if retVal :
84- logger .info ("smoke test final result: passed " )
85+ logger .info ("smoke test final result: PASSED " )
8586 else :
86- logger .info ("smoke test final result: failed " )
87-
87+ logger .error ("smoke test final result: FAILED " )
88+
8889 return retVal
8990
9091def liveTest ():
@@ -93,75 +94,96 @@ def liveTest():
9394 """
9495 retVal = True
9596 count = 0
96- vars = {}
97+ global_ = {}
98+ vars_ = {}
9799 xfile = codecs .open (paths .LIVE_TESTS_XML , 'r' , conf .dataEncoding )
98100 livetests = minidom .parse (xfile ).documentElement
99101 xfile .close ()
100-
101- global_ = livetests .getElementsByTagName ("global" )
102- if global_ :
103- for item in global_ :
102+ length = len (livetests .getElementsByTagName ("case" ))
103+
104+ element = livetests .getElementsByTagName ("global" )
105+ if element :
106+ for item in element :
104107 for child in item .childNodes :
105108 if child .nodeType == child .ELEMENT_NODE and child .hasAttribute ("value" ):
106- vars [child .tagName ] = child .getAttribute ("value" )
109+ global_ [child .tagName ] = child .getAttribute ("value" )
110+
111+ element = livetests .getElementsByTagName ("vars" )
112+ if element :
113+ for item in element :
114+ for child in item .childNodes :
115+ if child .nodeType == child .ELEMENT_NODE and child .hasAttribute ("value" ):
116+ vars_ [child .tagName ] = child .getAttribute ("value" )
107117
108118 for case in livetests .getElementsByTagName ("case" ):
119+ name = None
109120 log = []
110121 session = []
111- switches = {}
112- count += 1
122+ switches = dict (global_ )
123+
124+ if case .hasAttribute ("name" ):
125+ name = case .getAttribute ("name" )
113126
114127 if case .getElementsByTagName ("switches" ):
115128 for child in case .getElementsByTagName ("switches" )[0 ].childNodes :
116129 if child .nodeType == child .ELEMENT_NODE and child .hasAttribute ("value" ):
117- switches [child .tagName ] = replaceVars (child .getAttribute ("value" ), vars )
130+ switches [child .tagName ] = replaceVars (child .getAttribute ("value" ), vars_ )
118131
119132 if case .getElementsByTagName ("log" ):
120133 for item in case .getElementsByTagName ("log" )[0 ].getElementsByTagName ("item" ):
121134 if item .hasAttribute ("value" ):
122- log .append (replaceVars (item .getAttribute ("value" ), vars ))
135+ log .append (replaceVars (item .getAttribute ("value" ), vars_ ))
123136
124137 if case .getElementsByTagName ("session" ):
125138 for item in case .getElementsByTagName ("session" )[0 ].getElementsByTagName ("item" ):
126139 if item .hasAttribute ("value" ):
127- session .append (replaceVars (item .getAttribute ("value" ), vars ))
128-
129- result = runCase (switches , log , session )
130- if not result :
131- errMsg = "live test failed at case #%d" % count
132- logger .error (errMsg )
133- retVal &= result
140+ session .append (replaceVars (item .getAttribute ("value" ), vars_ ))
134141
142+ count += 1
143+ msg = "running live test case '%s' (%d/%d)" % (name , count , length )
144+ logger .info (msg )
145+ result = runCase (name , switches , log , session )
146+ if result :
147+ logger .info ("test passed" )
148+ else :
149+ logger .error ("test failed" )
150+ retVal &= result
151+
152+ dataToStdout ("\n " )
135153 if retVal :
136- logger .info ("live test final result: passed " )
154+ logger .info ("live test final result: PASSED " )
137155 else :
138- logger .info ("live test final result: failed" )
139-
156+ logger .error ("live test final result: FAILED" )
157+
140158 return retVal
141159
142- def initCase ():
160+ def initCase (switches = None ):
143161 paths .SQLMAP_OUTPUT_PATH = tempfile .mkdtemp ()
144162 paths .SQLMAP_DUMP_PATH = os .path .join (paths .SQLMAP_OUTPUT_PATH , "%s" , "dump" )
145163 paths .SQLMAP_FILES_PATH = os .path .join (paths .SQLMAP_OUTPUT_PATH , "%s" , "files" )
146164 cmdLineOptions = cmdLineParser ()
147165 cmdLineOptions .liveTest = cmdLineOptions .smokeTest = False
148166 cmdLineOptions .verbose = 0
167+
168+ if switches :
169+ for key , value in switches .items ():
170+ conf [key ] = value
171+
172+ conf .sessionFile = None
149173 init (cmdLineOptions )
150174 __setVerbosity ()
151175
152176def cleanCase ():
153- #remove dir: paths.SQLMAP_OUTPUT_PATH
177+ shutil . rmtree ( paths .SQLMAP_OUTPUT_PATH , True )
154178 paths .SQLMAP_OUTPUT_PATH = os .path .join (paths .SQLMAP_ROOT_PATH , "output" )
155179 paths .SQLMAP_DUMP_PATH = os .path .join (paths .SQLMAP_OUTPUT_PATH , "%s" , "dump" )
156180 paths .SQLMAP_FILES_PATH = os .path .join (paths .SQLMAP_OUTPUT_PATH , "%s" , "files" )
157181 conf .verbose = 1
158182 __setVerbosity ()
159183
160- def runCase (switches , log = None , session = None ):
184+ def runCase (name = None , switches = None , log = None , session = None ):
161185 retVal = True
162- initCase ()
163- for key , value in switches .items ():
164- conf [key ] = value
186+ initCase (switches )
165187
166188 result = start ()
167189 if result == False : #if None ignore
@@ -172,8 +194,11 @@ def runCase(switches, log=None, session=None):
172194 content = file .read ()
173195 file .close ()
174196 for item in session :
175- #if not re.search(item, content):
176- if content .find (item ) < 0 :
197+ if item .startswith ("r'" ) and item .endswith ("'" ):
198+ if not re .search (item [2 :- 1 ], content ):
199+ retVal = False
200+ break
201+ elif content .find (item ) < 0 :
177202 retVal = False
178203 break
179204
@@ -182,18 +207,21 @@ def runCase(switches, log=None, session=None):
182207 content = file .read ()
183208 file .close ()
184209 for item in log :
185- #if not re.search(item, content):
186- if content .find (item ) < 0 :
210+ if item .startswith ("r'" ) and item .endswith ("'" ):
211+ if not re .search (item [2 :- 1 ], content ):
212+ retVal = False
213+ break
214+ elif content .find (item ) < 0 :
187215 retVal = False
188216 break
189217
190218 cleanCase ()
191219 return retVal
192220
193- def replaceVars (item , vars ):
221+ def replaceVars (item , vars_ ):
194222 retVal = item
195- if item and vars :
223+ if item and vars_ :
196224 for var in re .findall (getCompiledRegex ("\$\{([^}]+)\}" ), item ):
197- if var in vars :
198- retVal = retVal .replace ("${%s}" % var , vars [var ])
199- return retVal
225+ if var in vars_ :
226+ retVal = retVal .replace ("${%s}" % var , vars_ [var ])
227+ return retVal
0 commit comments