Ejemplo n.º 1
0
def test_add_all_of_consumer(session, clean_kong):
    consumer1 = add("consumers",
                    session,
                    username="******",
                    custom_id="1234")
    assert consumer1["username"] == "test-user"
    assert consumer1["custom_id"] == "1234"
    assert uuid.UUID(consumer1["id"])
    assert consumer1["created_at"] <= ceil(time()) * 1000

    consumer2 = add("consumers", session, custom_id="12345")
    assert consumer2.get("username") is None
    assert consumer2["custom_id"] == "12345"
    assert uuid.UUID(consumer2["id"])
    assert consumer2["created_at"] <= ceil(time()) * 1000

    consumer3 = add("consumers", session, username="******")
    assert consumer3["username"] == "test-user2"
    assert consumer3.get("custom_id") is None
    assert uuid.UUID(consumer3["id"])
    assert consumer3["created_at"] <= ceil(time()) * 1000

    consumers = all_of("consumers", session)
    assert 3 == len(consumers)
    assert sorted([consumer1, consumer2, consumer3],
                  key=itemgetter("id")) == sorted(consumers,
                                                  key=itemgetter("id"))
Ejemplo n.º 2
0
def sample(clean_kong, session, httpbin):
    service = add("services", session, name="httpbin", url=httpbin)
    parse_datetimes(service)
    route = add("routes",
                session,
                service={"id": service["id"]},
                paths=["/httpbin"])
    parse_datetimes(route)
    consumer = add("consumers", session, username="******", custom_id="1234")
    parse_datetimes(consumer)

    return service, route, consumer
Ejemplo n.º 3
0
def test_delete_consumer(session, clean_kong):
    consumer = add("consumers",
                   session,
                   username="******",
                   custom_id="1234")
    delete("consumers", session, consumer["id"])
    assert [] == all_of("consumers", session)
Ejemplo n.º 4
0
def test_retrieve_consumer(session, clean_kong):
    consumer = add("consumers",
                   session,
                   username="******",
                   custom_id="1234")
    rconsumer = retrieve("consumers", session, consumer["id"])
    assert consumer == rconsumer
Ejemplo n.º 5
0
def test_add_acl_to_consumer(session, clean_kong):
    consumer = add("consumers",
                   session,
                   username="******",
                   custom_id="1234")
    consumers.add_group(session, consumer["id"], "some-nice-group")
    assert ["some-nice-group"] == consumers.groups(session, consumer["id"])
Ejemplo n.º 6
0
def test_lots_of_key_auths(session, clean_kong):
    consumer = add("consumers",
                   session,
                   username="******",
                   custom_id="1234")
    for _i in range(1000):
        consumers.add_key_auth(session, consumer["id"])
    assert 1000 == len(consumers.key_auths(session, consumer["id"]))
Ejemplo n.º 7
0
def test_delete_key_auth(session, clean_kong):
    consumer = add("consumers",
                   session,
                   username="******",
                   custom_id="1234")
    ba = consumers.add_key_auth(session, consumer["id"])
    consumers.delete_key_auth(session, consumer["id"], ba["id"])
    assert [] == consumers.key_auths(session, consumer["id"])
Ejemplo n.º 8
0
def test_delete_non_existing_basic_auth(session, clean_kong):
    consumer = add("consumers",
                   session,
                   username="******",
                   custom_id="1234")
    with pytest.raises(Exception) as e:
        consumers.delete_basic_auth(session, consumer["id"], str(uuid4()))
    assert str(e.value).strip() == '404 Not Found: {"message":"Not found"}'
Ejemplo n.º 9
0
def test_update_consumer_username(session, clean_kong):
    consumer = add("consumers",
                   session,
                   username="******",
                   custom_id="1234")
    uconsumer = update("consumers", session, consumer["id"], username="******")
    assert uconsumer.pop("username") == "foobar"
    consumer.pop("username")
    assert uconsumer == consumer
Ejemplo n.º 10
0
def test_update_basic_auth_no_params(session, clean_kong):
    consumer = add("consumers",
                   session,
                   username="******",
                   custom_id="1234")
    ba = consumers.add_basic_auth(session, consumer["id"], "some.username",
                                  "password")
    with pytest.raises(AssertionError):
        consumers.update_basic_auth(session, consumer["id"], ba["id"])
Ejemplo n.º 11
0
def test_delete_basic_auth(session, clean_kong):
    consumer = add("consumers",
                   session,
                   username="******",
                   custom_id="1234")
    ba = consumers.add_basic_auth(session, consumer["id"], "some.username",
                                  "password")
    consumers.delete_basic_auth(session, consumer["id"], ba["id"])
    assert [] == consumers.basic_auths(session, consumer["id"])
