コード例 #1
0
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
コード例 #2
0
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)
コード例 #3
0
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
        '*****@*****.**'
    ])
コード例 #4
0
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
            "*****@*****.**",
        ]
    )
コード例 #5
0
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
コード例 #6
0
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
コード例 #7
0
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
        '*****@*****.**'
    ])
コード例 #8
0
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
        "*****@*****.**",
    ])
コード例 #9
0
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"