Benjamin-eecs/openrsi-commit-runtime-assets
0168
1#!/bin/bash2set -uxo pipefail3SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"4cd /workspace5git config --global --add safe.directory /workspace6mkdir -p /logs/verifier7git checkout d4fbbb7e70648af961ba0c5214812bc8cf3426f1 -- tests/test_core.py || true8git apply --verbose --reject - <<'EOF_R2E_TEST_PATCH'9diff --git a/tests/test_core.py b/tests/test_core.py10index 829a3fe..b78f9ef 10064411--- a/tests/test_core.py12+++ b/tests/test_core.py13@@ -1032,6 +1032,72 @@ def test_type_conversion_with_multiple_required(web_request, parser):14 parser.parse(args, web_request)15 16 17+@pytest.mark.parametrize("input_dict", multidicts)18+@pytest.mark.parametrize(19+ "setting",20+ ["is_multiple_true", "is_multiple_false", "is_multiple_notset", "list_field"],21+)22+def test_is_multiple_detection(web_request, parser, input_dict, setting):23+ # define a custom List-like type which deserializes string lists24+ str_instance = fields.String()25+26+ # this custom class "multiplexes" in that it can be given a single value or27+ # list of values -- a single value is treated as a string, and a list of28+ # values is treated as a list of strings29+ class CustomMultiplexingField(fields.Field):30+ def _deserialize(self, value, attr, data, **kwargs):31+ if isinstance(value, str):32+ return str_instance.deserialize(value, **kwargs)33+ return [str_instance.deserialize(v, **kwargs) for v in value]34+35+ def _serialize(self, value, attr, data, **kwargs):36+ if isinstance(value, str):37+ return str_instance._serialize(value, **kwargs)38+ return [str_instance._serialize(v, **kwargs) for v in value]39+40+ class CustomMultipleField(CustomMultiplexingField):41+ is_multiple = True42+43+ class CustomNonMultipleField(CustomMultiplexingField):44+ is_multiple = False45+46+ # the request's query params are the input multidict47+ web_request.query = input_dict48+49+ # case 1: is_multiple=True50+ if setting == "is_multiple_true":51+ # the multidict should unpack to a list of strings52+ #53+ # order is not necessarily guaranteed by the multidict implementations, but54+ # both values must be present55+ args = {"foos": CustomMultipleField()}56+ result = parser.parse(args, web_request, location="query")57+ assert result["foos"] in (["a", "b"], ["b", "a"])58+ # case 2: is_multiple=False59+ elif setting == "is_multiple_false":60+ # the multidict should unpack to a string61+ #62+ # either value may be returned, depending on the multidict implementation,63+ # but not both64+ args = {"foos": CustomNonMultipleField()}65+ result = parser.parse(args, web_request, location="query")66+ assert result["foos"] in ("a", "b")67+ # case 3: is_multiple is not set68+ elif setting == "is_multiple_notset":69+ # this should be the same as is_multiple=False70+ args = {"foos": CustomMultiplexingField()}71+ result = parser.parse(args, web_request, location="query")72+ assert result["foos"] in ("a", "b")73+ # case 4: the field is a List (special case)74+ elif setting == "list_field":75+ # this should behave like the is_multiple=True case76+ args = {"foos": fields.List(fields.Str())}77+ result = parser.parse(args, web_request, location="query")78+ assert result["foos"] in (["a", "b"], ["b", "a"])79+ else:80+ raise NotImplementedError81+82+83 def test_validation_errors_in_validator_are_passed_to_handle_error(parser, web_request):84 def validate(value):85 raise ValidationError("Something went wrong.")86 87EOF_R2E_TEST_PATCH88R2E_APPLY_RC=$?89if [ "$R2E_APPLY_RC" -ne 0 ]; then90 echo "0.000000" > /logs/verifier/reward.txt91 printf '%s' '{"reward": 0.0, "resolved": false, "parse_status": "test_patch_apply_failed"}' > /logs/verifier/reward-details.json92 echo "R2E: test_patch failed to apply (rc=$R2E_APPLY_RC) — failing closed" >&293 exit 094fi95( python -m pytest -v tests/test_core.py ) > /logs/verifier/test_output.log 2>&196TEST_EXIT_CODE=$?97cat /logs/verifier/test_output.log98python3 "$SCRIPT_DIR/verifier.py" --log /logs/verifier/test_output.log --f2p "$SCRIPT_DIR/f2p.json" --p2p "$SCRIPT_DIR/p2p.json" --test-cmds 'python -m pytest -v tests/test_core.py' --exit-code "$TEST_EXIT_CODE" --out-dir /logs/verifier || { [ "$TEST_EXIT_CODE" -eq 0 ] && echo "1.0" > /logs/verifier/reward.txt || echo "0.0" > /logs/verifier/reward.txt; }99git checkout d4fbbb7e70648af961ba0c5214812bc8cf3426f1 -- tests/test_core.py || true100exit 0101 