graphql-engine/server/tests-py/test_roles_inheritance.py
Samir Talwar 133a9b7452 server/tests-py: Generate random ports for helper services.
If the tests are run with specific ports assigned to specific services,
set through the environment variables, we continue to use those ports.
We just don't hard-code them now, we pick them up from the environment
variables.

However, if the environment variables are not set, we generate a random
port for each service. This allows us to run multiple tests in parallel
in the future, independently.

PR-URL: https://github.com/hasura/graphql-engine-mono/pull/6218
GitOrigin-RevId: 3d2a1880bf67544c848951888ce7b4fa1ba379dc
2022-10-21 17:34:21 +00:00

92 lines
3.5 KiB
Python

import pytest
from conftest import extract_server_address_from, use_action_fixtures
from remote_server import NodeGraphQL
from validate import check_query_f
pytestmark = [
pytest.mark.admin_secret,
pytest.mark.hge_env('HASURA_GRAPHQL_ENABLE_REMOTE_SCHEMA_PERMISSIONS', 'true'),
]
@pytest.fixture(scope='class')
@pytest.mark.early
def graphql_service(hge_fixture_env: dict[str, str]):
(_, port) = extract_server_address_from('GRAPHQL_SERVICE_1')
server = NodeGraphQL(["node", "remote_schemas/nodejs/remote_schema_perms.js"], port=port)
server.start()
print(f'{graphql_service.__name__} server started on {server.url}')
hge_fixture_env['GRAPHQL_SERVICE_1'] = server.url
yield server
server.stop()
@pytest.mark.usefixtures('per_class_db_schema_for_mutation_tests', 'per_method_db_data_for_mutation_tests')
class TestGraphQLMutationRolesInheritance:
@classmethod
def dir(cls):
return 'queries/graphql_mutation/roles_inheritance/'
setup_metadata_api_version = "v2"
def test_inheritance_from_single_parent(self, hge_ctx):
check_query_f(hge_ctx, self.dir() + 'inheritance_from_single_parent.yaml')
def test_inheritance_when_mutation_permissions_conflict(self, hge_ctx):
check_query_f(hge_ctx, self.dir() + 'resolve_inconsistent_permission.yaml')
def test_mutation_permission_inheritance_for_nested_roles(self, hge_ctx):
check_query_f(hge_ctx, self.dir() + 'inherited_mutation_permission_for_nested_roles.yaml')
def test_defined_permission_should_override_inherited_permission(self, hge_ctx):
check_query_f(hge_ctx, self.dir() + 'override_inherited_permission.yaml')
@pytest.mark.usefixtures('graphql_service', 'per_class_tests_db_state')
class TestRemoteSchemaPermissionsInheritance:
@classmethod
def dir(cls):
return "queries/remote_schemas/permissions/inheritance/"
setup_metadata_api_version = "v2"
def test_inheritance_from_multiple_parents_having_no_conflicts(self, hge_ctx):
check_query_f(hge_ctx, self.dir() + 'multiple_parents_inheritance.yaml')
def test_conflicting_parent_permissions(self, hge_ctx):
check_query_f(hge_ctx, self.dir() + 'conflicting_parent_permissions.yaml')
def test_override_inherited_permission(self, hge_ctx):
check_query_f(hge_ctx, self.dir() + 'override_inherited_permission.yaml')
@use_action_fixtures
class TestActionsPermissionInheritance:
@classmethod
def dir(cls):
return "queries/actions/roles_inheritance/"
setup_metadata_api_version = "2"
def test_inheritance_from_multiple_parents(self, hge_ctx):
check_query_f(hge_ctx, self.dir() + 'multiple_parents_inheritance.yaml')
def test_override_inherited_permission(self, hge_ctx):
check_query_f(hge_ctx, self.dir() + 'override_inherited_permission.yaml')
@pytest.mark.usefixtures('per_class_db_schema_for_mutation_tests', 'per_method_db_data_for_mutation_tests')
@pytest.mark.hge_env('HASURA_GRAPHQL_INFER_FUNCTION_PERMISSIONS', 'false')
class TestCustomFunctionPermissionsInheritance:
@classmethod
def dir(cls):
return "queries/graphql_mutation/functions/permissions/roles_inheritance/"
setup_metadata_api_version = "2"
def test_inheritance_from_multiple_parents(self, hge_ctx):
check_query_f(hge_ctx, self.dir() + 'multiple_parents_inheritance.yaml')
def test_override_inherited_permission(self, hge_ctx):
check_query_f(hge_ctx, self.dir() + 'override_inherited_permission.yaml')