Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion packages/syft/src/syft/service/code/user_code_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -357,10 +357,13 @@ def is_execution_allowed(
return IsExecutionAllowedEnum.OUTPUT_POLICY_NONE

try:
output_policy.is_valid(context)
output_policy_is_valid = output_policy.is_valid(context)
except Exception:
return IsExecutionAllowedEnum.INVALID_OUTPUT_POLICY

if not output_policy_is_valid:
return IsExecutionAllowedEnum.INVALID_OUTPUT_POLICY

return IsExecutionAllowedEnum.ALLOWED

def is_execution_on_owned_args_allowed(self, context: AuthedServiceContext) -> bool:
Expand Down
59 changes: 59 additions & 0 deletions packages/syft/tests/syft/service/code/user_code_service_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# stdlib
from unittest.mock import Mock

# syft absolute
from syft.service.code.user_code_service import HasCodePermissionEnum
from syft.service.code.user_code_service import IsExecutionAllowedEnum
from syft.service.code.user_code_service import UserCodeService


class _Result:
def __init__(self, value):
self.value = value

def unwrap(self):
return self.value


def _approved_code():
status = Mock()
status.get_is_approved.return_value = True

code = Mock()
code.get_status.return_value = _Result(status)
code.is_output_policy_approved.return_value = True
return code


def _service_with_code_permission():
service = UserCodeService.__new__(UserCodeService)
service.has_code_permission = Mock(return_value=HasCodePermissionEnum.ACCEPTED)
return service


def test_is_execution_allowed_rejects_false_output_policy() -> None:
service = _service_with_code_permission()
output_policy = Mock()
output_policy.is_valid.return_value = False

result = service.is_execution_allowed(
code=_approved_code(),
context=Mock(),
output_policy=output_policy,
)

assert result is IsExecutionAllowedEnum.INVALID_OUTPUT_POLICY


def test_is_execution_allowed_accepts_true_output_policy() -> None:
service = _service_with_code_permission()
output_policy = Mock()
output_policy.is_valid.return_value = True

result = service.is_execution_allowed(
code=_approved_code(),
context=Mock(),
output_policy=output_policy,
)

assert result is IsExecutionAllowedEnum.ALLOWED