1818import glob
1919import shutil
2020
21- from utils import execute , ArgParseImpl , mkdir_p , mv_f
22- from parse_test_json import parse_test_config_from_path
21+ from utils import execute , ArgParseImpl , mkdir_p , mv_f , important_print
22+
23+ import test_config
2324from golden_manager import GoldenManager
2425from image_diff import same_image
26+ from results import RESULT_OK , RESULT_FAILED
2527
26- def important_print (msg ):
27- lines = msg .split ('\n ' )
28- max_len = max ([len (l ) for l in lines ])
29- print ('-' * (max_len + 8 ))
30- for line in lines :
31- diff = max_len - len (line )
32- information = f'--- { line } ' + (' ' * diff ) + '---'
33- print (information )
34- print ('-' * (max_len + 8 ))
35-
36- RESULT_OK = 'ok'
37- RESULT_FAILED_TO_RENDER = 'failed-to-render'
38- RESULT_FAILED_IMAGE_DIFF = 'failed-image-diff'
39- RESULT_FAILED_NO_GOLDEN = 'failed-no-golden'
40-
41- def run_test (gltf_viewer ,
42- test_config ,
43- output_dir ,
44- opengl_lib = None ,
45- vk_icd = None ):
28+ def _render_test_config (gltf_viewer ,
29+ test_config ,
30+ output_dir ,
31+ opengl_lib = None ,
32+ vk_icd = None ):
4633 assert os .path .isdir (output_dir ), f"output directory { output_dir } does not exist"
4734 assert os .access (gltf_viewer , os .X_OK )
4835
@@ -86,7 +73,7 @@ def run_test(gltf_viewer,
8673 mv_f (f'{ test .name } 0.tif' , out_tif_name )
8774 mv_f (f'{ test .name } 0.json' , f'{ named_output_dir } /{ test .name } .json' )
8875 else :
89- result = RESULT_FAILED_TO_RENDER
76+ result = RESULT_FAILED
9077 important_print (f'{ test_desc } rendering failed with error={ out_code } ' )
9178
9279 results .append ({
@@ -96,67 +83,33 @@ def run_test(gltf_viewer,
9683 })
9784 return named_output_dir , results
9885
99- def compare_goldens (render_results , output_dir , goldens ):
100- for result in render_results :
101- if result ['result' ] != RESULT_OK :
102- continue
103-
104- out_tif_basename = f"{ result ['name' ]} .tif"
105- out_tif_name = f'{ output_dir } /{ out_tif_basename } '
106- golden_path = goldens .get (out_tif_basename )
107- if not golden_path :
108- result ['result' ] = RESULT_FAILED_NO_GOLDEN
109- result ['result_code' ] = 1
110- elif not same_image (golden_path , out_tif_name ):
111- result ['result' ] = RESULT_FAILED_IMAGE_DIFF
112- result ['result_code' ] = 1
113-
114- return render_results
115-
11686if __name__ == "__main__" :
11787 parser = ArgParseImpl ()
11888 parser .add_argument ('--test' , help = 'Configuration of the test' , required = True )
11989 parser .add_argument ('--gltf_viewer' , help = 'Path to the gltf_viewer' , required = True )
12090 parser .add_argument ('--output_dir' , help = 'Output Directory' , required = True )
12191 parser .add_argument ('--opengl_lib' , help = 'Path to the folder containing OpenGL driver lib (for LD_LIBRARY_PATH)' )
12292 parser .add_argument ('--vk_icd' , help = 'Path to VK ICD file' )
123- parser .add_argument ('--golden_branch' , help = 'Branch of the golden repo to compare against' )
12493
12594 args , _ = parser .parse_known_args (sys .argv [1 :])
126- test = parse_test_config_from_path (args .test )
95+ test = test_config . parse_from_path (args .test )
12796
12897 output_dir , results = \
129- run_test (args .gltf_viewer ,
130- test ,
131- args .output_dir ,
132- opengl_lib = args .opengl_lib ,
133- vk_icd = args .vk_icd )
134-
135- do_compare = False
136- # The presence of this argument indicates comparison against a set of goldens.
137- if args .golden_branch :
138- # prepare goldens working directory
139- tmp_golden_dir = '/tmp/renderdiff-goldens'
140- mkdir_p (tmp_golden_dir )
141-
142- # Download the golden repo into the current working directory
143- golden_manager = GoldenManager (os .getcwd ())
144- golden_manager .download_to (tmp_golden_dir , branch = args .golden_branch )
145-
146- goldens = {
147- os .path .basename (fpath ) : fpath for fpath in \
148- glob .glob (f'{ os .path .join (tmp_golden_dir , test .name )} /**/*.tif' , recursive = True )
149- }
150- results = compare_goldens (results , output_dir , goldens )
151- do_compare = True
152-
153- with open (f'{ output_dir } /results.json' , 'w' ) as f :
98+ _render_test_config (args .gltf_viewer ,
99+ test ,
100+ args .output_dir ,
101+ opengl_lib = args .opengl_lib ,
102+ vk_icd = args .vk_icd )
103+
104+ with open (f'{ output_dir } /render_results.json' , 'w' ) as f :
154105 f .write (json .dumps (results ))
155106
156107 shutil .copy2 (args .test , f'{ output_dir } /test.json' )
157108
158109 failed = [f" { k ['name' ]} " for k in results if k ['result' ] != RESULT_OK ]
159110 success_count = len (results ) - len (failed )
160- op = 'tested' if do_compare else 'rendered'
161- important_print (f'Successfully { op } { success_count } / { len (results )} ' +
162- ('\n Failed:\n ' + ('\n ' .join (failed )) if len (failed ) > 0 else '' ))
111+ important_print (f'Successfully rendered { success_count } / { len (results )} tests' +
112+ ('\n Failed:\n ' + ('\n ' .join (failed )) if len (failed ) > 0 else '' ))
113+
114+ if len (failed ) > 0 :
115+ exit (1 )
0 commit comments