44import stat
55import threading
66import uuid
7+ from collections import Set
78
89import utils .file_utils as file_utils
910import utils .os_utils as os_utils
1516temp_folder = 'tests_temp'
1617_original_env = {}
1718
19+
1820def create_file (filepath , overwrite = False ):
1921 if not os .path .exists (temp_folder ):
2022 os .makedirs (temp_folder )
@@ -54,14 +56,14 @@ def create_dir(dir_path):
5456
5557def setup ():
5658 if os .path .exists (temp_folder ):
57- _rmtree ()
59+ _rmtree (temp_folder )
5860
5961 os .makedirs (temp_folder )
6062
6163
6264def cleanup ():
6365 if os .path .exists (temp_folder ):
64- _rmtree ()
66+ _rmtree (temp_folder )
6567
6668 os_utils .reset_os ()
6769
@@ -74,7 +76,7 @@ def cleanup():
7476 _original_env .clear ()
7577
7678
77- def _rmtree ():
79+ def _rmtree (folder ):
7880 exception = None
7981
8082 def on_rm_error (func , path , exc_info ):
@@ -87,7 +89,7 @@ def on_rm_error(func, path, exc_info):
8789 if exception is None :
8890 exception = e
8991
90- shutil .rmtree (temp_folder , onerror = on_rm_error )
92+ shutil .rmtree (folder , onerror = on_rm_error )
9193 if exception :
9294 raise exception
9395
@@ -134,7 +136,6 @@ def create_script_param_config(
134136 file_recursive = None ,
135137 file_type = None ,
136138 file_extensions = None ):
137-
138139 conf = {'name' : param_name }
139140
140141 if type is not None :
@@ -308,6 +309,42 @@ def set_env_value(key, value):
308309 os .environ [key ] = value
309310
310311
312+ def assert_large_dict_equal (expected , actual , testcase ):
313+ if len (expected ) < 20 and len (actual ) < 20 :
314+ testcase .assertEqual (expected , actual )
315+ return
316+
317+ if expected == actual :
318+ return
319+
320+ diff_expected = {}
321+ diff_actual = {}
322+ too_large_diff = False
323+
324+ all_keys = set ()
325+ all_keys .update (expected .keys ())
326+ all_keys .update (actual .keys ())
327+ for key in all_keys :
328+ expected_value = expected .get (key )
329+ actual_value = actual .get (key )
330+
331+ if expected_value == actual_value :
332+ continue
333+
334+ diff_expected [key ] = expected_value
335+ diff_actual [key ] = actual_value
336+
337+ if len (diff_expected ) >= 50 :
338+ too_large_diff = True
339+ break
340+
341+ message = 'Showing only different elements'
342+ if too_large_diff :
343+ message += ' (limited to 50)'
344+
345+ testcase .assertEqual (diff_expected , diff_actual , message )
346+
347+
311348class _MockProcessWrapper (ProcessWrapper ):
312349 def __init__ (self , executor , command , working_directory ):
313350 super ().__init__ (command , working_directory )
@@ -374,4 +411,3 @@ def is_allowed(self, user_id, allowed_users):
374411
375412 def is_admin (self , user_id ):
376413 return True
377-
0 commit comments