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"))
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
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)
def test_retrieve_consumer(session, clean_kong): consumer = add("consumers", session, username="******", custom_id="1234") rconsumer = retrieve("consumers", session, consumer["id"]) assert consumer == rconsumer
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"])
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"]))
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"])
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"}'
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
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"])
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"])
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...", "", ]
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"]))
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"])
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]
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"]
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
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]
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}}' )
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)
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]
def test_no_acl_for_new_consumer(session, clean_kong): consumer = add("consumers", session, username="******", custom_id="1234") assert [] == consumers.groups(session, consumer["id"])
def test_no_basic_auths(session, clean_kong): consumer = add("consumers", session, username="******", custom_id="1234") assert [] == consumers.basic_auths(session, consumer["id"])
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)
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", "", "", "", ]