コード例 #1
0
ファイル: test_pyrflx.py プロジェクト: kug1977/RecordFlux
def test_ethernet_802_3(frame: MessageValue) -> None:
    frame.set("Destination", 2 ** 48 - 1)
    frame.set("Source", 0)
    frame.set("Type_Length_TPID", 46)
    frame.set("Type_Length", 46)
    frame.set(
        "Payload",
        (
            b"\x45\x00\x00\x14"
            b"\x00\x01\x00\x00"
            b"\x40\x00\x7c\xe7"
            b"\x7f\x00\x00\x01"
            b"\x7f\x00\x00\x01"
            b"\x00\x00\x00\x00"
            b"\x00\x00\x00\x00"
            b"\x00\x00\x00\x00"
            b"\x00\x00\x00\x00"
            b"\x00\x00\x00\x00"
            b"\x00\x00\x00\x00"
            b"\x00\x00"
        ),
    )
    assert frame.valid_message
    with open(f"{TESTDIR}/ethernet_802.3.raw", "rb") as raw:
        assert frame.bytestring == raw.read()
コード例 #2
0
def test_ethernet_set_nonlinear(ethernet_frame_value: MessageValue) -> None:
    assert ethernet_frame_value.accessible_fields == [
        "Destination", "Source", "Type_Length_TPID"
    ]
    ethernet_frame_value.set("Type_Length_TPID", 0x8100)
    ethernet_frame_value.set("TCI", 100)
    assert ethernet_frame_value.valid_fields == ["Type_Length_TPID", "TCI"]
コード例 #3
0
ファイル: test_pyrflx.py プロジェクト: kug1977/RecordFlux
def test_tlv_prev(tlv_checksum: MessageValue) -> None:
    # pylint: disable=protected-access
    tlv_checksum.set("Tag", "Msg_Data")
    assert tlv_checksum._prev_field("Tag") == INITIAL.name
    assert tlv_checksum._prev_field(INITIAL.name) == ""
    tlv_checksum.set("Tag", "Msg_Error")
    assert tlv_checksum._prev_field("Length") == ""
コード例 #4
0
def test_no_verification_sequence_nested_messages(
        sequence_message_package: Package,
        message_sequence_value: MessageValue) -> None:
    sequence_message_one = sequence_message_package.new_message(
        "Sequence_Element")
    sequence_message_one.set("Byte", 5)
    sequence_message_two = sequence_message_package.new_message(
        "Sequence_Element")
    sequence_message_two.set("Byte", 6)
    sequence: List[TypeValue] = [sequence_message_one, sequence_message_two]
    message_sequence_value.set("Length", 2)
    message_sequence_value.set("Sequence_Field", sequence)
    assert message_sequence_value.valid_message

    pyrflx_ = PyRFLX.from_specs(
        [SPEC_DIR / "sequence_message.rflx"],
        skip_model_verification=True,
        skip_message_verification=True,
    )
    sequence_message_package_unv = pyrflx_.package("Sequence_Message")
    sequence_message_unv = sequence_message_package_unv.new_message(
        "Message_Sequence")
    sequence_element_one_unv = sequence_message_package_unv.new_message(
        "Sequence_Element")
    sequence_element_one_unv.set("Byte", 5)
    sequence_element_two_unv = sequence_message_package_unv.new_message(
        "Sequence_Element")
    sequence_element_two_unv.set("Byte", 6)
    sequence_unv: List[TypeValue] = [
        sequence_element_one_unv, sequence_element_two_unv
    ]
    sequence_message_unv.set("Length", 2)
    sequence_message_unv.set("Sequence_Field", sequence_unv)
    assert sequence_message_unv.valid_message
    assert sequence_message_unv.bytestring == message_sequence_value.bytestring
コード例 #5
0
ファイル: test_pyrflx.py プロジェクト: kug1977/RecordFlux
def test_tls_invalid_outgoing(tls_record: MessageValue) -> None:
    tls_record.set("Tag", "INVALID")
    with pytest.raises(
        ValueError,
        match=r"none of the field conditions .* for field Length"
        " have been met by the assigned value: 16385",
    ):
        tls_record.set("Length", 2 ** 14 + 1)
コード例 #6
0
ファイル: test_pyrflx.py プロジェクト: kug1977/RecordFlux
def test_tlv_set_invalid_field(tlv_checksum: MessageValue) -> None:
    tlv_checksum.set("Tag", "Msg_Data")
    with pytest.raises(KeyError, match=r"cannot access field Value"):
        tlv_checksum.set("Value", b"")
    with pytest.raises(KeyError, match=r"cannot access field Checksum"):
        tlv_checksum.set("Checksum", 8)
    tlv_checksum.set("Tag", "Msg_Error")
    with pytest.raises(KeyError, match=r"cannot access field Length"):
        tlv_checksum.set("Length", 8)
