Esempio n. 1
0
def test_valid_map():
    tmap = TMap(key_type=TI32(), value_type=TString())
    assert tmap.validate_arg({}) is None
    assert tmap.validate_arg({3: "dog", 4: "cat"}) is None
    nested_tmap = TMap(key_type=TI32(),
                       value_type=TMap(key_type=TString(), value_type=TI32()))
    assert nested_tmap.validate_arg({3: {"test": 4}, 1: {"map": 3231}}) is None
def test_exception():
    exceptional_thrift = load_thrift_from_testdir("exceptional.thrift")
    expected = ServiceEndpoint(
        name="ping",
        args=[],
        results=[
            ThriftSpec(
                field_id=1,
                name="omg",
                type_info=TStruct(
                    name="OMGException",
                    fields=[
                        ThriftSpec(
                            field_id=1,
                            name="description",
                            type_info=TString(),
                            required=True,
                        )
                    ],
                ),
                required=False,
            )
        ],
    )
    assert expected == thrift_parser._parse_thrift_endpoint(
        exceptional_thrift.__thrift_meta__["services"][0], "ping")
def test_set_list_types():
    collections_thrift = load_thrift_from_testdir("collections.thrift")
    expected = ServiceEndpoint(
        name="setsAndLists",
        args=[
            ThriftSpec(
                field_id=1,
                name="listOfDoubles",
                type_info=TList(value_type=TDouble()),
                required=False,
            ),
            ThriftSpec(
                field_id=2,
                name="binarySet",
                type_info=TSet(value_type=TString()),
                required=False,
            ),
        ],
        results=[
            ThriftSpec(
                field_id=0,
                name="success",
                type_info=TSet(value_type=TByte()),
                required=False,
            )
        ],
    )
    result = thrift_parser._parse_thrift_endpoint(
        collections_thrift.__thrift_meta__["services"][0], "setsAndLists")
    assert expected == result
Esempio n. 4
0
def superhero_struct():
    return TStruct(
        name="super_hero",
        fields=[
            ThriftSpec(field_id=1,
                       name="name",
                       type_info=TString(),
                       required=True),
            ThriftSpec(
                field_id=2,
                name="villains",
                type_info=TList(value_type=TString()),
                required=False,
            ),
        ],
    )
def test_struct_type():
    struct_thrift = load_thrift_from_testdir("structThrift.thrift")
    my_int_struct = ThriftSpec(name="myIntStruct",
                               type_info=TI64(),
                               required=True)
    my_other_struct = ThriftSpec(
        name="myOtherStruct",
        type_info=TStruct(
            name="MyOtherStruct",
            fields=[
                ThriftSpec(name="id", type_info=TString(), required=True),
                ThriftSpec(name="ints",
                           type_info=TList(value_type=TI64()),
                           required=True),
            ],
        ),
        required=False,
    )
    expected = ServiceEndpoint(
        name="getMyStruct",
        args=[],
        results=[
            ThriftSpec(
                name="success",
                type_info=TStruct(name="MyStruct",
                                  fields=[my_int_struct, my_other_struct]),
                required=False,
            )
        ],
    )
    result = thrift_parser._parse_thrift_endpoint(
        struct_thrift.__thrift_meta__["services"][0], "getMyStruct")
    assert expected == result
def test_required_argument_missing(example_thrift_manager):
    request = _build_request(endpoint_name="completeTask", request_body={})
    assert [
        FieldError(
            arg_spec=ThriftSpec(name="taskId",
                                type_info=TString(),
                                required=True),
            code=ErrorCode.REQUIRED_FIELD_MISSING,
            message="Required Field 'taskId' not found",
        )
    ] == example_thrift_manager.validate_request(request)
def test_request_body_has_invalid_data(example_thrift_manager):
    request = _build_request(endpoint_name="completeTask",
                             request_body={"taskId": [4]})
    assert [
        FieldError(
            arg_spec=ThriftSpec(name="taskId",
                                type_info=TString(),
                                required=True),
            code=ErrorCode.FIELD_VALIDATION_ERROR,
            message="Expected str but got list",
        )
    ] == example_thrift_manager.validate_request(request)
