def test_get_site_success(client, connector) -> None:
    # given
    get_response_payload = """
    {
        "site": {
            "id": 42,
            "site_name": "apitest-site-1",
            "lat": 54.349276,
            "lon": 18.659577,
            "company_id": 3250
        }
    }"""
    connector.response_text = get_response_payload
    connector.response_code = HTTPStatus.OK

    # when
    site_id = ID(42)
    site = client.sites.get(site_id)

    # then request properly formed
    assert connector.last_url_path == f"/site/{site_id}"
    assert connector.last_method == APICallMethods.GET
    assert connector.last_payload is None

    # then response properly parsed
    assert site.id == ID(42)
    assert site.site_name == "apitest-site-1"
    assert site.latitude == 54.349276
    assert site.longitude == 18.659577
    assert site.company_id == ID(3250)
def test_create_site_success(client, connector) -> None:
    # given
    create_response_payload = """
    {
        "site": {
            "id": 42,
            "site_name": "apitest-site-1",
            "lat": 54.349276,
            "lon": 18.659577,
            "company_id": "3250"
        }
    }"""
    connector.response_text = create_response_payload
    connector.response_code = HTTPStatus.CREATED

    # when
    site = Site("apitest-site-1", 54.349276, 18.659577)
    created = client.sites.create(site)

    # then request properly formed
    assert connector.last_url_path == "/site"
    assert connector.last_method == APICallMethods.POST
    assert connector.last_payload is not None
    assert "site" in connector.last_payload
    assert connector.last_payload["site"]["site_name"] == "apitest-site-1"
    assert connector.last_payload["site"]["lat"] == 54.349276
    assert connector.last_payload["site"]["lon"] == 18.659577

    # and response properly parsed
    assert created.id == ID(42)
    assert created.site_name == "apitest-site-1"
    assert created.latitude == 54.349276
    assert created.longitude == 18.659577
    assert created.company_id == ID(3250)
def test_create_tenant_user_success(client, connector) -> None:
    # given
    create_response_payload = """
    {
        "id":"148148",
        "user_email":"*****@*****.**",
        "last_login":null,
        "tenant_id":"577",
        "company_id":"74333"
    }"""
    connector.response_text = create_response_payload
    connector.response_code = HTTPStatus.OK

    # when
    to_create_email = "*****@*****.**"
    tenant_id = ID(577)
    created = client.my_kentik_portal.create_tenant_user(tenant_id, to_create_email)

    # then
    assert connector.last_url_path == "/mykentik/tenant/577/user"
    assert connector.last_method == APICallMethods.POST
    assert connector.last_payload is not None
    assert connector.last_payload["user"]["user_email"] == "*****@*****.**"

    assert created.id == ID(148148)
    assert created.email == "*****@*****.**"
    assert created.last_login is None
    assert created.tenant_id == ID(577)
    assert created.company_id == ID(74333)
def test_update_site_success(client, connector) -> None:
    # given
    update_response_payload = """
    {
        "site": {
            "id": "42",
            "site_name": "new-site",
            "lat": -15.0,
            "lon": -45.0,
            "company_id": "3250"
        }
    }"""
    connector.response_text = update_response_payload
    connector.response_code = HTTPStatus.OK

    # when
    site_id = ID(42)
    site = Site(site_name="new-site", latitude=None, longitude=-45.0, id=site_id)
    updated = client.sites.update(site)

    # then request properly formed
    assert connector.last_url_path == f"/site/{site_id}"
    assert connector.last_method == APICallMethods.PUT
    assert connector.last_payload is not None
    assert "site" in connector.last_payload
    assert connector.last_payload["site"]["site_name"] == "new-site"
    assert connector.last_payload["site"]["lon"] == -45.0
    assert "lat" not in connector.last_payload["site"]

    # then response properly parsed
    assert updated.id == ID(42)
    assert updated.site_name == "new-site"
    assert updated.latitude == -15.0
    assert updated.longitude == -45.0
    assert updated.company_id == ID(3250)
Example #5
0
def test_get_all_custom_applications_success() -> None:
    # given
    get_response_payload = """
    [
        {
            "id": 42,
            "company_id": "74333",
            "user_id": "144319",
            "name": "apitest-customapp-1",
            "description": "TESTING CUSTOM APPS 1",
            "ip_range": "192.168.0.1,192.168.0.2",
            "protocol": "6,17",
            "port": "9001,9002,9003",
            "asn": "asn1,asn2,asn3",
            "cdate": "2020-12-11T07:07:20.968Z",
            "edate": "2020-12-11T07:07:20.968Z"
        },
        {
            "id": 43,
            "company_id": "74333",
            "user_id": "144319",
            "name": "apitest-customapp-2",
            "description": "TESTING CUSTOM APPS 2",
            "ip_range": "192.168.0.3,192.168.0.4",
            "protocol": "6,17",
            "port": "9011,9012,9013",
            "asn": "asn4,asn5,asn6",
            "cdate": "2020-12-11T07:08:20.968Z",
            "edate": "2020-12-11T07:08:20.968Z"
        }
    ]"""
    connector = StubAPIConnector(get_response_payload, HTTPStatus.OK)
    custom_applications_api = CustomApplicationsAPI(connector)

    # when
    apps = custom_applications_api.get_all()

    # then request properly formed
    assert connector.last_url_path == "/customApplications"
    assert connector.last_method == APICallMethods.GET
    assert connector.last_payload is None

    # and response properly parsed
    assert len(apps) == 2
    assert apps[1].id == ID(43)
    assert apps[1].company_id == ID(74333)
    assert apps[1].user_id == ID(144319)
    assert apps[1].name == "apitest-customapp-2"
    assert apps[1].description == "TESTING CUSTOM APPS 2"
    assert apps[1].ip_range == "192.168.0.3,192.168.0.4"
    assert apps[1].protocol == "6,17"
    assert apps[1].port == "9011,9012,9013"
    assert apps[1].asn == "asn4,asn5,asn6"
    assert apps[1].created_date == "2020-12-11T07:08:20.968Z"
    assert apps[1].updated_date == "2020-12-11T07:08:20.968Z"
