def test_get_metrics_data_with_parameters(
    client, mtm, ptm, plm, monkeypatch
    ):
    """
    Test metrics data retrieval with all available query parameters.
    """

    setup_data = setup_pushlog_walk_tests(mtm, ptm, plm, monkeypatch, True)

    metric_values = get_metric_values()

    sample_data = TestData(perftest_data())

    sample_data['test_build']['branch'] = setup_data['branch']
    parameters = _get_uri_parameters(sample_data)

    fail_revision = setup_data['fail_revision']
    skip_revision = setup_data['skip_revision']

    revision = setup_data['sample_revisions'][3]

    uri = "/{0}/testdata/metrics/{1}/{2}".format(
        ptm.project, setup_data['branch'], revision
        )

    reference_response = client.get(uri)

    for params in parameters:

        uri_with_params = "{0}?{1}".format(
            uri, params['query_params']
            )
        fail_uri_with_params = "{0}?{1}".format(
            uri, params['fail_params']
            )

        success_response = client.get(uri_with_params)
        fail_response = client.get(fail_uri_with_params)

        if 'page_name' in params['query_params']:

            page_sample = reference_response.json[0].copy()
            page_filter = page_sample['pages']['three.com']
            page_sample['pages'] = { 'three.com':page_filter }

            assert success_response.json[0] == page_sample

            #Failed page result will return the rest of the
            #data associated with the test but results will be
            #empty
            assert fail_response.json == []

        else:

            assert success_response.json[0] == reference_response.json[0]
            assert fail_response.json == []
def test_get_test_data_parameters(client, ptm):
    """
    Test raw test data retrieval with all available query parameters.
    """

    sample_data = TestData(perftest_data())
    revision = sample_data['test_build']['revision']
    branch = sample_data['test_build']['branch']

    uri = "/{0}/testdata/raw/{1}/{2}".format(ptm.project, branch, revision)

    #Store and process object
    ptm.store_test_data( json.dumps( sample_data ) )
    ptm.process_objects(1)

    parameters = _get_uri_parameters(sample_data)

    for params in parameters:

        uri_with_params = "{0}?{1}".format(
            uri, params['query_params']
            )
        fail_uri_with_params = "{0}?{1}".format(
            uri, params['fail_params']
            )

        success_response = client.get(uri_with_params)
        fail_response = client.get(fail_uri_with_params)

        if 'page_name' in params['query_params']:

            #page name filter will only return the pages that match
            #the page name specified.  Build a sample data structure
            #that matches.
            page_sample = sample_data.copy()
            page_filter = sample_data['results']['three.com']
            page_sample['results'] = { 'three.com':page_filter }

            assert success_response.json[0] == page_sample

            #Failed page result will return the rest of the
            #data associated with the test but results will be
            #empty
            assert fail_response.json[0]['results'] == {}

        else:
            assert success_response.json[0] == sample_data
            assert fail_response.json == []
def test_get_metrics_summary_with_parameters(
    client, mtm, ptm, plm, monkeypatch
    ):
    """
    Test the metrics data summary with all available query parameters.
    """

    setup_data = setup_pushlog_walk_tests(mtm, ptm, plm, monkeypatch, True)

    metric_values = get_metric_values()

    sample_data = TestData(perftest_data())

    sample_data['test_build']['branch'] = setup_data['branch']
    parameters = _get_uri_parameters(sample_data)

    fail_revision = setup_data['fail_revision']
    skip_revision = setup_data['skip_revision']

    revision = setup_data['sample_revisions'][3]

    uri = ("/{0}/testdata/metrics/{1}/{2}/summary?"
           "product=Firefox&pushlog_project={3}")

    uri = uri.format(
        ptm.project, setup_data['branch'], revision, plm.project
        )

    reference_response = client.get(uri)

    for params in parameters:

        if 'page_name' in params['query_params']:
            continue

        uri_with_params = "{0}&{1}".format(
            uri, params['query_params']
            )
        fail_uri_with_params = "{0}&{1}".format(
            uri, params['fail_params']
            )

        success_response = client.get(uri_with_params)
        fail_response = client.get(fail_uri_with_params)

        assert success_response.json.keys() == reference_response.json.keys()
        assert 'summary' not in fail_response.json
def test_get_test_data(client, ptm):
    """
    Test raw test data retrieval through the web service
    """

    sample_data = TestData(perftest_data())
    revision = sample_data['test_build']['revision']
    branch = sample_data['test_build']['branch']

    uri = "/{0}/testdata/raw/{1}/{2}".format(ptm.project, branch, revision)

    #Store and process object
    ptm.store_test_data( json.dumps( sample_data ) )
    ptm.process_objects(1)

    response = client.get(uri)

    assert response.json[0] == sample_data