def test_basic_thrift_types():
    simple_type_thrift = load_thrift_from_testdir("simpleType.thrift")
    expected = ServiceEndpoint(
        name="returnInt",
        args=[
            ThriftSpec(name="intParameter", type_info=TI32(), required=False),
            ThriftSpec(name="stringParameter",
                       type_info=TString(),
                       required=False),
        ],
        results=[ThriftSpec(name="success", type_info=TI32(), required=False)],
    )
    assert expected == thrift_parser._parse_thrift_endpoint(
        simple_type_thrift.__thrift_meta__["services"][0], "returnInt")
Esempio n. 9
0
def test_invalid_map():
    tmap = TMap(key_type=TI32(), value_type=TString())
    assert tmap.validate_arg(4) == ["Expected dict but got int"]
    assert tmap.validate_arg({
        3: 4,
        5: 2
    }) == [
        "Value for key '3' in map invalid: 'Expected str but got int'",
        "Value for key '5' in map invalid: 'Expected str but got int'",
    ]
    assert tmap.validate_arg({
        "3": 4,
        5: "2"
    }) == [
        "Key '3' in map invalid: 'Expected int but got str'",
        "Value for key '3' in map invalid: 'Expected str but got int'",
    ]
def test_super_nesting():
    turducken_thrift = load_thrift_from_testdir("turducken.thrift")
    dog_names_to_values = {"GOLDEN": 0, "CORGI": 1, "BASSET": 2}
    dog_enum = TEnum(
        name="DOG",
        names_to_values=dog_names_to_values,
        values_to_names={
            value: key
            for key, value in dog_names_to_values.items()
        },
    )

    outer_value = TI64()
    inner_value = TList(value_type=TString())
    inner_key = TSet(value_type=TList(value_type=dog_enum))
    outer_key = TMap(key_type=inner_key, value_type=inner_value)

    map_field = TMap(key_type=outer_key, value_type=outer_value)

    expected = ServiceEndpoint(
        name="getTheStruct",
        args=[],
        results=[
            ThriftSpec(
                field_id=0,
                name="success",
                type_info=TStruct(
                    name="TheStruct",
                    fields=[
                        ThriftSpec(
                            field_id=1,
                            name="myInsaneStruct",
                            type_info=map_field,
                            required=True,
                        )
                    ],
                ),
                required=False,
            )
        ],
    )

    assert expected == thrift_parser._parse_thrift_endpoint(
        turducken_thrift.__thrift_meta__["services"][0], "getTheStruct")
Esempio n. 11
0
def test_invalid_string():
    assert TString().validate_arg(b"Batman") == "Expected str but got bytes"
    assert TString().validate_arg(4) == "Expected str but got int"
Esempio n. 12
0
def test_valid_string():
    assert TString().validate_arg("Batman") is None
Esempio n. 13
0
def test_translate_string():
    assert "Dog" == TString().format_arg_for_thrift("Dog", None)
Esempio n. 14
0
def test_invalid_set():
    assert TSet(value_type=TString()).validate_arg(
        []) == ["Expected set but got list"]
    assert TSet(value_type=TString()).validate_arg(
        {4}) == ["Invalid value in set: Expected str but got int"]
Esempio n. 15
0
def test_valid_set():
    assert TSet(value_type=TString()).validate_arg({"1", "2", "3"}) is None
    assert TSet(value_type=TString()).validate_arg(set()) is None
Esempio n. 16
0
def test_invalid_list():
    assert TList(value_type=TString()).validate_arg(
        set()) == ["Expected list but got set"]
    assert TList(value_type=TString()).validate_arg(
        [4]) == ["Index 0: Expected str but got int"]
Esempio n. 17
0
def test_valid_list():
    assert TList(value_type=TString()).validate_arg(["1", "2", "3"]) is None
    assert TList(value_type=TString()).validate_arg([]) is None
    assert (TList(value_type=TList(value_type=TI32())).validate_arg(
        [[1, 2], [4, 4]]) is None)