示例#1
0
def test_get_tags_sap_system(patch_xjoin_post, api_get, subtests,
                             query_source_xjoin):
    patch_xjoin_post(
        response={"data": {
            "hostTags": {
                "meta": {
                    "total": 1
                },
                "data": []
            }
        }})

    values = ("true", "false", "nil", "not_nil")

    for value in values:
        with subtests.test(value=value):
            implicit_url = build_tags_url(
                query=f"?filter[system_profile][sap_system]={value}")
            eq_url = build_tags_url(
                query=f"?filter[system_profile][sap_system][eq]={value}")

            implicit_response_status, implicit_response_data = api_get(
                implicit_url)
            eq_response_status, eq_response_data = api_get(eq_url)

            assert_response_status(implicit_response_status, 200)
            assert_response_status(eq_response_status, 200)
            assert implicit_response_data["total"] == 1
            assert eq_response_data["total"] == 1
示例#2
0
def test_get_tags_sap_sids(patch_xjoin_post, api_get, subtests,
                           query_source_xjoin):
    patch_xjoin_post(
        response={"data": {
            "hostTags": {
                "meta": {
                    "total": 1
                },
                "data": []
            }
        }})

    filter_paths = ("[system_profile][sap_sids][]",
                    "[system_profile][sap_sids][contains][]")
    value_sets = (("ABC", ), ("BEN", "A72"), ("CDA", "MK2", "C2C"))

    for path in filter_paths:
        for values in value_sets:
            with subtests.test(values=values, path=path):
                url = build_tags_url(
                    query="?" +
                    "".join([f"filter{path}={value}&" for value in values]))

                response_status, response_data = api_get(url)

                assert_response_status(response_status, 200)
                assert response_data["total"] == 1
def test_tags_multiple_query_variables_staleness(
        culling_datetime_mock, query_source_xjoin,
        graphql_tag_query_empty_response, api_get):
    staleness = "fresh,stale_warning"
    url = build_tags_url(query=f"?staleness={staleness}")
    response_status, response_data = api_get(url)

    assert response_status == 200

    graphql_tag_query_empty_response.assert_called_once_with(
        TAGS_QUERY,
        {
            "order_by": "tag",
            "order_how": "ASC",
            "limit": 50,
            "offset": 0,
            "hostFilter": {
                "OR": [
                    {
                        "stale_timestamp": {
                            "gt": "2019-12-16T10:10:06.754201+00:00"
                        }
                    },
                    {
                        "stale_timestamp": {
                            "gt": "2019-12-02T10:10:06.754201+00:00",
                            "lte": "2019-12-09T10:10:06.754201+00:00",
                        }
                    },
                ]
            },
        },
    )
def test_query_variables_tags_simple(mocker, query_source_xjoin,
                                     graphql_tag_query_empty_response,
                                     api_get):
    url = build_tags_url(query="?tags=insights-client/os=fedora")
    response_status, response_data = api_get(url)

    assert response_status == 200

    graphql_tag_query_empty_response.assert_called_once_with(
        TAGS_QUERY,
        {
            "order_by": "tag",
            "order_how": "ASC",
            "limit": 50,
            "offset": 0,
            "hostFilter": {
                "OR":
                mocker.ANY,
                "AND": ({
                    "tag": {
                        "namespace": {
                            "eq": "insights-client"
                        },
                        "key": {
                            "eq": "os"
                        },
                        "value": {
                            "eq": "fedora"
                        }
                    }
                }, ),
            },
        },
    )
def test_tags_query_variables_registered_with(mocker, query_source_xjoin,
                                              graphql_tag_query_empty_response,
                                              api_get):
    url = build_tags_url(query="?registered_with=insights")
    response_status, response_data = api_get(url)

    assert response_status == 200

    graphql_tag_query_empty_response.assert_called_once_with(
        TAGS_QUERY,
        {
            "order_by": mocker.ANY,
            "order_how": mocker.ANY,
            "limit": mocker.ANY,
            "offset": mocker.ANY,
            "hostFilter": {
                "OR": mocker.ANY,
                "NOT": {
                    "insights_id": {
                        "eq": None
                    }
                }
            },
        },
    )
def test_tags_query_variables_search(mocker, query_source_xjoin,
                                     graphql_tag_query_empty_response,
                                     api_get):
    url = build_tags_url(query=f"?search={quote('Δwithčhar!/~|+ ')}")
    response_status, response_data = api_get(url)

    assert response_status == 200

    graphql_tag_query_empty_response.assert_called_once_with(
        TAGS_QUERY,
        {
            "order_by": "tag",
            "order_how": "ASC",
            "limit": 50,
            "offset": 0,
            "filter": {
                "search": {
                    "regex": ".*\\Δwith\\čhar\\!\\/\\~\\|\\+\\ .*"
                }
            },
            "hostFilter": {
                "OR": mocker.ANY
            },
        },
    )
