Пример #1
0
def test_decode_nibbles_odd_no_pad() -> None:
    spec = copy.deepcopy(iso8583.specs.default)
    spec["t"]["data_enc"] = "ascii"
    spec["p"]["data_enc"] = "ascii"

    spec["2"]["data_enc"] = "b"
    spec["2"]["len_enc"] = "bcd"
    spec["2"]["len_type"] = 2
    spec["2"]["max_len"] = 8
    spec["2"]["len_count"] = "nibbles"

    data = b"02004000000000000000\x00\x03\x12\x30"
    with pytest.raises(
        iso8583.DecodeError,
        match="Field data is 4 nibbles, expecting 3: field 2 pos 22",
    ):
        iso8583.decode(data, spec=spec)
Пример #2
0
def test_decode_nibbles_fixed_missing() -> None:
    """Fixed field is missing"""
    spec = copy.deepcopy(iso8583.specs.default)
    spec["t"]["data_enc"] = "ascii"
    spec["p"]["data_enc"] = "ascii"

    spec["2"]["data_enc"] = "ascii"
    spec["2"]["len_enc"] = "ascii"
    spec["2"]["len_type"] = 0
    spec["2"]["max_len"] = 4
    spec["2"]["len_count"] = "nibbles"

    s = b"02004000000000000000"
    with pytest.raises(
        iso8583.DecodeError,
        match="Field data is 0 nibbles, expecting 4: field 2 pos 20",
    ):
        iso8583.decode(s, spec=spec)
Пример #3
0
def test_decode_nibbles_variable_partial() -> None:
    """Variable field is provided partially"""
    spec = copy.deepcopy(iso8583.specs.default)
    spec["t"]["data_enc"] = "ascii"
    spec["p"]["data_enc"] = "ascii"

    spec["2"]["data_enc"] = "ascii"
    spec["2"]["len_enc"] = "ascii"
    spec["2"]["len_type"] = 2
    spec["2"]["max_len"] = 4
    spec["2"]["len_count"] = "nibbles"

    s = b"02004000000000000000041"
    with pytest.raises(
        iso8583.DecodeError,
        match="Field data is 2 nibbles, expecting 4: field 2 pos 22",
    ):
        iso8583.decode(s, spec=spec)
Пример #4
0
def test_decode_nibbles_variable_over_max() -> None:
    """Variable field length is over maximum allowed"""
    spec = copy.deepcopy(iso8583.specs.default)
    spec["t"]["data_enc"] = "ascii"
    spec["p"]["data_enc"] = "ascii"

    spec["2"]["data_enc"] = "ascii"
    spec["2"]["len_enc"] = "ascii"
    spec["2"]["len_type"] = 2
    spec["2"]["max_len"] = 4
    spec["2"]["len_count"] = "nibbles"

    s = b"02004000000000000000081234"
    with pytest.raises(
        iso8583.DecodeError,
        match="Field data is 8 nibbles, larger than maximum 4: field 2 pos 20",
    ):
        iso8583.decode(s, spec=spec)
Пример #5
0
def test_decode_nibbles(
    data_enc: str,
    len_enc: str,
    len_type: int,
    max_len: int,
    len_count: str,
    data: bytes,
    result_f2_len: bytes,
) -> None:
    spec = copy.deepcopy(iso8583.specs.default)
    spec["t"]["data_enc"] = "ascii"
    spec["p"]["data_enc"] = "ascii"

    spec["2"]["data_enc"] = data_enc
    spec["2"]["len_enc"] = len_enc
    spec["2"]["len_type"] = len_type
    spec["2"]["max_len"] = max_len
    spec["2"]["len_count"] = len_count

    decoded, encoded = iso8583.decode(data, spec)

    assert decoded["2"] == "1234"
    assert encoded["2"]["len"] == result_f2_len