Ejemplo n.º 12
0
def test_list_two_filled(invoke, sample, session, full_keys):
    service, route, consumer1 = sample
    consumer2 = general.add("consumers",
                            session,
                            username="******",
                            custom_id="4321")
    parse_datetimes(consumer2)

    for idx, consumer in enumerate((consumer1, consumer2)):
        consumers.add_group(session, consumer["id"], "group2")
        consumers.add_group(session, consumer["id"], "group1")
        consumers.add_basic_auth(session, consumer["id"], f"username{idx}",
                                 "passwd")
        consumers.add_key_auth(session, consumer["id"], f"key-abcdefg{idx}")
        consumers.add_key_auth(session, consumer["id"], f"key-hijklmn{idx}")

    result = invoke(
        ["--font", "cyberlarge", "--tablefmt", "psql", "consumers", "list"] +
        full_keys)

    assert result.exit_code == 0
    lines = result.output.split("\n")
    assert len(lines) == 14
    assert [v.strip() for v in lines[6].split("|")] == [
        "",
        "id",
        "custom_id",
        "username",
        "acl_groups",
        "plugins",
        "basic_auth",
        "key_auth",
        "",
    ]
    for idx, consumer in enumerate((consumer1, consumer2)):
        assert [v.strip() for v in lines[8 + idx * 2].split("|")] == [
            "",
            consumer["id"],
            consumer["custom_id"],
            consumer["username"],
            "group1",
            "",
            f"username{idx}:xxx",
            f"key-abcdefg{idx}" if full_keys else "key-ab...",
            "",
        ]
        assert [v.strip() for v in lines[9 + idx * 2].split("|")] == [
            "",
            "",
            "",
            "",
            "group2",
            "",
            "",
            f"key-hijklmn{idx}" if full_keys else "key-hi...",
            "",
        ]
Ejemplo n.º 13
0
def test_add_multiple_acl_to_consumer(session, clean_kong):
    consumer = add("consumers",
                   session,
                   username="******",
                   custom_id="1234")
    consumers.add_group(session, consumer["id"], "some-nice-group1")
    consumers.add_group(session, consumer["id"], "some-nice-group2")
    consumers.add_group(session, consumer["id"], "some-nice-group3")
    assert ["some-nice-group1", "some-nice-group2", "some-nice-group3"
            ] == sorted(consumers.groups(session, consumer["id"]))
Ejemplo n.º 14
0
def test_update_no_data(resource, params, session, clean_kong, kong_version):
    r1 = add(resource, session, **params)

    if resource in ("services", "plugins") or kong_version >= 0.14:
        r2 = update(resource, session, r1["id"])
        r1.pop("updated_at", None)
        r2.pop("updated_at", None)
        assert r1 == r2
    else:
        with pytest.raises(Exception):
            update(resource, session, r1["id"])
Ejemplo n.º 15
0
def test_update_key_auth(session, clean_kong):
    consumer = add("consumers",
                   session,
                   username="******",
                   custom_id="1234")
    ka = consumers.add_key_auth(session, consumer["id"])
    consumers.update_key_auth(session, consumer["id"], ka["id"], key="4321")
    kas = consumers.key_auths(session, consumer["id"])
    assert len(kas) == 1
    assert "4321" == kas[0].pop("key")
    ka.pop("key")
    assert ka == kas[0]
Ejemplo n.º 16
0
def test_add_key_auth_with_key(session, clean_kong, kong_version):
    consumer = add("consumers",
                   session,
                   username="******",
                   custom_id="1234")
    ka = consumers.add_key_auth(session, consumer["id"], key="1234567890")
    assert [ka] == consumers.key_auths(session, consumer["id"])
    if kong_version >= 0.15:
        assert ka["consumer"]["id"] == consumer["id"]
    else:
        assert ka["consumer_id"] == consumer["id"]
    assert "1234567890" == ka["key"]
Ejemplo n.º 17
0
def test_add_basic_auth(session, clean_kong, kong_version):
    consumer = add("consumers",
                   session,
                   username="******",
                   custom_id="1234")
    ba = consumers.add_basic_auth(session, consumer["id"], "some.username",
                                  "password")
    assert [ba] == consumers.basic_auths(session, consumer["id"])
    if kong_version >= 0.15:
        assert ba["consumer"]["id"] == consumer["id"]
    else:
        assert ba["consumer_id"] == consumer["id"]
    assert ba["username"] == "some.username"
    assert ba["password"] != "password"  # some hash
Ejemplo n.º 18
0
def test_update_basic_auth_password(session, clean_kong):
    consumer = add("consumers",
                   session,
                   username="******",
                   custom_id="1234")
    ba = consumers.add_basic_auth(session, consumer["id"], "some.username",
                                  "password")
    consumers.update_basic_auth(session,
                                consumer["id"],
                                ba["id"],
                                password="******")
    bas = consumers.basic_auths(session, consumer["id"])
    assert len(bas) == 1
    assert ba.pop("password") != bas[0].pop("password")
    assert ba == bas[0]