def test_query_variables_tags_with_only_key(mocker, query_source_xjoin,
                                            graphql_tag_query_empty_response,
                                            api_get):
    url = build_tags_url(query="?tags=env")
    response_status, response_data = api_get(url)

    assert response_status == 200

    graphql_tag_query_empty_response.assert_called_once_with(
        TAGS_QUERY,
        {
            "order_by": "tag",
            "order_how": "ASC",
            "limit": 50,
            "offset": 0,
            "hostFilter": {
                "AND": ({
                    "tag": {
                        "namespace": {
                            "eq": None
                        },
                        "key": {
                            "eq": "env"
                        },
                        "value": {
                            "eq": None
                        }
                    }
                }, ),
                "OR":
                mocker.ANY,
            },
        },
    )
def test_query_variables_tags_with_special_characters_unescaped(
        mocker, query_source_xjoin, graphql_tag_query_empty_response, api_get):
    tags_query = quote(";?:@&+$/-_.!~*'()=#")
    url = build_tags_url(query=f"?tags={tags_query}")
    response_status, response_data = api_get(url)

    assert response_status == 200

    graphql_tag_query_empty_response.assert_called_once_with(
        TAGS_QUERY,
        {
            "order_by": "tag",
            "order_how": "ASC",
            "limit": 50,
            "offset": 0,
            "hostFilter": {
                "AND": ({
                    "tag": {
                        "namespace": {
                            "eq": ";?:@&+$"
                        },
                        "key": {
                            "eq": "-_.!~*'()"
                        },
                        "value": {
                            "eq": "#"
                        }
                    }
                }, ),
                "OR":
                mocker.ANY,
            },
        },
    )
def test_tags_response_pagination_index_error(mocker, query_source_xjoin,
                                              graphql_tag_query_with_response,
                                              api_get):
    url = build_tags_url(query="?per_page=2&page=3")
    response_status, response_data = api_get(url)

    assert response_status == 404

    graphql_tag_query_with_response.assert_called_once_with(
        TAGS_QUERY, {
            "order_by": "tag",
            "order_how": "ASC",
            "limit": 2,
            "offset": 4,
            "hostFilter": {
                "OR": mocker.ANY
            }
        })
def test_tags_response_pagination(page, limit, offset, mocker,
                                  query_source_xjoin,
                                  graphql_tag_query_empty_response, api_get):
    url = build_tags_url(query=f"?per_page={limit}&page={page}")
    response_status, response_data = api_get(url)

    assert response_status == 200

    graphql_tag_query_empty_response.assert_called_once_with(
        TAGS_QUERY,
        {
            "order_by": "tag",
            "order_how": "ASC",
            "limit": limit,
            "offset": offset,
            "hostFilter": {
                "OR": mocker.ANY
            }
        },
    )
def test_tags_query_variables_ordering_by(ordering, mocker, query_source_xjoin,
                                          graphql_tag_query_empty_response,
                                          api_get):
    url = build_tags_url(query=f"?order_by={ordering}")
    response_status, response_data = api_get(url)

    assert response_status == 200

    graphql_tag_query_empty_response.assert_called_once_with(
        TAGS_QUERY,
        {
            "order_by": ordering,
            "order_how": "ASC",
            "limit": 50,
            "offset": 0,
            "hostFilter": {
                "OR": mocker.ANY
            }
        },
    )
def test_get_list_of_tags_with_host_filters(patch_xjoin_post, query_source_xjoin, api_get, subtests):
    patch_xjoin_post(response={"data": {"hostTags": {"meta": {"total": 1}, "data": []}}})
    """
    Validate that the /tags endpoint doesn't break when we supply it with various filters.
    We test the actual xjoin call in test_xjoin.test_tags_query_host_filters.
    """
    for query in (
        "?display_name=test-example-host",
        "?fqdn=tagfilter.test.com",
        "?hostname_or_id=test-example-host",
        "?hostname_or_id=tagfilter.test.com",
        f"?insights_id={generate_uuid()}",
        f"?provider_id={generate_uuid()}",
        f"?provider_type={ProviderType.AZURE.value}",
    ):
        with subtests.test(query=query):
            url = build_tags_url(query=query)
            response_status, response_data = api_get(url)

            assert_response_status(response_status, 200)
            assert response_data["total"] == 1
def test_tags_query_variables_staleness(staleness, expected,
                                        culling_datetime_mock,
                                        query_source_xjoin,
                                        graphql_tag_query_empty_response,
                                        api_get):
    url = build_tags_url(query=f"?staleness={staleness}")
    response_status, response_data = api_get(url)

    assert response_status == 200

    graphql_tag_query_empty_response.assert_called_once_with(
        TAGS_QUERY,
        {
            "order_by": "tag",
            "order_how": "ASC",
            "limit": 50,
            "offset": 0,
            "hostFilter": {
                "OR": [{
                    "stale_timestamp": expected
                }]
            },
        },
    )
def test_tags_response_invalid_registered_with(api_get):
    url = build_tags_url(query="?registered_with=salad")
    response_status, response_data = api_get(url)

    assert response_status == 400
def test_tags_response_invalid_pagination(page, per_page, api_get):
    url = build_tags_url(query=f"?per_page={per_page}&page={page}")
    response_status, response_data = api_get(url)

    assert response_status == 400