def test_create_user_success(client, connector) -> None:
    # given
    create_response_payload = """
    {
        "user": {
                    "id":"145985",
                    "username":"******",
                    "user_full_name":"Test User",
                    "user_email":"*****@*****.**",
                    "role":"Member",
                    "email_service":"true",
                    "email_product":"true",
                    "last_login":null,
                    "created_date":"2020-12-09T14:33:28.330Z",
                    "updated_date":"2020-12-09T14:33:28.369Z",
                    "company_id":"74333",
                    "user_api_token":null,
                    "filters":{},
                    "saved_filters":[]
                }
    }"""
    connector.response_text = create_response_payload
    connector.response_code = HTTPStatus.CREATED

    # when
    user = User(full_name="Test User",
                email="*****@*****.**",
                role="Member",
                email_service=True,
                email_product=True)
    created = client.users.create(user)

    # then request properly formed
    assert connector.last_url_path == "/user"
    assert connector.last_method == APICallMethods.POST
    assert connector.last_payload is not None
    assert "user" in connector.last_payload
    assert connector.last_payload["user"]["user_full_name"] == "Test User"
    assert connector.last_payload["user"]["user_email"] == "*****@*****.**"
    assert connector.last_payload["user"]["role"] == "Member"
    assert connector.last_payload["user"]["email_service"] is True
    assert connector.last_payload["user"]["email_product"] is True

    # and response properly parsed
    assert created.id == ID(145985)
    assert created.username == "*****@*****.**"
    assert created.full_name == "Test User"
    assert created.email == "*****@*****.**"
    assert created.company_id == ID(74333)
    assert created.role == "Member"
    assert created.password is None
    assert created.email_service is True
    assert created.email_product is True
    assert created.api_token is None
Example #7
0
def test_update_custom_application_success() -> None:
    # given
    update_response_payload = """
    {
        "id": 207,
        "company_id": "74333",
        "user_id": "144319",
        "name": "apitest-customapp-one",
        "description": "TESTING CUSTOM APPS",
        "ip_range": "192.168.5.1,192.168.5.2",
        "protocol": "6,17",
        "port": "9011,9012,9013",
        "asn": "asn1,asn2,asn3",
        "cdate": "2020-12-11T07:07:20.968Z",
        "edate": "2020-12-11T07:07:20.968Z"
    }"""
    connector = StubAPIConnector(update_response_payload, HTTPStatus.OK)
    custom_applications_api = CustomApplicationsAPI(connector)

    # when
    app_id = ID(207)
    app = CustomApplication(
        id=app_id,
        name="apitest-customapp-one",
        description="TESTING CUSTOM APPS",
        ip_range="192.168.5.1,192.168.5.2",
        port="9011,9012,9013",
    )
    updated = custom_applications_api.update(app)

    # then request properly formed
    assert connector.last_url_path == f"/customApplications/{app_id}"
    assert connector.last_method == APICallMethods.PUT
    assert connector.last_payload is not None
    assert connector.last_payload["name"] == "apitest-customapp-one"
    assert connector.last_payload["description"] == "TESTING CUSTOM APPS"
    assert connector.last_payload["ip_range"] == "192.168.5.1,192.168.5.2"
    assert connector.last_payload["port"] == "9011,9012,9013"
    assert "protocol" not in connector.last_payload
    assert "asn" not in connector.last_payload

    # and response properly parsed
    assert updated.name == "apitest-customapp-one"
    assert updated.description == "TESTING CUSTOM APPS"
    assert updated.ip_range == "192.168.5.1,192.168.5.2"
    assert updated.protocol == "6,17"
    assert updated.port == "9011,9012,9013"
    assert updated.asn == "asn1,asn2,asn3"
    assert updated.id == ID(207)
    assert updated.user_id == ID(144319)
    assert updated.company_id == ID(74333)
    assert updated.created_date == "2020-12-11T07:07:20.968Z"
    assert updated.updated_date == "2020-12-11T07:07:20.968Z"
def test_get_saved_filter_success(client, connector) -> None:
    # given
    get_response_payload = """
        {
            "id":8153,
            "company_id":"74333",
            "filters":{
                    "connector":"All",
                    "filterGroups":[
                        {
                            "connector":"All",
                            "filters":[{
                                    "filterField":"dst_as",
                                    "filterValue":"81",
                                    "operator":"="
                                }],
                            "not":false
                        }]
                },
            "filter_name":"test_filter1",
            "filter_description":"This is test filter description",
            "cdate":"2020-12-16T11:26:18.578Z",
            "edate":"2020-12-26T11:26:19.187Z",
            "filter_level":"company"
        }"""
    connector.response_text = get_response_payload
    connector.response_code = HTTPStatus.OK
    filter_id = ID(8153)

    # when
    saved_filter = client.saved_filters.get(filter_id)

    # then
    assert connector.last_url_path == f"/saved-filter/custom/{filter_id}"
    assert connector.last_method == APICallMethods.GET
    assert connector.last_payload is None

    assert saved_filter.id == ID(8153)
    assert saved_filter.filter_name == "test_filter1"
    assert saved_filter.filter_description == "This is test filter description"
    assert saved_filter.company_id == ID(74333)
    assert saved_filter.filter_level == "company"
    assert saved_filter.created_date == "2020-12-16T11:26:18.578Z"
    assert saved_filter.updated_date == "2020-12-26T11:26:19.187Z"
    assert saved_filter.filters.connector == "All"
    assert saved_filter.filters.filterGroups[0].connector == "All"
    assert saved_filter.filters.filterGroups[0].not_ is False
    assert saved_filter.filters.filterGroups[0].filters[
        0].filterField == "dst_as"
    assert saved_filter.filters.filterGroups[0].filters[0].filterValue == "81"
    assert saved_filter.filters.filterGroups[0].filters[0].operator == "="