Ejemplo n.º 19
0
def test_add_acl_twice_to_consumer(session, clean_kong):
    consumer = add("consumers",
                   session,
                   username="******",
                   custom_id="1234")
    consumers.add_group(session, consumer["id"], "some-nice-group")
    with pytest.raises(Exception) as e:
        consumers.add_group(session, consumer["id"], "some-nice-group")
    assert (
        str(e.value).strip() ==
        '400 Bad Request: {"group":"ACL group already exist for this consumer"}'
    ) or (
        str(e.value).strip() ==
        f'409 Conflict: {{"message":"UNIQUE violation detected on \'{{consumer={{id=\\"{consumer["id"]}\\"}},group=\\"some-nice-group\\"}}\'","name":"unique constraint violation","fields":{{"consumer":{{"id":"{consumer["id"]}"}},"group":"some-nice-group"}},"code":5}}'
    )
Ejemplo n.º 20
0
def test_delete_non_exsiting_acl(session, clean_kong):
    consumer = add("consumers",
                   session,
                   username="******",
                   custom_id="1234")
    with pytest.raises(Exception) as e:
        consumers.delete_group(session, consumer["id"], "some-group")
    assert str(e.value).startswith("404 Not Found")
    assert '"message":"Not found"' in str(e.value)

    # also with other group we get an error
    consumers.add_group(session, consumer["id"], "some-nice-group1")
    with pytest.raises(Exception) as e:
        consumers.delete_group(session, consumer["id"], "some-group")
    assert str(e.value).startswith("404 Not Found")
    assert '"message":"Not found"' in str(e.value)
Ejemplo n.º 21
0
def test_update_basic_auth_username(session, clean_kong, kong_version):
    consumer = add("consumers",
                   session,
                   username="******",
                   custom_id="1234")
    ba = consumers.add_basic_auth(session, consumer["id"], "some.username",
                                  "password")
    consumers.update_basic_auth(session,
                                consumer["id"],
                                ba["id"],
                                username="******")
    bas = consumers.basic_auths(session, consumer["id"])
    assert len(bas) == 1
    assert "username.some" == bas[0].pop("username")
    ba.pop("username")
    if kong_version >= 0.15:
        # apparently, if no password field is given in 1.0, the empty password is set
        ba.pop("password")
        bas[0].pop("password")
    assert ba == bas[0]
Ejemplo n.º 22
0
def test_no_acl_for_new_consumer(session, clean_kong):
    consumer = add("consumers",
                   session,
                   username="******",
                   custom_id="1234")
    assert [] == consumers.groups(session, consumer["id"])
Ejemplo n.º 23
0
def test_no_basic_auths(session, clean_kong):
    consumer = add("consumers",
                   session,
                   username="******",
                   custom_id="1234")
    assert [] == consumers.basic_auths(session, consumer["id"])
Ejemplo n.º 24
0
def test_add_all_of_consumer_paginate(session, clean_kong):
    for i in range(201):
        add("consumers", session, custom_id=str(i))

    consumers = all_of("consumers", session)
    assert 201 == len(consumers)
Ejemplo n.º 25
0
def test_list_two_plugins(invoke, sample, session, full_plugins):
    service, route, consumer1 = sample
    consumer2 = general.add("consumers",
                            session,
                            username="******",
                            custom_id="4321")
    for consumer in (consumer1, consumer2):
        plugins.enable_on(session,
                          "consumers",
                          consumer["id"],
                          "rate-limiting",
                          config={"minute": 20})
    plugins.enable_on(session,
                      "routes",
                      route["id"],
                      "rate-limiting",
                      config={"minute": 25})

    result = invoke(
        ["--font", "cyberlarge", "--tablefmt", "psql", "consumers", "list"] +
        full_plugins)

    assert result.exit_code == 0
    lines = result.output.split("\n")
    assert len(lines) >= 32 if full_plugins else 11
    assert [v.strip() for v in lines[6].split("|")] == [
        "",
        "id",
        "custom_id",
        "username",
        "acl_groups",
        "plugins",
        "basic_auth",
        "key_auth",
        "",
    ]
    assert [v.strip() for v in lines[8].split("|")] == [
        "",
        consumer1["id"],
        consumer1["custom_id"],
        consumer1["username"],
        "",
        "rate-limiting:" if full_plugins else "rate-limiting",
        "",
        "",
        "",
    ]
    if full_plugins:
        rest = [[elem.strip() for elem in line.split("|")]
                for line in lines[9:]]
        second_id_line = [
            idx for idx, line in enumerate(rest)
            if len(line) >= 2 and line[1] == consumer2["id"]
        ][0]
        assert any(line[5] == '"minute": 20,'
                   for line in rest[:second_id_line])

        assert rest[second_id_line] == [
            "",
            consumer2["id"],
            consumer2["custom_id"],
            consumer2["username"],
            "",
            "rate-limiting:",
            "",
            "",
            "",
        ]
        assert any(line[5] == '"minute": 20,'
                   for line in rest[second_id_line:])

    else:
        assert [v.strip() for v in lines[9].split("|")] == [
            "",
            consumer2["id"],
            consumer2["custom_id"],
            consumer2["username"],
            "",
            "rate-limiting",
            "",
            "",
            "",
        ]