Example #1
0
 def test_06_knx_blockception(self):
     """Test that we can do blockception"""
     block = knx.KnxBlock(name="atoll")
     block.append(knx.KnxField(name="pom-"))
     block.append(knx.KnxField(name="pom"))
     block.append(knx.KnxBlock(name="galli"))
     block.galli.append(knx.KnxField(name="sout pacific", value=b"10"))
     self.assertEqual(block.attributes, ["pom_", "pom", "galli"])
     self.assertEqual([x.name for x in block.fields],
                      ["pom-", "pom", "sout pacific"])
Example #2
0
 def test_03_knx_block_supp_svc_families(self):
     """Test that special block supported service families containing
     a nested block with repeat keyword is correctly instantiated.
     """
     block = knx.KnxBlock(type="DIB_SUPP_SVC_FAMILIES")
     self.assertEqual(byte.to_int(block.structure_length.value), 4)
     self.assertEqual(bytes(block.service_family.id), b'\x00')
     self.assertEqual(bytes(block.service_family.version), b'\x00')
     block.append(knx.KnxBlock(type="SERVICE_FAMILY"))
     self.assertEqual(byte.to_int(block.structure_length.value), 6)
Example #3
0
 def test_05_knx_header_resize(self):
     """Test that resize changes the value of the field's bytearray"""
     header = knx.KnxBlock(type="header")
     header.header_length.size = 2
     self.assertEqual(bytes(header.header_length), b'\x00\x06')
     header.update()
     self.assertEqual(bytes(header.header_length), b'\x00\x07')
Example #4
0
 def test_04_knx_header_resize_total_length(self):
     """Test that header length is updated when a field is expanded."""
     header = knx.KnxBlock(type="header")
     header.total_length.size = 3
     header.total_length.value = 123456
     header.update()
     self.assertEqual(bytes(header.header_length), b'\x07')
Example #5
0
 def test_02_knx_create_field_length(self):
     """Test that we can craft a block and assign it as frame header."""
     new_header = knx.KnxBlock()
     new_header.append(knx.KnxField(name="gasoline", size=3,
                                    is_length=True))
     new_header.append(knx.KnxField(name="fuel", size=2, value=666))
     new_header.update()
     self.assertEqual(bytes(new_header.gasoline), b'\x00\x00\x05')
Example #6
0
 def test_07_knx_header_set_content_different_size(self):
     """Test behavior when trying to set different size bytearrays 
     as field values."""
     header = knx.KnxBlock(type="header")
     header.service_identifier.value = b'\x10\x10\x10'
     self.assertEqual(bytes(header.service_identifier), b'\x10\x10')
     header.service_identifier.value = b'\x10'
     self.assertEqual(bytes(header.service_identifier), b'\x00\x10')
Example #7
0
 def test_05_knx_multiple_fields_same_name(self):
     """Test the behavior in case multiple fields have the same name."""
     body = knx.KnxBlock()
     body.append(knx.KnxField(name="gasoline", size=1, value=1))
     body.append(knx.KnxField(name="gasoline", size=2, value=666))
     body.gasoline.value = 21
     self.assertEqual(bytes(body), b'\x01\x00\x15')
     body.remove("gasoline")
     self.assertEqual(bytes(body), b'\x00\x15')
Example #8
0
 def test_06_knx_header_fixed_value(self):
     """Test that manual field value changes enable fixed_value boolean,
     which prevent from automatically updating the field.
     """
     header = knx.KnxBlock(type="header")
     header.header_length.value = b'\x02'
     self.assertEqual(bytes(header.header_length), b'\x02')
     header.update()
     self.assertEqual(bytes(header.header_length), b'\x02')
Example #9
0
 def test_03_knx_header_resize(self):
     """Test that header length is resized automatically when modifying
     the size of a field.
     """
     header = knx.KnxBlock(type="header")
     header.service_identifier.size = 3
     header.update()
     self.assertEqual(byte.to_int(header.header_length.value), 7)
     self.assertEqual(bytes(header), b"\x07\x10\x00\x00\x00\x00\x00")
Example #10
0
from sys import path, argv
path.append('../')

from bof import knx, BOFNetworkError

if len(argv) < 2:
    print("Usage: python {0} IP_ADDRESS".format(argv[0]))
else:
    knxnet = knx.KnxNet()
    try:
        knxnet.connect(argv[1], 3671)
        frame = knx.KnxFrame()
        frame.header.service_identifier.value = b"\x02\x03"
        hpai = knx.KnxBlock(type="HPAI")
        frame.body.append(hpai)
        print(frame)
        knxnet.send(bytes(frame))
        response = knxnet.receive()
        print(response)
    except BOFNetworkError as bne:
        print(str(bne))
    finally:
        knxnet.disconnect()
Example #11
0
 def test_02_knx_block_device_info(self):
     """Test that we can create a valid block from type."""
     block = knx.KnxBlock(type="DIB_DEVICE_INFO")
     self.assertEqual((byte.to_int(bytes(block.structure_length))), 54)
Example #12
0
 def test_01_knx_block_unknown_type(self):
     """Test that an exception is rose when creating a block from
     an unknown template."""
     with self.assertRaises(BOFProgrammingError):
         frame = knx.KnxBlock(type="WTF")
Example #13
0
 def test_03_knx_append_field(self):
     """Test the append method of a frame."""
     frame = knx.KnxFrame(type="DESCRIPTION REQUEST")
     frame.append("toto", knx.KnxBlock(type="SERVICE_FAMILY"))
     self.assertIn("version", frame.attributes)
Example #14
0
 def test_01_knx_create_field(self):
     """Test that we can craft a block and assign it as frame header."""
     new_header = knx.KnxBlock()
     new_header.append(knx.KnxField(name="gasoline", size=3, value=666))
     self.assertIn("gasoline", new_header.attributes)
     self.assertEqual(bytes(new_header), b'\x00\x02\x9a')
Example #15
0
 def test_08_knx_header_set_invalid_content(self):
     """Test negative value for size."""
     header = knx.KnxBlock(type="header")
     header.header_length.size = -4
     self.assertEqual(header.header_length.size, -4)
     self.assertEqual(bytes(header.header_length), b'')
Example #16
0
 def test_02_basic_knx_header(self):
     """Test direct creation of a knx header, automated lengths update
     is disabled for total length (which is handled at frame level.
     """
     header = knx.KnxBlock(type="header")
     self.assertEqual(bytes(header), b"\x06\x10\x00\x00\x00\x00")