Example #9
0
def test_create_custom_application_success() -> None:
    # given
    create_response_payload = """
    {
        "name": "apitest-customapp-1",
        "description": "Testing custom application api",
        "ip_range": "192.168.0.1,192.168.0.2",
        "protocol": "6,17",
        "port": "9001,9002,9003",
        "asn": "asn1,asn2,asn3",
        "id": 207,
        "user_id": "144319",
        "company_id": "74333"
    }"""
    connector = StubAPIConnector(create_response_payload, HTTPStatus.OK)
    custom_applications_api = CustomApplicationsAPI(connector)

    # when
    app = CustomApplication(
        name="apitest-customapp-1",
        description="Testing custom application api",
        ip_range="192.168.0.1,192.168.0.2",
        protocol="6,17",
        port="9001,9002,9003",
        asn="asn1,asn2,asn3",
    )
    created = custom_applications_api.create(app)

    # then request properly formed
    assert connector.last_url_path == "/customApplications"
    assert connector.last_method == APICallMethods.POST
    assert connector.last_payload is not None
    assert connector.last_payload["name"] == "apitest-customapp-1"
    assert connector.last_payload[
        "description"] == "Testing custom application api"
    assert connector.last_payload["ip_range"] == "192.168.0.1,192.168.0.2"
    assert connector.last_payload["protocol"] == "6,17"
    assert connector.last_payload["port"] == "9001,9002,9003"
    assert connector.last_payload["asn"] == "asn1,asn2,asn3"

    # and response properly parsed
    assert created.name == "apitest-customapp-1"
    assert created.description == "Testing custom application api"
    assert created.ip_range == "192.168.0.1,192.168.0.2"
    assert created.protocol == "6,17"
    assert created.port == "9001,9002,9003"
    assert created.asn == "asn1,asn2,asn3"
    assert created.id == ID(207)
    assert created.user_id == ID(144319)
    assert created.company_id == ID(74333)
def test_delete_tenant_user_success(client, connector) -> None:
    # given
    delete_response_payload = ""  # deleting user responds with empty body
    connector.response_text = delete_response_payload
    connector.response_code = HTTPStatus.NO_CONTENT

    # when
    tenant_id = ID(577)
    tenant_user_id = ID(148099)
    delete_successful = client.my_kentik_portal.delete_tenant_user(tenant_id, tenant_user_id)

    # then
    assert connector.last_url_path == f"/mykentik/tenant/577/user/148099"
    assert connector.last_method == APICallMethods.DELETE
    assert connector.last_payload is None
    assert delete_successful is True
Example #11
0
def test_get_device_label_success(client, connector) -> None:
    # given
    get_response_payload = """
    {
        "id": 32,
        "name": "ISP",
        "color": "#f1d5b9",
        "user_id": "52",
        "company_id": "72",
        "order": 0,
        "devices": [
            {
                "id": "42",
                "device_name": "my_device_1",
                "device_subtype": "router"
            }
        ],
        "created_date": "2018-05-16T20:21:10.406Z",
        "updated_date": "2018-05-16T20:21:10.406Z"
    }"""
    connector.response_text = get_response_payload
    connector.response_code = HTTPStatus.OK

    # when
    device_label_id = ID(32)
    device_label = client.device_labels.get(device_label_id)

    # then request properly formed
    assert connector.last_url_path == f"/deviceLabels/{device_label_id}"
    assert connector.last_method == APICallMethods.GET
    assert connector.last_payload is None

    # then response properly parsed
    assert device_label.id == ID(32)
    assert device_label.name == "ISP"
    assert device_label.color == "#f1d5b9"
    assert device_label.user_id == ID(52)
    assert device_label.company_id == ID(72)
    assert device_label.created_date == "2018-05-16T20:21:10.406Z"
    assert device_label.updated_date == "2018-05-16T20:21:10.406Z"
    assert len(device_label.devices) == 1
    assert device_label.devices[0].id == ID(42)
    assert device_label.devices[0].device_name == "my_device_1"
    assert device_label.devices[0].device_subtype == "router"
def test_get_user_success(client, connector) -> None:
    # given
    get_response_payload = """
        {
            "user": {
                        "id":"145999",
                        "username":"******",
                        "user_full_name":"Test User",
                        "user_email":"*****@*****.**",
                        "role":"Member",
                        "email_service":true,
                        "email_product":true,
                        "last_login":null,
                        "created_date":"2020-12-09T14:48:42.187Z",
                        "updated_date":"2020-12-09T14:48:43.243Z",
                        "company_id":"74333",
                        "user_api_token":"****************************a997",
                        "filters":{},
                        "saved_filters":[]
                    }
        }"""
    connector.response_text = get_response_payload
    connector.response_code = HTTPStatus.OK

    # when
    user_id = ID(145999)
    user = client.users.get(user_id)

    # then request properly formed
    assert connector.last_url_path == f"/user/{user_id}"
    assert connector.last_method == APICallMethods.GET
    assert connector.last_payload is None

    # then response properly parsed
    assert int(user.id) == 145999
    assert user.username == "*****@*****.**"
    assert user.full_name == "Test User"
    assert user.email == "*****@*****.**"
    assert user.company_id == ID(74333)
    assert user.role == "Member"
    assert user.password is None
    assert user.email_service is True
    assert user.email_product is True
    assert user.api_token == "****************************a997"
def test_update_user_success(client, connector) -> None:
    # given
    update_response_payload = """
    {
        "user":{
                "id":"146034",
                "username":"******",
                "user_full_name":"User Testing",
                "user_email":"*****@*****.**",
                "role":"Member",
                "email_service":true,
                "email_product":true,
                "last_login":null,
                "created_date":"2020-12-09T15:23:29.768Z",
                "updated_date":"2020-12-09T15:23:31.108Z",
                "company_id":"74333",
                "user_api_token":null,
                "filters":{},
                "saved_filters":[]
               }
    }"""
    connector.response_text = update_response_payload
    connector.response_code = HTTPStatus.OK

    # when
    user_id = ID(146034)
    user = User(
        id=user_id,
        full_name="User Testing",
    )
    updated = client.users.update(user)

    # then request properly formed
    assert connector.last_url_path == f"/user/{user_id}"
    assert connector.last_method == APICallMethods.PUT
    assert connector.last_payload is not None
    assert "user" in connector.last_payload
    assert connector.last_payload["user"]["user_full_name"] == "User Testing"

    # then response properly parsed
    assert updated.id == ID(146034)
    assert updated.full_name == "User Testing"
    assert updated.email == "*****@*****.**"
