class SquadTest(unittest.TestCase): def setUp(self): self.squad = Squad() def test_groups(self): groups = self.squad.groups() self.assertTrue(True, len(groups)) def test_not_found_groups(self): groups = self.squad.groups(name__startswith='no group with this name') self.assertEqual(0, len(groups)) def test_groups_with_count(self): all_groups = self.squad.groups(count=ALL) self.assertEqual(2, len(all_groups)) one_groups = self.squad.groups(count=1) self.assertEqual(1, len(one_groups)) def test_not_found_group(self): not_found_group = self.squad.group('this-group-does-not-really-exist') self.assertEqual(None, not_found_group) def test_group(self): group = self.squad.group('my_group') self.assertTrue(group is not None) def test_projects(self): projects = self.squad.projects() self.assertTrue(True, len(projects)) def test_builds(self): builds = self.squad.builds() self.assertTrue(True, len(builds)) def test_testjobs(self): testjobs = self.squad.testjobs() self.assertTrue(True, len(testjobs)) def test_testruns(self): testruns = self.squad.testruns() self.assertTrue(True, len(testruns)) def test_tests(self): tests = self.squad.tests() self.assertTrue(True, len(tests)) def test_suites(self): suites = self.squad.suites() self.assertTrue(True, len(suites)) def test_environments(self): environments = self.squad.environments() self.assertTrue(True, len(environments)) def test_backends(self): backends = self.squad.backends() self.assertTrue(True, len(backends)) def test_emailtemplates(self): emailtemplates = self.squad.emailtemplates() self.assertTrue(True, len(emailtemplates)) def test_knownissues(self): knownissues = self.squad.knownissues() self.assertTrue(True, len(knownissues)) def test_suitemetadata(self): suitemetadata = self.squad.suitemetadata() self.assertTrue(True, len(suitemetadata)) def test_annotations(self): annotations = self.squad.annotations() self.assertTrue(True, len(annotations)) def test_metricthresholds(self): metricthresholds = self.squad.metricthresholds() self.assertTrue(True, len(metricthresholds)) def test_reports(self): reports = self.squad.reports() self.assertTrue(True, len(reports))
def main(args): # Some configuration, might get parameterized later group_slug = args.get('group', None) suite_slug = args.get('suite', None) SquadApi.configure(args.get('squadapi_url', None)) number_of_builds = args.get('number', None) squad = Squad() getid = lambda s: int(re.search('\d+', s).group()) # First we need to know which projects from the selected group # contain the specified suite. print('Fetching projects that contain "%s" suites for "%s" group' % (suite_slug, group_slug), flush=True) suites = squad.suites(slug=suite_slug, project__group__slug=group_slug) projects_ids = list( set([str(getid(suite.project)) for suite in suites.values()])) projects = squad.projects(id__in=','.join(projects_ids), ordering='slug').values() # Env/arch cache environments = set() # Table will be layed out like below # table = { # 'kernelA': { # 'buildA': { # 'summary': { # 'envA': {'pass': 1, 'fail': 2, 'skip': 3}, # 'envB': {'pass': 1, 'fail': 2, 'skip': 3}, # } # 'envA': [ # {'kunit/test1': 'pass'} # {'kunit/test2': 'fail'} # ] # }, # } # } table = {} if number_of_builds == "0": for project in projects: print('- %s' % project.slug, flush=True) return for project in projects: print('- %s: fetching %s builds' % (project.slug, number_of_builds), flush=True) environments = project.environments(count=ALL) for build in project.builds(count=int(number_of_builds), ordering='-id').values(): print(' - %s: fetching tests' % build.version, flush=True) results = {'summary': defaultdict(dict)} for test in build.tests(suite__slug=suite_slug).values(): env = environments[getid(test.environment)].slug if test.status not in results['summary'][env]: results['summary'][env][test.status] = 0 results['summary'][env][test.status] += 1 if env not in results: results[env] = [] results[env].append((test.name, test.status)) if len(results['summary']): print(' - summary:', flush=True) summary = results.pop('summary') for env in sorted(summary.keys()): print(' - %s: %s' % (env, summary[env]), flush=True) for env in sorted(results.keys()): print(' - %s:' % env, flush=True) for test in sorted(results[env], key=lambda d: d[0]): print(' - %s: %s' % (test[0], test[1]), flush=True)