コード例 #7
0
ファイル: test_pyrflx.py プロジェクト: kug1977/RecordFlux
def test_array_nested_messages(array_message_package: Package, array_message: MessageValue) -> None:
    array_message_one = array_message_package["Foo"]
    array_message_one.set("Byte", 5)
    array_message_two = array_message_package["Foo"]
    array_message_two.set("Byte", 6)
    foos: List[TypeValue] = [array_message_one, array_message_two]
    array_message.set("Length", 2)
    array_message.set("Bar", foos)
    assert array_message.valid_message
    assert array_message.bytestring == b"\x02\x05\x06"
コード例 #8
0
ファイル: test_pyrflx.py プロジェクト: kug1977/RecordFlux
def test_tls_fields(tls_record: MessageValue) -> None:
    assert tls_record.accessible_fields == ["Tag", "Legacy_Record_Version", "Length"]
    tls_record.set("Tag", "INVALID")
    tls_record.set("Length", 3)
    assert tls_record.accessible_fields == [
        "Tag",
        "Legacy_Record_Version",
        "Length",
        "Fragment",
    ]
コード例 #9
0
ファイル: test_pyrflx.py プロジェクト: kug1977/RecordFlux
def test_array_nested_values(array_type_foo: MessageValue) -> None:
    a = IntegerValue(ModularInteger("Array_Type.Byte_One", Number(256)))
    b = IntegerValue(ModularInteger("Array_Type.Byte_Two", Number(256)))
    c = IntegerValue(ModularInteger("Array_Type.Byte_Three", Number(256)))
    a.assign(5)
    b.assign(6)
    c.assign(7)
    byte_array = [a, b, c]
    array_type_foo.set("Length", 3)
    array_type_foo.set("Bytes", byte_array)
    assert array_type_foo.valid_message
    assert array_type_foo.bytestring == b"\x03\x05\x06\x07"
コード例 #10
0
ファイル: test_pyrflx.py プロジェクト: kug1977/RecordFlux
def test_valid_message(tlv_checksum: MessageValue) -> None:
    assert not tlv_checksum.valid_message
    tlv_checksum.set("Tag", "Msg_Error")
    assert tlv_checksum.valid_message
    tlv_checksum.set("Tag", "Msg_Data")
    assert not tlv_checksum.valid_message
    tlv_checksum.set("Length", 1)
    assert not tlv_checksum.valid_message
    tlv_checksum.set("Value", b"\x01")
    assert not tlv_checksum.valid_message
    tlv_checksum.set("Checksum", 0xFFFFFFFF)
    assert tlv_checksum.valid_message
コード例 #11
0
ファイル: test_pyrflx.py プロジェクト: kug1977/RecordFlux
def test_ethernet_final(frame: MessageValue) -> None:
    assert not frame.valid_message
    frame.set("Destination", 0)
    assert not frame.valid_message
    frame.set("Source", 1)
    assert not frame.valid_message
    frame.set("Type_Length_TPID", 46)
    assert not frame.valid_message
    frame.set("Type_Length", 46)
    assert not frame.valid_message
    frame.set("Payload", bytes(46))
    assert frame.valid_message
コード例 #12
0
ファイル: specs_test.py プロジェクト: Componolit/RecordFlux
def test_ipv4_generating_ipv4_option_value(ipv4_option_value: pyrflx.MessageValue) -> None:
    ipv4_option_value.set("Copied", "False")
    ipv4_option_value.set("Option_Class", "Debugging_And_Measurement")
    ipv4_option_value.set("Option_Number", 4)
    ipv4_option_value.set("Option_Length", 3)
    ipv4_option_value.set("Option_Data", b"\x2a")
    assert ipv4_option_value.valid_message
コード例 #13
0
ファイル: test_pyrflx.py プロジェクト: kug1977/RecordFlux
def test_ethernet_payload(frame: MessageValue) -> None:
    frame.set("Source", 0)
    frame.set("Destination", 0)
    frame.set("Type_Length_TPID", 47)
    frame.set("Type_Length", 1537)
    assert frame.accessible_fields == [
        "Destination",
        "Source",
        "Type_Length_TPID",
        "Type_Length",
        "Payload",
    ]
    frame.set("Payload", bytes(46))
    assert frame.valid_message