def test_get_tenant_success(client, connector) -> None:
    # given
    get_response_payload = """
        {
            "id":577,
            "name":"test_tenant",
            "description":"This is test tenant",
            "users": [
                {
                    "id":"148099",
                    "user_email":"*****@*****.**",
                    "last_login":null,
                    "tenant_id":"577",
                    "company_id":"74333"
                },{
                    "id":"148113",
                    "user_email":"*****@*****.**",
                    "last_login":null,
                    "tenant_id":"577",
                    "company_id":"74333"
                }],
            "created_date":"2020-12-21T10:55:52.449Z",
            "updated_date":"2020-12-22T10:55:52.449Z"
        }"""
    connector.response_text = get_response_payload
    connector.response_code = HTTPStatus.OK
    tenant_id = ID(577)

    # when
    tenant = client.my_kentik_portal.get(tenant_id)

    # then
    assert connector.last_url_path == f"/mykentik/tenant/577"
    assert connector.last_method == APICallMethods.GET
    assert connector.last_payload is None

    assert tenant.id == ID(577)
    assert tenant.name == "test_tenant"
    assert tenant.description == "This is test tenant"
    assert tenant.users[0].id == ID(148099)
    assert tenant.users[1].id == ID(148113)
    assert tenant.created_date == "2020-12-21T10:55:52.449Z"
    assert tenant.updated_date == "2020-12-22T10:55:52.449Z"
def test_delete_populator_success() -> None:
    # given
    delete_response_payload = ""  # deleting populator responds with empty body
    connector = StubAPIConnector(delete_response_payload,
                                 HTTPStatus.NO_CONTENT)
    custom_dimensions_api = CustomDimensionsAPI(connector)

    # when
    populator_id = ID(42)
    dimension_id = ID(4002)
    delete_successful = custom_dimensions_api.populators.delete(
        dimension_id, populator_id)

    # then request properly formed
    assert connector.last_url_path == f"/customdimension/{dimension_id}/populator/{populator_id}"
    assert connector.last_method == APICallMethods.DELETE
    assert connector.last_payload is None

    # then response properly parsed
    assert delete_successful
def test_create_custom_dimension_success() -> None:
    # given
    create_response_payload = """
    {
        "customDimension": {
            "id": 42,
            "name": "c_testapi_dimension_1",
            "display_name": "dimension_display_name",
            "type": "string",
            "company_id": "74333",
            "populators": []
        }
    }"""
    connector = StubAPIConnector(create_response_payload, HTTPStatus.OK)
    custom_dimensions_api = CustomDimensionsAPI(connector)

    # when
    dimension = CustomDimension(
        name="c_testapi_dimension_1",
        display_name="dimension_display_name",
        type="string",
    )
    created = custom_dimensions_api.create(dimension)

    # then request properly formed
    assert connector.last_url_path == "/customdimension"
    assert connector.last_method == APICallMethods.POST
    assert connector.last_payload is not None
    assert connector.last_payload["name"] == "c_testapi_dimension_1"
    assert connector.last_payload["display_name"] == "dimension_display_name"
    assert connector.last_payload["type"] == "string"

    # and response properly parsed
    assert created.id == ID(42)
    assert created.name == "c_testapi_dimension_1"
    assert created.display_name == "dimension_display_name"
    assert created.type == "string"
    assert created.company_id == ID(74333)
    assert created.populators is not None
    assert len(created.populators) == 0
Example #17
0
def test_update_device_label_success(client, connector) -> None:
    # given
    update_response_payload = """
    {
        "id": 42,
        "name": "apitest-device_label-one",
        "color": "#00FF00",
        "user_id": "52",
        "company_id": "72",
        "devices": [],
        "created_date": "2018-05-16T20:21:10.406Z",
        "updated_date": "2018-05-16T20:21:10.406Z"
    }"""
    connector.response_text = update_response_payload
    connector.response_code = HTTPStatus.OK

    # when
    device_label_id = ID(42)
    device_label = DeviceLabel(id=device_label_id,
                               name="apitest-device_label-one")
    updated = client.device_labels.update(device_label)

    # then request properly formed
    assert connector.last_url_path == f"/deviceLabels/{device_label_id}"
    assert connector.last_method == APICallMethods.PUT
    assert connector.last_payload is not None
    assert connector.last_payload["name"] == "apitest-device_label-one"
    assert "color" not in connector.last_payload

    # then response properly parsed
    assert updated.id == ID(42)
    assert updated.name == "apitest-device_label-one"
    assert updated.color == "#00FF00"
    assert updated.user_id == ID(52)
    assert updated.company_id == ID(72)
    assert updated.created_date == "2018-05-16T20:21:10.406Z"
    assert updated.updated_date == "2018-05-16T20:21:10.406Z"
    assert len(updated.devices) == 0
Example #18
0
def test_create_device_label_success(client, connector) -> None:
    # given
    create_response_payload = """
    {
        "id": 42,
        "name": "apitest-device_label-1",
        "color": "#00FF00",
        "user_id": "52",
        "company_id": "72",
        "order": 0,
        "devices": [],
        "created_date": "2018-05-16T20:21:10.406Z",
        "updated_date": "2018-05-16T20:21:10.406Z"
    }"""
    connector.response_text = create_response_payload
    connector.response_code = HTTPStatus.CREATED

    # when
    device_label = DeviceLabel("apitest-device_label-1", "#00FF00")
    created = client.device_labels.create(device_label)

    # then request properly formed
    assert connector.last_url_path == "/deviceLabels"
    assert connector.last_method == APICallMethods.POST
    assert connector.last_payload is not None
    assert connector.last_payload["name"] == "apitest-device_label-1"
    assert connector.last_payload["color"] == "#00FF00"

    # and response properly parsed
    assert created.id == ID(42)
    assert created.name == "apitest-device_label-1"
    assert created.color == "#00FF00"
    assert created.user_id == ID(52)
    assert created.company_id == ID(72)
    assert created.created_date == "2018-05-16T20:21:10.406Z"
    assert created.updated_date == "2018-05-16T20:21:10.406Z"
    assert len(created.devices) == 0
