Ejemplo n.º 1
0
 def test_connectionstate_request(self):
     """Test string representation of KNX/IP ConnectionStateRequest."""
     xknx = XKNX(loop=self.loop)
     connectionstate_request = ConnectionStateRequest(xknx)
     connectionstate_request.communication_channel_id = 23
     connectionstate_request.control_endpoint = HPAI(ip_addr='192.168.42.1', port=33941)
     self.assertEqual(
         str(connectionstate_request),
         '<ConnectionStateRequest CommunicationChannelID="23", control_endpoint="<HPAI 192.168.42.1:33941 />" />')
Ejemplo n.º 2
0
 def test_connectionstate_request(self):
     """Test string representation of KNX/IP ConnectionStateRequest."""
     xknx = XKNX(loop=self.loop)
     connectionstate_request = ConnectionStateRequest(xknx)
     connectionstate_request.communication_channel_id = 23
     connectionstate_request.control_endpoint = HPAI(ip_addr='192.168.42.1', port=33941)
     self.assertEqual(
         str(connectionstate_request),
         '<ConnectionStateRequest CommunicationChannelID="23", control_endpoint="<HPAI 192.168.42.1:33941 />" />')
Ejemplo n.º 3
0
 def test_connectionstate_request(self):
     """Test string representation of KNX/IP ConnectionStateRequest."""
     connectionstate_request = ConnectionStateRequest()
     connectionstate_request.communication_channel_id = 23
     connectionstate_request.control_endpoint = HPAI(ip_addr="192.168.42.1",
                                                     port=33941)
     assert (
         str(connectionstate_request) ==
         '<ConnectionStateRequest communication_channel_id="23", control_endpoint="192.168.42.1:33941/udp" />'
     )
Ejemplo n.º 4
0
 def create_knxipframe(self) -> KNXIPFrame:
     """Create KNX/IP Frame object to be sent to device."""
     connectionstate_request = ConnectionStateRequest(
         communication_channel_id=self.communication_channel_id,
         control_endpoint=self.local_hpai,
     )
     return KNXIPFrame.init_from_body(connectionstate_request)
Ejemplo n.º 5
0
 def create_knxipframe(self) -> KNXIPFrame:
     """Create KNX/IP Frame object to be sent to device."""
     (local_addr, local_port) = self.udpclient.getsockname()
     connectionstate_request = ConnectionStateRequest(
         self.xknx,
         communication_channel_id=self.communication_channel_id,
         control_endpoint=HPAI(ip_addr=local_addr, port=local_port),
     )
     return KNXIPFrame.init_from_body(connectionstate_request)
Ejemplo n.º 6
0
    def test_connectionstate(self):
        """Test connectionstateing from KNX bus."""
        xknx = XKNX()
        communication_channel_id = 23
        udp_client = UDPClient(xknx, ("192.168.1.1", 0), ("192.168.1.2", 1234))
        connectionstate = ConnectionState(xknx,
                                          udp_client,
                                          communication_channel_id,
                                          route_back=False)
        connectionstate.timeout_in_seconds = 0

        self.assertEqual(connectionstate.awaited_response_class,
                         ConnectionStateResponse)
        self.assertEqual(connectionstate.communication_channel_id,
                         communication_channel_id)

        # Expected KNX/IP-Frame:
        exp_knxipframe = KNXIPFrame.init_from_body(
            ConnectionStateRequest(
                xknx,
                communication_channel_id=communication_channel_id,
                control_endpoint=HPAI(ip_addr="192.168.1.3", port=4321),
            ))
        with patch("xknx.io.UDPClient.send") as mock_udp_send, patch(
                "xknx.io.UDPClient.getsockname") as mock_udp_getsockname:
            mock_udp_getsockname.return_value = ("192.168.1.3", 4321)
            self.loop.run_until_complete(connectionstate.start())
            mock_udp_send.assert_called_with(exp_knxipframe)

        # Response KNX/IP-Frame with wrong type
        wrong_knxipframe = KNXIPFrame(xknx)
        wrong_knxipframe.init(KNXIPServiceType.CONNECTIONSTATE_REQUEST)
        with patch("logging.Logger.warning") as mock_warning:
            connectionstate.response_rec_callback(wrong_knxipframe, None)
            mock_warning.assert_called_with("Could not understand knxipframe")

        # Response KNX/IP-Frame with error:
        err_knxipframe = KNXIPFrame(xknx)
        err_knxipframe.init(KNXIPServiceType.CONNECTIONSTATE_RESPONSE)
        err_knxipframe.body.status_code = ErrorCode.E_CONNECTION_ID
        with patch("logging.Logger.debug") as mock_warning:
            connectionstate.response_rec_callback(err_knxipframe, None)
            mock_warning.assert_called_with(
                "Error: KNX bus responded to request of type '%s' with error in '%s': %s",
                type(connectionstate).__name__,
                type(err_knxipframe.body).__name__,
                ErrorCode.E_CONNECTION_ID,
            )

        # Correct Response KNX/IP-Frame:
        res_knxipframe = KNXIPFrame(xknx)
        res_knxipframe.init(KNXIPServiceType.CONNECTIONSTATE_RESPONSE)
        connectionstate.response_rec_callback(res_knxipframe, None)
        self.assertTrue(connectionstate.success)