コード例 #14
0
def test_ethernet_set_tltpid(ethernet_frame_value: MessageValue) -> None:
    ethernet_frame_value.set("Destination", 0)
    ethernet_frame_value.set("Source", 1)
    ethernet_frame_value.set("Type_Length_TPID", 0x8100)
    assert ethernet_frame_value.valid_fields == [
        "Destination", "Source", "Type_Length_TPID"
    ]
    assert ethernet_frame_value.accessible_fields == [
        "Destination",
        "Source",
        "Type_Length_TPID",
        "TPID",
        "TCI",
        "Type_Length",
    ]
    ethernet_frame_value.set("Type_Length_TPID", 64)
    assert ethernet_frame_value.valid_fields == [
        "Destination", "Source", "Type_Length_TPID"
    ]
    assert ethernet_frame_value.accessible_fields == [
        "Destination",
        "Source",
        "Type_Length_TPID",
        "Type_Length",
    ]
コード例 #15
0
ファイル: specs_test.py プロジェクト: Componolit/RecordFlux
def test_ethernet_generating_ethernet_2(ethernet_frame_value: pyrflx.MessageValue) -> None:
    payload = (
        b"\x45\x00\x00\x2e\x00\x01\x00\x00\x40\x11\x7c\xbc"
        b"\x7f\x00\x00\x01\x7f\x00\x00\x01\x00\x35\x00\x35"
        b"\x00\x1a\x01\x4e\x00\x00\x00\x00\x00\x00\x00\x00"
        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
    )
    ethernet_frame_value.set("Destination", int("FFFFFFFFFFFF", 16))
    ethernet_frame_value.set("Source", int("0", 16))
    ethernet_frame_value.set("Type_Length_TPID", int("0800", 16))
    ethernet_frame_value.set("Type_Length", int("0800", 16))
    ethernet_frame_value.set("Payload", payload)
    with open(CAPTURED_DIR / "ethernet_ipv4_udp.raw", "rb") as file:
        msg_as_bytes: bytes = file.read()
    assert ethernet_frame_value.bytestring == msg_as_bytes
コード例 #16
0
ファイル: test_pyrflx.py プロジェクト: kug1977/RecordFlux
def test_tlv_generate(tlv_checksum: MessageValue) -> None:
    test_payload = b"\x01\x02\x03\x04\x05\x06\x07\x08"
    test_data = b"\x40\x08" + test_payload + b"\xff\xff\xff\xff"
    tlv_checksum.set("Tag", "Msg_Data")
    tlv_checksum.set("Length", 8)
    tlv_checksum.set("Value", test_payload)
    tlv_checksum.set("Checksum", 0xFFFFFFFF)
    assert tlv_checksum.bytestring == test_data
コード例 #17
0
ファイル: test_pyrflx.py プロジェクト: kug1977/RecordFlux
def test_ethernet_invalid(frame: MessageValue) -> None:
    frame.set("Destination", 2 ** 48 - 1)
    frame.set("Source", 0)
    frame.set("Type_Length_TPID", 1501)
    with pytest.raises(
        ValueError,
        match=r"none of the field conditions .* for field Type_Length"
        " have been met by the assigned value: 1501",
    ):
        frame.set("Type_Length", 1501)
コード例 #18
0
ファイル: test_pyrflx.py プロジェクト: kug1977/RecordFlux
def test_tlv_required_fields(tlv_checksum: MessageValue) -> None:
    assert tlv_checksum.required_fields == ["Tag"]
    tlv_checksum.set("Tag", "Msg_Data")
    assert tlv_checksum.required_fields == ["Length"]
    tlv_checksum.set("Length", 1)
    assert tlv_checksum.required_fields == ["Value", "Checksum"]
    tlv_checksum.set("Value", b"\x01")
    assert tlv_checksum.required_fields == ["Checksum"]
    tlv_checksum.set("Checksum", 0xFFFFFFFF)
    assert tlv_checksum.required_fields == []
コード例 #19
0
def test_sequence_message_serialization(
        sequence_message_package: Package,
        message_sequence_value: MessageValue) -> None:
    sequence_message_one = sequence_message_package.new_message(
        "Sequence_Element")
    sequence_message_one.set("Byte", 5)
    sequence_message_two = sequence_message_package.new_message(
        "Sequence_Element")
    sequence_message_two.set("Byte", 6)
    sequence: List[TypeValue] = [sequence_message_one, sequence_message_two]
    message_sequence_value.set("Length", 2)
    message_sequence_value.set("Sequence_Field", sequence)
    assert message_sequence_value.valid_message
    assert message_sequence_value.as_json() == {
        "Length": {
            "first": 0,
            "last": 7,
            "value": 2
        },
        "Sequence_Field": {
            "first":
            8,
            "last":
            23,
            "value": [
                {
                    "Byte": {
                        "first": 0,
                        "last": 7,
                        "value": 5
                    }
                },
                {
                    "Byte": {
                        "first": 0,
                        "last": 7,
                        "value": 6
                    }
                },
            ],
        },
    }