def test_delete_saved_filter_success(client, connector) -> None:
    # given
    delete_response_payload = ""  # deleting user responds with empty body
    connector.response_text = delete_response_payload
    connector.response_code = HTTPStatus.NO_CONTENT

    # when
    filter_id = ID(8153)
    delete_successful = client.saved_filters.delete(filter_id)

    # then
    assert connector.last_url_path == f"/saved-filter/custom/{filter_id}"
    assert connector.last_method == APICallMethods.DELETE
    assert connector.last_payload is None
    assert delete_successful is True
def test_update_saved_filter_success(client, connector) -> None:
    # given
    get_response_payload = """
            {
                "id":8153,
                "company_id":"74333",
                "filters":{
                        "connector":"All",
                        "filterGroups":[
                            {
                                "connector":"All",
                                "filters":[{
                                        "filterField":"dst_as",
                                        "filterValue":"81",
                                        "operator":"="
                                    }],
                                "not":false
                            }]
                    },
                "filter_name":"test_filter1",
                "filter_description":"Updated Saved Filter description",
                "cdate":"2020-12-16T11:26:18.578Z",
                "edate":"2020-12-16T11:26:19.187Z",
                "filter_level":"company"
            }"""
    connector.response_text = get_response_payload
    connector.response_code = HTTPStatus.OK

    # when
    filter_id = ID(8153)
    filter_ = Filter(filterField="dst_as", filterValue="81", operator="=")
    filter_groups = [
        FilterGroups(connector="All", not_=False, filters=[filter_])
    ]
    filters = Filters(connector="All", filterGroups=filter_groups)
    to_update = SavedFilter(
        filter_name="test_filter1",
        filters=filters,
        id=filter_id,
        filter_description="Updated Saved Filter description")
    updated = client.saved_filters.update(to_update)

    # then
    assert connector.last_url_path == f"/saved-filter/custom/{filter_id}"
    assert connector.last_method == APICallMethods.PUT
    assert connector.last_payload is not None

    assert updated.filter_description == "Updated Saved Filter description"
def test_delete_site_success(client, connector) -> None:
    # given
    delete_response_payload = ""  # deleting site responds with empty body
    connector.response_text = delete_response_payload
    connector.response_code = HTTPStatus.NO_CONTENT

    # when
    site_id = ID(42)
    delete_successful = client.sites.delete(site_id)

    # then request properly formed
    assert connector.last_url_path == f"/site/{site_id}"
    assert connector.last_method == APICallMethods.DELETE
    assert connector.last_payload is None

    # then response properly parsed
    assert delete_successful
def test_delete_tag_success() -> None:
    # given
    delete_response_payload = ""  # deleting tag responds with empty body
    connector = StubAPIConnector(delete_response_payload,
                                 HTTPStatus.NO_CONTENT)
    tags_api = TagsAPI(connector)

    # when
    tag_id = ID(42)
    delete_successful = tags_api.delete(tag_id)

    # then request properly formed
    assert connector.last_url_path == f"/tag/{tag_id}"
    assert connector.last_method == APICallMethods.DELETE
    assert connector.last_payload is None

    # then response properly parsed
    assert delete_successful
Example #23
0
def test_delete_custom_application_success() -> None:
    # given
    delete_response_payload = ""  # deleting custom application responds with empty body
    connector = StubAPIConnector(delete_response_payload,
                                 HTTPStatus.NO_CONTENT)
    custom_applications_api = CustomApplicationsAPI(connector)

    # when
    app_id = ID(42)
    delete_successful = custom_applications_api.delete(app_id)

    # then request properly formed
    assert connector.last_url_path == f"/customApplications/{app_id}"
    assert connector.last_method == APICallMethods.DELETE
    assert connector.last_payload is None

    # then response properly parsed
    assert delete_successful
Example #24
0
def test_delete_device_label_success(client, connector) -> None:
    # given
    delete_response_payload = """
    {
        "success": true
    }"""
    connector.response_text = delete_response_payload
    connector.response_code = HTTPStatus.OK

    # when
    device_label_id = ID(42)
    delete_successful = client.device_labels.delete(device_label_id)

    # then request properly formed
    assert connector.last_url_path == f"/deviceLabels/{device_label_id}"
    assert connector.last_method == APICallMethods.DELETE
    assert connector.last_payload is None

    # then response properly parsed
    assert delete_successful