Ejemplo n.º 7
0
    async def test_connectionstate(self):
        """Test connectionstateing from KNX bus."""
        communication_channel_id = 23
        udp_transport = UDPTransport(("192.168.1.1", 0), ("192.168.1.2", 1234))
        local_hpai = HPAI(ip_addr="192.168.1.3", port=4321)
        connectionstate = ConnectionState(udp_transport,
                                          communication_channel_id,
                                          local_hpai=local_hpai)
        connectionstate.timeout_in_seconds = 0

        assert connectionstate.awaited_response_class == ConnectionStateResponse
        assert connectionstate.communication_channel_id == communication_channel_id

        # Expected KNX/IP-Frame:
        exp_knxipframe = KNXIPFrame.init_from_body(
            ConnectionStateRequest(
                communication_channel_id=communication_channel_id,
                control_endpoint=local_hpai,
            ))
        with patch(
                "xknx.io.transport.UDPTransport.send") as mock_udp_send, patch(
                    "xknx.io.transport.UDPTransport.getsockname"
                ) as mock_udp_getsockname:
            mock_udp_getsockname.return_value = ("192.168.1.3", 4321)
            await connectionstate.start()
            mock_udp_send.assert_called_with(exp_knxipframe)

        # Response KNX/IP-Frame with wrong type
        wrong_knxipframe = KNXIPFrame()
        wrong_knxipframe.init(KNXIPServiceType.CONNECTIONSTATE_REQUEST)
        with patch("logging.Logger.warning") as mock_warning:
            connectionstate.response_rec_callback(wrong_knxipframe, HPAI(),
                                                  None)
            mock_warning.assert_called_with("Could not understand knxipframe")

        # Response KNX/IP-Frame with error:
        err_knxipframe = KNXIPFrame()
        err_knxipframe.init(KNXIPServiceType.CONNECTIONSTATE_RESPONSE)
        err_knxipframe.body.status_code = ErrorCode.E_CONNECTION_ID
        with patch("logging.Logger.debug") as mock_warning:
            connectionstate.response_rec_callback(err_knxipframe, HPAI(), None)
            mock_warning.assert_called_with(
                "Error: KNX bus responded to request of type '%s' with error in '%s': %s",
                type(connectionstate).__name__,
                type(err_knxipframe.body).__name__,
                ErrorCode.E_CONNECTION_ID,
            )

        # Correct Response KNX/IP-Frame:
        res_knxipframe = KNXIPFrame()
        res_knxipframe.init(KNXIPServiceType.CONNECTIONSTATE_RESPONSE)
        connectionstate.response_rec_callback(res_knxipframe, HPAI(), None)
        assert connectionstate.success
Ejemplo n.º 8
0
    def test_connection_state_request(self):
        """Test parsing and streaming connection state request KNX/IP packet."""
        raw = bytes.fromhex("06 10 02 07 00 10 15 00 08 01 C0 A8 C8 0C C3 B4")
        knxipframe = KNXIPFrame()
        knxipframe.from_knx(raw)

        assert isinstance(knxipframe.body, ConnectionStateRequest)

        assert knxipframe.body.communication_channel_id == 21
        assert knxipframe.body.control_endpoint == HPAI(
            ip_addr="192.168.200.12", port=50100)

        connectionstate_request = ConnectionStateRequest(
            communication_channel_id=21,
            control_endpoint=HPAI(ip_addr="192.168.200.12", port=50100),
        )
        knxipframe2 = KNXIPFrame.init_from_body(connectionstate_request)

        assert knxipframe2.to_knx() == raw
Ejemplo n.º 9
0
    def test_connection_state_request(self):
        """Test parsing and streaming connection state request KNX/IP packet."""
        raw = (
            0x06,
            0x10,
            0x02,
            0x07,
            0x00,
            0x10,
            0x15,
            0x00,
            0x08,
            0x01,
            0xC0,
            0xA8,
            0xC8,
            0x0C,
            0xC3,
            0xB4,
        )
        xknx = XKNX()
        knxipframe = KNXIPFrame(xknx)
        knxipframe.from_knx(raw)

        self.assertTrue(isinstance(knxipframe.body, ConnectionStateRequest))

        self.assertEqual(knxipframe.body.communication_channel_id, 21)
        self.assertEqual(knxipframe.body.control_endpoint,
                         HPAI(ip_addr="192.168.200.12", port=50100))

        connectionstate_request = ConnectionStateRequest(
            xknx,
            communication_channel_id=21,
            control_endpoint=HPAI(ip_addr="192.168.200.12", port=50100),
        )
        knxipframe2 = KNXIPFrame.init_from_body(connectionstate_request)

        self.assertEqual(knxipframe2.to_knx(), list(raw))