コード例 #20
0
ファイル: specs_test.py プロジェクト: Componolit/RecordFlux
def test_tlv_generating_tlv_data(tlv_message_value: pyrflx.MessageValue) -> None:
    expected = b"\x01\x00\x04\x00\x00\x00\x00"
    tlv_message_value.set("Tag", "Msg_Data")
    tlv_message_value.set("Length", 4)
    tlv_message_value.set("Value", b"\x00\x00\x00\x00")
    assert tlv_message_value.valid_message
    assert tlv_message_value.bytestring == expected
コード例 #21
0
ファイル: test_pyrflx.py プロジェクト: kug1977/RecordFlux
def test_tlv_first_unchecked(tlv_checksum: MessageValue) -> None:
    # pylint: disable=protected-access
    tlv_checksum.set("Tag", "Msg_Error")
    assert not isinstance(tlv_checksum._get_first_unchecked("Checksum"), Number)
    tlv_checksum.set("Tag", "Msg_Data")
    assert not isinstance(tlv_checksum._get_first_unchecked("Checksum"), Number)
    tlv_checksum.set("Length", 1)
    assert isinstance(tlv_checksum._get_first_unchecked("Checksum"), Number)
コード例 #22
0
ファイル: test_pyrflx.py プロジェクト: kug1977/RecordFlux
def test_check_nodes_opaque(tlv_checksum: MessageValue, frame: MessageValue) -> None:
    # pylint: disable=protected-access
    assert tlv_checksum._is_valid_opaque_field("Length")
    assert not tlv_checksum._is_valid_opaque_field("Value")
    frame.set("Destination", 2 ** 48 - 1)
    frame.set("Source", 0)
    frame.set("Type_Length_TPID", 1501)
    assert not frame._is_valid_opaque_field("Payload")
コード例 #23
0
ファイル: test_pyrflx.py プロジェクト: kug1977/RecordFlux
def test_tls_invalid_path(alert: MessageValue) -> None:
    alert.set("Level", "WARNING")
    alert.set("Description", "CLOSE_NOTIFY")
    assert alert.valid_message
    assert alert.valid_fields == ["Level", "Description"]
    alert.set("Level", "FATAL")
    assert not alert.valid_message
    assert alert.valid_fields == ["Level"]
コード例 #24
0
def test_ethernet_802_3(ethernet_frame_value: MessageValue) -> None:
    ethernet_frame_value.set("Destination", 2**48 - 1)
    ethernet_frame_value.set("Source", 0)
    ethernet_frame_value.set("Type_Length_TPID", 46)
    ethernet_frame_value.set("Type_Length", 46)
    ethernet_frame_value.set(
        "Payload",
        (b"\x45\x00\x00\x14"
         b"\x00\x01\x00\x00"
         b"\x40\x00\x7c\xe7"
         b"\x7f\x00\x00\x01"
         b"\x7f\x00\x00\x01"
         b"\x00\x00\x00\x00"
         b"\x00\x00\x00\x00"
         b"\x00\x00\x00\x00"
         b"\x00\x00\x00\x00"
         b"\x00\x00\x00\x00"
         b"\x00\x00\x00\x00"
         b"\x00\x00"),
    )
    assert ethernet_frame_value.valid_message
    with open(CAPTURED_DIR / "ethernet_802.3.raw", "rb") as raw:
        assert ethernet_frame_value.bytestring == raw.read()
コード例 #25
0
ファイル: specs_test.py プロジェクト: Componolit/RecordFlux
def test_ethernet_generating_ieee_802_3(ethernet_frame_value: pyrflx.MessageValue) -> None:
    payload = (
        b"\x45\x00\x00\x14\x00\x01\x00\x00\x40\x00\x7c\xe7"
        b"\x7f\x00\x00\x01\x7f\x00\x00\x01\x00\x00\x00\x00"
        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
    )
    ethernet_frame_value.set("Destination", int("FFFFFFFFFFFF", 16))
    ethernet_frame_value.set("Source", int("0", 16))
    ethernet_frame_value.set("Type_Length_TPID", 46)
    ethernet_frame_value.set("Type_Length", 46)
    ethernet_frame_value.set("Payload", payload)
    assert ethernet_frame_value.valid_message
    with open(CAPTURED_DIR / "ethernet_802.3.raw", "rb") as file:
        msg_as_bytes: bytes = file.read()
    assert ethernet_frame_value.bytestring == msg_as_bytes
