| % Regression tests for the CCP layer |
| |
| + Configuration |
| ~ conf |
| |
| = Imports |
| |
| from test.testsocket import TestSocket, cleanup_testsockets |
| |
| ############ |
| ############ |
| |
| + Basic operations |
| |
| = Load module |
| load_contrib("automotive.ccp", globals_dict=globals()) |
| |
| = Build CRO CONNECT |
| |
| cro = CCP(identifier=0x700)/CRO(ctr=1)/CONNECT(station_address=0x02) |
| |
| assert cro.identifier == 0x700 |
| assert cro.length == 8 |
| assert cro.flags == 0 |
| assert cro.ctr == 1 |
| assert cro.cmd == 1 |
| assert cro.station_address == 0x02 |
| assert bytes(cro) == b'\x00\x00\x07\x00\x08\x00\x00\x00\x01\x01\x02\x00\xff\xff\xff\xff' |
| |
| = Dissect DTO CONNECT |
| |
| dto = CCP(b'\x00\x00\x07\x00\x08\x00\x00\x00\xff\x00\x01\xff\xff\xff\xff\xff') |
| |
| assert dto.answers(cro) |
| assert dto.identifier == 0x700 |
| assert dto.length == 8 |
| assert dto.flags == 0 |
| assert dto.ctr == 1 |
| assert dto.load == b"\xff" * 5 |
| |
| = Build CRO EXCHANGE_ID |
| |
| cro = CCP(identifier=0x700)/CRO(ctr=18)/EXCHANGE_ID(ccp_master_device_id=b'abcdef') |
| |
| assert cro.identifier == 0x700 |
| assert cro.length == 8 |
| assert cro.flags == 0 |
| assert cro.ctr == 18 |
| assert cro.cmd == 0x17 |
| assert cro.ccp_master_device_id == b"abcdef" |
| assert bytes(cro) == b'\x00\x00\x07\x00\x08\x00\x00\x00\x17\x12abcdef' |
| |
| = Dissect DTO EXCHANGE_ID |
| |
| dto = CCP(b'\x00\x00\x07\x00\x08\x00\x00\x00\xff\x00\x12\x04\x02\x03\x03\xff') |
| |
| assert dto.ctr == 18 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert dto.load == b'\x04\x02\x03\x03\xff' |
| # answers will interpret payload |
| assert dto.answers(cro) |
| assert dto.ctr == 18 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert hasattr(dto, "load") == False |
| assert dto.slave_device_ID_length == 4 |
| assert dto.data_type_qualifier == 2 |
| assert dto.resource_availability_mask == 3 |
| assert dto.resource_protection_mask == 3 |
| assert dto.ccp_reserved == b"\xff" |
| |
| = Build CRO GET_SEED |
| |
| cro = CCP(identifier=0x711)/CRO(ctr=19)/GET_SEED(resource=2) |
| |
| assert cro.identifier == 0x711 |
| assert cro.length == 8 |
| assert cro.flags == 0 |
| assert cro.ctr == 19 |
| assert cro.cmd == 0x12 |
| assert cro.resource == 2 |
| assert cro.ccp_reserved == b"\xff" * 5 |
| |
| assert bytes(cro) == b'\x00\x00\x07\x11\x08\x00\x00\x00\x12\x13\x02\xff\xff\xff\xff\xff' |
| |
| = Dissect DTO GET_SEED |
| |
| dto = CCP(b'\x00\x00\x07\x11\x08\x00\x00\x00\xff\x00\x13\x01\x14\x15\x16\x17') |
| |
| assert dto.ctr == 19 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert dto.load == b'\x01\x14\x15\x16\x17' |
| # answers will interpret payload |
| assert dto.answers(cro) |
| assert dto.ctr == 19 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert hasattr(dto, "load") == False |
| assert dto.protection_status == 0x1 |
| assert dto.seed == b'\x14\x15\x16\x17' |
| |
| = Build CRO UNLOCK |
| |
| cro = CCP(identifier=0x711)/CRO(ctr=20)/UNLOCK(key=b"123456") |
| |
| assert cro.identifier == 0x711 |
| assert cro.length == 8 |
| assert cro.flags == 0 |
| assert cro.ctr == 20 |
| assert cro.cmd == 0x13 |
| assert cro.key == b"123456" |
| |
| assert bytes(cro) == b'\x00\x00\x07\x11\x08\x00\x00\x00\x13\x14123456' |
| |
| = Dissect DTO UNLOCK |
| |
| dto = CCP(b'\x00\x00\x07\x11\x08\x00\x00\x00\xff\x00\x14\x02\xff\xff\xff\xff') |
| |
| assert dto.ctr == 20 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert dto.load == b'\x02\xff\xff\xff\xff' |
| # answers will interpret payload |
| assert dto.answers(cro) |
| assert dto.ctr == 20 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert hasattr(dto, "load") == False |
| assert dto.privilege_status == 0x2 |
| assert dto.ccp_reserved == b"\xff" * 4 |
| |
| = Build CRO SET_MTA |
| |
| cro = CCP(identifier=0x711)/CRO(ctr=21)/SET_MTA(mta_num=0, address_extension=0x02, address=0x34002000) |
| |
| assert cro.identifier == 0x711 |
| assert cro.length == 8 |
| assert cro.flags == 0 |
| assert cro.ctr == 21 |
| assert cro.cmd == 0x02 |
| assert cro.mta_num == 0 |
| assert cro.address_extension == 2 |
| assert cro.address == 0x34002000 |
| |
| assert bytes(cro) == b'\x00\x00\x07\x11\x08\x00\x00\x00\x02\x15\x00\x02\x34\x00\x20\x00' |
| |
| = Dissect DTO SET_MTA |
| |
| dto = CCP(b'\x00\x00\x07\x11\x08\x00\x00\x00\xff\x00\x15\xff\xff\xff\xff\xff') |
| |
| assert dto.ctr == 21 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert dto.load == b'\xff\xff\xff\xff\xff' |
| # answers will interpret payload |
| assert dto.answers(cro) |
| assert dto.ctr == 21 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert hasattr(dto, "load") == True |
| assert dto.load == b"\xff" * 5 |
| |
| = Build CRO DNLOAD |
| |
| cro = CCP(identifier=0x700)/CRO(ctr=17)/DNLOAD(size=0x05, data=b'abcde') |
| |
| assert cro.identifier == 0x700 |
| assert cro.length == 8 |
| assert cro.flags == 0 |
| assert cro.ctr == 17 |
| assert cro.cmd == 3 |
| assert cro.size == 0x05 |
| assert cro.data == b'abcde' |
| assert bytes(cro) == b'\x00\x00\x07\x00\x08\x00\x00\x00\x03\x11\x05abcde' |
| |
| = Dissect DTO DNLOAD |
| |
| dto = CCP(b'\x00\x00\x07\x00\x08\x00\x00\x00\xff\x00\x11\x02\x34\x00\x20\x05') |
| |
| assert dto.ctr == 17 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert dto.load == b'\x024\x00 \x05' |
| # answers will interpret payload |
| assert dto.answers(cro) |
| assert dto.ctr == 17 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert hasattr(dto, "load") == False |
| assert dto.MTA0_extension == 2 |
| assert dto.MTA0_address == 0x34002005 |
| |
| = Build CRO DNLOAD_6 |
| |
| cro = CCP(identifier=0x700)/CRO(ctr=0x40)/DNLOAD_6(data=b'abcdef') |
| |
| assert cro.identifier == 0x700 |
| assert cro.length == 8 |
| assert cro.flags == 0 |
| assert cro.ctr == 0x40 |
| assert cro.cmd == 0x23 |
| assert cro.data == b'abcdef' |
| assert bytes(cro) == b'\x00\x00\x07\x00\x08\x00\x00\x00\x23\x40abcdef' |
| |
| = Dissect DTO DNLOAD_6 |
| |
| dto = CCP(b'\x00\x00\x07\x00\x08\x00\x00\x00\xff\x00\x40\x02\x34\x00\x20\x06') |
| |
| assert dto.ctr == 64 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert dto.load == b'\x024\x00 \x06' |
| # answers will interpret payload |
| assert dto.answers(cro) |
| assert dto.ctr == 64 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert hasattr(dto, "load") == False |
| assert dto.MTA0_extension == 2 |
| assert dto.MTA0_address == 0x34002006 |
| |
| = Build CRO UPLOAD |
| |
| cro = CCP(identifier=0x700)/CRO(ctr=0x41)/UPLOAD(size=4) |
| |
| assert cro.identifier == 0x700 |
| assert cro.length == 8 |
| assert cro.flags == 0 |
| assert cro.ctr == 0x41 |
| assert cro.cmd == 0x04 |
| assert cro.size == 4 |
| assert cro.ccp_reserved == b"\xff" * 5 |
| assert bytes(cro) == b'\x00\x00\x07\x00\x08\x00\x00\x00\x04\x41\x04\xff\xff\xff\xff\xff' |
| |
| = Dissect DTO UPLOAD |
| |
| dto = CCP(b'\x00\x00\x07\x00\x08\x00\x00\x00\xff\x00\x41\x10\x11\x12\x13\xff') |
| |
| assert dto.ctr == 65 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert dto.load == b'\x10\x11\x12\x13\xff' |
| # answers will interpret payload |
| assert dto.answers(cro) |
| assert dto.ctr == 65 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert hasattr(dto, "load") == False |
| assert dto.data == b"\x10\x11\x12\x13\xff" |
| |
| = Build CRO SHORT_UP |
| |
| cro = CCP(identifier=0x700)/CRO(ctr=0x42)/SHORT_UP(size=4, address_extension=0, address=0x12345678) |
| |
| assert cro.identifier == 0x700 |
| assert cro.length == 8 |
| assert cro.flags == 0 |
| assert cro.ctr == 0x42 |
| assert cro.cmd == 0x0f |
| assert cro.size == 4 |
| assert cro.address == 0x12345678 |
| assert cro.address_extension == 0 |
| assert bytes(cro) == b'\x00\x00\x07\x00\x08\x00\x00\x00\x0f\x42\x04\x00\x12\x34\x56\x78' |
| |
| = Dissect DTO SHORT_UP |
| |
| dto = CCP(b'\x00\x00\x07\x00\x08\x00\x00\x00\xff\x00\x42\x10\x11\x12\x13\xff') |
| |
| assert dto.ctr == 66 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert dto.load == b'\x10\x11\x12\x13\xff' |
| # answers will interpret payload |
| assert dto.answers(cro) |
| assert dto.ctr == 66 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert hasattr(dto, "load") == False |
| assert dto.data == b"\x10\x11\x12\x13\xff" |
| |
| = Build CRO SELECT_CAL_PAGE |
| |
| cro = CCP(identifier=0x700)/CRO(ctr=0x43)/SELECT_CAL_PAGE() |
| |
| assert cro.identifier == 0x700 |
| assert cro.length == 8 |
| assert cro.flags == 0 |
| assert cro.ctr == 0x43 |
| assert cro.cmd == 0x11 |
| assert cro.ccp_reserved == b"\xff" * 6 |
| assert bytes(cro) == b'\x00\x00\x07\x00\x08\x00\x00\x00\x11\x43\xff\xff\xff\xff\xff\xff' |
| |
| = Dissect DTO SELECT_CAL_PAGE |
| |
| dto = CCP(b'\x00\x00\x07\x00\x08\x00\x00\x00\xff\x00\x43\xff\xff\xff\xff\xff') |
| |
| assert dto.ctr == 67 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert dto.load == b'\xff\xff\xff\xff\xff' |
| # answers will interpret payload |
| assert dto.answers(cro) |
| assert dto.ctr == 67 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert hasattr(dto, "load") == True |
| assert dto.load == b"\xff\xff\xff\xff\xff" |
| |
| = Build CRO GET_DAQ_SIZE |
| |
| cro = CCP(identifier=0x700)/CRO(ctr=0x44)/GET_DAQ_SIZE(DAQ_num=0x03, DTO_identifier=0x1020304) |
| |
| assert cro.identifier == 0x700 |
| assert cro.length == 8 |
| assert cro.flags == 0 |
| assert cro.ctr == 0x44 |
| assert cro.cmd == 0x14 |
| assert cro.DAQ_num == 0x03 |
| assert cro.ccp_reserved == 00 |
| assert cro.DTO_identifier == 0x01020304 |
| assert bytes(cro) == b'\x00\x00\x07\x00\x08\x00\x00\x00\x14\x44\x03\x00\x01\x02\x03\x04' |
| |
| = Dissect DTO GET_DAQ_SIZE |
| |
| dto = CCP(b'\x00\x00\x07\x00\x08\x00\x00\x00\xff\x00\x44\x10\x08\xff\xff\xff') |
| |
| assert dto.ctr == 68 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert dto.load == b'\x10\x08\xff\xff\xff' |
| # answers will interpret payload |
| assert dto.answers(cro) |
| assert dto.ctr == 68 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert hasattr(dto, "load") == False |
| assert dto.DAQ_list_size == 16 |
| assert dto.first_pid == 8 |
| assert dto.ccp_reserved == b"\xff\xff\xff" |
| |
| = Build CRO SET_DAQ_PTR |
| |
| cro = CCP(identifier=0x700)/CRO(ctr=0x45)/SET_DAQ_PTR(DAQ_num=3, ODT_num=5, ODT_element=2) |
| |
| assert cro.identifier == 0x700 |
| assert cro.length == 8 |
| assert cro.flags == 0 |
| assert cro.ctr == 0x45 |
| assert cro.cmd == 0x15 |
| assert cro.DAQ_num == 0x03 |
| assert cro.ODT_num == 5 |
| assert cro.ODT_element == 2 |
| assert cro.ccp_reserved == b"\xff\xff\xff" |
| assert bytes(cro) == b'\x00\x00\x07\x00\x08\x00\x00\x00\x15\x45\x03\x05\x02\xff\xff\xff' |
| |
| = Dissect DTO SET_DAQ_PTR |
| |
| dto = CCP(b'\x00\x00\x07\x00\x08\x00\x00\x00\xff\x00\x45\xff\xff\xff\xff\xff') |
| |
| assert dto.ctr == 69 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert dto.load == b'\xff\xff\xff\xff\xff' |
| # answers will interpret payload |
| assert dto.answers(cro) |
| assert dto.ctr == 69 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert hasattr(dto, "load") == True |
| assert dto.load == b'\xff\xff\xff\xff\xff' |
| |
| = Build CRO WRITE_DAQ |
| |
| cro = CCP(identifier=0x700)/CRO(ctr=0x46)/WRITE_DAQ(DAQ_size=2, address_extension=1, address=0x2004200) |
| |
| assert cro.identifier == 0x700 |
| assert cro.length == 8 |
| assert cro.flags == 0 |
| assert cro.ctr == 0x46 |
| assert cro.cmd == 0x16 |
| assert cro.DAQ_size == 0x02 |
| assert cro.address_extension == 1 |
| assert cro.address == 0x2004200 |
| assert bytes(cro) == b'\x00\x00\x07\x00\x08\x00\x00\x00\x16\x46\x02\x01\x02\x00\x42\x00' |
| |
| = Dissect DTO WRITE_DAQ |
| |
| dto = CCP(b'\x00\x00\x07\x00\x08\x00\x00\x00\xff\x00\x46\xff\xff\xff\xff\xff') |
| |
| assert dto.ctr == 70 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert dto.load == b'\xff\xff\xff\xff\xff' |
| # answers will interpret payload |
| assert dto.answers(cro) |
| assert dto.ctr == 70 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert hasattr(dto, "load") == True |
| assert dto.load == b'\xff\xff\xff\xff\xff' |
| |
| = Build CRO START_STOP |
| |
| cro = CCP(identifier=0x700)/CRO(ctr=0x47)/START_STOP(mode=1, DAQ_num=3, ODT_num=7, event_channel=2, transmission_rate=1) |
| |
| assert cro.identifier == 0x700 |
| assert cro.length == 8 |
| assert cro.flags == 0 |
| assert cro.ctr == 0x47 |
| assert cro.cmd == 0x06 |
| assert cro.mode == 0x01 |
| assert cro.DAQ_num == 3 |
| assert cro.event_channel == 2 |
| assert cro.transmission_rate == 1 |
| assert cro.ODT_num == 7 |
| assert bytes(cro) == b'\x00\x00\x07\x00\x08\x00\x00\x00\x06\x47\x01\x03\x07\x02\x00\x01' |
| |
| = Dissect DTO START_STOP |
| |
| dto = CCP(b'\x00\x00\x07\x00\x08\x00\x00\x00\xff\x00\x47\xff\xff\xff\xff\xff') |
| |
| assert dto.ctr == 71 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert dto.load == b'\xff\xff\xff\xff\xff' |
| # answers will interpret payload |
| assert dto.answers(cro) |
| assert dto.ctr == 71 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert hasattr(dto, "load") == True |
| assert dto.load == b'\xff\xff\xff\xff\xff' |
| |
| = Build CRO DISCONNECT |
| |
| cro = CCP(identifier=0x700)/CRO(ctr=0x48)/DISCONNECT(type="temporary", station_address=0x208) |
| |
| assert cro.identifier == 0x700 |
| assert cro.length == 8 |
| assert cro.flags == 0 |
| assert cro.ctr == 0x48 |
| assert cro.cmd == 0x07 |
| assert cro.type == 0x00 |
| assert cro.station_address == 0x208 |
| assert cro.ccp_reserved0 == b"\xff" |
| assert cro.ccp_reserved == b"\xff" * 2 |
| assert bytes(cro) == b'\x00\x00\x07\x00\x08\x00\x00\x00\x07\x48\x00\xff\x08\x02\xff\xff' |
| |
| = Dissect DTO DISCONNECT |
| |
| dto = CCP(b'\x00\x00\x07\x00\x08\x00\x00\x00\xff\x00\x48\xff\xff\xff\xff\xff') |
| |
| assert dto.ctr == 72 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert dto.load == b'\xff\xff\xff\xff\xff' |
| # answers will interpret payload |
| assert dto.answers(cro) |
| assert dto.ctr == 72 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert hasattr(dto, "load") == True |
| assert dto.load == b'\xff\xff\xff\xff\xff' |
| |
| = Build CRO SET_S_STATUS |
| |
| cro = CCP(identifier=0x700)/CRO(ctr=0x49)/SET_S_STATUS(session_status="RUN+CAL") |
| |
| assert cro.identifier == 0x700 |
| assert cro.length == 8 |
| assert cro.flags == 0 |
| assert cro.ctr == 0x49 |
| assert cro.cmd == 0x0c |
| assert cro.session_status == 0x81 |
| assert cro.ccp_reserved == b"\xff" * 5 |
| assert bytes(cro) == b'\x00\x00\x07\x00\x08\x00\x00\x00\x0c\x49\x81\xff\xff\xff\xff\xff' |
| |
| = Dissect DTO SET_S_STATUS |
| |
| dto = CCP(b'\x00\x00\x07\x00\x08\x00\x00\x00\xff\x00\x49\xff\xff\xff\xff\xff') |
| |
| assert dto.ctr == 73 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert dto.load == b'\xff\xff\xff\xff\xff' |
| # answers will interpret payload |
| assert dto.answers(cro) |
| assert dto.ctr == 73 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert hasattr(dto, "load") == True |
| assert dto.load == b'\xff\xff\xff\xff\xff' |
| |
| = Build CRO GET_S_STATUS |
| |
| cro = CCP(identifier=0x700)/CRO(ctr=0x4a)/GET_S_STATUS() |
| |
| assert cro.identifier == 0x700 |
| assert cro.length == 8 |
| assert cro.flags == 0 |
| assert cro.ctr == 0x4a |
| assert cro.cmd == 0x0D |
| assert cro.ccp_reserved == b"\xff" * 6 |
| assert bytes(cro) == b'\x00\x00\x07\x00\x08\x00\x00\x00\x0d\x4a\xff\xff\xff\xff\xff\xff' |
| |
| = Dissect DTO GET_S_STATUS |
| |
| dto = CCP(b'\x00\x00\x07\x00\x08\x00\x00\x00\xff\x00\x4a\x81\xff\xff\xff\xff') |
| |
| assert dto.ctr == 74 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert dto.load == b'\x81\xff\xff\xff\xff' |
| # answers will interpret payload |
| assert dto.answers(cro) |
| assert dto.ctr == 74 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert hasattr(dto, "load") == False |
| assert dto.session_status == 0x81 |
| assert dto.information_qualifier == 0xff |
| assert dto.information == b"\xff" * 3 |
| |
| = Build CRO BUILD_CHKSUM |
| |
| cro = CCP(identifier=0x700)/CRO(ctr=0x50)/BUILD_CHKSUM(size=0x8000) |
| |
| assert cro.identifier == 0x700 |
| assert cro.length == 8 |
| assert cro.flags == 0 |
| assert cro.ctr == 0x50 |
| assert cro.cmd == 0x0e |
| assert cro.size == 0x8000 |
| assert cro.ccp_reserved == b"\xff" * 2 |
| assert bytes(cro) == b'\x00\x00\x07\x00\x08\x00\x00\x00\x0e\x50\x00\x00\x80\x00\xff\xff' |
| |
| = Dissect DTO BUILD_CHKSUM |
| |
| dto = CCP(b'\x00\x00\x07\x00\x08\x00\x00\x00\xff\x00\x50\x02\x12\x34\xff\xff') |
| |
| assert dto.ctr == 80 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert dto.load == b'\x02\x12\x34\xff\xff' |
| # answers will interpret payload |
| assert dto.answers(cro) |
| assert dto.ctr == 80 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert hasattr(dto, "load") == False |
| assert dto.checksum_size == 2 |
| assert dto.checksum_data == b'\x12\x34' |
| assert dto.ccp_reserved == b'\xff\xff' |
| |
| = Dissect DTO BUILD_CHKSUM2 |
| |
| dto = CCP(b'\x00\x00\x07\x00\x08\x00\x00\x00\xff\x00\x50\x04\x12\x34\x56\x78') |
| |
| assert dto.ctr == 80 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert dto.load == b'\x04\x12\x34\x56\x78' |
| # answers will interpret payload |
| assert dto.answers(cro) |
| assert dto.ctr == 80 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert hasattr(dto, "load") == False |
| assert dto.checksum_size == 4 |
| assert dto.checksum_data == b'\x12\x34\x56\x78' |
| assert dto.ccp_reserved == b'' |
| |
| = Build CRO CLEAR_MEMORY |
| |
| cro = CCP(identifier=0x700)/CRO(ctr=0x51)/CLEAR_MEMORY(size=0x8000) |
| |
| assert cro.identifier == 0x700 |
| assert cro.length == 8 |
| assert cro.flags == 0 |
| assert cro.ctr == 0x51 |
| assert cro.cmd == 0x10 |
| assert cro.size == 0x8000 |
| assert cro.ccp_reserved == b"\xff" * 2 |
| assert bytes(cro) == b'\x00\x00\x07\x00\x08\x00\x00\x00\x10\x51\x00\x00\x80\x00\xff\xff' |
| |
| = Dissect DTO CLEAR_MEMORY |
| |
| dto = CCP(b'\x00\x00\x07\x00\x08\x00\x00\x00\xff\x00\x51\xff\xff\xff\xff\xff') |
| |
| assert dto.ctr == 81 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert dto.load == b'\xff\xff\xff\xff\xff' |
| # answers will interpret payload |
| assert dto.answers(cro) |
| assert dto.ctr == 81 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert hasattr(dto, "load") == True |
| assert dto.load == b'\xff\xff\xff\xff\xff' |
| |
| = Build CRO PROGRAM |
| |
| cro = CCP(identifier=0x700)/CRO(ctr=0x52)/PROGRAM(size=0x3, data=b"\x10\x11\x12") |
| |
| assert cro.identifier == 0x700 |
| assert cro.length == 8 |
| assert cro.flags == 0 |
| assert cro.ctr == 0x52 |
| assert cro.cmd == 0x18 |
| assert cro.size == 0x3 |
| assert cro.data == b"\x10\x11\x12" |
| assert cro.ccp_reserved == b"\xff" * 5 |
| assert bytes(cro) == b'\x00\x00\x07\x00\x08\x00\x00\x00\x18\x52\x03\x10\x11\x12\xff\xff' |
| |
| = Dissect DTO PROGRAM |
| |
| dto = CCP(b'\x00\x00\x07\x00\x08\x00\x00\x00\xff\x00\x52\x02\x34\x00\x20\x03') |
| |
| assert dto.ctr == 82 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert dto.load == b'\x02\x34\x00\x20\x03' |
| # answers will interpret payload |
| assert dto.answers(cro) |
| assert dto.ctr == 82 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert hasattr(dto, "load") == False |
| assert dto.MTA0_extension == 2 |
| assert dto.MTA0_address == 0x34002003 |
| |
| = Build CRO PROGRAM_6 |
| |
| cro = CCP(identifier=0x700)/CRO(ctr=0x53)/PROGRAM_6(data=b"\x10\x11\x12\x10\x11\x12") |
| |
| assert cro.identifier == 0x700 |
| assert cro.length == 8 |
| assert cro.flags == 0 |
| assert cro.ctr == 0x53 |
| assert cro.cmd == 0x22 |
| assert cro.data == b"\x10\x11\x12\x10\x11\x12" |
| assert bytes(cro) == b'\x00\x00\x07\x00\x08\x00\x00\x00\x22\x53\x10\x11\x12\x10\x11\x12' |
| |
| = Dissect DTO PROGRAM_6 |
| |
| dto = CCP(b'\x00\x00\x07\x00\x08\x00\x00\x00\xff\x00\x53\x02\x34\x00\x20\x06') |
| |
| assert dto.ctr == 83 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert dto.load == b'\x02\x34\x00\x20\x06' |
| # answers will interpret payload |
| assert dto.answers(cro) |
| assert dto.ctr == 83 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert hasattr(dto, "load") == False |
| assert dto.MTA0_extension == 2 |
| assert dto.MTA0_address == 0x34002006 |
| |
| = Build CRO MOVE |
| |
| cro = CCP(identifier=0x700)/CRO(ctr=0x54)/MOVE(size=0x8000) |
| |
| assert cro.identifier == 0x700 |
| assert cro.length == 8 |
| assert cro.flags == 0 |
| assert cro.ctr == 0x54 |
| assert cro.cmd == 0x19 |
| assert cro.size == 0x8000 |
| assert cro.ccp_reserved == b'\xff\xff' |
| assert bytes(cro) == b'\x00\x00\x07\x00\x08\x00\x00\x00\x19\x54\x00\x00\x80\x00\xff\xff' |
| |
| = Dissect DTO MOVE |
| |
| dto = CCP(b'\x00\x00\x07\x00\x08\x00\x00\x00\xff\x00\x54\xff\xff\xff\xff\xff') |
| |
| assert dto.ctr == 84 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert dto.load == b'\xff\xff\xff\xff\xff' |
| # answers will interpret payload |
| assert dto.answers(cro) |
| assert dto.ctr == 84 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert hasattr(dto, "load") == True |
| |
| = Build CRO DIAG_SERVICE |
| |
| cro = CCP(identifier=0x700)/CRO(ctr=0x55)/DIAG_SERVICE(diag_service=0x8000) |
| |
| assert cro.identifier == 0x700 |
| assert cro.length == 8 |
| assert cro.flags == 0 |
| assert cro.ctr == 0x55 |
| assert cro.cmd == 0x20 |
| assert cro.diag_service == 0x8000 |
| assert cro.ccp_reserved == b'\xff\xff\xff\xff' |
| assert bytes(cro) == b'\x00\x00\x07\x00\x08\x00\x00\x00\x20\x55\x80\x00\xff\xff\xff\xff' |
| |
| = Dissect DTO DIAG_SERVICE |
| |
| dto = CCP(b'\x00\x00\x07\x00\x08\x00\x00\x00\xff\x00\x55\x20\x00\xff\xff\xff') |
| |
| assert dto.ctr == 85 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert dto.load == b'\x20\x00\xff\xff\xff' |
| # answers will interpret payload |
| assert dto.answers(cro) |
| assert dto.ctr == 85 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert hasattr(dto, "load") == False |
| assert dto.data_length == 0x20 |
| assert dto.data_type == 0x00 |
| assert dto.ccp_reserved == b"\xff\xff\xff" |
| |
| = Build CRO ACTION_SERVICE |
| |
| cro = CCP(identifier=0x700)/CRO(ctr=0x56)/ACTION_SERVICE(action_service=0x8000) |
| |
| assert cro.identifier == 0x700 |
| assert cro.length == 8 |
| assert cro.flags == 0 |
| assert cro.ctr == 0x56 |
| assert cro.cmd == 0x21 |
| assert cro.action_service == 0x8000 |
| assert cro.ccp_reserved == b'\xff\xff\xff\xff' |
| assert bytes(cro) == b'\x00\x00\x07\x00\x08\x00\x00\x00\x21\x56\x80\x00\xff\xff\xff\xff' |
| |
| = Dissect DTO ACTION_SERVICE |
| |
| dto = CCP(b'\x00\x00\x07\x00\x08\x00\x00\x00\xff\x00\x56\x20\x00\xff\xff\xff') |
| |
| assert dto.ctr == 86 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert dto.load == b'\x20\x00\xff\xff\xff' |
| # answers will interpret payload |
| assert dto.answers(cro) |
| assert dto.ctr == 86 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert hasattr(dto, "load") == False |
| assert dto.data_length == 0x20 |
| assert dto.data_type == 0x00 |
| assert dto.ccp_reserved == b"\xff\xff\xff" |
| |
| = Build CRO TEST |
| |
| cro = CCP(identifier=0x700)/CRO(ctr=0x60)/TEST(station_address=0x80) |
| |
| assert cro.identifier == 0x700 |
| assert cro.length == 8 |
| assert cro.flags == 0 |
| assert cro.ctr == 0x60 |
| assert cro.cmd == 0x05 |
| assert cro.station_address == 0x80 |
| assert cro.ccp_reserved == b"\xff" * 4 |
| assert bytes(cro) == b'\x00\x00\x07\x00\x08\x00\x00\x00\x05\x60\x80\x00\xff\xff\xff\xff' |
| |
| = Dissect DTO TEST |
| |
| dto = CCP(b'\x00\x00\x07\x00\x08\x00\x00\x00\xff\x00\x60\xff\xff\xff\xff\xff') |
| |
| assert dto.ctr == 96 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert dto.load == b'\xff\xff\xff\xff\xff' |
| # answers will interpret payload |
| assert dto.answers(cro) |
| assert dto.ctr == 96 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert hasattr(dto, "load") == True |
| assert dto.load == b'\xff\xff\xff\xff\xff' |
| |
| = Build CRO START_STOP_ALL |
| |
| cro = CCP(identifier=0x700)/CRO(ctr=0x61)/START_STOP_ALL(type="start") |
| |
| assert cro.identifier == 0x700 |
| assert cro.length == 8 |
| assert cro.flags == 0 |
| assert cro.ctr == 0x61 |
| assert cro.cmd == 0x08 |
| assert cro.type == 0x01 |
| assert cro.ccp_reserved == b"\xff" * 5 |
| assert bytes(cro) == b'\x00\x00\x07\x00\x08\x00\x00\x00\x08\x61\x01\xff\xff\xff\xff\xff' |
| |
| = Dissect DTO START_STOP_ALL |
| |
| dto = CCP(b'\x00\x00\x07\x00\x08\x00\x00\x00\xff\x00\x61\xff\xff\xff\xff\xff') |
| |
| assert dto.ctr == 97 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert dto.load == b'\xff\xff\xff\xff\xff' |
| # answers will interpret payload |
| assert dto.answers(cro) |
| assert dto.ctr == 97 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert hasattr(dto, "load") == True |
| assert dto.load == b'\xff\xff\xff\xff\xff' |
| |
| = Build CRO GET_ACTIVE_CAL_PAGE |
| |
| cro = CCP(identifier=0x700)/CRO(ctr=0x62)/GET_ACTIVE_CAL_PAGE() |
| |
| assert cro.identifier == 0x700 |
| assert cro.length == 8 |
| assert cro.flags == 0 |
| assert cro.ctr == 0x62 |
| assert cro.cmd == 0x09 |
| assert cro.ccp_reserved == b"\xff" * 6 |
| assert bytes(cro) == b'\x00\x00\x07\x00\x08\x00\x00\x00\x09\x62\xff\xff\xff\xff\xff\xff' |
| |
| = Dissect DTO GET_ACTIVE_CAL_PAGE |
| |
| dto = CCP(b'\x00\x00\x07\x00\x08\x00\x00\x00\xff\x00\x62\x01\x11\x44\x77\x22') |
| |
| assert dto.ctr == 98 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert dto.load == b'\x01\x11\x44\x77\x22' |
| # answers will interpret payload |
| assert dto.answers(cro) |
| assert dto.ctr == 98 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert hasattr(dto, "load") == False |
| assert dto.address_extension == 1 |
| assert dto.address == 0x11447722 |
| |
| = Build CRO GET_CCP_VERSION |
| |
| cro = CCP(identifier=0x700)/CRO(ctr=0x63)/GET_CCP_VERSION(main_protocol_version=2, release_version=1) |
| |
| assert cro.identifier == 0x700 |
| assert cro.length == 8 |
| assert cro.flags == 0 |
| assert cro.ctr == 0x63 |
| assert cro.cmd == 0x1b |
| assert cro.main_protocol_version == 2 |
| assert cro.release_version == 1 |
| assert cro.ccp_reserved == b"\xff" * 4 |
| assert bytes(cro) == b'\x00\x00\x07\x00\x08\x00\x00\x00\x1b\x63\x02\x01\xff\xff\xff\xff' |
| |
| assert dto.hashret() != cro.hashret() |
| assert not dto.answers(cro) |
| |
| = Dissect DTO GET_CCP_VERSION |
| |
| dto = CCP(b'\x00\x00\x07\x00\x08\x00\x00\x00\xff\x00\x63\x02\x01\xff\xff\xff') |
| |
| assert dto.ctr == 99 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert dto.load == b'\x02\x01\xff\xff\xff' |
| # answers will interpret payload |
| assert dto.answers(cro) |
| assert dto.ctr == 99 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert hasattr(dto, "load") == False |
| assert dto.main_protocol_version == 2 |
| assert dto.release_version == 1 |
| assert dto.ccp_reserved == b"\xff" * 3 |
| |
| assert dto.hashret() == cro.hashret() |
| |
| + Tests on a virtual CAN-Bus |
| |
| = CAN Socket sr1 with dto.answers(cro) == True |
| |
| sock1 = TestSocket(CCP) |
| sock2 = TestSocket(CAN) |
| sock1.pair(sock2) |
| |
| def answer(pkt): |
| cro = CRO(pkt.data) |
| assert cro.cmd == 0x22 |
| assert cro.data == b"\x10\x11\x12\x10\x11\x12" |
| sock2.send(CCP(b'\x00\x00\x07\x00\x08\x00\x00\x00\xff\x00\x53\x02\x34\x00\x20\x06')) |
| |
| sniffer = AsyncSniffer(opened_socket=sock2, count=1, timeout=5, prn=answer) |
| sniffer.start() |
| dto = sock1.sr1(CCP(identifier=0x700)/CRO(ctr=0x53)/PROGRAM_6(data=b"\x10\x11\x12\x10\x11\x12"), timeout=1, verbose=False) |
| sniffer.join(timeout=5) |
| sock1.close() |
| sock2.close() |
| |
| assert dto.ctr == 83 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 0 |
| assert hasattr(dto, "load") == False |
| assert dto.MTA0_extension == 2 |
| assert dto.MTA0_address == 0x34002006 |
| |
| = CAN Socket sr1 with dto.answers(cro) == False |
| |
| sock1 = TestSocket(CCP) |
| sock2 = TestSocket(CAN) |
| sock1.pair(sock2) |
| |
| def answer(pkt): |
| cro = CRO(pkt.data) |
| assert cro.cmd == 0x22 |
| assert cro.data == b"\x10\x11\x12\x10\x11\x12" |
| sock2.send(CCP(b'\x00\x00\x07\x00\x08\x00\x00\x00\xff\x00\x55\x02\x34\x00\x20\x06')) |
| |
| sniffer = AsyncSniffer(opened_socket=sock2, count=1, timeout=5, prn=answer) |
| sniffer.start() |
| dto = sock1.sr1(CCP(identifier=0x700)/CRO(ctr=0x54)/PROGRAM_6(data=b"\x10\x11\x12\x10\x11\x12"), timeout=0.1, verbose=False) |
| sniffer.join(timeout=5) |
| sock1.close() |
| sock2.close() |
| assert dto is None |
| |
| |
| = CAN Socket sr1 with error code |
| |
| sock1 = TestSocket(CCP) |
| sock2 = TestSocket(CAN) |
| sock1.pair(sock2) |
| |
| def answer(pkt): |
| cro = CRO(pkt.data) |
| assert cro.cmd == 0x22 |
| assert cro.data == b"\x10\x11\x12\x10\x11\x12" |
| sock2.send(CCP(b'\x00\x00\x07\x00\x08\x00\x00\x00\xff\x01\x55\xff\xff\xff\xff\xff')) |
| |
| sniffer = AsyncSniffer(opened_socket=sock2, count=1, timeout=5, prn=answer) |
| sniffer.start() |
| dto = sock1.sr1(CCP(identifier=0x700)/CRO(ctr=0x55)/PROGRAM_6(data=b"\x10\x11\x12\x10\x11\x12"), timeout=1, verbose=False) |
| sniffer.join(timeout=5) |
| sock1.close() |
| sock2.close() |
| |
| assert dto.ctr == 85 |
| assert dto.packet_id == 0xff |
| assert dto.return_code == 1 |
| assert hasattr(dto, "load") == False |
| assert dto.MTA0_extension == 0xff |
| assert dto.MTA0_address == 0xffffffff |
| |
| + Cleanup |
| |
| = Delete TestSockets |
| |
| cleanup_testsockets() |
| |