@@ -189,12 +189,18 @@ def _server_trace(self):
189189 self ._cached_server_trace = TraceAnalyzer (trace , self ._keylog_file ())
190190 return self ._cached_server_trace
191191
192- def _generate_random_file (self , size : int , filename : str = None ) -> str :
192+ def _generate_random_file (
193+ self , size : int , filename : str = None , directory : str = None
194+ ) -> str :
193195 if filename is None :
194196 filename = generate_slug ()
195197 # see https://www.stefanocappellini.it/generate-pseudorandom-bytes-with-python/ for benchmarks
196198 enc = AES .new (os .urandom (32 ), AES .MODE_OFB , b"a" * 16 )
197- f = open (self .server_www_dir () + filename , "wb" )
199+ if directory is not None :
200+ path = os .path .join (directory , filename )
201+ else :
202+ path = os .path .join (self .server_www_dir (), filename )
203+ f = open (path , "wb" )
198204 f .write (enc .encrypt (b" " * size ))
199205 f .close ()
200206 logging .debug ("Generated random file: %s of size: %d" , filename , size )
@@ -213,29 +219,40 @@ def _check_version_and_files(self) -> bool:
213219 return False
214220 return self ._check_files ()
215221
216- def _check_files (self ) -> bool :
217- if len (self ._files ) == 0 :
222+ def _check_files (
223+ self , source_dir : str = None , download_dir : str = None , files : List [str ] = None
224+ ) -> bool :
225+ if source_dir is None :
226+ source_dir = self .server_www_dir ()
227+ if download_dir is None :
228+ download_dir = self .client_download_dir ()
229+ if files is None :
230+ files = self ._files
231+
232+ if len (files ) == 0 :
218233 raise Exception ("No test files generated." )
219- files = [
234+
235+ downloaded_files = [
220236 n
221- for n in os .listdir (self . client_download_dir () )
222- if os .path .isfile (os .path .join (self . client_download_dir () , n ))
237+ for n in os .listdir (download_dir )
238+ if os .path .isfile (os .path .join (download_dir , n ))
223239 ]
224- too_many = [f for f in files if f not in self . _files ]
240+ too_many = [f for f in downloaded_files if f not in files ]
225241 if len (too_many ) != 0 :
226242 logging .info ("Found unexpected downloaded files: %s" , too_many )
227- too_few = [f for f in self . _files if f not in files ]
243+ too_few = [f for f in files if f not in downloaded_files ]
228244 if len (too_few ) != 0 :
229245 logging .info ("Missing files: %s" , too_few )
230246 if len (too_many ) != 0 or len (too_few ) != 0 :
231247 return False
232- for f in self ._files :
233- fp = self .client_download_dir () + f
248+
249+ for f in files :
250+ fp = os .path .join (download_dir , f )
234251 if not os .path .isfile (fp ):
235252 logging .info ("File %s does not exist." , fp )
236253 return False
237254 try :
238- size = os .path .getsize (self . server_www_dir () + f )
255+ size = os .path .getsize (os . path . join ( source_dir , f ) )
239256 downloaded_size = os .path .getsize (fp )
240257 if size != downloaded_size :
241258 logging .info (
@@ -245,13 +262,13 @@ def _check_files(self) -> bool:
245262 downloaded_size ,
246263 )
247264 return False
248- if not filecmp .cmp (self . server_www_dir () + f , fp , shallow = False ):
265+ if not filecmp .cmp (os . path . join ( source_dir , f ) , fp , shallow = False ):
249266 logging .info ("File contents of %s do not match." , fp )
250267 return False
251268 except Exception as exception :
252269 logging .info (
253270 "Could not compare files %s and %s: %s" ,
254- self . server_www_dir () + f ,
271+ os . path . join ( source_dir , f ) ,
255272 fp ,
256273 exception ,
257274 )
@@ -299,9 +316,14 @@ def cleanup(self):
299316 self ._server_download_dir .cleanup ()
300317 self ._server_download_dir = None
301318
302- @abc .abstractmethod
303319 def get_paths (self ):
304- pass
320+ return []
321+
322+ def get_paths_raw (self ):
323+ return []
324+
325+ def get_paths_server (self ):
326+ return []
305327
306328 @abc .abstractmethod
307329 def check (self ) -> TestResult :
0 commit comments