コード例 #26
0
def test_tls_invalid_path(tls_alert_value: MessageValue) -> None:
    tls_alert_value.set("Level", "WARNING")
    tls_alert_value.set("Description", "CLOSE_NOTIFY")
    assert tls_alert_value.valid_message
    assert tls_alert_value.valid_fields == ["Level", "Description"]
    tls_alert_value.set("Level", "FATAL")
    assert not tls_alert_value.valid_message
    assert tls_alert_value.valid_fields == ["Level"
                                            ]  # type: ignore[unreachable]
コード例 #27
0
def test_no_verification_ethernet(ethernet_frame_value: MessageValue) -> None:
    payload = (b"\x45\x00\x00\x2e\x00\x01\x00\x00\x40\x11\x7c\xbc"
               b"\x7f\x00\x00\x01\x7f\x00\x00\x01\x00\x35\x00\x35"
               b"\x00\x1a\x01\x4e\x00\x00\x00\x00\x00\x00\x00\x00"
               b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00")
    ethernet_frame_value.set("Destination", int("FFFFFFFFFFFF", 16))
    ethernet_frame_value.set("Source", int("0", 16))
    ethernet_frame_value.set("Type_Length_TPID", int("0800", 16))
    ethernet_frame_value.set("Type_Length", int("0800", 16))
    ethernet_frame_value.set("Payload", payload)
    assert ethernet_frame_value.valid_message
    pyrflx_ = PyRFLX.from_specs(
        [SPEC_DIR / "ethernet.rflx"],
        skip_model_verification=True,
        skip_message_verification=True,
    )
    frame_unv = pyrflx_.package("Ethernet").new_message("Frame")
    frame_unv.set("Destination", int("FFFFFFFFFFFF", 16))
    frame_unv.set("Source", int("0", 16))
    frame_unv.set("Type_Length_TPID", int("0800", 16))
    frame_unv.set("Type_Length", int("0800", 16))
    frame_unv.set("Payload", payload)
    assert frame_unv.valid_message
    assert frame_unv.bytestring == ethernet_frame_value.bytestring
コード例 #28
0
ファイル: test_pyrflx.py プロジェクト: kug1977/RecordFlux
def test_tlv_value(tlv_checksum: MessageValue) -> None:
    v1 = b"\x01\x02\x03\x04\x05\x06\x07\x08"
    tlv_checksum.set("Tag", "Msg_Data")
    tlv_checksum.set("Length", 8)
    tlv_checksum.set("Value", v1)
    tlv_checksum.set("Checksum", 2 ** 32 - 1)
    assert tlv_checksum.get("Tag") == "Msg_Data"
    assert tlv_checksum.get("Length") == 8
    assert tlv_checksum.get("Value") == v1
    assert tlv_checksum.get("Checksum") == 0xFFFFFFFF
コード例 #29
0
ファイル: test_pyrflx.py プロジェクト: kug1977/RecordFlux
def test_set_value(tlv_checksum: MessageValue) -> None:
    v1 = b"\x01\x02\x03\x04\x05\x06\x07\x08"
    v2 = b"\x01\x02\x03\x04\x05\x06\x07\x08\x09\x10"
    tlv_checksum.set("Tag", "Msg_Data")
    tlv_checksum.set("Length", 8)
    tlv_checksum.set("Value", v1)
    with pytest.raises(
        ValueError,
        match="invalid data length: input length is 80 while expected input length is 64",
    ):
        tlv_checksum.set("Value", v2)
コード例 #30
0
ファイル: test_pyrflx.py プロジェクト: kug1977/RecordFlux
def test_value_parse_from_bitstring(tlv: MessageValue, enum_value: EnumValue) -> None:
    # pylint: disable=protected-access
    intval = IntegerValue(ModularInteger("Test.Int", Number(256)))
    intval.parse(b"\x02")
    assert intval.value == 2
    enum_value.parse(b"\x01")
    assert enum_value.value == "One"
    msg_array = ArrayValue(Array("Test.MsgArray", tlv._type))
    tlv.set("Tag", "Msg_Data")
    tlv.set("Length", 4)
    tlv.set("Value", b"\x00\x00\x00\x00")
    msg_array.parse(tlv.bytestring)