def test_improper_metrics_repo(improper_metrics_repo): runner.main( cache_dir, out_dir, None, None, False, True, repositories_file, True, None, None, None, None, "dev", ) path = os.path.join(out_dir, "glean", improper_repo_name, "metrics") with open(path, "r") as data: metrics = json.load(data) # should be empty output, since it was an improper file assert not metrics with open(EMAIL_FILE, "r") as email_file: emails = yaml.load(email_file, Loader=yaml.FullLoader) # should send 1 email assert len(emails) == 1
def test_normal_repo(normal_repo): runner.main(cache_dir, out_dir, False, True, repositories_file, True) path = "{out_dir}/{repo_name}/mobile-metrics/all_probes".format( out_dir=out_dir, repo_name=normal_repo_name) with open(path, 'r') as data: scalars = json.load(data) # there are 2 scalars assert len(scalars) == 2 bool_id = 'scalar/example.boolean_kind' str_id = 'scalar/example.string_kind' # they each have one definition assert len(scalars[bool_id][HISTORY_KEY][normal_repo_name]) == 1 assert len(scalars[str_id][HISTORY_KEY][normal_repo_name]) == 1 # this was in 2 commits assert len( set(scalars[bool_id][HISTORY_KEY][normal_repo_name][0] [COMMITS_KEY].values())) == 1 # this was in 1 commit assert len( set(scalars[str_id][HISTORY_KEY][normal_repo_name][0] [COMMITS_KEY].values())) == 2 # There should have been no errors assert not os.path.exists(EMAIL_FILE)
def test_check_for_expired_metrics(expired_repo): repositories_info = { expired_repo_name: { "app_id": "expired_app_name", "notification_emails": ["*****@*****.**"], "url": expired_repo, "metrics_files": ["metrics.yaml"], }, } with open(repositories_file, "w") as f: f.write(yaml.dump(repositories_info)) runner.main(cache_dir, out_dir, None, None, False, True, repositories_file, True, None, None) with open(EMAIL_FILE, 'r') as email_file: emails = yaml.load(email_file) # should send 1 email assert len(emails) == 1 assert "example.duration on 2019-01-01" in emails[0]['body'] assert set(emails[0]['recipients'].split(',')) == set([ # Metrics owners '*****@*****.**', # Repo owners '*****@*****.**', # Everything goes here '*****@*****.**' ])
def test_check_for_expired_metrics(expired_repo): repositories_info = { expired_repo_name: { "app_id": "expired-app-name", "description": "foo", "notification_emails": ["*****@*****.**"], "url": expired_repo, "metrics_files": ["metrics.yaml"], }, } with open(repositories_file, "w") as f: f.write(yaml.dump(repositories_info)) # Mock `datetime.date.today` so it's a Monday, the only day that # expirations are checked. class MockDate(datetime.date): @classmethod def today(cls): return datetime.date(2019, 10, 14) with unittest.mock.patch("probe_scraper.glean_checks.datetime.date", new=MockDate): runner.main( cache_dir, out_dir, None, None, False, True, repositories_file, True, None, None, None, None, "dev", ) with open(EMAIL_FILE, "r") as email_file: emails = yaml.load(email_file, Loader=yaml.FullLoader) # should send 1 email assert len(emails) == 1 assert "example.duration on 2019-01-01" in emails[0]["body"] assert set(emails[0]["recipients"].split(",")) == set( [ # Metrics owners "*****@*****.**", # Repo owners "*****@*****.**", # Everything goes here "*****@*****.**", ] )
def test_repo_default_main_branch(main_repo): runner.main( cache_dir, out_dir, None, None, False, True, repositories_file, True, None, None, None, None, "dev", ) path = os.path.join(out_dir, "glean", normal_repo_name, "metrics") with open(path, "r") as data: metrics = json.load(data) # there are 2 metrics assert len(metrics) == 2 duration = "example.duration" os_metric = "example.os" # duration has 2 definitions assert len(metrics[duration][HISTORY_KEY]) == 2 # os has 3 definitions assert len(metrics[os_metric][HISTORY_KEY]) == 3 # duration same begin/end commits for first history entry assert len(set( metrics[duration][HISTORY_KEY][0][COMMITS_KEY].values())) == 1 # duration same begin/end commits for first history entry assert len(set( metrics[duration][HISTORY_KEY][1][COMMITS_KEY].values())) == 2 # os was in 1 commit assert len(set( metrics[os_metric][HISTORY_KEY][0][COMMITS_KEY].values())) == 1 # There should have been no errors assert not Path(EMAIL_FILE).exists() path = os.path.join(out_dir, "glean", normal_repo_name, "dependencies") with open(path, "r") as data: dependencies = json.load(data) assert len(dependencies) == 2
def test_improper_scalar_repo(improper_scalar_repo): runner.main(cache_dir, out_dir, False, True, repositories_file, True) # should be no output, since it was an improper file scalar_path = "{out_dir}/{repo_name}/mobile-metrics/all_probes".format( out_dir=out_dir, repo_name=normal_repo_name) assert not os.path.exists(scalar_path) with open(EMAIL_FILE, 'r') as email_file: emails = yaml.load(email_file) # should send 1 email assert len(emails) == 1
def test_check_for_duplicate_metrics(normal_duplicate_repo, duplicate_repo): repositories_info = { normal_repo_name: { "app_id": "normal-app-name", "notification_emails": ["*****@*****.**"], "url": normal_duplicate_repo, "metrics_files": ["metrics.yaml"], "dependencies": ["duplicate_library"] }, duplicate_repo_name: { "app_id": "duplicate-library-name", "notification_emails": ["*****@*****.**"], "url": duplicate_repo, "metrics_files": ["metrics.yaml"], "library_names": ["duplicate_library"] } } with open(repositories_file, "w") as f: f.write(yaml.dump(repositories_info)) try: runner.main(cache_dir, out_dir, None, None, False, True, repositories_file, True, None, None, None, None, 'dev') except ValueError: pass else: assert False, "Expected exception" with open(EMAIL_FILE, 'r') as email_file: emails = yaml.load(email_file, Loader=yaml.FullLoader) # should send 1 email assert len(emails) == 1 assert "'example.duration' defined more than once" in emails[0]['body'] assert "example.os" not in emails[0]['body'] assert set(emails[0]['recipients'].split(',')) == set([ # Metrics owners '*****@*****.**', '*****@*****.**', '*****@*****.**', # Repo owners '*****@*****.**', '*****@*****.**', # Everything goes here '*****@*****.**' ])
def test_check_for_duplicate_metrics(normal_duplicate_repo, duplicate_repo): repositories_info = { "version": "2", "libraries": [ { "v1_name": "mylib", "description": "foo", "notification_emails": ["*****@*****.**"], "url": normal_duplicate_repo, "metrics_files": ["metrics.yaml"], "library_names": ["duplicate_library"], }, ], "applications": [{ "app_name": "duplicate_metrics_example", "canonical_app_name": "Duplicate Metrics Example", "app_description": "foo", "url": duplicate_repo, "notification_emails": ["*****@*****.**"], "metrics_files": ["metrics.yaml"], "dependencies": [ "duplicate_library", ], "channels": [{ "v1_name": normal_repo_name, "app_id": "normal-app-name", "app_channel": "release", }], }], } with open(repositories_file, "w") as f: f.write(yaml.dump(repositories_info)) try: runner.main( cache_dir, out_dir, None, None, False, True, repositories_file, True, None, None, None, None, "dev", ) except ValueError: pass else: assert False, "Expected exception" with open(EMAIL_FILE, "r") as email_file: emails = yaml.load(email_file, Loader=yaml.FullLoader) # should send 1 email assert len(emails) == 1 assert "'example.duration' defined more than once" in emails[0]["body"] assert "example.os" not in emails[0]["body"] assert set(emails[0]["recipients"].split(",")) == set([ # Metrics owners "*****@*****.**", "*****@*****.**", "*****@*****.**", # Repo owners "*****@*****.**", "*****@*****.**", # Everything goes here "*****@*****.**", ])
def test_normal_repo(normal_repo): runner.main( cache_dir, out_dir, None, None, False, True, repositories_file, True, None, None, None, None, "dev", ) path = os.path.join(out_dir, "glean", normal_repo_name, "metrics") with open(path, "r") as data: metrics = json.load(data) # there are 2 metrics assert len(metrics) == 2 duration = "example.duration" os_metric = "example.os" # duration has 2 definitions assert len(metrics[duration][HISTORY_KEY]) == 2 # os has 3 definitions assert len(metrics[os_metric][HISTORY_KEY]) == 3 # duration same begin/end commits for first history entry assert len(set( metrics[duration][HISTORY_KEY][0][COMMITS_KEY].values())) == 1 # duration same begin/end commits for first history entry assert len(set( metrics[duration][HISTORY_KEY][1][COMMITS_KEY].values())) == 2 # os was in 1 commit assert len(set( metrics[os_metric][HISTORY_KEY][0][COMMITS_KEY].values())) == 1 # There should have been no errors assert not Path(EMAIL_FILE).exists() path = os.path.join(out_dir, "glean", normal_repo_name, "dependencies") with open(path, "r") as data: dependencies = json.load(data) assert len(dependencies) == 2 path = os.path.join(out_dir, "v2", "glean", "app-listings") with open(path, "r") as data: applications = json.load(data) # /v2/glean/app-listings excludes libraries assert len(applications) == 1 # /v2/glean/app-listings includes derived fields assert applications[0]["document_namespace"] == "normal-app-name" assert applications[0]["bq_dataset_family"] == "normal_app_name"