def test_update_populator_success() -> None:
    # given
    update_response_payload = """
    {
        "populator": {
            "id": 1510862280,
            "dimension_id": 24001,
            "value": "testapi-dimension-value-3",
            "direction": "SRC",
            "interface_name": "interface3",
            "addr_count": 0,
            "tcp_flags": "12",
            "protocol": "17",
            "user": "******",
            "created_date": "2020-12-15T07:55:23.911095Z",
            "updated_date": "2020-12-15T10:50:22.35787Z",
            "company_id": "74333",
            "device_type": "device-type3",
            "site": "site3",
            "mac_count": 0
        }
    }"""
    connector = StubAPIConnector(update_response_payload, HTTPStatus.OK)
    custom_dimensions_api = CustomDimensionsAPI(connector)

    # when
    populator_id = ID(1510862280)
    dimension_id = ID(24001)
    populator = Populator(
        id=populator_id,
        dimension_id=dimension_id,
        value="testapi-dimension-value-3",
        direction=Populator.Direction.SRC,
        interface_name="interface3",
        tcp_flags="12",
        protocol="17",
        device_type="device-type3",
        site="site3",
    )
    updated = custom_dimensions_api.populators.update(populator)

    # then request properly formed
    assert connector.last_url_path == f"/customdimension/{dimension_id}/populator/{populator_id}"
    assert connector.last_method == APICallMethods.PUT
    assert connector.last_payload is not None
    assert "populator" in connector.last_payload
    assert connector.last_payload["populator"][
        "value"] == "testapi-dimension-value-3"
    assert connector.last_payload["populator"]["direction"] == "SRC"
    assert connector.last_payload["populator"]["device_type"] == "device-type3"
    assert connector.last_payload["populator"]["site"] == "site3"
    assert connector.last_payload["populator"][
        "interface_name"] == "interface3"
    assert connector.last_payload["populator"]["tcp_flags"] == "12"
    assert connector.last_payload["populator"]["protocol"] == "17"
    assert "device_name" not in connector.last_payload["populator"]
    assert "addr" not in connector.last_payload["populator"]
    assert "port" not in connector.last_payload["populator"]
    assert "asn" not in connector.last_payload["populator"]
    assert "lasthop_as_name" not in connector.last_payload["populator"]
    assert "nexthop_asn" not in connector.last_payload["populator"]
    assert "nexthop_as_name" not in connector.last_payload["populator"]
    assert "nexthop" not in connector.last_payload["populator"]
    assert "bgp_aspath" not in connector.last_payload["populator"]
    assert "bgp_community" not in connector.last_payload["populator"]
    assert "mac" not in connector.last_payload["populator"]
    assert "country" not in connector.last_payload["populator"]
    assert "vlans" not in connector.last_payload["populator"]

    # and response properly parsed
    assert updated.id == ID(1510862280)
    assert updated.dimension_id == ID(24001)
    assert updated.value == "testapi-dimension-value-3"
    assert updated.direction == Populator.Direction.SRC
    assert updated.interface_name == "interface3"
    assert updated.addr_count == 0
    assert updated.tcp_flags == "12"
    assert updated.protocol == "17"
    assert updated.user == "144319"
    assert updated.created_date == "2020-12-15T07:55:23.911095Z"
    assert updated.updated_date == "2020-12-15T10:50:22.35787Z"
    assert updated.company_id == ID(74333)
    assert updated.device_type == "device-type3"
    assert updated.site == "site3"
    assert updated.mac_count == 0
Example #26
0
def test_get_all_device_labels_success(client, connector) -> None:
    # given
    get_response_payload = """
    [
        {
            "id": 41,
            "name": "device_labels_1",
            "color": "#5289D9",
            "user_id": "136885",
            "company_id": "74333",
            "devices": [],
            "created_date": "2020-11-20T12:54:49.575Z",
            "updated_date": "2020-11-20T12:54:49.575Z"
        },
        {
            "id": 42,
            "name": "device_labels_2",
            "color": "#3F4EA0",
            "user_id": "136885",
            "company_id": "74333",
            "devices": [
                {
                    "id": "1",
                    "device_name": "device1",
                    "device_type": "type1",
                    "device_subtype": "subtype1"
                },
                {
                    "id": "2",
                    "device_name": "device2",
                    "device_type": "type2",
                    "device_subtype": "subtype2"
                }
            ],
            "created_date": "2020-11-20T13:45:27.430Z",
            "updated_date": "2020-11-20T13:45:27.430Z"
        }
    ]"""
    connector.response_text = get_response_payload
    connector.response_code = HTTPStatus.OK

    # when
    labels = client.device_labels.get_all()

    # then request properly formed
    assert connector.last_url_path == "/deviceLabels"
    assert connector.last_method == APICallMethods.GET
    assert connector.last_payload is None

    # then response properly parsed
    assert len(labels) == 2
    assert labels[1].id == ID(42)
    assert labels[1].name == "device_labels_2"
    assert labels[1].color == "#3F4EA0"
    assert labels[1].user_id == ID(136885)
    assert labels[1].company_id == ID(74333)
    assert labels[1].created_date == "2020-11-20T13:45:27.430Z"
    assert labels[1].updated_date == "2020-11-20T13:45:27.430Z"
    assert len(labels[1].devices) == 2
    assert labels[1].devices[1].id == ID(2)
    assert labels[1].devices[1].device_name == "device2"
    assert labels[1].devices[1].device_subtype == "subtype2"
    assert labels[1].devices[1].device_type == "type2"
def test_get_custom_dimension_success() -> None:
    # given
    get_response_payload = """
    {
        "customDimension": {
            "id": 42,
            "name": "c_testapi_dimension_1",
            "display_name": "dimension_display_name",
            "type": "string",
            "company_id": "74333",
            "populators": [
                {
                    "id": 1510871096,
                    "dimension_id": 24001,
                    "value": "testapi-dimension-value-1",
                    "direction": "DST",
                    "device_name": "128.0.0.100,device1",
                    "interface_name": "interface1,interface2",
                    "addr": "128.0.0.1/32,128.0.0.2/32",
                    "addr_count": 2,
                    "port": "1001,1002",
                    "tcp_flags": "160",
                    "protocol": "6,17",
                    "asn": "101,102",
                    "nexthop_asn": "201,202",
                    "nexthop": "128.0.200.1/32,128.0.200.2/32",
                    "bgp_aspath": "3001,3002",
                    "bgp_community": "401:499,501:599",
                    "user": "******",
                    "created_date": "2020-12-15T08:32:19.503788Z",
                    "updated_date": "2020-12-15T08:32:19.503788Z",
                    "company_id": "74333",
                    "device_type": "device-type1",
                    "site": "site1,site2,site3",
                    "lasthop_as_name": "asn101,asn102",
                    "nexthop_as_name": "asn201,asn202",
                    "mac": "FF:FF:FF:FF:FF:FA,FF:FF:FF:FF:FF:FF",
                    "mac_count": 2,
                    "country": "NL,SE",
                    "vlans": "2001,2002"
                },
                {
                    "id": 1510862280,
                    "dimension_id": 24001,
                    "value": "testapi-dimension-value-3",
                    "direction": "SRC",
                    "addr_count": 0,
                    "user": "******",
                    "created_date": "2020-12-15T07:55:23.911095Z",
                    "updated_date": "2020-12-15T11:11:30.300681Z",
                    "company_id": "74333",
                    "site": "site3",
                    "mac_count": 0
                }
            ]
        }
    }"""
    connector = StubAPIConnector(get_response_payload, HTTPStatus.OK)
    custom_dimensions_api = CustomDimensionsAPI(connector)

    # when
    dimension_id = ID(42)
    dimension = custom_dimensions_api.get(dimension_id)

    # then request properly formed
    assert connector.last_url_path == f"/customdimension/{dimension_id}"
    assert connector.last_method == APICallMethods.GET
    assert connector.last_payload is None

    # and response properly parsed
    assert dimension.id == ID(42)
    assert dimension.name == "c_testapi_dimension_1"
    assert dimension.display_name == "dimension_display_name"
    assert dimension.type == "string"
    assert dimension.company_id == ID(74333)
    assert dimension.populators is not None
    assert len(dimension.populators) == 2
    assert dimension.populators[1].id == ID(1510862280)
    assert dimension.populators[1].dimension_id == ID(24001)
    assert dimension.populators[1].value == "testapi-dimension-value-3"
    assert dimension.populators[1].direction == Populator.Direction.SRC
    assert dimension.populators[1].addr_count == 0
    assert dimension.populators[1].user == "144319"
    assert dimension.populators[
        1].created_date == "2020-12-15T07:55:23.911095Z"
    assert dimension.populators[
        1].updated_date == "2020-12-15T11:11:30.300681Z"
    assert dimension.populators[1].company_id == ID(74333)
    assert dimension.populators[1].site == "site3"
    assert dimension.populators[1].mac_count == 0
