• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1% Regression tests for the XCP using CANSockets
2
3############
4############
5
6+ Configuration
7~ conf
8
9= Imports
10
11from test.testsocket import TestSocket, cleanup_testsockets
12
13= Load module
14
15load_contrib("automotive.xcp.xcp",  globals_dict=globals())
16
17= Connect
18
19sock1 = TestSocket(XCPOnCAN)
20sock2 = TestSocket(XCPOnCAN)
21sock1.pair(sock2)
22
23response = XCPOnCAN(identifier=0x700) / CTOResponse() / ConnectPositiveResponse(b'\x15\xC0\x08\x08\x00\x10\x10')
24sniffer = AsyncSniffer(opened_socket=sock2, count=1, timeout=5, prn=lambda x: sock2.send(response))
25sniffer.start()
26pkt = XCPOnCAN(identifier=0x700) / CTORequest() / Connect()
27ans = sock1.sr1(pkt, timeout=0.5, verbose=False)
28sniffer.join(timeout=1)
29
30assert ans.identifier == 0x700
31cto_response = ans["CTOResponse"]
32assert cto_response.packet_code == 0xff
33
34connect_response = cto_response["ConnectPositiveResponse"]
35
36assert connect_response.resource == 0x15
37assert connect_response.comm_mode_basic == 0xC0
38assert connect_response.max_cto == 8
39assert connect_response.max_dto is None
40assert connect_response.max_dto_le == 8
41
42assert connect_response.xcp_protocol_layer_version_number_msb == 0x10
43assert connect_response.xcp_transport_layer_version_number_msb == 0x10
44
45
46cto_request = XCPOnCAN(identifier=0x700) / CTORequest() / Connect()
47
48assert cto_request.identifier == 0x700
49assert cto_request.pid == 0xFF
50assert cto_request.connection_mode == 0
51assert bytes(cto_request) == b'\x00\x00\x07\x00\x02\x00\x00\x00\xff\x00'
52
53xcp_on_can = XCPOnCAN(b'\x00\x00\x05\x00\x08\x00\x00\x00\xff\x15\xC0\x08\x08\x00\x10\x10')
54assert xcp_on_can.identifier == 0x500
55assert xcp_on_can.answers(cto_request)
56
57cto_response = xcp_on_can["CTOResponse"]
58assert cto_response.packet_code == 0xFF
59
60connect_response = cto_response["ConnectPositiveResponse"]
61assert connect_response.resource == 0x15
62assert connect_response.comm_mode_basic == 0xC0
63assert connect_response.max_cto == 8
64assert connect_response.max_cto == 8
65
66assert connect_response.xcp_protocol_layer_version_number_msb == 0x10
67assert connect_response.xcp_transport_layer_version_number_msb == 0x10
68
69assert conf.contribs['XCP']['byte_order'] == 0
70assert conf.contribs['XCP']['MAX_CTO'] == 8
71assert conf.contribs['XCP']['MAX_DTO'] == 8
72assert conf.contribs['XCP']['Address_Granularity_Byte'] == 1
73
74
75= Endianness test for ConnectPositiveResponse
76
77p = ConnectPositiveResponse(b"\x00\xFF\x01\x00\xFF\x05\x05")
78assert p.max_dto_le is None
79assert p.max_dto == 0xff
80
81p = ConnectPositiveResponse(b"\x00\x00\x01\xFF\x00\x05\x05")
82assert p.max_dto_le == 0xff
83assert p.max_dto is None
84
85
86= Wrong answer
87
88request = XCPOnCAN(identifier=0x700) / CTORequest() / Connect()
89
90# This response has not enough bytes for a ConnectPositiveResponse
91response = XCPOnCAN(identifier=0x90) / CTOResponse() / Raw(b'\x01\x02\x03\x04')
92
93assert not response.answers(request)
94
95
96+ Cleanup
97
98= Delete TestSockets
99
100cleanup_testsockets()
101
102