166 lines
4.8 KiB
Python
166 lines
4.8 KiB
Python
import json
|
|
import re
|
|
|
|
from moto.swf.exceptions import (
|
|
SWFClientError,
|
|
SWFUnknownResourceFault,
|
|
SWFDomainAlreadyExistsFault,
|
|
SWFDomainDeprecatedFault,
|
|
SWFSerializationException,
|
|
SWFTypeAlreadyExistsFault,
|
|
SWFTypeDeprecatedFault,
|
|
SWFWorkflowExecutionAlreadyStartedFault,
|
|
SWFDefaultUndefinedFault,
|
|
SWFValidationException,
|
|
SWFDecisionValidationException,
|
|
)
|
|
from moto.swf.models import WorkflowType
|
|
|
|
|
|
def test_swf_client_error():
|
|
ex = SWFClientError("ASpecificType", "error message")
|
|
|
|
assert ex.code == 400
|
|
assert json.loads(ex.get_body()) == {
|
|
"__type": "ASpecificType",
|
|
"message": "error message",
|
|
}
|
|
|
|
|
|
def test_swf_unknown_resource_fault():
|
|
ex = SWFUnknownResourceFault("type", "detail")
|
|
|
|
assert ex.code == 400
|
|
assert json.loads(ex.get_body()) == {
|
|
"__type": "com.amazonaws.swf.base.model#UnknownResourceFault",
|
|
"message": "Unknown type: detail",
|
|
}
|
|
|
|
|
|
def test_swf_unknown_resource_fault_with_only_one_parameter():
|
|
ex = SWFUnknownResourceFault("foo bar baz")
|
|
|
|
assert ex.code == 400
|
|
assert json.loads(ex.get_body()) == {
|
|
"__type": "com.amazonaws.swf.base.model#UnknownResourceFault",
|
|
"message": "Unknown foo bar baz",
|
|
}
|
|
|
|
|
|
def test_swf_domain_already_exists_fault():
|
|
ex = SWFDomainAlreadyExistsFault("domain-name")
|
|
|
|
assert ex.code == 400
|
|
assert json.loads(ex.get_body()) == {
|
|
"__type": "com.amazonaws.swf.base.model#DomainAlreadyExistsFault",
|
|
"message": "domain-name",
|
|
}
|
|
|
|
|
|
def test_swf_domain_deprecated_fault():
|
|
ex = SWFDomainDeprecatedFault("domain-name")
|
|
|
|
assert ex.code == 400
|
|
assert json.loads(ex.get_body()) == {
|
|
"__type": "com.amazonaws.swf.base.model#DomainDeprecatedFault",
|
|
"message": "domain-name",
|
|
}
|
|
|
|
|
|
def test_swf_serialization_exception():
|
|
ex = SWFSerializationException("value")
|
|
|
|
assert ex.code == 400
|
|
assert json.loads(ex.get_body()) == {
|
|
"__type": "com.amazonaws.swf.base.model#SerializationException",
|
|
"message": (
|
|
"class java.lang.Foo can not be converted to an String (not "
|
|
"a real SWF exception ; happened on: value)"
|
|
),
|
|
}
|
|
|
|
|
|
def test_swf_type_already_exists_fault():
|
|
wft = WorkflowType("wf-name", "wf-version")
|
|
ex = SWFTypeAlreadyExistsFault(wft)
|
|
|
|
assert ex.code == 400
|
|
assert json.loads(ex.get_body()) == {
|
|
"__type": "com.amazonaws.swf.base.model#TypeAlreadyExistsFault",
|
|
"message": "WorkflowType=[name=wf-name, version=wf-version]",
|
|
}
|
|
|
|
|
|
def test_swf_type_deprecated_fault():
|
|
wft = WorkflowType("wf-name", "wf-version")
|
|
ex = SWFTypeDeprecatedFault(wft)
|
|
|
|
assert ex.code == 400
|
|
assert json.loads(ex.get_body()) == {
|
|
"__type": "com.amazonaws.swf.base.model#TypeDeprecatedFault",
|
|
"message": "WorkflowType=[name=wf-name, version=wf-version]",
|
|
}
|
|
|
|
|
|
def test_swf_workflow_execution_already_started_fault():
|
|
ex = SWFWorkflowExecutionAlreadyStartedFault()
|
|
|
|
assert ex.code == 400
|
|
assert json.loads(ex.get_body()) == {
|
|
"__type": "com.amazonaws.swf.base.model#WorkflowExecutionAlreadyStartedFault",
|
|
"message": "Already Started",
|
|
}
|
|
|
|
|
|
def test_swf_default_undefined_fault():
|
|
ex = SWFDefaultUndefinedFault("execution_start_to_close_timeout")
|
|
|
|
assert ex.code == 400
|
|
assert json.loads(ex.get_body()) == {
|
|
"__type": "com.amazonaws.swf.base.model#DefaultUndefinedFault",
|
|
"message": "executionStartToCloseTimeout",
|
|
}
|
|
|
|
|
|
def test_swf_validation_exception():
|
|
ex = SWFValidationException("Invalid token")
|
|
|
|
assert ex.code == 400
|
|
assert json.loads(ex.get_body()) == {
|
|
"__type": "com.amazon.coral.validate#ValidationException",
|
|
"message": "Invalid token",
|
|
}
|
|
|
|
|
|
def test_swf_decision_validation_error():
|
|
ex = SWFDecisionValidationException(
|
|
[
|
|
{
|
|
"type": "null_value",
|
|
"where": "decisions.1.member.startTimerDecisionAttributes.startToFireTimeout",
|
|
},
|
|
{
|
|
"type": "bad_decision_type",
|
|
"value": "FooBar",
|
|
"where": "decisions.1.member.decisionType",
|
|
"possible_values": "Foo, Bar, Baz",
|
|
},
|
|
]
|
|
)
|
|
|
|
assert ex.code == 400
|
|
assert ex.error_type == "com.amazon.coral.validate#ValidationException"
|
|
|
|
msg = ex.get_body()
|
|
assert re.search(r"2 validation errors detected:", msg)
|
|
assert re.search(
|
|
r"Value null at 'decisions.1.member.startTimerDecisionAttributes.startToFireTimeout' "
|
|
r"failed to satisfy constraint: Member must not be null;",
|
|
msg,
|
|
)
|
|
assert re.search(
|
|
r"Value 'FooBar' at 'decisions.1.member.decisionType' failed to satisfy constraint: "
|
|
r"Member must satisfy enum value set: \[Foo, Bar, Baz\]",
|
|
msg,
|
|
)
|