def test_get_tag_success() -> None:
    # given
    get_response_payload = """
    {
        "tag": {
            "id": 42,
            "flow_tag": "APITEST-TAG-1",
            "device_name": "192.168.5.100,device1",
            "interface_name": "interface1,interface2",
            "addr": "192.168.0.1/32,192.168.0.2/32",
            "addr_count": 2,
            "port": "9000,9001",
            "tcp_flags": "7",
            "protocol": "6,17",
            "asn": "101,102,103",
            "nexthop": "192.168.7.1/32,192.168.7.2/32",
            "nexthop_asn": "51,52,53",
            "bgp_aspath": "201,202,203",
            "bgp_community": "301,302,303",
            "user": "******",
            "created_date": "2020-12-10T11:53:48.752418Z",
            "updated_date": "2020-12-10T11:53:48.752418Z",
            "company_id": "74333",
            "device_type": "router,switch",
            "site": "site1,site2",
            "lasthop_as_name": "as1,as2,as3",
            "nexthop_as_name": "as51,as52,as53",
            "mac": "FF:FF:FF:FF:FF:FE,FF:FF:FF:FF:FF:FF",
            "mac_count": 2,
            "country": "ES,IT",
            "edited_by": "*****@*****.**",
            "vlans": "4001,4002,4003"
        }
    }"""
    connector = StubAPIConnector(get_response_payload, HTTPStatus.OK)
    tags_api = TagsAPI(connector)

    # when
    tag_id = ID(42)
    tag = tags_api.get(tag_id)

    # then request properly formed
    assert connector.last_url_path == f"/tag/{tag_id}"
    assert connector.last_method == APICallMethods.GET
    assert connector.last_payload is None

    # and response properly parsed
    assert tag.flow_tag == "APITEST-TAG-1"
    assert tag.device_name == "192.168.5.100,device1"
    assert tag.interface_name == "interface1,interface2"
    assert tag.addr == "192.168.0.1/32,192.168.0.2/32"
    assert tag.port == "9000,9001"
    assert tag.tcp_flags == "7"
    assert tag.protocol == "6,17"
    assert tag.asn == "101,102,103"
    assert tag.nexthop == "192.168.7.1/32,192.168.7.2/32"
    assert tag.nexthop_asn == "51,52,53"
    assert tag.bgp_aspath == "201,202,203"
    assert tag.bgp_community == "301,302,303"
    assert tag.device_type == "router,switch"
    assert tag.site == "site1,site2"
    assert tag.lasthop_as_name == "as1,as2,as3"
    assert tag.nexthop_as_name == "as51,as52,as53"
    assert tag.mac == "FF:FF:FF:FF:FF:FE,FF:FF:FF:FF:FF:FF"
    assert tag.country == "ES,IT"
    assert tag.vlans == "4001,4002,4003"
    assert tag.id == ID(42)
    assert tag.company_id == ID(74333)
    assert tag.addr_count == 2
    assert tag.user_id == ID(144319)
    assert tag.mac_count == 2
    assert tag.edited_by == "*****@*****.**"
    assert tag.created_date == "2020-12-10T11:53:48.752418Z"
    assert tag.updated_date == "2020-12-10T11:53:48.752418Z"
