Skip to content

Commit 6e07ec5

Browse files
authored
fix(tests): Removes duplicate policies tests & makes DataHub user configurable (#5365)
1 parent bc96cf2 commit 6e07ec5

File tree

4 files changed

+23
-222
lines changed

4 files changed

+23
-222
lines changed

smoke-test/test_e2e.py

Lines changed: 0 additions & 204 deletions
Original file line numberDiff line numberDiff line change
@@ -606,210 +606,6 @@ def test_ingest_without_system_metadata():
606606
response.raise_for_status()
607607

608608

609-
@pytest.mark.dependency(depends=["test_healthchecks", "test_run_ingestion"])
610-
def test_frontend_list_policies(frontend_session):
611-
612-
json = {
613-
"query": """query listPolicies($input: ListPoliciesInput!) {\n
614-
listPolicies(input: $input) {\n
615-
start\n
616-
count\n
617-
total\n
618-
policies {\n
619-
urn\n
620-
type\n
621-
name\n
622-
description\n
623-
state\n
624-
resources {\n
625-
type\n
626-
allResources\n
627-
resources\n
628-
}\n
629-
privileges\n
630-
actors {\n
631-
users\n
632-
groups\n
633-
allUsers\n
634-
allGroups\n
635-
resourceOwners\n
636-
}\n
637-
editable\n
638-
}\n
639-
}\n
640-
}""",
641-
"variables": {
642-
"input": {
643-
"start": "0",
644-
"count": "20",
645-
}
646-
},
647-
}
648-
response = frontend_session.post(f"{get_frontend_url()}/api/v2/graphql", json=json)
649-
response.raise_for_status()
650-
res_data = response.json()
651-
652-
assert res_data
653-
assert res_data["data"]
654-
assert res_data["data"]["listPolicies"]
655-
assert res_data["data"]["listPolicies"]["start"] == 0
656-
assert res_data["data"]["listPolicies"]["count"] > 0
657-
assert len(res_data["data"]["listPolicies"]["policies"]) > 0
658-
659-
660-
@pytest.mark.dependency(
661-
depends=[
662-
"test_healthchecks",
663-
"test_run_ingestion",
664-
"test_frontend_list_policies",
665-
]
666-
)
667-
def test_frontend_create_update_delete_policy(frontend_session):
668-
669-
# Policy tests are not idempotent. If you rerun this test it will be wrong.
670-
json = {
671-
"query": """mutation createPolicy($input: PolicyUpdateInput!) {\n
672-
createPolicy(input: $input) }""",
673-
"variables": {
674-
"input": {
675-
"type": "METADATA",
676-
"name": "Test Metadata Policy",
677-
"description": "My Metadaata Policy",
678-
"state": "ACTIVE",
679-
"resources": {"type": "dataset", "allResources": True},
680-
"privileges": ["EDIT_ENTITY_TAGS"],
681-
"actors": {
682-
"users": ["urn:li:corpuser:datahub"],
683-
"resourceOwners": False,
684-
"allUsers": False,
685-
"allGroups": False,
686-
},
687-
}
688-
},
689-
}
690-
691-
response = frontend_session.post(f"{get_frontend_url()}/api/v2/graphql", json=json)
692-
response.raise_for_status()
693-
res_data = response.json()
694-
695-
assert res_data
696-
assert res_data["data"]
697-
assert res_data["data"]["createPolicy"]
698-
699-
new_urn = res_data["data"]["createPolicy"]
700-
701-
# Sleep for eventual consistency
702-
time.sleep(3)
703-
704-
# Now verify the policy has been added.
705-
json = {
706-
"query": """query listPolicies($input: ListPoliciesInput!) {\n
707-
listPolicies(input: $input) {\n
708-
start\n
709-
count\n
710-
total\n
711-
policies {\n
712-
urn\n
713-
}\n
714-
}\n
715-
}""",
716-
"variables": {
717-
"input": {
718-
"start": "0",
719-
"count": "20",
720-
}
721-
},
722-
}
723-
response = frontend_session.post(f"{get_frontend_url()}/api/v2/graphql", json=json)
724-
response.raise_for_status()
725-
res_data = response.json()
726-
727-
assert res_data
728-
assert res_data["data"]
729-
assert res_data["data"]["listPolicies"]
730-
731-
# Verify that the URN appears in the list
732-
result = filter(
733-
lambda x: x["urn"] == new_urn, res_data["data"]["listPolicies"]["policies"]
734-
)
735-
assert len(list(result)) == 1
736-
737-
# update policy
738-
json = {
739-
"query": """mutation updatePolicy($urn: String!, $input: PolicyUpdateInput!) {\n
740-
updatePolicy(urn: $urn, input: $input) }""",
741-
"variables": {
742-
"urn": new_urn,
743-
"input": {
744-
"type": "PLATFORM",
745-
"state": "INACTIVE",
746-
"name": "Updated Platform Policy",
747-
"description": "My Metadaata Policy",
748-
"privileges": ["MANAGE_POLICIES"],
749-
"actors": {
750-
"users": ["urn:li:corpuser:datahub"],
751-
"resourceOwners": False,
752-
"allUsers": False,
753-
"allGroups": False,
754-
},
755-
},
756-
},
757-
}
758-
759-
response = frontend_session.post(f"{get_frontend_url()}/api/v2/graphql", json=json)
760-
response.raise_for_status()
761-
res_data = response.json()
762-
763-
assert res_data
764-
assert res_data["data"]
765-
assert res_data["data"]["updatePolicy"]
766-
assert res_data["data"]["updatePolicy"] == new_urn
767-
768-
# Remove policy
769-
json = {
770-
"query": """mutation deletePolicy($urn: String!) {\n
771-
deletePolicy(urn: $urn) }""",
772-
"variables": {"urn": new_urn},
773-
}
774-
response = frontend_session.post(f"{get_frontend_url()}/api/v2/graphql", json=json)
775-
response.raise_for_status()
776-
res_data = response.json()
777-
778-
# Now verify the policy has been removed.
779-
json = {
780-
"query": """query listPolicies($input: ListPoliciesInput!) {\n
781-
listPolicies(input: $input) {\n
782-
start\n
783-
count\n
784-
total\n
785-
policies {\n
786-
urn\n
787-
}\n
788-
}\n
789-
}""",
790-
"variables": {
791-
"input": {
792-
"start": "0",
793-
"count": "20",
794-
}
795-
},
796-
}
797-
response = frontend_session.post(f"{get_frontend_url()}/api/v2/graphql", json=json)
798-
response.raise_for_status()
799-
res_data = response.json()
800-
801-
assert res_data
802-
assert res_data["data"]
803-
assert res_data["data"]["listPolicies"]
804-
805-
# Verify that the URN is no longer in the list
806-
result = filter(
807-
lambda x: x["urn"] == new_urn,
808-
res_data["data"]["listPolicies"]["policies"],
809-
)
810-
assert len(list(result)) == 0
811-
812-
813609
@pytest.mark.dependency(depends=["test_healthchecks", "test_run_ingestion"])
814610
def test_frontend_app_config(frontend_session):
815611

smoke-test/tests/policies/test_policies.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import time
22
import pytest
33
import requests
4-
from tests.utils import get_frontend_url, wait_for_healthcheck_util
4+
from tests.utils import get_frontend_url, wait_for_healthcheck_util, get_admin_credentials
55

66
TEST_POLICY_NAME = "Updated Platform Policy"
77

@@ -25,7 +25,8 @@ def frontend_session(wait_for_healthchecks):
2525
headers = {
2626
"Content-Type": "application/json",
2727
}
28-
data = '{"username":"datahub", "password":"datahub"}'
28+
(admin_user, admin_pass) = get_admin_credentials()
29+
data = '{"username":"' + admin_user + '", "password":"' + admin_pass + '"}'
2930
response = session.post(f"{get_frontend_url()}/logIn", headers=headers, data=data)
3031
response.raise_for_status()
3132

smoke-test/tests/tokens/revokable_access_token_test.py

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@
33
import requests
44
from time import sleep
55

6-
from tests.utils import get_frontend_url, wait_for_healthcheck_util
6+
from tests.utils import get_frontend_url, wait_for_healthcheck_util, get_admin_credentials
7+
from datahub.cli.ingest_cli import get_session_and_host
78

89
# Disable telemetry
910
os.putenv("DATAHUB_TELEMETRY_ENABLED", "false")
1011

12+
(admin_user, admin_pass) = get_admin_credentials()
1113

1214
@pytest.fixture(scope="session")
1315
def wait_for_healthchecks():
@@ -23,7 +25,7 @@ def test_healthchecks(wait_for_healthchecks):
2325
@pytest.fixture(scope='class', autouse=True)
2426
def custom_user_setup():
2527
"""Fixture to execute setup before and tear down after all tests are run"""
26-
admin_session = loginAs("datahub", "datahub")
28+
admin_session = loginAs(admin_user, admin_pass)
2729

2830
res_data = removeUser(admin_session, "urn:li:corpuser:user")
2931
assert res_data
@@ -66,7 +68,7 @@ def custom_user_setup():
6668

6769
# signUp will override the session cookie to the new user to be signed up.
6870
admin_session.cookies.clear()
69-
admin_session = loginAs("datahub", "datahub")
71+
admin_session = loginAs(admin_user, admin_pass)
7072

7173
# Make user created user is there.
7274
res_data = listUsers(admin_session)
@@ -94,7 +96,7 @@ def custom_user_setup():
9496
@pytest.fixture(autouse=True)
9597
def access_token_setup():
9698
"""Fixture to execute asserts before and after a test is run"""
97-
admin_session = loginAs("datahub", "datahub")
99+
admin_session = loginAs(admin_user, admin_pass)
98100

99101
res_data = listAccessTokens(admin_session)
100102
assert res_data
@@ -114,7 +116,7 @@ def access_token_setup():
114116

115117
@pytest.mark.dependency(depends=["test_healthchecks"])
116118
def test_admin_can_create_list_and_revoke_tokens(wait_for_healthchecks):
117-
admin_session = loginAs("datahub", "datahub")
119+
admin_session = loginAs(admin_user, admin_pass)
118120

119121
# Using a super account, there should be no tokens
120122
res_data = listAccessTokens(admin_session)
@@ -124,12 +126,12 @@ def test_admin_can_create_list_and_revoke_tokens(wait_for_healthchecks):
124126
assert len(res_data["data"]["listAccessTokens"]["tokens"]) == 0
125127

126128
# Using a super account, generate a token for itself.
127-
res_data = generateAccessToken_v2(admin_session, "urn:li:corpuser:datahub")
129+
res_data = generateAccessToken_v2(admin_session, f"urn:li:corpuser:{admin_user}")
128130
assert res_data
129131
assert res_data["data"]
130132
assert res_data["data"]["createAccessToken"]
131133
assert res_data["data"]["createAccessToken"]["accessToken"]
132-
assert res_data["data"]["createAccessToken"]["metadata"]["actorUrn"] == "urn:li:corpuser:datahub"
134+
assert res_data["data"]["createAccessToken"]["metadata"]["actorUrn"] == f"urn:li:corpuser:{admin_user}"
133135
admin_tokenId = res_data["data"]["createAccessToken"]["metadata"]["id"]
134136
# Sleep for eventual consistency
135137
sleep(3)
@@ -140,8 +142,8 @@ def test_admin_can_create_list_and_revoke_tokens(wait_for_healthchecks):
140142
assert res_data["data"]
141143
assert res_data["data"]["listAccessTokens"]["total"] is not None
142144
assert len(res_data["data"]["listAccessTokens"]["tokens"]) == 1
143-
assert res_data["data"]["listAccessTokens"]["tokens"][0]["actorUrn"] == "urn:li:corpuser:datahub"
144-
assert res_data["data"]["listAccessTokens"]["tokens"][0]["ownerUrn"] == "urn:li:corpuser:datahub"
145+
assert res_data["data"]["listAccessTokens"]["tokens"][0]["actorUrn"] == f"urn:li:corpuser:{admin_user}"
146+
assert res_data["data"]["listAccessTokens"]["tokens"][0]["ownerUrn"] == f"urn:li:corpuser:{admin_user}"
145147

146148
# Check that the super account can revoke tokens that it created
147149
res_data = revokeAccessToken(admin_session, admin_tokenId)
@@ -161,7 +163,7 @@ def test_admin_can_create_list_and_revoke_tokens(wait_for_healthchecks):
161163

162164
@pytest.mark.dependency(depends=["test_healthchecks"])
163165
def test_admin_can_create_and_revoke_tokens_for_other_user(wait_for_healthchecks):
164-
admin_session = loginAs("datahub", "datahub")
166+
admin_session = loginAs(admin_user, admin_pass)
165167

166168
# Using a super account, there should be no tokens
167169
res_data = listAccessTokens(admin_session)
@@ -188,7 +190,7 @@ def test_admin_can_create_and_revoke_tokens_for_other_user(wait_for_healthchecks
188190
assert res_data["data"]["listAccessTokens"]["total"] is not None
189191
assert len(res_data["data"]["listAccessTokens"]["tokens"]) == 1
190192
assert res_data["data"]["listAccessTokens"]["tokens"][0]["actorUrn"] == "urn:li:corpuser:user"
191-
assert res_data["data"]["listAccessTokens"]["tokens"][0]["ownerUrn"] == "urn:li:corpuser:datahub"
193+
assert res_data["data"]["listAccessTokens"]["tokens"][0]["ownerUrn"] == f"urn:li:corpuser:{admin_user}"
192194

193195
# Check that the super account can revoke tokens that it created for another user
194196
res_data = revokeAccessToken(admin_session, user_tokenId)
@@ -249,7 +251,7 @@ def test_non_admin_can_create_list_revoke_tokens(wait_for_healthchecks):
249251

250252
@pytest.mark.dependency(depends=["test_healthchecks"])
251253
def test_admin_can_manage_tokens_generated_by_other_user(wait_for_healthchecks):
252-
admin_session = loginAs("datahub", "datahub")
254+
admin_session = loginAs(admin_user, admin_pass)
253255

254256
# Using a super account, there should be no tokens
255257
res_data = listAccessTokens(admin_session)
@@ -273,7 +275,7 @@ def test_admin_can_manage_tokens_generated_by_other_user(wait_for_healthchecks):
273275

274276
# Admin should be able to list other tokens
275277
user_session.cookies.clear()
276-
admin_session = loginAs("datahub", "datahub")
278+
admin_session = loginAs(admin_user, admin_pass)
277279
res_data = listAccessTokens(admin_session, [{"field": "ownerUrn","value": "urn:li:corpuser:user"}])
278280
assert res_data
279281
assert res_data["data"]
@@ -285,7 +287,7 @@ def test_admin_can_manage_tokens_generated_by_other_user(wait_for_healthchecks):
285287

286288
# Admin can delete token created by someone else.
287289
admin_session.cookies.clear()
288-
admin_session = loginAs("datahub", "datahub")
290+
admin_session = loginAs(admin_user, admin_pass)
289291
res_data = revokeAccessToken(admin_session, user_tokenId)
290292
assert res_data
291293
assert res_data["data"]
@@ -304,7 +306,7 @@ def test_admin_can_manage_tokens_generated_by_other_user(wait_for_healthchecks):
304306
assert len(res_data["data"]["listAccessTokens"]["tokens"]) == 0
305307

306308
# Using the super account, check that all tokens where removed.
307-
admin_session = loginAs("datahub", "datahub")
309+
admin_session = loginAs(admin_user, admin_pass)
308310
res_data = listAccessTokens(admin_session, [{"field": "ownerUrn","value": "urn:li:corpuser:user"}])
309311
assert res_data
310312
assert res_data["data"]
@@ -315,7 +317,7 @@ def test_admin_can_manage_tokens_generated_by_other_user(wait_for_healthchecks):
315317
def test_non_admin_can_not_generate_tokens_for_others(wait_for_healthchecks):
316318
user_session = loginAs("user", "user")
317319
# Normal user should not be able to generate token for another user
318-
res_data = generateAccessToken_v2(user_session, "urn:li:corpuser:datahub")
320+
res_data = generateAccessToken_v2(user_session, f"urn:li:corpuser:{admin_user}")
319321
assert res_data
320322
assert res_data["errors"]
321323
assert res_data["errors"][0]["message"] == "Unauthorized to perform this action. Please contact your DataHub administrator."

smoke-test/tests/utils.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
from datahub.ingestion.run.pipeline import Pipeline
88
from datahub.cli.docker import check_local_docker_containers
99

10+
def get_admin_credentials():
11+
return ("datahub", "datahub")
1012

1113
def get_gms_url():
1214
return os.getenv("DATAHUB_GMS_URL") or "http://localhost:8080"

0 commit comments

Comments
 (0)