910 |
910 |
assert qs['evalme'] == [formdata.get_display_id()]
|
911 |
911 |
assert qs['str'] == ['abcd']
|
912 |
912 |
|
|
913 |
def test_webservice_call_error_handling(pub):
|
|
914 |
pub.substitutions.feed(MockSubstitutionVariables())
|
|
915 |
|
|
916 |
FormDef.wipe()
|
|
917 |
formdef = FormDef()
|
|
918 |
formdef.name = 'baz'
|
|
919 |
formdef.fields = []
|
|
920 |
formdef.store()
|
|
921 |
|
|
922 |
formdata = formdef.data_class()()
|
|
923 |
formdata.just_created()
|
|
924 |
formdata.store()
|
|
925 |
|
|
926 |
item = WebserviceCallStatusItem()
|
|
927 |
item.url = 'http://remote.example.net/json-err1'
|
|
928 |
item.post = False
|
|
929 |
item.action_on_app_error = ':stop'
|
|
930 |
item.action_on_4xx = ':pass'
|
|
931 |
item.action_on_5xx = ':pass'
|
|
932 |
item.action_on_network_errors = ':pass'
|
|
933 |
with pytest.raises(AbortActionException):
|
|
934 |
item.perform(formdata)
|
|
935 |
|
|
936 |
item = WebserviceCallStatusItem()
|
|
937 |
item.url = 'http://remote.example.net/json-errheader1'
|
|
938 |
item.post = False
|
|
939 |
item.action_on_app_error = ':stop'
|
|
940 |
item.action_on_4xx = ':pass'
|
|
941 |
item.action_on_5xx = ':pass'
|
|
942 |
item.action_on_network_errors = ':pass'
|
|
943 |
with pytest.raises(AbortActionException):
|
|
944 |
item.perform(formdata)
|
|
945 |
|
|
946 |
item = WebserviceCallStatusItem()
|
|
947 |
item.url = 'http://remote.example.net/json-errheaderstr'
|
|
948 |
item.post = False
|
|
949 |
item.action_on_app_error = ':stop'
|
|
950 |
item.action_on_4xx = ':pass'
|
|
951 |
item.action_on_5xx = ':pass'
|
|
952 |
item.action_on_network_errors = ':pass'
|
|
953 |
with pytest.raises(AbortActionException):
|
|
954 |
item.perform(formdata)
|
|
955 |
|
|
956 |
item = WebserviceCallStatusItem()
|
|
957 |
item.url = 'http://remote.example.net/json-err0'
|
|
958 |
item.post = False
|
|
959 |
item.varname = 'xxx'
|
|
960 |
item.perform(formdata)
|
|
961 |
assert formdata.workflow_data['xxx_status'] == 200
|
|
962 |
assert formdata.workflow_data['xxx_app_error_code'] == 0
|
|
963 |
assert formdata.workflow_data['xxx_response'] == {'data': 'foo', 'err': 0}
|
|
964 |
assert formdata.workflow_data.get('xxx_time')
|
|
965 |
formdata.workflow_data = None
|
|
966 |
|
|
967 |
item = WebserviceCallStatusItem()
|
|
968 |
item.url = 'http://remote.example.net/json-err0'
|
|
969 |
item.post = False
|
|
970 |
item.varname = 'xxx'
|
|
971 |
item.action_on_app_error = ':stop'
|
|
972 |
item.perform(formdata)
|
|
973 |
assert formdata.workflow_data['xxx_status'] == 200
|
|
974 |
assert formdata.workflow_data['xxx_app_error_code'] == 0
|
|
975 |
assert formdata.workflow_data['xxx_response'] == {'data': 'foo', 'err': 0}
|
|
976 |
assert formdata.workflow_data.get('xxx_time')
|
|
977 |
formdata.workflow_data = None
|
|
978 |
|
|
979 |
item = WebserviceCallStatusItem()
|
|
980 |
item.url = 'http://remote.example.net/json-err1'
|
|
981 |
item.post = False
|
|
982 |
item.varname = 'xxx'
|
|
983 |
item.perform(formdata)
|
|
984 |
assert formdata.workflow_data['xxx_status'] == 200
|
|
985 |
assert formdata.workflow_data['xxx_app_error_code'] == 1
|
|
986 |
assert 'xxx_response' not in formdata.workflow_data
|
|
987 |
assert formdata.workflow_data.get('xxx_time')
|
|
988 |
formdata.workflow_data = None
|
|
989 |
|
|
990 |
item = WebserviceCallStatusItem()
|
|
991 |
item.url = 'http://remote.example.net/json-errstr'
|
|
992 |
item.post = False
|
|
993 |
item.varname = 'xxx'
|
|
994 |
item.perform(formdata)
|
|
995 |
assert formdata.workflow_data['xxx_status'] == 200
|
|
996 |
assert formdata.workflow_data['xxx_app_error_code'] == 'bug'
|
|
997 |
assert 'xxx_response' not in formdata.workflow_data
|
|
998 |
assert formdata.workflow_data.get('xxx_time')
|
|
999 |
formdata.workflow_data = None
|
|
1000 |
|
|
1001 |
item = WebserviceCallStatusItem()
|
|
1002 |
item.url = 'http://remote.example.net/json-err1'
|
|
1003 |
item.post = False
|
|
1004 |
item.varname = 'xxx'
|
|
1005 |
item.action_on_app_error = ':stop'
|
|
1006 |
with pytest.raises(AbortActionException):
|
|
1007 |
item.perform(formdata)
|
|
1008 |
assert formdata.workflow_data['xxx_status'] == 200
|
|
1009 |
assert formdata.workflow_data['xxx_app_error_code'] == 1
|
|
1010 |
assert formdata.workflow_data['xxx_error_response'] == {'data': '', 'err': 1}
|
|
1011 |
assert 'xxx_response' not in formdata.workflow_data
|
|
1012 |
assert formdata.workflow_data.get('xxx_time')
|
|
1013 |
formdata.workflow_data = None
|
|
1014 |
|
|
1015 |
item = WebserviceCallStatusItem()
|
|
1016 |
item.url = 'http://remote.example.net/json-errheader0'
|
|
1017 |
item.post = False
|
|
1018 |
item.varname = 'xxx'
|
|
1019 |
item.perform(formdata)
|
|
1020 |
assert formdata.workflow_data['xxx_status'] == 200
|
|
1021 |
assert formdata.workflow_data['xxx_app_error_code'] == 0
|
|
1022 |
assert formdata.workflow_data['xxx_app_error_header'] == '0'
|
|
1023 |
assert formdata.workflow_data['xxx_response'] == {'foo': 'bar'}
|
|
1024 |
assert formdata.workflow_data.get('xxx_time')
|
|
1025 |
formdata.workflow_data = None
|
|
1026 |
|
|
1027 |
item = WebserviceCallStatusItem()
|
|
1028 |
item.url = 'http://remote.example.net/json-errheader1'
|
|
1029 |
item.post = False
|
|
1030 |
item.varname = 'xxx'
|
|
1031 |
item.perform(formdata)
|
|
1032 |
assert formdata.workflow_data['xxx_status'] == 200
|
|
1033 |
assert formdata.workflow_data['xxx_app_error_code'] == 1
|
|
1034 |
assert formdata.workflow_data['xxx_app_error_header'] == '1'
|
|
1035 |
assert formdata.workflow_data['xxx_error_response'] == {'foo': 'bar'}
|
|
1036 |
assert 'xxx_response' not in formdata.workflow_data
|
|
1037 |
assert formdata.workflow_data.get('xxx_time')
|
|
1038 |
formdata.workflow_data = None
|
|
1039 |
|
|
1040 |
item = WebserviceCallStatusItem()
|
|
1041 |
item.url = 'http://remote.example.net/json-errheaderstr'
|
|
1042 |
item.post = False
|
|
1043 |
item.varname = 'xxx'
|
|
1044 |
item.perform(formdata)
|
|
1045 |
assert formdata.workflow_data['xxx_status'] == 200
|
|
1046 |
assert formdata.workflow_data['xxx_app_error_code'] == 'bug'
|
|
1047 |
assert formdata.workflow_data['xxx_app_error_header'] == 'bug'
|
|
1048 |
assert formdata.workflow_data['xxx_error_response'] == {'foo': 'bar'}
|
|
1049 |
assert 'xxx_response' not in formdata.workflow_data
|
|
1050 |
assert formdata.workflow_data.get('xxx_time')
|
|
1051 |
formdata.workflow_data = None
|
|
1052 |
|
|
1053 |
item = WebserviceCallStatusItem()
|
|
1054 |
item.url = 'http://remote.example.net/json-errheader1'
|
|
1055 |
item.post = False
|
|
1056 |
item.varname = 'xxx'
|
|
1057 |
item.action_on_app_error = ':stop'
|
|
1058 |
with pytest.raises(AbortActionException):
|
|
1059 |
item.perform(formdata)
|
|
1060 |
assert formdata.workflow_data['xxx_status'] == 200
|
|
1061 |
assert formdata.workflow_data['xxx_app_error_code'] == 1
|
|
1062 |
assert formdata.workflow_data['xxx_app_error_header'] == '1'
|
|
1063 |
assert formdata.workflow_data['xxx_error_response'] == {'foo': 'bar'}
|
|
1064 |
assert 'xxx_response' not in formdata.workflow_data
|
|
1065 |
assert formdata.workflow_data.get('xxx_time')
|
|
1066 |
formdata.workflow_data = None
|
|
1067 |
|
|
1068 |
item = WebserviceCallStatusItem()
|
|
1069 |
item.url = 'http://remote.example.net/xml-errheader'
|
|
1070 |
item.post = False
|
|
1071 |
item.varname = 'xxx'
|
|
1072 |
item.response_type = 'attachment'
|
|
1073 |
item.record_errors = True
|
|
1074 |
item.perform(formdata)
|
|
1075 |
assert formdata.workflow_data.get('xxx_status') == 200
|
|
1076 |
assert formdata.workflow_data.get('xxx_app_error_code') == 1
|
|
1077 |
assert formdata.workflow_data.get('xxx_app_error_header') == '1'
|
|
1078 |
assert 'xxx_response' not in formdata.workflow_data
|
|
1079 |
formdata.workflow_data = None
|
|
1080 |
|
|
1081 |
item = WebserviceCallStatusItem()
|
|
1082 |
item.url = 'http://remote.example.net/xml-errheader'
|
|
1083 |
item.post = False
|
|
1084 |
item.varname = 'xxx'
|
|
1085 |
item.response_type = 'attachment'
|
|
1086 |
item.record_errors = True
|
|
1087 |
item.action_on_app_error = ':stop'
|
|
1088 |
with pytest.raises(AbortActionException):
|
|
1089 |
item.perform(formdata)
|
|
1090 |
assert formdata.workflow_data.get('xxx_status') == 200
|
|
1091 |
assert formdata.workflow_data.get('xxx_app_error_code') == 1
|
|
1092 |
assert formdata.workflow_data.get('xxx_app_error_header') == '1'
|
|
1093 |
assert 'xxx_response' not in formdata.workflow_data
|
|
1094 |
formdata.workflow_data = None
|
|
1095 |
|
|
1096 |
item = WebserviceCallStatusItem()
|
|
1097 |
item.url = 'http://remote.example.net/xml-errheader'
|
|
1098 |
item.post = False
|
|
1099 |
item.varname = 'xxx'
|
|
1100 |
item.response_type = 'json' # wait for json but receive xml
|
|
1101 |
item.record_errors = True
|
|
1102 |
item.perform(formdata)
|
|
1103 |
assert formdata.workflow_data.get('xxx_status') == 200
|
|
1104 |
assert formdata.workflow_data.get('xxx_app_error_code') == 1
|
|
1105 |
assert formdata.workflow_data.get('xxx_app_error_header') == '1'
|
|
1106 |
assert 'xxx_response' not in formdata.workflow_data
|
|
1107 |
formdata.workflow_data = None
|
|
1108 |
|
|
1109 |
item = WebserviceCallStatusItem()
|
|
1110 |
item.url = 'http://remote.example.net/json-err1'
|
|
1111 |
item.post = False
|
|
1112 |
item.action_on_app_error = ':stop'
|
|
1113 |
item.response_type = 'attachment' # err value is not an error
|
|
1114 |
item.perform(formdata) # so, everything is "ok" here
|
|
1115 |
formdata.workflow_data = None
|
|
1116 |
|
|
1117 |
item = WebserviceCallStatusItem()
|
|
1118 |
item.url = 'http://remote.example.net/json-errheaderstr'
|
|
1119 |
item.post = False
|
|
1120 |
item.action_on_app_error = ':stop'
|
|
1121 |
item.response_type = 'attachment'
|
|
1122 |
with pytest.raises(AbortActionException):
|
|
1123 |
item.perform(formdata)
|
|
1124 |
formdata.workflow_data = None
|
913 |
1125 |
|
914 |
1126 |
def test_timeout(pub):
|
915 |
1127 |
workflow = Workflow(name='timeout')
|