def test_create_tag_success() -> None:
    # given
    create_response_payload = """
    {
        "tag": {
            "id": 42,
            "flow_tag": "APITEST-TAG-1",
            "device_name": "192.168.5.100,device1",
            "interface_name": "interface1,interface2",
            "addr": "192.168.0.1/32,192.168.0.2/32",
            "addr_count": 2,
            "port": "9000,9001",
            "tcp_flags": "7",
            "protocol": "6,17",
            "asn": "101,102,103",
            "nexthop": "192.168.7.1/32,192.168.7.2/32",
            "nexthop_asn": "51,52,53",
            "bgp_aspath": "201,202,203",
            "bgp_community": "301,302,303",
            "user": "******",
            "created_date": "2020-12-10T11:53:48.752418Z",
            "updated_date": "2020-12-10T11:53:48.752418Z",
            "company_id": "74333",
            "device_type": "router,switch",
            "site": "site1,site2",
            "lasthop_as_name": "as1,as2,as3",
            "nexthop_as_name": "as51,as52,as53",
            "mac": "FF:FF:FF:FF:FF:FE,FF:FF:FF:FF:FF:FF",
            "mac_count": 2,
            "country": "ES,IT",
            "edited_by": "*****@*****.**",
            "vlans": "4001,4002,4003"
        }
    }"""
    connector = StubAPIConnector(create_response_payload, HTTPStatus.CREATED)
    tags_api = TagsAPI(connector)

    # when
    tag = Tag(
        flow_tag="APITEST-TAG-1",
        device_name="device1,192.168.5.100",
        device_type="router,switch",
        site="site1,site2",
        interface_name="interface1,interface2",
        addr="192.168.0.1,192.168.0.2",
        port="9000,9001",
        tcp_flags="7",
        protocol="6,17",
        asn="101,102,103",
        lasthop_as_name="as1,as2,as3",
        nexthop_asn="51,52,53",
        nexthop_as_name="as51,as52,as53",
        nexthop="192.168.7.1,192.168.7.2",
        bgp_aspath="201,202,203",
        bgp_community="301,302,303",
        mac="FF:FF:FF:FF:FF:FE,FF:FF:FF:FF:FF:FF",
        country="ES,IT",
        vlans="4001,4002,4003",
    )
    created = tags_api.create(tag)

    # then request properly formed
    assert connector.last_url_path == "/tag"
    assert connector.last_method == APICallMethods.POST
    assert connector.last_payload is not None
    assert "tag" in connector.last_payload
    assert connector.last_payload["tag"]["flow_tag"] == "APITEST-TAG-1"
    assert connector.last_payload["tag"][
        "device_name"] == "device1,192.168.5.100"
    assert connector.last_payload["tag"]["device_type"] == "router,switch"
    assert connector.last_payload["tag"]["site"] == "site1,site2"
    assert connector.last_payload["tag"][
        "interface_name"] == "interface1,interface2"
    assert connector.last_payload["tag"]["addr"] == "192.168.0.1,192.168.0.2"
    assert connector.last_payload["tag"]["port"] == "9000,9001"
    assert connector.last_payload["tag"]["tcp_flags"] == "7"
    assert connector.last_payload["tag"]["protocol"] == "6,17"
    assert connector.last_payload["tag"]["asn"] == "101,102,103"
    assert connector.last_payload["tag"]["lasthop_as_name"] == "as1,as2,as3"
    assert connector.last_payload["tag"]["nexthop_asn"] == "51,52,53"
    assert connector.last_payload["tag"]["nexthop_as_name"] == "as51,as52,as53"
    assert connector.last_payload["tag"][
        "nexthop"] == "192.168.7.1,192.168.7.2"
    assert connector.last_payload["tag"]["bgp_aspath"] == "201,202,203"
    assert connector.last_payload["tag"]["bgp_community"] == "301,302,303"
    assert connector.last_payload["tag"][
        "mac"] == "FF:FF:FF:FF:FF:FE,FF:FF:FF:FF:FF:FF"
    assert connector.last_payload["tag"]["country"] == "ES,IT"
    assert connector.last_payload["tag"]["vlans"] == "4001,4002,4003"

    # and response properly parsed
    assert created.flow_tag == "APITEST-TAG-1"
    assert created.device_name == "192.168.5.100,device1"
    assert created.interface_name == "interface1,interface2"
    assert created.addr == "192.168.0.1/32,192.168.0.2/32"
    assert created.port == "9000,9001"
    assert created.tcp_flags == "7"
    assert created.protocol == "6,17"
    assert created.asn == "101,102,103"
    assert created.nexthop == "192.168.7.1/32,192.168.7.2/32"
    assert created.nexthop_asn == "51,52,53"
    assert created.bgp_aspath == "201,202,203"
    assert created.bgp_community == "301,302,303"
    assert created.device_type == "router,switch"
    assert created.site == "site1,site2"
    assert created.lasthop_as_name == "as1,as2,as3"
    assert created.nexthop_as_name == "as51,as52,as53"
    assert created.mac == "FF:FF:FF:FF:FF:FE,FF:FF:FF:FF:FF:FF"
    assert created.country == "ES,IT"
    assert created.vlans == "4001,4002,4003"
    assert created.id == ID(42)
    assert created.company_id == ID(74333)
    assert created.addr_count == 2
    assert created.user_id == ID(144319)
    assert created.mac_count == 2
    assert created.edited_by == "*****@*****.**"
    assert created.created_date == "2020-12-10T11:53:48.752418Z"
    assert created.updated_date == "2020-12-10T11:53:48.752418Z"
Example #30
0
def test_get_all_plans_success(client, connector) -> None:
    # given
    get_response_payload = """
    {
        "plans":[
            {
                "active":true,
                "bgp_enabled":true,
                "cdate":"2020-09-03T08:41:57.489Z",
                "company_id":74333,
                "description":"Your Free Trial includes 6 devices at a maximum of 1000 fps each. Please contact...",
                "deviceTypes":[
                    {
                        "device_type":"router"
                    },
                    {
                        "device_type":"host-nprobe-dns-www"
                    }
                ],
                "devices":[
                    {
                        "id":"77714",
                        "device_name":"testapi_router_minimal_1",
                        "device_type":"router"
                    },
                    {
                        "id":"77720",
                        "device_name":"testapi_dns_minimal_1",
                        "device_type":"host-nprobe-dns-www"
                    },
                    {
                        "id":"77724",
                        "device_name":"testapi_router_minimal_postman",
                        "device_type":"router"
                    },
                    {
                        "id":"77715",
                        "device_name":"testapi_router_full_1",
                        "device_type":"router"
                    }
                ],
                "edate":"2020-09-03T08:41:57.489Z",
                "fast_retention":30,
                "full_retention":30,
                "id":11466,
                "max_bigdata_fps":30,
                "max_devices":6,
                "max_fps":1000,
                "name":"Free Trial Plan",
                "metadata":{
                }
            }]
    }"""
    connector.response_text = get_response_payload
    connector.response_code = HTTPStatus.OK

    # when
    plans = client.plans.get_all()

    # then request properly formed
    assert connector.last_url_path == f"/plans"
    assert connector.last_method == APICallMethods.GET
    assert connector.last_payload is None

    # then response properly parsed
    assert len(plans) == 1
    assert plans[0].active is True
    assert plans[0].company_id == ID(74333)
    assert len(plans[0].device_types) == 2
    assert plans[0].device_types[0].device_type == "router"
    assert len(plans[0].devices) == 4
    assert plans[0].devices[0].id == ID(77714)