File: session_request_test.py

package info (click to toggle)
python-xknx 3.6.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 4,012 kB
  • sloc: python: 39,710; javascript: 8,556; makefile: 27; sh: 12
file content (36 lines) | stat: -rw-r--r-- 1,297 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
"""Unit test for KNX/IP SessionRequest objects."""

from xknx.knxip import HPAI, KNXIPFrame, SessionRequest
from xknx.knxip.knxip_enum import HostProtocol


class TestKNXIPSessionRequest:
    """Test class for KNX/IP SessionRequest objects."""

    def test_session_request(self) -> None:
        """Test parsing and streaming session request KNX/IP packet."""
        public_key = bytes.fromhex(
            "0a a2 27 b4 fd 7a 32 31"  # Diffie-Hellman Client Public Value X
            "9b a9 96 0a c0 36 ce 0e"
            "5c 45 07 b5 ae 55 16 1f"
            "10 78 b1 dc fb 3c b6 31"
        )
        raw = (
            bytes.fromhex(
                "06 10 09 51 00 2e"  # KNXnet/IP header
                "08 02 00 00 00 00 00 00"  # HPAI TCPv4
            )
            + public_key
        )
        knxipframe, _ = KNXIPFrame.from_knx(raw)

        assert isinstance(knxipframe.body, SessionRequest)
        assert knxipframe.body.control_endpoint == HPAI(protocol=HostProtocol.IPV4_TCP)
        assert knxipframe.body.ecdh_client_public_key == public_key

        assert knxipframe.to_knx() == raw

        session_request = SessionRequest(ecdh_client_public_key=public_key)
        knxipframe2 = KNXIPFrame.init_from_body(session_request)

        assert knxipframe2.to_knx() == raw