def __init__(self, avs_name, main_hash, extra_hash_table={}): '''Parameters: avs_name: pathname of script to open main_hash: expected hashsum of main output extra_hash_table: ''' if not isinstance(avs_name, str): raise ValueError('avs_name must be a str') elif not isinstance(main_hash, str): raise ValueError('main_hash must be a str') elif not isinstance(extra_hash_table, dict): raise ValueError('extra_hash_table must be a dict') self.avs_name = avs_name self.main_hash = main_hash self.extra_hash_table = extra_hash_table self.frameserver = AvxFrameServer(self.avs_name, self.extra_hash_table.keys()) self.results = [None, {}] self.complete = False
class AvxUnitTest(object): '''AvxUnitTest: Controls evaluation of a test script and compares output to reference ''' def __init__(self, avs_name, main_hash, extra_hash_table={}): '''Parameters: avs_name: pathname of script to open main_hash: expected hashsum of main output extra_hash_table: ''' if not isinstance(avs_name, str): raise ValueError('avs_name must be a str') elif not isinstance(main_hash, str): raise ValueError('main_hash must be a str') elif not isinstance(extra_hash_table, dict): raise ValueError('extra_hash_table must be a dict') self.avs_name = avs_name self.main_hash = main_hash self.extra_hash_table = extra_hash_table self.frameserver = AvxFrameServer(self.avs_name, self.extra_hash_table.keys()) self.results = [None, {}] self.complete = False def run(self): '''Evalute script. Check the status of self.complete first.''' self.frameserver.run() self.results = self.frameserver.query_results() self.complete = True def check_results(self): '''Checks results against main_hash and extra_hash_table. Returns a list of all files with non-matching hashes. Check the status of self.complete first.''' if not self.complete: raise AvxNotReadyError('unit test has not yet executed') not_valid_files = [] # Results format: [main_hash, {extra_file_1:extra_hash_1, ...}] if self.main_hash != self.results[0]: not_valid_files.append('AVX_FRAMESERVER_OUTPUT') for i in self.extra_hash_table: if self.extra_hash_table[i] != self.results[1][i]: not_valid_files.append(i) return not_valid_files def test_file_format(self): '''Returns a string suitable for writing to a test suite file. Check the status of self.complete first.''' if not self.complete: raise AvxNotReadyError('unit test has not yet executed') # Format: SCRIPT,avs_name,hash OR extra_file_name,hash file_str = ['SCRIPT,"{0}",{1}'.format(self.avs_name, self.results[0])] for i in self.extra_hash_table: file_str.append('"{0}",{1}'.format(i, self.results[1][i])) return '\n'.join(file_str) def cleanup(self): '''Delete generated files listed in self.extra_hash_table and reset self.complete''' self.frameserver.cleanup() self.results = [None, {}] self.complete = False