def test_process_report_invalid(self): """Verifies the conformance validation for a single valid UGC block.""" invalid_rows = [ ['XX01', 'YY01'], # MW01 must be preceded by 'AS01' ['MW01', 'RU01', 'SU03'], ['AS02', 'MW01', 'MW01', 'RU01', 'SU03'], ] for invalid_row in invalid_rows: _write_block_to_queue(invalid_row) # Step 2: Read block from queue and perform validation. dsrf_xsd_file = path.join( path.dirname(__file__), '../testdata/profile_for_conformance.xsd') report_processor = conformance_processor.ConformanceReportProcessor( dsrf_xsd_file) # Need to set this manually since we're not passing a HEAD block. report_processor.profile_name = 'UgcProfile' expected_error = ( 'Expected structure:\nSequence (Sequence (Sequence ([Sequence (AS01 ' 'and MW01*) or AS02]+))+ and [RU01 or RU02]* and Sequence (SU03 and ' 'LI01*)*)\nActual structure:') try: report_processor.process_report() raise Exception('Row should be invalid but was not: %r' % invalid_row) except error.BlockConformanceFailure as e: self.assertIn(expected_error, str(e))
def test_process_report_valid(self): """Verifies the conformance validation for a single valid UGC block.""" valid_rows = [ ['AS01', 'MW01', 'RU01', 'SU03', 'LI01', 'LI01', 'LI01'], ['AS01', 'MW01', 'RU01', 'SU03', 'LI01', 'LI01'], ['AS01', 'MW01', 'RU02', 'SU03', 'LI01', 'LI01', 'LI01'], ['AS02'] * 15 + ['RU02'] * 2 + ['SU03'] * 6, ['AS01', 'MW01', 'RU01', 'SU03'], ['AS01', 'MW01', 'SU03', 'LI01', 'LI01', 'LI01'], ] for valid_row in valid_rows: # Step 1: Write the UGC Block to the "queue". _write_block_to_queue(valid_row) # Step 2: Read block from queue and perform validation. dsrf_xsd_file = path.join( path.dirname(__file__), '../testdata/profile_for_conformance.xsd') report_processor = conformance_processor.ConformanceReportProcessor( dsrf_xsd_file) # Need to set this manually since we're not passing a HEAD block. report_processor.profile_name = 'UgcProfile' nr_blocks_validated, nr_rows_validated = report_processor.process_report( ) self.assertEquals(nr_blocks_validated, 1) self.assertEquals(nr_rows_validated, len(valid_row))
def test_conformance_end2end_minoccurs_zero(self): """Tests the case where an element in a sequence may be omitted.""" self._parse_file( '../testdata/DSR_TEST2_YouTube_AdSupport-music_2015-Q4_IS_1of1_' '20160121T150926.tsv') report_processor = conformance_processor.ConformanceReportProcessor( UGC_XSD_1_0) sys.stdin = open('/tmp/queue.txt', 'rb') nr_blocks_validated, nr_rows_validated = report_processor.process_report( ) self.assertEquals(nr_blocks_validated, 4) self.assertEquals(nr_rows_validated, 20)
def test_conformance_end2end(self): """Tests the full flow, from tsv parsing to conformance validation.""" self._parse_file( '../testdata/DSR_TEST_YouTube_AdSupport-music_2015-Q4_IS_1of1_' '20160121T150926.tsv') report_processor = conformance_processor.ConformanceReportProcessor( UGC_XSD_1_0) sys.stdin = open('/tmp/queue.txt', 'rb') nr_blocks_validated, nr_rows_validated = report_processor.process_report( ) self.assertEquals(nr_blocks_validated, 4) self.assertEquals(nr_rows_validated, 21)