def _do_cross_table_consistency_check(project, date_start, date_end, date_step): """Performs sanity checks on all the time windows in the given range. Performs all BigSanity sanity checks on the M-Lab BigQuery tables for the given project and the given time range. Args: project: Numerical ID of M-Lab project in BigQuery (e.g. NDT = 0). date_start: Limits checks to M-Lab tests that occurred on or after this date. date_end: Limits checks to M-Lab tests that occurred before this date. """ checker = check_table_equivalence.TableEquivalenceChecker( query_construct.TableEquivalenceQueryGeneratorFactory(), query_execution.QueryExecutor()) check_windows = intervals.date_limits_to_intervals(date_start, date_end, date_step) logger.info('Total of %d time intervals to check.', len(check_windows)) anomalies_detected = 0 for date_range_start, date_range_end in check_windows: logger.info('Checking cross-table consistency for project=%d, %s -> %s', project, date_range_start.strftime(cli.DATE_FORMAT), date_range_end.strftime(cli.DATE_FORMAT)) check_result = checker.check(project, date_range_start, date_range_end) if not check_result.success: logger.error(check_result.message) anomalies_detected += 1 logger.info( ('Cross-table consistency check completed for project=%d, %s -> %s, ' 'with %d failures.'), project, date_start.strftime(cli.DATE_FORMAT), date_end.strftime(cli.DATE_FORMAT), anomalies_detected)
def test_date_limits_to_intervals_when_limit_is_exactly_one_interval(self): intervals_expected = [(datetime.datetime(2015, 1, 1), datetime.datetime(2015, 2, 1))] intervals_actual = intervals.date_limits_to_intervals( datetime.datetime(2015, 1, 1), datetime.datetime(2015, 2, 1), relativedelta.relativedelta(months=1)) self.assertSequenceEqual(intervals_expected, intervals_actual)
def test_date_limits_to_intervals_when_limit_is_less_than_one_interval( self): """Intervals should never extend past the end date.""" intervals_expected = [(datetime.datetime(2015, 1, 1), datetime.datetime(2015, 1, 21))] intervals_actual = intervals.date_limits_to_intervals( datetime.datetime(2015, 1, 1), datetime.datetime(2015, 1, 21), relativedelta.relativedelta(months=1)) self.assertSequenceEqual(intervals_expected, intervals_actual)