TC8 Test Specifications#
This document provides the detailed test specification for each TC8 conformance test case. Each entry describes the purpose, preconditions, test stimuli, expected results, and requirement traceability.
For the full OA specification mapping see TC8 Conformance Traceability. For requirement definitions see TC8 Conformance Test Requirements.
Note
The “OA Spec Reference” field in each test case references the corresponding section from Chapter 5 of the OPEN Alliance TC8 Automotive Ethernet ECU Test Specification v3.0. See TC8 Conformance Traceability for the full mapping.
Note
Terminology
Throughout this specification, “server” refers to the SOME/IP Service Provider role (the DUT, which offers services and responds to requests), and “client” refers to the SOME/IP Service Consumer role (the external test harness, which discovers services and subscribes to events). This usage mirrors TC8 OA §5.1.5 (“SOME/IP Server Tests”) and §5.1.6 (“ETS Client / Control”) directly.
Service Discovery Tests#
- DUT Config:
tests/tc8_conformance/config/tc8_someipd_sd.json
TC8-SD-001 — Multicast Offer on Startup#
- OA Spec Reference:
§5.1.5.3 — SOMEIPSRV_SD_MESSAGE_08
- Test Module:
test_service_discovery.py- Test Function:
test_tc8_sd_001_multicast_offer_on_startup- Requirement:
comp_req__tc8_conformance__sd_offer_format- DUT Config:
tc8_someipd_sd.json
Purpose:
Verify that someipd sends at least one SD OfferService entry on the
configured multicast group (224.244.224.245:30490) after startup.
Preconditions:
someipdstarted with--tc8-standaloneflagMulticast route available (
224.0.0.0/4)
Stimuli: None — passive observation of DUT multicast traffic.
Expected Result: At least one SOME/IP-SD message containing an OfferService entry is received on the multicast group within 5 seconds of DUT startup.
TC8-SD-002 — Offer Entry Format#
- OA Spec Reference:
§5.1.5.1 — SOMEIPSRV_FORMAT_14–18
- Test Module:
test_service_discovery.py- Test Function:
test_tc8_sd_002_offer_entry_format- Requirement:
comp_req__tc8_conformance__sd_offer_format- DUT Config:
tc8_someipd_sd.json
Purpose: Verify that the OfferService entry carries the correct service ID, instance ID, major/minor version, and TTL as configured.
Preconditions:
Same as TC8-SD-001.
Stimuli: None — passive observation.
Expected Result:
OfferService entry has service_id=0x1234, instance_id=0x5678,
major_version=0x00, minor_version=0x00000000, and TTL > 0.
TC8-SD-003 — Cyclic Offer Timing#
- OA Spec Reference:
§5.1.5.4 — SOMEIPSRV_SD_BEHAVIOR_02
- Test Module:
test_service_discovery.py- Test Function:
test_tc8_sd_003_cyclic_offer_timing- Requirement:
comp_req__tc8_conformance__sd_cyclic_timing- DUT Config:
tc8_someipd_sd.json
Purpose:
Verify that OfferService entries repeat at the configured
cyclic_offer_delay (2000 ms ±20%) during the main phase.
Preconditions:
DUT in SD main phase (wait for repetition phase to complete).
Stimuli: None — passive observation with timestamps.
Expected Result: Inter-offer gaps in main phase are within [1600 ms, 2400 ms].
TC8-SD-004 — FindService Known Service#
- OA Spec Reference:
§5.1.6 — SOMEIP_ETS_171
- Test Module:
test_service_discovery.py- Test Function:
test_tc8_sd_004_find_known_service_unicast_offer- Requirement:
comp_req__tc8_conformance__sd_find_response- DUT Config:
tc8_someipd_sd.json
Purpose:
Verify that someipd responds with a unicast OfferService when a
FindService is sent for a known service.
Preconditions:
DUT offering service
0x1234.
Stimuli:
Send SD FindService entry for service 0x1234 / instance 0x5678.
Expected Result: Unicast OfferService entry received for the requested service.
TC8-SD-005 — FindService Unknown Service#
- OA Spec Reference:
§5.1.5.4 — implied by SD_BEHAVIOR_03/04
- Test Module:
test_service_discovery.py- Test Function:
test_tc8_sd_005_find_unknown_service_no_response- Requirement:
comp_req__tc8_conformance__sd_find_response- DUT Config:
tc8_someipd_sd.json
Purpose:
Verify that someipd does not respond to a FindService for an
unknown service.
Preconditions:
DUT running, not offering service
0xBEEF.
Stimuli:
Send SD FindService entry for service 0xBEEF.
Expected Result:
No OfferService entry received for service 0xBEEF within 2 seconds.
TC8-SD-006 — Subscribe Eventgroup Ack#
- OA Spec Reference:
§5.1.5.3 — SOMEIPSRV_SD_MESSAGE_13
- Test Module:
test_service_discovery.py- Test Function:
test_tc8_sd_006_subscribe_valid_eventgroup_ack- Requirement:
comp_req__tc8_conformance__sd_sub_lifecycle- DUT Config:
tc8_someipd_sd.json
Purpose:
Verify that someipd sends SubscribeEventgroupAck (TTL > 0) for a
valid eventgroup subscription.
Preconditions:
DUT offering eventgroup
0x4455.
Stimuli:
Send SD SubscribeEventgroup for service 0x1234, eventgroup 0x4455.
Expected Result: SubscribeEventgroupAck with TTL > 0 received.
TC8-SD-007 — Subscribe Unknown Eventgroup Nack#
- OA Spec Reference:
§5.1.5.3 — SOMEIPSRV_SD_MESSAGE_14; §5.1.6 — SOMEIP_ETS_140
- Test Module:
test_service_discovery.py- Test Function:
test_tc8_sd_007_subscribe_unknown_eventgroup_nack- Requirement:
comp_req__tc8_conformance__sd_sub_lifecycle- DUT Config:
tc8_someipd_sd.json
Purpose:
Verify that someipd sends SubscribeEventgroupNack (TTL = 0) for
an unknown eventgroup.
Preconditions:
DUT running, eventgroup
0xBEEFnot configured.
Stimuli:
Send SD SubscribeEventgroup for eventgroup 0xBEEF.
Expected Result: SubscribeEventgroupAck with TTL = 0 (Nack) received.
TC8-SD-008 — StopSubscribe Ceases Notifications#
- OA Spec Reference:
§5.1.6 — SOMEIP_ETS_108, SOMEIP_ETS_092
- Test Module:
test_service_discovery.py- Test Function:
test_tc8_sd_008_stop_subscribe_ceases_notifications- Requirement:
comp_req__tc8_conformance__sd_sub_lifecycle- DUT Config:
tc8_someipd_sd.json
Purpose: Verify that notifications cease after StopSubscribeEventgroup (TTL = 0).
Preconditions:
Active subscription to eventgroup
0x4455.At least one notification received.
Stimuli: Send SD SubscribeEventgroup with TTL = 0 (StopSubscribe).
Expected Result: No further notifications received within 4 seconds.
TC8-SD-009 — Repetition Phase Intervals#
- OA Spec Reference:
§5.1.5.4 — SOMEIPSRV_SD_BEHAVIOR_01
- Test Module:
test_sd_phases_timing.py- Test Function:
test_tc8_sd_009_repetition_phase_intervals- Requirement:
comp_req__tc8_conformance__sd_phases_timing- DUT Config:
tc8_someipd_sd.json
Purpose: Verify that the first inter-offer gap after startup is a Repetition Phase gap (shorter than half the cyclic offer delay).
Preconditions:
Multicast socket opened before DUT startup to capture first offer.
Stimuli: None — passive observation from DUT start.
Expected Result:
First gap < 1000 ms (half of cyclic_offer_delay 2000 ms).
TC8-SD-010 — Repetition Count#
- OA Spec Reference:
§5.1.5.4 — SOMEIPSRV_SD_BEHAVIOR_01
- Test Module:
test_sd_phases_timing.py- Test Function:
test_tc8_sd_010_repetition_count_before_main_phase- Requirement:
comp_req__tc8_conformance__sd_phases_timing- DUT Config:
tc8_someipd_sd.json
Purpose:
Verify at least repetitions_max - 1 short-gap offers before
transition to main phase.
Preconditions:
Same as TC8-SD-009.
Stimuli: None — passive observation from DUT start.
Expected Result: At least 2 short gaps (< 1000 ms) observed before a long gap (main phase).
TC8-SD-011 — IPv4 Endpoint Option#
- OA Spec Reference:
§5.1.5.2 — SOMEIPSRV_OPTIONS_01–07
- Test Module:
test_service_discovery.py- Test Function:
test_tc8_sd_011_offer_ipv4_endpoint_option- Requirement:
comp_req__tc8_conformance__sd_endpoint_option- DUT Config:
tc8_someipd_sd.json
Purpose: Verify that OfferService SD entries include an IPv4EndpointOption with the correct address, port, and L4 protocol.
Preconditions:
DUT offering service on UDP port 30509.
Stimuli: None — passive observation with option parsing.
Expected Result:
IPv4EndpointOption present with address matching host_ip,
port = 30509, protocol = UDP.
TC8-SD-012 — Reboot Detection#
- OA Spec Reference:
§5.1.5.1 — SOMEIPSRV_FORMAT_02, FORMAT_07
- Test Module:
test_sd_reboot.py- Test Functions:
test_tc8_sd_012_reboot_flag_set_after_restarttest_tc8_sd_012_session_id_resets_after_restart
- Requirement:
comp_req__tc8_conformance__sd_reboot- DUT Config:
tc8_someipd_sd.json
Purpose:
Verify that someipd resets SD state on restart: reboot flag set
(bit 7 = 1) and session ID reset to ≤ 2.
Preconditions:
DUT started, SD messages captured, then DUT terminated.
Stimuli:
Restart someipd and capture the first post-reboot SD message.
Expected Result: First post-restart SD message has reboot flag set and session ID ≤ 2.
TC8-SD-013 — Multicast Eventgroup Option#
- OA Spec Reference:
§5.1.5.2 — SOMEIPSRV_OPTIONS_08–14
- Test Module:
test_service_discovery.py- Test Function:
test_tc8_sd_013_subscribe_ack_has_multicast_option- Requirement:
comp_req__tc8_conformance__sd_mcast_eg- DUT Config:
tc8_someipd_sd.json- Marker:
@pytest.mark.network(requires non-loopback NIC)
Purpose: Verify that SubscribeEventgroupAck for a multicast eventgroup includes a multicast IPv4EndpointOption.
Preconditions:
Non-loopback network interface (
TC8_HOST_IPset).Eventgroup
0x4465configured with multicast address239.0.0.1.
Stimuli:
Send SD SubscribeEventgroup for eventgroup 0x4465.
Expected Result: SubscribeEventgroupAck contains a multicast IPv4EndpointOption.
TC8-SD-014 — TTL Expiry Cleanup#
- OA Spec Reference:
§5.1.6 — SOMEIP_ETS_095
- Test Module:
test_service_discovery.py- Test Function:
test_tc8_sd_014_ttl_expiry_ceases_notifications- Requirement:
comp_req__tc8_conformance__sd_sub_lifecycle- DUT Config:
tc8_someipd_sd.json
Purpose: Verify that notifications cease after the subscription TTL expires.
Preconditions:
Active subscription with TTL = 3 seconds.
At least one notification received before expiry.
Stimuli: Wait for TTL to expire (3 s + 2 s margin).
Expected Result: No notifications received in a 3-second window after TTL expiry.
SOME/IP Message Format Tests#
- DUT Config:
tests/tc8_conformance/config/tc8_someipd_service.json
TC8-MSG-001 — Protocol Version#
- OA Spec Reference:
§5.1.5.6 — SOMEIPSRV_ONWIRE_05
- Test Module:
test_someip_message_format.py- Test Function:
test_tc8_msg_001_protocol_version- Requirement:
comp_req__tc8_conformance__msg_resp_header- DUT Config:
tc8_someipd_service.json
Purpose:
Verify that RESPONSE messages have protocol_version = 0x01.
Stimuli:
Send REQUEST to service 0x1234, method 0x0421.
Expected Result:
RESPONSE with protocol_version == 1.
TC8-MSG-002 — Message Type#
- OA Spec Reference:
§5.1.5.6 — SOMEIPSRV_ONWIRE_07
- Test Module:
test_someip_message_format.py- Test Functions:
test_tc8_msg_002_message_type_responsetest_tc8_msg_002_no_response_for_request_no_return
- Requirement:
comp_req__tc8_conformance__msg_resp_header- DUT Config:
tc8_someipd_service.json
Purpose: Verify RESPONSE (0x80) for REQUEST; no response for REQUEST_NO_RETURN.
Stimuli:
Send REQUEST → expect RESPONSE.
Send REQUEST_NO_RETURN → expect silence.
Expected Result:
REQUEST produces RESPONSE with
message_type = 0x80.REQUEST_NO_RETURN produces no response within 2 seconds.
TC8-MSG-003 — Unknown Service#
- OA Spec Reference:
§5.1.5.6 — SOMEIPSRV_ONWIRE_10; §5.1.6 — SOMEIP_ETS_077
- Test Module:
test_someip_message_format.py- Test Function:
test_tc8_msg_003_unknown_service- Requirement:
comp_req__tc8_conformance__msg_error_codes- DUT Config:
tc8_someipd_service.json
Purpose: Verify error handling for requests to non-existent services.
Stimuli:
Send REQUEST to service 0xBEEF.
Expected Result:
E_UNKNOWN_SERVICE (0x02) or no response (both valid per TC8).
TC8-MSG-004 — Unknown Method#
- OA Spec Reference:
§5.1.5.6 — SOMEIPSRV_ONWIRE_12; §5.1.6 — SOMEIP_ETS_076
- Test Module:
test_someip_message_format.py- Test Function:
test_tc8_msg_004_unknown_method- Requirement:
comp_req__tc8_conformance__msg_error_codes- DUT Config:
tc8_someipd_service.json
Purpose: Verify error handling for requests with invalid method IDs.
Stimuli:
Send REQUEST to service 0x1234, method 0xBEEF.
Expected Result:
E_UNKNOWN_METHOD (0x03).
TC8-MSG-005 — Session ID Echo#
- OA Spec Reference:
§5.1.5.6 — SOMEIPSRV_ONWIRE_03
- Test Module:
test_someip_message_format.py- Test Function:
test_tc8_msg_005_session_id_echo- Requirement:
comp_req__tc8_conformance__msg_resp_header- DUT Config:
tc8_someipd_service.json
Purpose: Verify RESPONSE echoes the REQUEST session ID.
Stimuli:
Send REQUEST with session_id = 0x1234.
Expected Result:
RESPONSE has session_id == 0x1234.
TC8-MSG-006 — Wrong Interface Version#
- OA Spec Reference:
§5.1.6 — SOMEIP_ETS_074
- Test Module:
test_someip_message_format.py- Test Function:
test_tc8_msg_006_wrong_interface_version- Requirement:
comp_req__tc8_conformance__msg_error_codes- DUT Config:
tc8_someipd_service.json
Purpose: Verify error handling for requests with wrong interface version.
Stimuli:
Send REQUEST with interface_version = 0xFF.
Expected Result:
E_WRONG_INTERFACE_VERSION, E_UNKNOWN_METHOD, or E_OK
(vsomeip behavior varies — all accepted).
TC8-MSG-007 — Malformed Message Handling#
- OA Spec Reference:
§5.1.6 — SOMEIP_ETS_054, 055, 058, 078
- Test Module:
test_someip_message_format.py- Test Functions:
test_tc8_msg_007_truncated_message_no_crashtest_tc8_msg_007_wrong_protocol_version_no_crashtest_tc8_msg_007_oversized_length_field_no_crash
- Requirement:
comp_req__tc8_conformance__msg_malformed- DUT Config:
tc8_someipd_service.json
Purpose: Verify that DUT does not crash when receiving malformed messages.
Stimuli:
Truncated message (7 bytes, below 8-byte minimum).
Message with
protocol_version = 0xFF.Message with length field claiming 0x7FF3 bytes (actual payload = 16 bytes).
Expected Result:
DUT process remains alive (poll() is None) after each malformed message.
TC8-MSG-008 — Client ID Echo#
- OA Spec Reference:
§5.1.5.6 — SOMEIPSRV_ONWIRE_03
- Test Module:
test_someip_message_format.py- Test Function:
test_tc8_msg_008_client_id_echo- Requirement:
comp_req__tc8_conformance__msg_resp_header- DUT Config:
tc8_someipd_service.json
Purpose: Verify RESPONSE echoes the REQUEST client ID.
Stimuli:
Send REQUEST with client_id = 0x0011.
Expected Result:
RESPONSE has client_id == 0x0011.
Event Notification Tests#
- DUT Config:
tests/tc8_conformance/config/tc8_someipd_service.json
TC8-EVT-001 — Notification Message Type#
- OA Spec Reference:
§5.1.5.5 — SOMEIPSRV_BASIC_03; §5.1.6 — SOMEIP_ETS_147
- Test Module:
test_event_notification.py- Test Function:
test_tc8_evt_001_notification_message_type- Requirement:
comp_req__tc8_conformance__evt_subscription- DUT Config:
tc8_someipd_service.json
Purpose:
Verify that event notifications have message_type = NOTIFICATION (0x02).
Preconditions:
DUT offering service, subscription acknowledged.
Stimuli:
Subscribe to eventgroup 0x4455 and wait for notification.
Expected Result:
Notification received with message_type == 0x02.
TC8-EVT-002 — Correct Event ID#
- OA Spec Reference:
§5.1.5.5 — SOMEIPSRV_BASIC_03
- Test Module:
test_event_notification.py- Test Function:
test_tc8_evt_002_correct_event_id- Requirement:
comp_req__tc8_conformance__evt_subscription- DUT Config:
tc8_someipd_service.json
Purpose:
Verify that notification method_id field carries the correct event ID.
Stimuli: Subscribe and capture notification.
Expected Result:
method_id == 0x0777 (configured event ID).
TC8-EVT-003 — Notification Only to Subscriber#
- OA Spec Reference:
§5.1.6 — SOMEIP_ETS_147
- Test Module:
test_event_notification.py- Test Function:
test_tc8_evt_003_notification_only_to_subscriber- Requirement:
comp_req__tc8_conformance__evt_subscription- DUT Config:
tc8_someipd_service.json
Purpose: Verify that only the subscribed endpoint receives notifications.
Stimuli: Open two sockets: subscribe on one, leave the other unsubscribed.
Expected Result: Subscribed socket receives notification; unsubscribed socket receives nothing.
TC8-EVT-004 — No Notification Before Subscribe#
- OA Spec Reference:
§5.1.6 — SOMEIP_ETS_147 (pre-subscribe)
- Test Module:
test_event_notification.py- Test Function:
test_tc8_evt_004_no_notification_before_subscribe- Requirement:
comp_req__tc8_conformance__evt_subscription- DUT Config:
tc8_someipd_service.json
Purpose: Verify that no notifications arrive before subscribing.
Stimuli: Open a socket without subscribing, listen for 3 seconds.
Expected Result: No notifications received.
TC8-EVT-005 — Multicast Notification Delivery#
- OA Spec Reference:
§5.1.6 — SOMEIP_ETS_150
- Test Module:
test_event_notification.py- Test Function:
test_tc8_evt_005_multicast_notification_delivery- Requirement:
comp_req__tc8_conformance__evt_subscription- DUT Config:
tc8_someipd_service.json- Marker:
@pytest.mark.network(requires non-loopback NIC)
Purpose: Verify that notifications for a multicast eventgroup arrive on the multicast address.
Preconditions:
Multicast group
239.0.0.1:40490joinable.Eventgroup
0x4465configured with multicast.
Stimuli:
Subscribe to eventgroup 0x4465 and listen on multicast socket.
Expected Result:
NOTIFICATION received on 239.0.0.1:40490.
TC8-EVT-006 — StopSubscribe Ceases Notifications#
- OA Spec Reference:
§5.1.6 — SOMEIP_ETS_108
- Test Module:
test_event_notification.py- Test Function:
test_tc8_evt_006_stop_subscribe_ceases_notifications- Requirement:
comp_req__tc8_conformance__evt_subscription- DUT Config:
tc8_someipd_service.json
Purpose: Verify that notifications stop after StopSubscribeEventgroup.
Preconditions:
Active subscription with at least one notification received.
Stimuli: Send SubscribeEventgroup with TTL = 0.
Expected Result: No notifications received within 4 seconds after StopSubscribe.
TC8-EVT-007 — Field Notifies Only on Value Change#
- OA Spec Reference:
§5.1.5.7 — SOMEIPSRV_RPC_16
- Test Module:
test_event_notification.py- Test Function:
TestEventNotification::test_rpc_16_field_notifies_only_on_change- Requirement:
comp_req__tc8_conformance__fld_getter_setter- DUT Config:
tc8_someipd_service.json
Purpose: Verify that a field event notification is sent only when the field value changes, not on every cyclic trigger.
Preconditions:
DUT offering service with a field configured for on-change notification.
Active subscription acknowledged.
Stimuli: SET field to value A; observe notifications; SET field to the same value A again; observe again.
Expected Result: Notification sent after first SET (value changed from initial); no duplicate notification sent when SET issues the same value a second time.
Field Conformance Tests#
- DUT Config:
tests/tc8_conformance/config/tc8_someipd_service.json
TC8-FLD-001 — Initial Notification on Subscribe#
- OA Spec Reference:
§5.1.6 — SOMEIP_ETS_121
- Test Module:
test_field_conformance.py- Test Function:
test_tc8_fld_001_initial_notification_on_subscribe- Requirement:
comp_req__tc8_conformance__fld_initial_value- DUT Config:
tc8_someipd_service.json
Purpose:
Verify that subscribing to a field eventgroup (is_field: true)
triggers an immediate NOTIFICATION with the cached value.
Preconditions:
DUT has sent at least one
notify()so vsomeip has a cached value.
Stimuli:
Subscribe to eventgroup 0x4455.
Expected Result: NOTIFICATION received promptly after subscription acknowledgment.
TC8-FLD-002 — Initial Value Timing#
- OA Spec Reference:
§5.1.6 — SOMEIP_ETS_121
- Test Module:
test_field_conformance.py- Test Function:
test_tc8_fld_002_is_field_sends_initial_value_within_one_second- Requirement:
comp_req__tc8_conformance__fld_initial_value- DUT Config:
tc8_someipd_service.json
Purpose: Verify that the initial field notification arrives within 1 second of subscribe ACK (contrasting with non-field events that only notify on the next cycle).
Stimuli: Subscribe and measure time to first notification.
Expected Result: Notification received within 1 second.
TC8-FLD-003 — Field Getter#
- OA Spec Reference:
§5.1.5.7 — SOMEIPSRV_RPC_03; §5.1.6 — SOMEIP_ETS_166
- Test Module:
test_field_conformance.py- Test Function:
test_tc8_fld_003_getter_returns_current_value- Requirement:
comp_req__tc8_conformance__fld_get_set- DUT Config:
tc8_someipd_service.json
Purpose:
Verify that a GET request (method 0x0001) returns the current
field value.
Stimuli:
Send REQUEST to method 0x0001.
Expected Result:
RESPONSE with return_code = E_OK and non-empty payload.
TC8-FLD-004 — Field Setter and Notify#
- OA Spec Reference:
§5.1.5.7 — SOMEIPSRV_RPC_11; §5.1.6 — SOMEIP_ETS_166
- Test Module:
test_field_conformance.py- Test Function:
test_tc8_fld_004_setter_updates_value_and_notifies- Requirement:
comp_req__tc8_conformance__fld_get_set- DUT Config:
tc8_someipd_service.json
Purpose:
Verify that a SET request (method 0x0002) updates the field value
and notifies all active subscribers with the new value.
Preconditions:
Active subscription to eventgroup
0x4455.Initial field notification drained.
Stimuli:
Send REQUEST to method 0x0002 with payload 0xCAFE.
Expected Result:
RESPONSE with
return_code = E_OK.NOTIFICATION received with payload matching
0xCAFE.
TCP Transport Binding Tests#
- DUT Config:
tests/tc8_conformance/config/tc8_someipd_service.json
TC8-TCP-001 — TCP Request/Response#
- OA Spec Reference:
SOMEIPSRV_RPC_01 §5.1.5.7
- Test Module:
test_someip_message_format.py- Test Function:
test_tc8_rpc_01_tcp_request_response- Requirement ID:
comp_req__tc8_conformance__tcp_transport- DUT Config:
tests/tc8_conformance/config/tc8_someipd_service.json
Purpose: Verify that the DUT accepts a TCP REQUEST and returns a RESPONSE on the same TCP connection.
Preconditions:
DUT started with
--tc8-standaloneflag.Service
0x1234offered and SD OfferService received.
Stimuli:
Open TCP connection to service port 30510; send a SOME/IP REQUEST
(method 0x0421, message_type=0x00).
Expected Result:
DUT sends SOME/IP RESPONSE (message_type=0x80,
return_code=E_OK=0x00) on the same TCP connection.
TC8-TCP-002 — TCP Session ID Echo#
- OA Spec Reference:
SOMEIPSRV_RPC_01 §5.1.5.7
- Test Module:
test_someip_message_format.py- Test Function:
test_tc8_rpc_01_tcp_session_id_echo- Requirement ID:
comp_req__tc8_conformance__tcp_transport- DUT Config:
tests/tc8_conformance/config/tc8_someipd_service.json
Purpose:
Verify that the DUT echoes the session_id from a TCP REQUEST in
the TCP RESPONSE.
Preconditions:
DUT started, service offered.
Stimuli:
Send TCP REQUEST with a known session_id value.
Expected Result:
TCP RESPONSE carries the same session_id value.
TC8-TCP-003 — TCP Client ID Echo#
- OA Spec Reference:
SOMEIPSRV_RPC_01 §5.1.5.7
- Test Module:
test_someip_message_format.py- Test Function:
test_tc8_rpc_01_tcp_client_id_echo- Requirement ID:
comp_req__tc8_conformance__tcp_transport- DUT Config:
tests/tc8_conformance/config/tc8_someipd_service.json
Purpose:
Verify that the DUT echoes the client_id from a TCP REQUEST in
the TCP RESPONSE.
Preconditions:
DUT started, service offered.
Stimuli:
Send TCP REQUEST with a known client_id value.
Expected Result:
TCP RESPONSE carries the same client_id value.
TC8-TCP-004 — Multiple Methods over Single TCP Connection#
- OA Spec Reference:
SOMEIPSRV_RPC_02 §5.1.5.7
- Test Module:
test_someip_message_format.py- Test Function:
test_tc8_rpc_02_tcp_multiple_methods_single_connection- Requirement ID:
comp_req__tc8_conformance__tcp_transport- DUT Config:
tests/tc8_conformance/config/tc8_someipd_service.json
Purpose: Verify that the DUT handles multiple SOME/IP method calls over a single persistent TCP connection.
Preconditions:
DUT started, service offered.
Stimuli: Open one TCP connection; send two consecutive REQUESTs for different methods.
Expected Result: Both REQUESTs receive valid RESPONSEs on the same TCP connection without reconnection.
TC8-TCP-005 — TCP Endpoint Advertised in SD Offer#
- OA Spec Reference:
SOMEIPSRV_OPTIONS_15 §5.1.5.2
- Test Module:
test_someip_message_format.py- Test Function:
test_tc8_sd_options_15_tcp_endpoint_advertised- Requirement ID:
comp_req__tc8_conformance__tcp_transport- DUT Config:
tests/tc8_conformance/config/tc8_someipd_service.json
Purpose:
Verify that the DUT includes a TCP IPv4EndpointOption
(L4-Proto=0x06) in SD OfferService messages.
Preconditions:
DUT starting up; multicast socket opened before DUT launch to capture initial SD traffic.
Stimuli: Capture SD multicast traffic on DUT startup.
Expected Result:
SD OfferService contains an IPv4EndpointOption with
L4-Proto=0x06 (TCP) in addition to the UDP endpoint option.
TC8-TCP-006 — TCP Field Getter (partial SOMEIPSRV_RPC_17)#
- OA Spec Reference:
SOMEIPSRV_RPC_17 §5.1.5.7 (partial coverage — see note)
- Test Module:
test_field_conformance.py- Test Function:
test_tc8_rpc_17_tcp_field_getter- Requirement ID:
comp_req__tc8_conformance__tcp_transport- DUT Config:
tests/tc8_conformance/config/tc8_someipd_service.json
Purpose:
Verify that the DUT responds to a field GET request (method 0x0001)
over TCP with E_OK and the current field value.
Preconditions:
DUT started, service offered.
Stimuli:
Open TCP connection to port 30510; send SOME/IP REQUEST for method
0x0001.
Expected Result:
DUT returns RESPONSE with return_code=E_OK and payload containing
the current field value.
TC8-TCP-007 — TCP Field Setter (partial SOMEIPSRV_RPC_17)#
- OA Spec Reference:
SOMEIPSRV_RPC_17 §5.1.5.7 (partial coverage — see note)
- Test Module:
test_field_conformance.py- Test Function:
test_tc8_rpc_17_tcp_field_setter- Requirement ID:
comp_req__tc8_conformance__tcp_transport- DUT Config:
tests/tc8_conformance/config/tc8_someipd_service.json
Purpose:
Verify that the DUT processes a field SET request (method 0x0002)
over TCP and updates the field value.
Preconditions:
DUT started, service offered.
Stimuli: Open TCP connection; send SET REQUEST with new field value; then send GET REQUEST to confirm.
Expected Result:
SET RESPONSE with E_OK; subsequent GET confirms the updated value.
TC8-TCP-008 — TCP Event Notification Delivery (partial SOMEIPSRV_RPC_17)#
- OA Spec Reference:
SOMEIPSRV_RPC_17 §5.1.5.7 (partial coverage — see note)
- Test Module:
test_event_notification.py- Test Function:
test_tc8_rpc_17_tcp_event_notification_delivery- Requirement ID:
comp_req__tc8_conformance__tcp_transport- DUT Config:
tests/tc8_conformance/config/tc8_someipd_service.json
Purpose: Verify that the DUT delivers SOME/IP NOTIFICATION messages over TCP to a subscribed client.
Preconditions:
DUT started, service offered.
Stimuli:
Subscribe to eventgroup 0x4475 (TCP); open TCP connection to port
30510.
Expected Result:
DUT sends NOTIFICATION messages (message_type=0x02,
event_id=0x0778) over the TCP connection.
TC8-TCP-009: Unaligned SOME/IP Messages over TCP (SOMEIP_ETS_068)#
- OA Spec Reference:
SOMEIP_ETS_068 (PRS_SOMEIP_00142, PRS_SOMEIP_00569)
- Test Module:
test_someip_message_format- Test Function:
test_tc8_ets_068_unaligned_someip_messages_over_tcp- Requirement ID:
comp_req__tc8_conformance__tcp_transport- DUT Config:
tests/tc8_conformance/config/tc8_someipd_service.json
- Purpose
Verify that someipd parses a TCP byte stream containing multiple SOME/IP messages packed into a single TCP segment, including the case where one message starts at a non-4-byte-aligned byte offset.
- Preconditions
someipd running in
--tc8-standalonemode withtc8_someipd_service.json.TCP port
DUT_RELIABLE_PORT(30510) accepting connections.
- Stimuli
Connect via TCP; send three concatenated SOME/IP REQUEST messages (session IDs 0x0071, 0x0072, 0x0073) as a single
sendall()call. Message sizes are 16 / 18 / 16 bytes so the third starts at offset 34 (not 4-byte aligned).- Expected Result
Receive three SOME/IP RESPONSE messages with
message_type = RESPONSE (0x80),service_id = 0x1234, and session IDs{0x0071, 0x0072, 0x0073}(any order).
Note
SOMEIPSRV_RPC_17 partial coverage: TC8-TCP-006, TC8-TCP-007, and TC8-TCP-008 verify TCP transport for field GET/SET and event notification operations using a single service instance. The full SOMEIPSRV_RPC_17 requirement (each service instance on a separate TCP connection) is not covered by the current implementation. The multi-instance TCP scenario is a known gap that will be addressed when multi-instance vsomeip configurations are available.
TC8-UDP-001: Unaligned SOME/IP Messages over UDP (SOMEIP_ETS_069)#
- OA Spec Reference:
SOMEIP_ETS_069 (PRS_SOMEIP_00142, PRS_SOMEIP_00569)
- Test Module:
test_someip_message_format- Test Function:
test_tc8_ets_069_unaligned_someip_messages_over_udp- Requirement ID:
comp_req__tc8_conformance__udp_transport- DUT Config:
tests/tc8_conformance/config/tc8_someipd_service.json
- Purpose
Verify that someipd parses a UDP datagram containing multiple SOME/IP messages where one message starts at a non-4-byte-aligned byte offset within the datagram.
- Preconditions
someipd running in
--tc8-standalonemode withtc8_someipd_service.json.UDP port
DUT_UNRELIABLE_PORT(30502 intc8_message_formattarget) accepting requests.
- Stimuli
Create a UDP socket bound to an ephemeral port; send three concatenated SOME/IP REQUEST messages (session IDs 0x0081, 0x0082, 0x0083) as a single
sendto()call. Message sizes are 16 / 18 / 16 bytes so the third starts at offset 34 (not 4-byte aligned).- Expected Result
Receive three SOME/IP RESPONSE messages with
message_type = RESPONSE (0x80),service_id = 0x1234, and session IDs{0x0081, 0x0082, 0x0083}(any order). Each response arrives as a separate UDP datagram.
Multi-service and Multi-instance Tests#
- DUT Config:
tests/tc8_conformance/config/tc8_someipd_multi.json
TC8-MULTI-001 — Multi-service Config Loads and Primary Service Offered#
- OA Spec Reference:
§5.1.5.7 — SOMEIPSRV_RPC_13
- Test Module:
test_multi_service- Test Function:
TestMultiServiceInstanceRouting::test_rpc_13_multi_service_config_loads_and_primary_service_offered- Requirement:
comp_req__tc8_conformance__multi_service- DUT Config:
tc8_someipd_multi.json
- Purpose
Verify that
someipdaccepts a vsomeip configuration that declares two service entries and that the primary service (0x1234/0x5678) is correctly offered via SD OfferService after startup.
Preconditions
someipdstarted with--tc8-standaloneandtc8_someipd_multi.json
tc8_someipd_multi.jsondeclares two service entries (0x1234/0x5678 and 0x5678/0x0001)Multicast route available (224.0.0.0/4)
- Stimuli
Passive observation of SD OfferService multicast messages.
- Expected Result
The
someipdprocess remains alive after startup (multi-service config parsed without crash)An SD OfferService entry for service_id=0x1234, instance_id=0x5678 is received within 10 seconds
The OfferService entry has TTL > 0
TC8-MULTI-002 — Service Instance UDP Port Advertisement and Isolation#
- OA Spec Reference:
§5.1.5.7 — SOMEIPSRV_RPC_14
- Test Module:
test_multi_service- Test Functions:
TestMultiServiceInstanceRouting::test_rpc_14_service_a_advertises_configured_udp_port,TestMultiServiceInstanceRouting::test_rpc_14_no_unexpected_service_ids_in_offers- Requirement:
comp_req__tc8_conformance__multi_service- DUT Config:
tc8_someipd_multi.json
- Purpose
Verify that the offered service advertises the UDP port from its
unreliableconfig field (TC8_SVC_PORT) in the SD IPv4EndpointOption, and that no unexpected service IDs appear in SD traffic.
Preconditions
Same as TC8-MULTI-001.
- Stimuli
Passive observation of SD OfferService for a 6-second window; extraction of IPv4EndpointOption from each OfferService entry.
- Expected Result
Service 0x1234 OfferService carries an IPv4 UDP endpoint option with
port == DUT_UNRELIABLE_PORT(TC8_SVC_PORT = 30512)All observed service IDs are in the set {0x1234, 0x5678} (configured services)
No phantom service IDs are present
SD Format and Options Compliance Tests#
- DUT Config:
tests/tc8_conformance/config/tc8_someipd_sd.json- Test Module:
test_sd_format_compliance
TC8-SDF-001 — SD SOME/IP Header: Client ID = 0x0000#
- OA Reference:
§5.1.5.1 — SOMEIPSRV_FORMAT_01
- Requirement:
comp_req__tc8_conformance__sd_format_fields- Test Function:
TestSdHeaderFieldsOfferService::test_format_01_client_id_is_zero
Purpose: Verify the Client-ID field in SOME/IP SD OfferService messages is always 0x0000.
Preconditions:
someipd started in standalone mode; multicast capture socket open before launch.
Stimulus: Passive capture of the initial multicast OfferService.
Expected Result:
sd_hdr.client_id == 0x0000.
TC8-SDF-002 — SD SOME/IP Header: Session ID non-zero#
- OA Reference:
§5.1.5.1 — SOMEIPSRV_FORMAT_02
- Requirement:
comp_req__tc8_conformance__sd_format_fields- Test Function:
TestSdHeaderFieldsOfferService::test_format_02_session_id_is_nonzero_and_in_range
Purpose: Verify the SD Session-ID field is non-zero (never 0x0000) and fits in 16 bits.
Stimulus: Passive capture of the multicast OfferService.
Expected Result:
sd_hdr.session_id != 0x0000 and sd_hdr.session_id <= 0xFFFF.
TC8-SDF-003 — SD SOME/IP Header: Interface Version = 0x01#
- OA Reference:
§5.1.5.1 — SOMEIPSRV_FORMAT_04
- Requirement:
comp_req__tc8_conformance__sd_format_fields- Test Function:
TestSdHeaderFieldsOfferService::test_format_04_interface_version_is_one
Purpose: Verify the SOME/IP interface_version field in SD messages equals 0x01.
Stimulus: Passive capture of the multicast OfferService.
Expected Result:
sd_hdr.interface_version == 0x01.
TC8-SDF-004 — SD SOME/IP Header: Message Type = NOTIFICATION#
- OA Reference:
§5.1.5.1 — SOMEIPSRV_FORMAT_05
- Requirement:
comp_req__tc8_conformance__sd_format_fields- Test Function:
TestSdHeaderFieldsOfferService::test_format_05_message_type_is_notification
Purpose: Verify the SOME/IP message_type field in SD messages equals 0x02 (NOTIFICATION).
Stimulus: Passive capture of the multicast OfferService.
Expected Result:
sd_hdr.message_type == SOMEIPMessageType.NOTIFICATION.
TC8-SDF-005 — SD SOME/IP Header: Return Code = E_OK#
- OA Reference:
§5.1.5.1 — SOMEIPSRV_FORMAT_06
- Requirement:
comp_req__tc8_conformance__sd_format_fields- Test Function:
TestSdHeaderFieldsOfferService::test_format_06_return_code_is_e_ok
Purpose: Verify the SOME/IP return_code field in SD messages equals 0x00 (E_OK).
Stimulus: Passive capture of the multicast OfferService.
Expected Result:
sd_hdr.return_code == SOMEIPReturnCode.E_OK.
TC8-SDF-006 — SD Flags: Reserved Bits are Zero#
- OA Reference:
§5.1.5.1 — SOMEIPSRV_FORMAT_09
- Requirement:
comp_req__tc8_conformance__sd_format_fields- Test Function:
TestSdHeaderFieldsOfferService::test_format_09_sd_flags_reserved_bits_are_zero
Purpose: Verify that bits 5-0 of the SD flags byte (reserved/undefined) are all zero.
Stimulus: Passive capture of the multicast OfferService.
Expected Result:
sd_hdr.flags_unknown == 0.
TC8-SDF-007 — SD Entry: Reserved Byte is Zero#
- OA Reference:
§5.1.5.1 — SOMEIPSRV_FORMAT_10
- Requirement:
comp_req__tc8_conformance__sd_format_fields- Test Function:
TestSdHeaderFieldsOfferService::test_format_10_sd_entry_reserved_bytes_are_zero
Purpose: Verify that byte [2] (index_second_option_run, reserved for Type-1 entries) in the 16-byte OfferService SD entry is zero.
Stimulus: Passive capture and raw byte inspection of the OfferService entry.
Expected Result:
entry_bytes[2] == 0.
TC8-SDF-008 — SD Entry: Length is 16 Bytes#
- OA Reference:
§5.1.5.1 — SOMEIPSRV_FORMAT_11
- Requirement:
comp_req__tc8_conformance__sd_format_fields- Test Function:
TestSdOfferEntryFields::test_format_11_entry_is_16_bytes
Purpose: Verify that each SD entry serialises to exactly 16 bytes.
Stimulus: Passive capture; entry built and measured.
Expected Result:
len(entry.build()) == 16.
TC8-SDF-009 — SD Entry: First Option Run Index is Zero#
- OA Reference:
§5.1.5.1 — SOMEIPSRV_FORMAT_12
- Requirement:
comp_req__tc8_conformance__sd_format_fields- Test Function:
TestSdOfferEntryFields::test_format_12_first_option_run_index_is_zero
Purpose: Verify that byte [1] (option_index_1) in the OfferService entry is 0x00.
Stimulus: Passive capture; raw byte inspection.
Expected Result:
entry_bytes[1] == 0.
TC8-SDF-010 — SD Entry: num_options_1 Matches Resolved Options#
- OA Reference:
§5.1.5.1 — SOMEIPSRV_FORMAT_13
- Requirement:
comp_req__tc8_conformance__sd_format_fields- Test Function:
TestSdOfferEntryFields::test_format_13_num_options_matches_options_list
Purpose: Verify that the num_options_1 counter field equals the actual number of options associated with the entry.
Stimulus: Passive capture; compare raw entry counter with resolved options list length.
Expected Result:
raw_entry.num_options_1 == len(entry.options_1).
TC8-SDF-011 — SD Entry: Instance ID Matches Config#
- OA Reference:
§5.1.5.1 — SOMEIPSRV_FORMAT_15
- Requirement:
comp_req__tc8_conformance__sd_format_fields- Test Function:
TestSdOfferEntryFields::test_format_15_instance_id_matches_config
Purpose: Verify that the OfferService entry instance_id matches the configured value (0x5678).
Stimulus: Passive capture.
Expected Result:
entry.instance_id == 0x5678.
TC8-SDF-012 — SD Entry: Major Version Matches Config#
- OA Reference:
§5.1.5.1 — SOMEIPSRV_FORMAT_16
- Requirement:
comp_req__tc8_conformance__sd_format_fields- Test Function:
TestSdOfferEntryFields::test_format_16_major_version_matches_config
Purpose: Verify that the OfferService entry major_version matches the configured value (0x00).
Stimulus: Passive capture.
Expected Result:
entry.major_version == 0x00.
TC8-SDF-013 — SD Entry: Minor Version Matches Config#
- OA Reference:
§5.1.5.1 — SOMEIPSRV_FORMAT_18
- Requirement:
comp_req__tc8_conformance__sd_format_fields- Test Function:
TestSdOfferEntryFields::test_format_18_minor_version_matches_config
Purpose: Verify that the OfferService entry minor_version matches the configured value (0x00000000).
Stimulus: Passive capture.
Expected Result:
entry.service_minor_version == 0x00000000.
TC8-SDF-014 — SubscribeAck Entry Type = 0x06#
- OA Reference:
§5.1.5.1 — SOMEIPSRV_FORMAT_19
- Requirement:
comp_req__tc8_conformance__sd_format_fields- Test Function:
TestSdHeaderFieldsSubscribeAck::test_format_19_ack_entry_type_is_subscribe_ack
Purpose: Verify that the SubscribeEventgroupAck SD entry type equals 0x07 (SubscribeAck).
Preconditions:
someipd offering eventgroup 0x4455.
Stimulus: Send SubscribeEventgroup and capture the Ack.
Expected Result:
ack.sd_type == SOMEIPSDEntryType.SubscribeAck.
TC8-SDF-015 — SubscribeAck Entry: 16 Bytes#
- OA Reference:
§5.1.5.1 — SOMEIPSRV_FORMAT_20
- Requirement:
comp_req__tc8_conformance__sd_format_fields- Test Function:
TestSdHeaderFieldsSubscribeAck::test_format_20_ack_entry_is_16_bytes
Purpose: Verify that the SubscribeEventgroupAck entry serialises to exactly 16 bytes.
Stimulus: Send SubscribeEventgroup; capture Ack; measure serialised length.
Expected Result:
len(ack.build()) == 16.
TC8-SDF-016 — SubscribeAck: Option Run Index Correct#
- OA Reference:
§5.1.5.1 — SOMEIPSRV_FORMAT_21
- Requirement:
comp_req__tc8_conformance__sd_format_fields- Test Function:
TestSdHeaderFieldsSubscribeAck::test_format_21_ack_option_run_index_is_zero_when_no_options
Purpose: Verify that the SubscribeAck option run index is 0x00 when no options are attached, or a valid index (< 16) when options are present.
Stimulus: Send SubscribeEventgroup for UDP unicast eventgroup (no multicast option expected).
Expected Result:
option_index_1 == 0 when num_options_1 == 0.
TC8-SDF-017 — SubscribeAck: Service ID Matches#
- OA Reference:
§5.1.5.1 — SOMEIPSRV_FORMAT_23
- Requirement:
comp_req__tc8_conformance__sd_format_fields- Test Function:
TestSdHeaderFieldsSubscribeAck::test_format_23_ack_service_id_matches_config
Purpose: Verify that the SubscribeAck entry carries the same service_id as the subscribe request.
Stimulus: Send SubscribeEventgroup for service 0x1234.
Expected Result:
ack.service_id == 0x1234.
TC8-SDF-018 — SubscribeAck: Instance ID Matches#
- OA Reference:
§5.1.5.1 — SOMEIPSRV_FORMAT_24
- Requirement:
comp_req__tc8_conformance__sd_format_fields- Test Function:
TestSdHeaderFieldsSubscribeAck::test_format_24_ack_instance_id_matches_config
Purpose: Verify that the SubscribeAck entry carries the same instance_id as the subscribe request.
Stimulus: Send SubscribeEventgroup for instance 0x5678.
Expected Result:
ack.instance_id == 0x5678.
TC8-SDF-019 — SubscribeAck: Major Version Matches#
- OA Reference:
§5.1.5.1 — SOMEIPSRV_FORMAT_25
- Requirement:
comp_req__tc8_conformance__sd_format_fields- Test Function:
TestSdHeaderFieldsSubscribeAck::test_format_25_ack_major_version_matches_config
Purpose: Verify that the SubscribeAck entry major_version matches the service definition.
Stimulus: Send SubscribeEventgroup with major_version = 0x00.
Expected Result:
ack.major_version == 0x00.
TC8-SDF-020 — SubscribeAck: TTL > 0#
- OA Reference:
§5.1.5.1 — SOMEIPSRV_FORMAT_26
- Requirement:
comp_req__tc8_conformance__sd_format_fields- Test Function:
TestSdHeaderFieldsSubscribeAck::test_format_26_ack_ttl_is_nonzero
Purpose: Verify that a positive SubscribeEventgroupAck has TTL > 0 (TTL = 0 means Nack).
Stimulus: Send valid SubscribeEventgroup.
Expected Result:
ack.ttl > 0.
TC8-SDF-021 — SubscribeAck: Reserved Field = 0#
- OA Reference:
§5.1.5.1 — SOMEIPSRV_FORMAT_27
- Requirement:
comp_req__tc8_conformance__sd_format_fields- Test Function:
TestSdHeaderFieldsSubscribeAck::test_format_27_ack_reserved_field_is_zero
Purpose: Verify that the high 16 bits of the SubscribeAck minver_or_counter field (the reserved counter portion) are all zero.
Stimulus: Send SubscribeEventgroup; inspect raw ack entry fields.
Expected Result:
(ack.minver_or_counter >> 16) & 0xFFFF == 0.
TC8-SDF-022 — SubscribeAck: Eventgroup ID Matches#
- OA Reference:
§5.1.5.1 — SOMEIPSRV_FORMAT_28
- Requirement:
comp_req__tc8_conformance__sd_format_fields- Test Function:
TestSdHeaderFieldsSubscribeAck::test_format_28_ack_eventgroup_id_matches_subscribe
Purpose: Verify that the SubscribeAck carries the same eventgroup_id as the subscribe request.
Stimulus: Send SubscribeEventgroup for eventgroup 0x4455.
Expected Result:
(ack.minver_or_counter & 0xFFFF) == 0x4455.
TC8-SDF-023 — Endpoint Option: Length = 0x0009#
- OA Reference:
§5.1.5.2 — SOMEIPSRV_OPTIONS_01
- Requirement:
comp_req__tc8_conformance__sd_options_fields- Test Function:
TestSdOptionsEndpoint::test_options_01_endpoint_option_length_is_nine
Purpose: Verify that the IPv4EndpointOption length field in SD OfferService messages equals 0x0009.
Stimulus: Passive capture; extract first IPv4EndpointOption from the OfferService entry; read raw bytes.
Expected Result:
length_field == 0x0009.
TC8-SDF-024 — Endpoint Option: Type = 0x04#
- OA Reference:
§5.1.5.2 — SOMEIPSRV_OPTIONS_02
- Requirement:
comp_req__tc8_conformance__sd_options_fields- Test Function:
TestSdOptionsEndpoint::test_options_02_endpoint_option_type_is_0x04
Purpose: Verify that the IPv4EndpointOption type byte equals 0x04.
Stimulus: Passive capture; inspect raw option byte [2].
Expected Result:
type_byte == 0x04.
TC8-SDF-025 — Endpoint Option: Reserved Byte After Type = 0x00#
- OA Reference:
§5.1.5.2 — SOMEIPSRV_OPTIONS_03
- Requirement:
comp_req__tc8_conformance__sd_options_fields- Test Function:
TestSdOptionsEndpoint::test_options_03_endpoint_option_reserved_after_type_is_zero
Purpose: Verify that the reserved byte at option offset [3] (after the type byte) equals 0x00.
Stimulus: Passive capture; inspect raw option byte [3].
Expected Result:
reserved_byte == 0x00.
TC8-SDF-026 — Endpoint Option: Reserved Before Protocol = 0x00#
- OA Reference:
§5.1.5.2 — SOMEIPSRV_OPTIONS_05
- Requirement:
comp_req__tc8_conformance__sd_options_fields- Test Function:
TestSdOptionsEndpoint::test_options_05_endpoint_option_reserved_before_protocol_is_zero
Purpose: Verify that the reserved byte at option offset [8] (before the L4 protocol byte) equals 0x00.
Stimulus: Passive capture; inspect raw option byte [8].
Expected Result:
reserved_byte == 0x00.
TC8-SDF-027 — Endpoint Option: L4 Protocol = 0x11 (UDP)#
- OA Reference:
§5.1.5.2 — SOMEIPSRV_OPTIONS_06
- Requirement:
comp_req__tc8_conformance__sd_options_fields- Test Function:
TestSdOptionsEndpoint::test_options_06_endpoint_option_protocol_is_udp
Purpose: Verify that the IPv4EndpointOption L4 protocol field equals 0x11 (UDP).
Stimulus:
Passive capture; read opt.l4proto.
Expected Result:
opt.l4proto == L4Protocols.UDP.
TC8-SDF-028 — Multicast Option: Length = 0x0009#
- OA Reference:
§5.1.5.2 — SOMEIPSRV_OPTIONS_08
- Requirement:
comp_req__tc8_conformance__sd_options_fields- Marker:
@pytest.mark.network(requires non-loopback NIC)- Test Function:
TestSdOptionsMulticast::test_options_08_multicast_option_length_is_nine
Purpose: Verify that the IPv4MulticastOption in SubscribeEventgroupAck has length field 0x0009.
Preconditions: Non-loopback NIC (TC8_HOST_IP set); eventgroup 0x4465 configured with multicast address.
Stimulus: Send SubscribeEventgroup for eventgroup 0x4465; capture Ack and extract multicast option.
Expected Result:
length_field == 0x0009.
TC8-SDF-029 — Multicast Option: Type = 0x14#
- OA Reference:
§5.1.5.2 — SOMEIPSRV_OPTIONS_09
- Requirement:
comp_req__tc8_conformance__sd_options_fields- Marker:
@pytest.mark.network(requires non-loopback NIC)- Test Function:
TestSdOptionsMulticast::test_options_09_multicast_option_type_is_0x14
Purpose: Verify that the IPv4MulticastOption type byte equals 0x14 (decimal 20).
Stimulus: Same as TC8-SDF-028.
Expected Result:
type_byte == 0x14.
TC8-SDF-030 — Multicast Option: Reserved = 0x00#
- OA Reference:
§5.1.5.2 — SOMEIPSRV_OPTIONS_10
- Requirement:
comp_req__tc8_conformance__sd_options_fields- Marker:
@pytest.mark.network(requires non-loopback NIC)- Test Function:
TestSdOptionsMulticast::test_options_10_multicast_option_reserved_is_zero
Purpose: Verify that the reserved byte at offset [3] of the IPv4MulticastOption equals 0x00.
Stimulus: Same as TC8-SDF-028.
Expected Result:
reserved_byte == 0x00.
TC8-SDF-031 — Multicast Option: Address Matches Config#
- OA Reference:
§5.1.5.2 — SOMEIPSRV_OPTIONS_11
- Requirement:
comp_req__tc8_conformance__sd_options_fields- Marker:
@pytest.mark.network(requires non-loopback NIC)- Test Function:
TestSdOptionsMulticast::test_options_11_multicast_address_matches_config
Purpose:
Verify that the IPv4MulticastOption address field equals the configured multicast
group address (239.0.0.1).
Stimulus: Same as TC8-SDF-028.
Expected Result:
opt.address == IPv4Address("239.0.0.1").
TC8-SDF-032 — Multicast Option: Reserved Before Port = 0x00#
- OA Reference:
§5.1.5.2 — SOMEIPSRV_OPTIONS_12
- Requirement:
comp_req__tc8_conformance__sd_options_fields- Marker:
@pytest.mark.network(requires non-loopback NIC)- Test Function:
TestSdOptionsMulticast::test_options_12_multicast_option_reserved_before_port_is_zero
Purpose: Verify that the reserved byte at option offset [8] (before the port field) equals 0x00.
Stimulus: Same as TC8-SDF-028.
Expected Result:
reserved_byte == 0x00.
TC8-SDF-033 — Multicast Option: L4 Protocol = 0x11 (UDP)#
- OA Reference:
§5.1.5.2 — SOMEIPSRV_OPTIONS_13
- Requirement:
comp_req__tc8_conformance__sd_options_fields- Marker:
@pytest.mark.network(requires non-loopback NIC)- Test Function:
TestSdOptionsMulticast::test_options_13_multicast_option_protocol_is_udp
Purpose: Verify that the IPv4MulticastOption L4 protocol field equals 0x11 (UDP).
Stimulus: Same as TC8-SDF-028.
Expected Result:
opt.l4proto == L4Protocols.UDP.
TC8-SDF-034 — Multicast Option: Port Matches Config#
- OA Reference:
§5.1.5.2 — SOMEIPSRV_OPTIONS_14
- Requirement:
comp_req__tc8_conformance__sd_options_fields- Marker:
@pytest.mark.network(requires non-loopback NIC)- Test Function:
TestSdOptionsMulticast::test_options_14_multicast_port_matches_config
Purpose: Verify that the IPv4MulticastOption port field equals the configured multicast port (40490).
Stimulus: Same as TC8-SDF-028.
Expected Result:
opt.port == 40490.
TC8-SDF-035 — StopSubscribeEventgroup Entry Wire Format#
- OA Reference:
§5.1.5.3 — SOMEIPSRV_SD_MESSAGE_12
- Requirement:
comp_req__tc8_conformance__sd_stop_sub_fmt- Test Function:
TestSdStopSubscribeFormat::test_sd_message_12_stop_subscribe_entry_format
Purpose:
Verify that a StopSubscribeEventgroup SD entry has entry type byte 0x06
and TTL field (bytes 9–11) equal to 0x000000 at the wire level.
Preconditions: None — pure byte-level format check, no DUT interaction.
Stimulus: Inline construction of a 16-byte SD entry with TTL=0.
Expected Result:
entry[0] == 0x06 and entry[9:12] == b'\x00\x00\x00'.
SD Entry Semantics Tests#
- DUT Config:
tests/tc8_conformance/config/tc8_someipd_sd.json- Test Module:
test_service_discovery
TC8-SDM-001 — FindService Wildcard Instance#
- OA Reference:
§5.1.5.3 — SOMEIPSRV_SD_MESSAGE_01
- Requirement:
comp_req__tc8_conformance__sd_find_response- Test Function:
TestSDVersionMatching::test_sd_message_01_instance_wildcard
Purpose: Verify that a FindService with instance_id = 0xFFFF (wildcard) elicits an OfferService for the configured instance.
Stimulus: Send FindService with instance_id = 0xFFFF.
Expected Result:
OfferService received with instance_id == 0x5678.
TC8-SDM-002 — FindService Specific Instance#
- OA Reference:
§5.1.5.3 — SOMEIPSRV_SD_MESSAGE_02
- Requirement:
comp_req__tc8_conformance__sd_find_response- Test Function:
TestSDVersionMatching::test_sd_message_02_instance_specific
Purpose: Verify that a FindService with the exact instance_id = 0x5678 elicits an OfferService.
Stimulus: Send FindService with instance_id = 0x5678.
Expected Result: OfferService received for service_id = 0x1234, instance_id = 0x5678.
TC8-SDM-003 — FindService Wildcard Major Version#
- OA Reference:
§5.1.5.3 — SOMEIPSRV_SD_MESSAGE_03
- Requirement:
comp_req__tc8_conformance__sd_find_response- Test Function:
TestSDVersionMatching::test_sd_message_03_major_version_wildcard
Purpose: Verify that a FindService with major_version = 0xFF (any) elicits an OfferService.
Stimulus: Send FindService with major_version = 0xFF.
Expected Result: OfferService received for the configured service.
TC8-SDM-004 — FindService Specific Major Version#
- OA Reference:
§5.1.5.3 — SOMEIPSRV_SD_MESSAGE_04
- Requirement:
comp_req__tc8_conformance__sd_find_response- Test Function:
TestSDVersionMatching::test_sd_message_04_major_version_specific
Purpose: Verify that a FindService with the exact major_version = 0x00 elicits an OfferService.
Stimulus: Send FindService with major_version = 0x00.
Expected Result: OfferService received for the configured service.
TC8-SDM-005 — FindService Wildcard Minor Version#
- OA Reference:
§5.1.5.3 — SOMEIPSRV_SD_MESSAGE_05
- Requirement:
comp_req__tc8_conformance__sd_find_response- Test Function:
TestSDVersionMatching::test_sd_message_05_minor_version_wildcard
Purpose: Verify that a FindService with minor_version = 0xFFFFFFFF (wildcard) elicits an OfferService.
Stimulus: Send FindService with minor_version = 0xFFFFFFFF.
Expected Result: OfferService received for the configured service.
TC8-SDM-006 — FindService Specific Minor Version#
- OA Reference:
§5.1.5.3 — SOMEIPSRV_SD_MESSAGE_06
- Requirement:
comp_req__tc8_conformance__sd_find_response- Test Function:
TestSDVersionMatching::test_sd_message_06_minor_version_specific
Purpose: Verify that a FindService with minor_version = 0x00000000 (exact) elicits an OfferService.
Stimulus: Send FindService with minor_version = 0x00000000.
Expected Result: OfferService received for the configured service.
TC8-SDM-007 — SubscribeEventgroup: Wrong Major Version Rejected#
- OA Reference:
§5.1.5.3 — SOMEIPSRV_SD_MESSAGE_14
- Requirement:
comp_req__tc8_conformance__sd_sub_lifecycle- Test Function:
TestSDSubscribeNAck::test_sd_message_14_wrong_major_version
Purpose: Verify that a SubscribeEventgroup with a non-matching major version is rejected with NAck (SubscribeEventgroupAck TTL = 0) or silently ignored.
Stimulus: Send SubscribeEventgroup with major_version = 0x7F (not 0x00).
Expected Result: No positive SubscribeAck (TTL > 0) received; DUT remains functional.
TC8-SDM-008 — SubscribeEventgroup: Wrong Service ID Rejected#
- OA Reference:
§5.1.5.3 — SOMEIPSRV_SD_MESSAGE_15
- Requirement:
comp_req__tc8_conformance__sd_sub_lifecycle- Test Function:
TestSDSubscribeNAck::test_sd_message_15_wrong_service_id
Purpose: Verify that a SubscribeEventgroup for an unknown service is rejected or ignored.
Stimulus: Send SubscribeEventgroup with service_id = 0xBEEF.
Expected Result: No positive SubscribeAck; DUT remains functional.
TC8-SDM-009 — SubscribeEventgroup: Wrong Instance ID Rejected#
- OA Reference:
§5.1.5.3 — SOMEIPSRV_SD_MESSAGE_16
- Requirement:
comp_req__tc8_conformance__sd_sub_lifecycle- Test Function:
TestSDSubscribeNAck::test_sd_message_16_wrong_instance_id
Purpose: Verify that a SubscribeEventgroup for an unknown instance is rejected or ignored.
Stimulus: Send SubscribeEventgroup with instance_id = 0xBEEF.
Expected Result: No positive SubscribeAck; DUT remains functional.
TC8-SDM-010 — SubscribeEventgroup: Unknown Eventgroup Rejected#
- OA Reference:
§5.1.5.3 — SOMEIPSRV_SD_MESSAGE_17
- Requirement:
comp_req__tc8_conformance__sd_sub_lifecycle- Test Function:
TestSDSubscribeNAck::test_sd_message_17_unknown_eventgroup_id
Purpose: Verify that a SubscribeEventgroup for an unknown eventgroup ID is rejected with NAck.
Stimulus: Send SubscribeEventgroup with eventgroup_id = 0xBEEF.
Expected Result: SubscribeAck with TTL = 0 (NAck) received.
TC8-SDM-011 — SubscribeEventgroup: TTL = 0 is StopSubscribe#
- OA Reference:
§5.1.5.3 — SOMEIPSRV_SD_MESSAGE_18
- Requirement:
comp_req__tc8_conformance__sd_sub_lifecycle- Test Function:
TestSDSubscribeNAck::test_sd_message_18_ttl_zero_stop_subscribe
Purpose: Verify that a SubscribeEventgroup with TTL = 0 is treated as StopSubscribeEventgroup and does not elicit a positive ACK.
Stimulus: Subscribe (TTL > 0) then immediately send another SubscribeEventgroup with TTL = 0.
Expected Result: No positive ACK after the TTL = 0 message.
TC8-SDM-012 — SubscribeEventgroup: Reserved Bits Set Rejected#
- OA Reference:
§5.1.5.3 — SOMEIPSRV_SD_MESSAGE_19
- Requirement:
comp_req__tc8_conformance__sd_sub_lifecycle- Test Function:
TestSDSubscribeNAck::test_sd_message_19_reserved_field_set
Purpose: Verify that a SubscribeEventgroup with reserved flag bits set is rejected with NAck.
Note
This test is expected to FAIL against vsomeip 3.6.1: the stack sends a positive ACK instead of NAck.
Stimulus: Send SubscribeEventgroup with reserved SD flags bits set to 1.
Expected Result: NAck (SubscribeAck TTL = 0) received; no positive ACK.
TC8-SDM-013 — FindService Response Timing (Unicast)#
- OA Reference:
§5.1.5.4 — SOMEIPSRV_SD_BEHAVIOR_03
- Requirement:
comp_req__tc8_conformance__sd_cyclic_timing- Test Function:
TestSDFindServiceTiming::test_sd_behavior_03_unicast_findservice_timing
Purpose: Verify that a unicast OfferService response to a FindService arrives within the configured request-response delay.
Stimulus: Send unicast FindService; measure time to first OfferService response.
Expected Result: OfferService received within the configured delay window.
TC8-SDM-014 — FindService Response Timing (Multicast)#
- OA Reference:
§5.1.5.4 — SOMEIPSRV_SD_BEHAVIOR_04
- Requirement:
comp_req__tc8_conformance__sd_cyclic_timing- Test Function:
TestSDFindServiceTiming::test_sd_behavior_04_multicast_findservice_timing
Purpose: Verify that an OfferService response to a multicast FindService arrives within the configured delay.
Stimulus: Send multicast FindService; measure time to OfferService response.
Expected Result: OfferService received within the allowed window.
SD Lifecycle Advanced Tests#
- DUT Config:
tests/tc8_conformance/config/tc8_someipd_sd.json- Test Module:
test_service_discovery(TestSDSubscribeLifecycleAdvanced, TestSDFindServiceAdvanced) andtest_sd_client
TC8-SDLC-001 — Two Simultaneous Subscribes#
- OA Reference:
§5.1.6 — SOMEIP_ETS_088
- Requirement:
comp_req__tc8_conformance__sd_sub_lifecycle- Test Function:
TestSDSubscribeLifecycleAdvanced::test_ets_088_two_subscribes_same_session
Purpose: Verify that two SubscribeEventgroup entries in one SD message each receive a positive ACK.
Stimulus: Send an SD message containing two SubscribeEventgroup entries.
Expected Result: Two ACK entries received (one per subscription).
TC8-SDLC-002 — TTL = 0 as StopSubscribe (No NAck)#
- OA Reference:
§5.1.6 — SOMEIP_ETS_092
- Requirement:
comp_req__tc8_conformance__sd_sub_lifecycle- Test Function:
TestSDSubscribeLifecycleAdvanced::test_ets_092_ttl_zero_stop_subscribe_no_nack
Purpose: Verify that a SubscribeEventgroup with TTL = 0 stops the subscription without triggering a NAck from the DUT.
Stimulus: Subscribe then send SubscribeEventgroup TTL = 0.
Expected Result: No NAck (SubscribeAck TTL = 0) received after the StopSubscribe.
TC8-SDLC-003 — Subscribe Without Prior RPC Call#
- OA Reference:
§5.1.6 — SOMEIP_ETS_098
- Requirement:
comp_req__tc8_conformance__sd_sub_lifecycle- Test Function:
TestSDSubscribeLifecycleAdvanced::test_ets_098_subscribe_accepted_without_prior_rpc
Purpose: Verify that the DUT accepts a SubscribeEventgroup without any prior method call (no prerequisite RPC interaction required).
Stimulus: Send SubscribeEventgroup immediately after service discovery, without any RPC.
Expected Result: Positive SubscribeAck received.
TC8-SDLC-004 — Non-Standard SD Entry Order Handled#
- OA Reference:
§5.1.6 — SOMEIP_ETS_107
- Requirement:
comp_req__tc8_conformance__sd_sub_lifecycle- Test Function:
TestSDSubscribeLifecycleAdvanced::test_ets_107_find_service_and_subscribe_processed_independently
Purpose: Verify that the DUT correctly handles SD messages where FindService and SubscribeEventgroup entries appear in a non-standard order.
Stimulus: Send SD message with FindService followed by SubscribeEventgroup.
Expected Result: Both entries processed; OfferService and SubscribeAck received.
TC8-SDLC-005 — Subscribe Endpoint IP Matches Tester#
- OA Reference:
§5.1.6 — SOMEIP_ETS_120
- Requirement:
comp_req__tc8_conformance__sd_sub_lifecycle- Test Function:
TestSDSubscribeLifecycleAdvanced::test_ets_120_subscribe_endpoint_ip_matches_tester
Purpose: Verify that the DUT delivers events to the IP address specified in the subscribe endpoint option, not the IP address the SD message was sourced from.
Stimulus: Send SubscribeEventgroup with endpoint option IP = tester_ip.
Expected Result: Events delivered to the tester_ip address.
TC8-SDLC-006 — SD Interface Version = 0x01#
- OA Reference:
§5.1.6 — SOMEIP_ETS_122
- Requirement:
comp_req__tc8_conformance__sd_offer_format- Test Function:
TestSDSubscribeLifecycleAdvanced::test_ets_122_sd_interface_version_is_one
Purpose: Verify that the SD interface_version field in DUT OfferService messages is 0x01.
Stimulus: Passive capture of SD OfferService.
Expected Result:
sd_hdr.interface_version == 0x01 (same as SOMEIPSRV_FORMAT_04, verified in context
of the lifecycle sequence).
TC8-SDLC-007 — Re-subscribe After StopSubscribe#
- OA Reference:
§5.1.6 — SOMEIP_ETS_155
- Requirement:
comp_req__tc8_conformance__sd_sub_lifecycle- Test Function:
TestSDSubscribeLifecycleAdvanced::test_ets_155_resubscribe_after_stop
Purpose: Verify that a subscription can be re-established after a StopSubscribeEventgroup (TTL = 0) and that events resume.
Stimulus: Subscribe, verify events, StopSubscribe, re-Subscribe, verify events resume.
Expected Result: Events received after re-subscription.
TC8-SDLC-008 — Session ID Increments per OfferService#
- OA Reference:
§5.1.6 — SOMEIP_ETS_091
- Requirement:
comp_req__tc8_conformance__sd_offer_format- Test Function:
TestSDFindServiceAdvanced::test_ets_091_session_id_increments
Purpose: Verify that the SD SOME/IP header session_id increments by 1 between consecutive OfferService messages.
Stimulus: Capture two consecutive OfferService messages.
Expected Result:
session_id[n+1] == session_id[n] + 1 (with wrap from 0xFFFF to 0x0001).
TC8-SDLC-009 — Initial Event Sent After Subscribe#
- OA Reference:
§5.1.6 — SOMEIP_ETS_099
- Requirement:
comp_req__tc8_conformance__sd_sub_lifecycle- Test Function:
TestSDFindServiceAdvanced::test_ets_099_initial_event_sent_after_subscribe
Purpose: Verify that the DUT sends an initial notification to a new subscriber immediately after a successful SubscribeEventgroup ACK.
Stimulus: Subscribe to eventgroup; wait for first notification.
Expected Result: NOTIFICATION received promptly after ACK.
TC8-SDLC-010 — Server Does Not Emit FindService#
- OA Reference:
§5.1.6 — SOMEIP_ETS_100
- Requirement:
comp_req__tc8_conformance__sd_offer_format- Test Function:
TestSDFindServiceAdvanced::test_ets_100_no_findservice_emitted_by_server
Purpose: Verify that the DUT (acting as service provider) does not emit FindService entries in its SD messages during the main phase.
Stimulus: Observe SD traffic for 6 seconds; collect all SD entries from the DUT.
Expected Result: No FindService entries observed in DUT SD traffic.
TC8-SDLC-011 — StopOfferService Ceases Client Events#
- OA Reference:
§5.1.6 — SOMEIP_ETS_101
- Requirement:
comp_req__tc8_conformance__sd_sub_lifecycle- Test Function:
TestSDFindServiceAdvanced::test_ets_101_stop_offer_ceases_client_events
Purpose: Verify that receipt of a StopOfferService (OfferService TTL = 0) from a server causes the subscribed client to cease receiving events.
Note
This test is currently implemented as pytest.skip because stopping the DUT’s
OfferService from an external tester requires a reverse-direction SD client target.
Stimulus: N/A (skipped).
TC8-SDLC-012 — Multicast FindService: Wildcard Versions#
- OA Reference:
§5.1.6 — SOMEIP_ETS_128
- Requirement:
comp_req__tc8_conformance__sd_find_response- Test Function:
TestSDFindServiceAdvanced::test_ets_128_multicast_findservice_version_wildcard
Purpose: Verify that a multicast FindService with wildcard major and minor versions elicits an OfferService response.
Stimulus: Send multicast FindService with major_version = 0xFF, minor_version = 0xFFFFFFFF.
Expected Result: OfferService received for the configured service.
TC8-SDLC-013 — Multicast FindService: Unicast Flag Clear#
- OA Reference:
§5.1.6 — SOMEIP_ETS_130
- Requirement:
comp_req__tc8_conformance__sd_find_response- Test Function:
TestSDFindServiceAdvanced::test_ets_130_multicast_findservice_unicast_flag_clear
Purpose: Verify that a multicast FindService with the unicast flag cleared (0x00) elicits a multicast OfferService response (not a unicast one).
Stimulus: Send multicast FindService with unicast flag = 0.
Expected Result: Multicast OfferService received.
TC8-SDLC-014 — Client StopSubscribe Ceases Events#
- OA Reference:
§5.1.6 — SOMEIP_ETS_084
- Requirement:
comp_req__tc8_conformance__sd_sub_lifecycle- Test Module:
test_sd_client- Test Function:
TestSDClientStopSubscribe::test_ets_084_stop_subscribe_ceases_events
Purpose: Verify that after a client sends StopSubscribeEventgroup (TTL = 0) the DUT stops sending NOTIFICATION messages to that subscriber.
Preconditions: Active subscription to eventgroup 0x4455; at least one notification received.
Stimulus: Send SubscribeEventgroup with TTL = 0.
Expected Result: No notifications received within 4 seconds after StopSubscribe.
TC8-SDLC-015 — Client Reboot: Flag Set After First Restart#
- OA Reference:
§5.1.6 — SOMEIP_ETS_081
- Requirement:
comp_req__tc8_conformance__sd_reboot- Test Module:
test_sd_client- Test Function:
TestSDClientReboot::test_ets_081_reboot_flag_set_after_first_restart
Purpose: Verify that after a DUT restart the first SD message has the reboot flag (bit 7 of SD flags byte) set and the session_id resets to a small value.
Preconditions: DUT started, 3 SD messages drained, DUT terminated.
Stimulus: Restart DUT; capture first post-reboot SD message.
Expected Result:
sd_hdr.flag_reboot == True and outer.session_id <= 2.
TC8-SDLC-016 — Client Reboot: Flag Set After Second Restart#
- OA Reference:
§5.1.6 — SOMEIP_ETS_082
- Requirement:
comp_req__tc8_conformance__sd_reboot- Test Module:
test_sd_client- Test Function:
TestSDClientReboot::test_ets_082_reboot_flag_set_after_second_restart
Purpose: Verify that the reboot flag and session ID reset hold across a second consecutive restart (not just the first).
Stimulus: Start → drain → stop → start → drain → stop → start → capture first message.
Expected Result:
sd_hdr.flag_reboot == True and outer.session_id <= 2.
TC8-SDLC-017 — Reboot Detection on Unicast Channel#
- OA Reference:
§5.1.6 — SOMEIP_ETS_093
- Requirement:
comp_req__tc8_conformance__sd_reboot- Test Module:
test_sd_reboot- Test Function:
TestSDReboot::test_ets_093_reboot_on_unicast_channel
Purpose: Verify that a reboot is detected when the session ID resets on the unicast SD channel (not only on multicast).
Stimulus: Restart DUT; observe first SD unicast message sent by DUT after restart.
Expected Result:
sd_hdr.flag_reboot == True and outer.session_id <= 2 on the unicast channel.
TC8-SDLC-018 — Server Reboot: Session ID Resets#
- OA Reference:
§5.1.6 — SOMEIP_ETS_094
- Requirement:
comp_req__tc8_conformance__sd_reboot- Test Module:
test_sd_reboot- Test Function:
TestSDReboot::test_ets_094_server_reboot_session_id_resets
Purpose: Verify that after a DUT restart the SD session ID starts from 1 (or 2), not from the pre-restart value.
Stimulus: Capture pre-restart session IDs; restart DUT; capture post-restart session ID.
Expected Result: Post-restart session ID is ≤ 2, regardless of the pre-restart value.
TC8-SDLC-019 — Subscribe TTL Expiry Stops Events#
- OA Reference:
§5.1.6 — SOMEIP_ETS_095
- Requirement:
comp_req__tc8_conformance__sd_ttl_expiry- Test Function:
TestSDSubscribeLifecycleAdvanced::test_ets_095_subscribe_ttl_expires_no_events
Purpose: Verify that when a subscription’s TTL expires without renewal the DUT ceases sending event notifications to that subscriber.
Stimulus: Subscribe with a short TTL; do not renew; wait for TTL to expire; observe events.
Expected Result: No NOTIFICATION messages received after TTL expiry window.
TC8-SDLC-020 — Initial Event Sent via UDP Unicast#
- OA Reference:
§5.1.6 — SOMEIP_ETS_105
- Requirement:
comp_req__tc8_conformance__sd_sub_lifecycle- Test Function:
TestSDSubscribeLifecycleAdvanced::test_ets_105_initial_event_udp_unicast
Purpose: Verify that the first event notification after a unicast subscription is sent via UDP unicast to the subscriber’s endpoint.
Stimulus: Subscribe to a unicast eventgroup; capture the first NOTIFICATION after ACK.
Expected Result: First NOTIFICATION is unicast UDP addressed to the tester’s endpoint.
TC8-SDLC-021 — SubscribeEventgroup ACK Received#
- OA Reference:
§5.1.6 — SOMEIP_ETS_106
- Requirement:
comp_req__tc8_conformance__sd_sub_lifecycle- Test Function:
TestSDSubscribeLifecycleAdvanced::test_ets_106_subscribe_eventgroup_ack_received
Purpose: Verify that the DUT sends a SubscribeEventgroupAck (entry type 0x06, TTL > 0) in response to a valid SubscribeEventgroup.
Stimulus: Send a valid SubscribeEventgroup for the configured service/eventgroup.
Expected Result:
SubscribeEventgroupAck received with entry_type == 0x06 and TTL > 0.
TC8-SDLC-022 — Initial Field Event After Subscribe#
- OA Reference:
§5.1.6 — SOMEIP_ETS_121
- Requirement:
comp_req__tc8_conformance__fld_initial_value- Test Function:
TestSDSubscribeLifecycleAdvanced::test_ets_121_initial_field_event_after_subscribe
Purpose: Verify that after subscribing to a field eventgroup the DUT sends an initial value notification immediately (within one TTL cycle) without requiring a GET request.
Stimulus:
Subscribe to field eventgroup 0x4455; observe notifications within 1 second.
Expected Result: At least one NOTIFICATION received within 1 second of subscription ACK.
TC8-SDLC-023 — Unicast Subscribe Receives ACK#
- OA Reference:
§5.1.6 — SOMEIP_ETS_173
- Requirement:
comp_req__tc8_conformance__sd_sub_lifecycle- Test Function:
TestSDSubscribeLifecycleAdvanced::test_ets_173_unicast_subscribe_receives_ack
Purpose: Verify that the DUT sends a SubscribeEventgroupAck via unicast directly to the subscriber when a unicast SubscribeEventgroup is received.
Stimulus: Send SubscribeEventgroup via unicast to the DUT SD port.
Expected Result:
SubscribeEventgroupAck received unicast at tester’s endpoint; entry_type == 0x06.
TC8-SDLC-024 — Last Value Delivered via UDP Multicast#
- OA Reference:
§5.1.6 — SOMEIP_ETS_104
- Requirement:
comp_req__tc8_conformance__sd_sub_lifecycle- Test Function:
TestSDSubscribeLifecycleAdvanced::test_ets_104_last_value_udp_multicast
Preconditions: Requires physical multicast NIC; skipped automatically on loopback.
Stimulus: Subscribe to multicast eventgroup; capture NOTIFICATION on configured multicast group.
Expected Result: NOTIFICATION is received on the eventgroup’s multicast address, not unicast.
TC8-SDLC-025 — Multicast FindService Elicits Offer Response#
- OA Reference:
§5.1.6 — SOMEIP_ETS_127
- Requirement:
comp_req__tc8_conformance__sd_find_response- Test Function:
TestSDFindServiceAdvanced::test_ets_127_multicast_findservice_response
Preconditions: Requires physical multicast NIC; skipped automatically on loopback.
Stimulus: Send SD FindService for the configured service via multicast.
Expected Result: DUT responds with OfferService (unicast or multicast) for the known service.
SD Robustness Tests#
- DUT Config:
tests/tc8_conformance/config/tc8_someipd_sd.json- Test Module:
test_sd_robustness
All robustness tests follow the pattern: inject one malformed SD packet, then send a valid FindService and verify the DUT still replies with OfferService (DUT alive assertion).
TC8-SDROBUST-001 — Empty Entries Array#
- OA Reference:
§5.1.6 — SOMEIP_ETS_111
- Requirement:
comp_req__tc8_conformance__sd_robustness- Test Function:
TestSDMalformedEntries::test_ets_111_empty_entries_array
Stimulus: Send SD packet with entries_array_length = 0.
Expected Result: DUT alive (replies to FindService after injection).
TC8-SDROBUST-002 — Zero-Length Option#
- OA Reference:
§5.1.6 — SOMEIP_ETS_112/113
- Requirement:
comp_req__tc8_conformance__sd_robustness- Test Function:
TestSDMalformedEntries::test_ets_112_empty_option_zero_length
Stimulus: Send SubscribeEventgroup with option length = 1 (too short).
Expected Result: DUT alive.
TC8-SDROBUST-003 — Entries Length Field Wrong#
- OA Reference:
§5.1.6 — SOMEIP_ETS_114
- Requirement:
comp_req__tc8_conformance__sd_robustness- Test Functions:
TestSDMalformedEntries::test_ets_114_entries_length_zeroTestSDMalformedEntries::test_ets_114_entries_length_mismatched
Stimulus: Send SD with entries_array_length = 0 (one entry present) and with entries_array_length = 8 (not a multiple of 16).
Expected Result: DUT alive after each injection.
TC8-SDROBUST-004 — Entry References More Options Than Exist#
- OA Reference:
§5.1.6 — SOMEIP_ETS_115
- Requirement:
comp_req__tc8_conformance__sd_robustness- Test Function:
TestSDMalformedEntries::test_ets_115_entry_refs_more_options_than_exist
Stimulus: Send SubscribeEventgroup with num_options_1 = 3 but only 1 option present.
Expected Result: DUT alive.
TC8-SDROBUST-005 — Entry Unknown Option Type#
- OA Reference:
§5.1.6 — SOMEIP_ETS_116
- Requirement:
comp_req__tc8_conformance__sd_robustness- Test Function:
TestSDMalformedEntries::test_ets_116_entry_unknown_option_type
Stimulus: Send SubscribeEventgroup with unknown option type 0x77.
Expected Result: DUT alive.
TC8-SDROBUST-007 — FindService With Endpoint Option#
- OA Reference:
§5.1.6 — SOMEIP_ETS_118
- Requirement:
comp_req__tc8_conformance__sd_robustness- Test Function:
TestSDMalformedEntries::test_ets_118_find_service_with_endpoint_option
Stimulus: Send FindService with an unexpected endpoint option attached.
Expected Result: DUT responds to the FindService; DUT alive.
TC8-SDROBUST-008 — Entries Length Wildly Too Large#
- OA Reference:
§5.1.6 — SOMEIP_ETS_123/124
- Requirement:
comp_req__tc8_conformance__sd_robustness- Test Function:
TestSDMalformedEntries::test_ets_123_entries_length_wildly_too_large
Stimulus: Send SD with entries_array_length = 0xFFFF (far exceeds actual payload size).
Expected Result: DUT alive.
TC8-SDROBUST-009 — Truncated Entry#
- OA Reference:
§5.1.6 — SOMEIP_ETS_125
- Requirement:
comp_req__tc8_conformance__sd_robustness- Test Function:
TestSDMalformedEntries::test_ets_125_truncated_entry
Stimulus: Send SD with entries_array_length = 16 but only 8 bytes of entry data present.
Expected Result: DUT alive.
TC8-SDROBUST-010 — Option Length Much Too Large#
- OA Reference:
§5.1.6 — SOMEIP_ETS_134
- Requirement:
comp_req__tc8_conformance__sd_robustness- Test Function:
TestSDMalformedOptions::test_ets_134_option_length_much_too_large
Stimulus: Send SubscribeEventgroup with IPv4EndpointOption length = 0x00FF.
Expected Result: DUT alive.
TC8-SDROBUST-011 — Option Length One Too Large#
- OA Reference:
§5.1.6 — SOMEIP_ETS_135
- Requirement:
comp_req__tc8_conformance__sd_robustness- Test Function:
TestSDMalformedOptions::test_ets_135_option_length_one_too_large
Stimulus: Send SubscribeEventgroup with IPv4EndpointOption length = 0x000A (one too large).
Expected Result: DUT alive.
TC8-SDROBUST-012 — Option Length Too Short#
- OA Reference:
§5.1.6 — SOMEIP_ETS_136
- Requirement:
comp_req__tc8_conformance__sd_robustness- Test Function:
TestSDMalformedOptions::test_ets_136_option_length_too_short
Stimulus: Send SubscribeEventgroup with IPv4EndpointOption length = 0x0001 (shorter than minimum).
Expected Result: DUT alive.
TC8-SDROBUST-013 — Option Length Unaligned#
- OA Reference:
§5.1.6 — SOMEIP_ETS_137
- Requirement:
comp_req__tc8_conformance__sd_robustness- Test Function:
TestSDMalformedOptions::test_ets_137_option_length_unaligned
Stimulus: Send SubscribeEventgroup with IPv4EndpointOption length = 0x000A (unaligned/odd).
Expected Result: DUT alive.
TC8-SDROBUST-014 — Options Array Length Too Large#
- OA Reference:
§5.1.6 — SOMEIP_ETS_138
- Requirement:
comp_req__tc8_conformance__sd_robustness- Test Function:
TestSDMalformedOptions::test_ets_138_options_array_length_too_large
Stimulus: Send SubscribeEventgroup with options_array_length = 100 but only 12 bytes of options.
Expected Result: DUT alive.
TC8-SDROBUST-015 — Options Array Length Too Short#
- OA Reference:
§5.1.6 — SOMEIP_ETS_139
- Requirement:
comp_req__tc8_conformance__sd_robustness- Test Function:
TestSDMalformedOptions::test_ets_139_options_array_length_too_short
Stimulus: Send SubscribeEventgroup with options_array_length = 2 but 12 bytes of options present.
Expected Result: DUT alive.
TC8-SDROBUST-016 — Unknown Option Type 0x77#
- OA Reference:
§5.1.6 — SOMEIP_ETS_174
- Requirement:
comp_req__tc8_conformance__sd_robustness- Test Function:
TestSDMalformedOptions::test_ets_174_unknown_option_type_0x77
Stimulus: Send SD with option type 0x77 (reserved/unknown).
Expected Result: DUT alive.
TC8-SDROBUST-017 — Subscribe With No Endpoint Option#
- OA Reference:
§5.1.6 — SOMEIP_ETS_109
- Requirement:
comp_req__tc8_conformance__sd_robustness- Test Function:
TestSDSubscribeEdgeCases::test_ets_109_subscribe_no_endpoint_option
Stimulus: Send SubscribeEventgroup with num_options_1 = 0 (no endpoint option).
Expected Result: NAck or silent discard; DUT alive.
TC8-SDROBUST-018 — Subscribe With Zero IP Endpoint#
- OA Reference:
§5.1.6 — SOMEIP_ETS_110
- Requirement:
comp_req__tc8_conformance__sd_robustness- Test Function:
TestSDSubscribeEdgeCases::test_ets_110_subscribe_endpoint_ip_zero
Stimulus: Send SubscribeEventgroup with endpoint IP = 0.0.0.0.
Expected Result: NAck or silent discard; DUT alive.
TC8-SDROBUST-019 — Subscribe With Unknown L4 Protocol#
- OA Reference:
§5.1.6 — SOMEIP_ETS_119
- Requirement:
comp_req__tc8_conformance__sd_robustness- Test Function:
TestSDSubscribeEdgeCases::test_ets_119_subscribe_unknown_l4proto
Stimulus: Send SubscribeEventgroup with L4 protocol byte = 0x00 (unknown).
Expected Result: NAck or silent discard; DUT alive.
TC8-SDROBUST-020 — Subscribe Unknown Service ID#
- OA Reference:
§5.1.6 — SOMEIP_ETS_140
- Requirement:
comp_req__tc8_conformance__sd_robustness- Test Function:
TestSDSubscribeEdgeCases::test_ets_140_subscribe_unknown_service_id
Stimulus: Send SubscribeEventgroup for service_id = 0xDEAD (not offered).
Expected Result: No positive SubscribeAck; DUT alive.
TC8-SDROBUST-021 — Subscribe Unknown Instance ID#
- OA Reference:
§5.1.6 — SOMEIP_ETS_141
- Requirement:
comp_req__tc8_conformance__sd_robustness- Test Function:
TestSDSubscribeEdgeCases::test_ets_141_subscribe_unknown_instance_id
Stimulus: Send SubscribeEventgroup for correct service_id but unknown instance_id = 0xBEEF.
Expected Result: No positive SubscribeAck; DUT alive.
TC8-SDROBUST-022 — Subscribe Unknown Eventgroup ID#
- OA Reference:
§5.1.6 — SOMEIP_ETS_142
- Requirement:
comp_req__tc8_conformance__sd_robustness- Test Function:
TestSDSubscribeEdgeCases::test_ets_142_subscribe_unknown_eventgroup_id
Stimulus: Send SubscribeEventgroup for correct service/instance but unknown eventgroup 0xDEAD.
Expected Result: NAck or silent discard; DUT alive.
TC8-SDROBUST-023 — Subscribe All IDs Unknown#
- OA Reference:
§5.1.6 — SOMEIP_ETS_143
- Requirement:
comp_req__tc8_conformance__sd_robustness- Test Function:
TestSDSubscribeEdgeCases::test_ets_143_subscribe_all_ids_unknown
Stimulus: Send SubscribeEventgroup with service_id, instance_id, and eventgroup_id all unknown.
Expected Result: No positive SubscribeAck; DUT alive.
TC8-SDROBUST-024 — Subscribe With Reserved Option Type#
- OA Reference:
§5.1.6 — SOMEIP_ETS_144
- Requirement:
comp_req__tc8_conformance__sd_robustness- Test Function:
TestSDSubscribeEdgeCases::test_ets_144_subscribe_reserved_option_type
Stimulus: Send SubscribeEventgroup with reserved option type 0x20.
Expected Result: NAck or silent discard; DUT alive.
TC8-SDROBUST-025 — Near-Wrap and Maximum Session IDs#
- OA Reference:
§5.1.6 — SOMEIP_ETS_152
- Requirement:
comp_req__tc8_conformance__sd_robustness- Test Functions:
TestSDMessageFramingErrors::test_ets_152_high_session_id_0xfffeTestSDMessageFramingErrors::test_ets_152_session_id_0xffffTestSDMessageFramingErrors::test_ets_152_session_id_one
Stimulus: Send FindService with session_id = 0xFFFE, then 0xFFFF, then 0x0001.
Expected Result: DUT alive after each injection.
TC8-SDROBUST-026 — SOME/IP Length Field Mismatch#
- OA Reference:
§5.1.6 — SOMEIP_ETS_153
- Requirement:
comp_req__tc8_conformance__sd_robustness- Test Functions:
TestSDMessageFramingErrors::test_ets_153_someip_length_too_smallTestSDMessageFramingErrors::test_ets_153_someip_length_too_large
Stimulus: Send SD with SOME/IP length = 8 (smaller than payload) then length = 0x1000 (larger).
Expected Result: DUT alive after each injection.
TC8-SDROBUST-027 — Wrong SOME/IP Service ID in SD Header#
- OA Reference:
§5.1.6 — SOMEIP_ETS_178
- Requirement:
comp_req__tc8_conformance__sd_robustness- Test Function:
TestSDMessageFramingErrors::test_ets_178_wrong_someip_service_id
Stimulus: Send SD packet with SOME/IP service_id = 0x1234 (not 0xFFFF).
Expected Result: DUT silently discards (not recognized as SD); DUT alive.
TC8-SDROBUST-028 — SOME/IP Length Field Way Too Long#
- OA Reference:
§5.1.6 — SOMEIP_ETS_058
- Requirement:
comp_req__tc8_conformance__sd_robustness- Test Function:
TestSDMessageFramingErrors::test_ets_058_someip_length_way_too_long
Stimulus: Send SD packet where the SOME/IP length field is set to 0xFFFFFFFF (far beyond actual packet size).
Expected Result: DUT silently discards the oversized-length SD message; DUT alive.
TC8-SDROBUST-029 — Empty Options Array With Subscribe#
- OA Reference:
§5.1.6 — SOMEIP_ETS_113
- Requirement:
comp_req__tc8_conformance__sd_robustness- Test Function:
TestSDMalformedEntries::test_ets_113_empty_options_array_with_subscribe
Stimulus: Send SubscribeEventgroup entry where options_array_length = 0 but the entry references option index 0.
Expected Result: DUT discards or NAcks the subscribe; DUT alive.
TC8-SDROBUST-030 — Entries Length Too Long By Small Margin#
- OA Reference:
§5.1.6 — SOMEIP_ETS_124
- Requirement:
comp_req__tc8_conformance__sd_robustness- Test Function:
TestSDMalformedEntries::test_ets_124_entries_length_too_long_by_small_margin
Stimulus: Send SD packet where entries_array_length is exactly 4 bytes larger than the actual entries data present.
Expected Result: DUT discards the malformed SD message; DUT alive.
TC8-SDROBUST-031 — Subscribe With Non-Routable Endpoint IP#
- OA Reference:
§5.1.6 — SOMEIP_ETS_154
- Requirement:
comp_req__tc8_conformance__sd_robustness- Test Function:
TestSDSubscribeEdgeCases::test_ets_154_subscribe_nonroutable_endpoint_ip
Stimulus: Send SubscribeEventgroup with an IPv4EndpointOption whose IP address is a non-routable address (e.g., 0.0.0.1).
Expected Result: DUT rejects or ignores the subscribe; DUT alive.
TC8-SDROBUST-032 — Subscribe Endpoint IP Not Matching Subscriber#
- OA Reference:
§5.1.6 — SOMEIP_ETS_162
- Requirement:
comp_req__tc8_conformance__sd_robustness- Test Function:
TestSDSubscribeEdgeCases::test_ets_162_subscribe_endpoint_ip_not_subscriber
Stimulus: Send SubscribeEventgroup where the IPv4EndpointOption IP address differs from the actual sender IP.
Expected Result: DUT rejects or ignores the subscribe; DUT alive.
TC8-SDROBUST-033 — Subscribe Endpoint IP Is the DUT Address#
- OA Reference:
§5.1.6 — SOMEIP_ETS_163
- Requirement:
comp_req__tc8_conformance__sd_robustness- Test Function:
TestSDSubscribeEdgeCases::test_ets_163_subscribe_endpoint_dut_address
Stimulus: Send SubscribeEventgroup with an IPv4EndpointOption whose IP address is the DUT’s own loopback or service address.
Expected Result: DUT rejects or ignores the subscribe (loopback endpoint invalid); DUT alive.
TC8-SDROBUST-034 — Unreferenced Option Ignored#
- OA Reference:
§5.1.6 — SOMEIP_ETS_175
- Requirement:
comp_req__tc8_conformance__sd_robustness- Test Function:
TestSDMalformedOptions::test_ets_175_unreferenced_option_ignored
Stimulus: Send an SD OfferService where the options array contains one option but the entry’s option run has num_options_1 = 0 (entry references no options).
Expected Result: DUT processes the entry normally (unreferenced option ignored); DUT alive.
TC8-SDROBUST-035 — Trailing Data After Options Array#
- OA Reference:
§5.1.6 — SOMEIP_ETS_176
- Requirement:
comp_req__tc8_conformance__sd_robustness- Test Function:
TestSDMalformedOptions::test_ets_176_trailing_data_after_options_array
Stimulus: Send SD packet where extra trailing bytes appear after the options array (options_array_length is correct but UDP payload is longer).
Expected Result: DUT discards or tolerates the trailing data; DUT alive.
TC8-SDROBUST-036 — Trailing Data With Wrong Options Length#
- OA Reference:
§5.1.6 — SOMEIP_ETS_177
- Requirement:
comp_req__tc8_conformance__sd_robustness- Test Function:
TestSDMalformedOptions::test_ets_177_trailing_data_wrong_options_length
Stimulus: Send SD packet where options_array_length is inflated to include trailing garbage bytes beyond the real options data.
Expected Result: DUT discards the malformed SD message; DUT alive.
SOME/IP Message Protocol Compliance Tests#
- DUT Config:
tests/tc8_conformance/config/tc8_someipd_service.json- Test Module:
test_someip_message_format
TC8-MSG-009 — Valid Service ID Gets Response#
- OA Reference:
§5.1.5.5 — SOMEIPSRV_BASIC_01
- Requirement:
comp_req__tc8_conformance__msg_resp_header- Test Function:
TestSomeipBasicIdentifiers::test_basic_01_correct_service_id_gets_response
Purpose: Verify that a REQUEST to a valid, offered service ID elicits a RESPONSE.
Stimulus: Send REQUEST to service 0x1234, method 0x0421.
Expected Result: RESPONSE received with message_type = 0x80.
TC8-MSG-010 — Unknown Service ID: E_UNKNOWN_SERVICE#
- OA Reference:
§5.1.5.5 — SOMEIPSRV_BASIC_02
- Requirement:
comp_req__tc8_conformance__msg_error_codes- Test Function:
TestSomeipBasicIdentifiers::test_basic_02_unknown_service_id_no_response_or_error
Purpose: Verify that a REQUEST to an unknown service ID is rejected with E_UNKNOWN_SERVICE.
Note
This test is expected to FAIL against vsomeip 3.6.1: the stack silently drops requests for unknown services rather than responding with E_UNKNOWN_SERVICE.
Stimulus: Send REQUEST to service 0xDEAD (not offered).
Expected Result: ERROR response with return_code = E_UNKNOWN_SERVICE (0x02).
TC8-MSG-011 — Event Method ID: No RESPONSE#
- OA Reference:
§5.1.5.5 — SOMEIPSRV_BASIC_03
- Requirement:
comp_req__tc8_conformance__msg_resp_header- Test Function:
TestSomeipBasicIdentifiers::test_basic_03_event_method_id_no_response
Purpose: Verify that a REQUEST using an event method ID (bit 15 = 1) does not elicit a RESPONSE (0x80). An ERROR (0x81) response is permitted.
Stimulus: Send REQUEST with method_id = 0x8001 (event ID range).
Expected Result: No RESPONSE (0x80) received within the timeout.
TC8-MSG-012 — Response Source Address Correct#
- OA Reference:
§5.1.5.6 — SOMEIPSRV_ONWIRE_01
- Requirement:
comp_req__tc8_conformance__msg_resp_header- Test Function:
TestSomeipResponseFields::test_onwire_01_response_source_address
Purpose: Verify that RESPONSE messages originate from the DUT’s service endpoint address and port (as advertised in the SD OfferService).
Stimulus: Send REQUEST; observe UDP source address of the RESPONSE.
Expected Result: RESPONSE source IP matches the DUT’s service endpoint; source port equals the advertised unreliable port.
TC8-MSG-013 — Method ID MSB = 0 in RESPONSE#
- OA Reference:
§5.1.5.6 — SOMEIPSRV_ONWIRE_02
- Requirement:
comp_req__tc8_conformance__msg_resp_header- Test Function:
TestSomeipResponseFields::test_onwire_02_method_id_msb_zero_in_response
Purpose: Verify that RESPONSE messages have bit 15 of the method_id field equal to 0.
Stimulus: Send REQUEST; inspect method_id in the RESPONSE.
Expected Result:
(response.method_id & 0x8000) == 0.
TC8-MSG-014 — Request ID Reuse Across Sequential Requests#
- OA Reference:
§5.1.5.6 — SOMEIPSRV_ONWIRE_04
- Requirement:
comp_req__tc8_conformance__msg_resp_header- Test Function:
TestSomeipResponseFields::test_onwire_04_request_id_reuse
Purpose: Verify that the DUT correctly handles sequential requests that reuse the same session_id value.
Stimulus: Send two consecutive REQUESTs with the same session_id.
Expected Result: Both receive valid RESPONSEs with the echoed session_id.
TC8-MSG-015 — Interface Version Echoed in RESPONSE#
- OA Reference:
§5.1.5.6 — SOMEIPSRV_ONWIRE_06
- Requirement:
comp_req__tc8_conformance__msg_resp_header- Test Function:
TestSomeipResponseFields::test_onwire_06_interface_version_echoed
Purpose: Verify that the RESPONSE interface_version matches the REQUEST interface_version.
Stimulus: Send REQUEST with interface_version = 0x01.
Expected Result: RESPONSE has interface_version = 0x01.
TC8-MSG-016 — Normal RESPONSE Return Code = E_OK#
- OA Reference:
§5.1.5.6 — SOMEIPSRV_ONWIRE_11
- Requirement:
comp_req__tc8_conformance__msg_resp_header- Test Function:
TestSomeipResponseFields::test_onwire_11_normal_response_return_code_ok
Purpose: Verify that a successful RESPONSE carries return_code = 0x00 (E_OK).
Stimulus: Send valid REQUEST to a known method.
Expected Result:
response.return_code == 0x00.
TC8-MSG-017 — Message ID Echoed in RESPONSE (RPC_18)#
- OA Reference:
§5.1.5.7 — SOMEIPSRV_RPC_18
- Requirement:
comp_req__tc8_conformance__msg_resp_header- Test Function:
TestSomeipResponseFields::test_rpc_18_message_id_echoed
Purpose: Verify that the RESPONSE message_id (service_id + method_id) matches the REQUEST.
Stimulus: Send REQUEST; compare message_id in RESPONSE.
Expected Result: RESPONSE service_id and method_id match the REQUEST.
TC8-MSG-018 — Interface Version Copied From Request (RPC_20)#
- OA Reference:
§5.1.5.7 — SOMEIPSRV_RPC_20
- Requirement:
comp_req__tc8_conformance__msg_resp_header- Test Function:
TestSomeipResponseFields::test_rpc_20_interface_version_copied_from_request
Purpose: Verify that the DUT copies the interface_version from the REQUEST into the RESPONSE.
Stimulus: Send REQUEST with a specific interface_version.
Expected Result: RESPONSE interface_version matches the REQUEST value.
TC8-MSG-019 — Fire-and-Forget: No Error Response (RPC_05)#
- OA Reference:
§5.1.5.7 — SOMEIPSRV_RPC_05
- Requirement:
comp_req__tc8_conformance__msg_resp_header- Test Function:
TestSomeipFireAndForgetAndErrors::test_rpc_05_fire_and_forget_no_error
Purpose: Verify that REQUEST_NO_RETURN (fire-and-forget) messages do not elicit an error response.
Stimulus: Send REQUEST_NO_RETURN to a valid method.
Expected Result: No response (ERROR or RESPONSE) received within the timeout.
TC8-MSG-020 — Return Code Upper Bits Zero (RPC_06)#
- OA Reference:
§5.1.5.7 — SOMEIPSRV_RPC_06
- Requirement:
comp_req__tc8_conformance__msg_resp_header- Test Function:
TestSomeipFireAndForgetAndErrors::test_rpc_06_return_code_upper_bits_zero
Purpose: Verify that bits 7-5 of the return_code field in RESPONSE messages are zero.
Stimulus: Send valid REQUEST; inspect RESPONSE return_code.
Expected Result:
(response.return_code & 0xE0) == 0.
TC8-MSG-021 — Inbound Return Code Upper Bits Ignored (RPC_07)#
- OA Reference:
§5.1.5.7 — SOMEIPSRV_RPC_07
- Requirement:
comp_req__tc8_conformance__msg_resp_header- Test Function:
TestSomeipFireAndForgetAndErrors::test_rpc_07_request_with_return_code_bits_set
Purpose: Verify that the DUT ignores the two MSBs of the return_code field in inbound REQUEST messages (still responds normally).
Stimulus: Send REQUEST with return_code = 0xC0 (two MSBs set).
Expected Result: RESPONSE received with E_OK.
TC8-MSG-022 — No Reply for REQUEST With Non-Zero Return Code (RPC_08)#
- OA Reference:
§5.1.5.7 — SOMEIPSRV_RPC_08
- Requirement:
comp_req__tc8_conformance__msg_resp_header- Test Function:
TestSomeipFireAndForgetAndErrors::test_rpc_08_request_with_error_return_code_no_reply
Purpose: Verify that the DUT does not reply to a REQUEST that has a non-zero return_code (per spec, such requests should be silently discarded).
Note
This test is expected to FAIL against vsomeip 3.6.1: the stack replies to such messages.
Stimulus: Send REQUEST with return_code = 0x01 (non-zero).
Expected Result: No RESPONSE received within the timeout.
TC8-MSG-023 — ERROR Response Has No Payload (RPC_09)#
- OA Reference:
§5.1.5.7 — SOMEIPSRV_RPC_09
- Requirement:
comp_req__tc8_conformance__msg_resp_header- Test Function:
TestSomeipFireAndForgetAndErrors::test_rpc_09_error_response_no_payload
Purpose: Verify that ERROR responses carry no payload beyond the 8-byte SOME/IP header.
Stimulus: Trigger an error response (e.g., unknown method).
Expected Result:
ERROR response has payload == b"" (zero payload bytes).
TC8-MSG-024 — Fire-and-Forget Reserved Type: No Error (RPC_10)#
- OA Reference:
§5.1.5.7 — SOMEIPSRV_RPC_10
- Requirement:
comp_req__tc8_conformance__msg_resp_header- Test Function:
TestSomeipFireAndForgetAndErrors::test_rpc_10_fire_and_forget_reserved_type_no_error
Purpose: Verify that a fire-and-forget message sent to a wrong/reserved service ID does not elicit an error response.
Stimulus: Send REQUEST_NO_RETURN to an unknown service.
Expected Result: No error response received.
TC8-MSG-025 — Burst 10 Sequential Requests (ETS_004)#
- OA Reference:
§5.1.6 — SOMEIP_ETS_004
- Requirement:
comp_req__tc8_conformance__msg_resp_header- Test Function:
TestSomeipFireAndForgetAndErrors::test_ets_004_burst_10_sequential_requests
Purpose: Verify that the DUT responds correctly to a burst of 10 sequential REQUEST messages.
Stimulus: Send 10 consecutive REQUESTs.
Expected Result: 10 RESPONSE messages received, all with E_OK.
TC8-MSG-026 — Empty Payload Request (ETS_054)#
- OA Reference:
§5.1.6 — SOMEIP_ETS_054
- Requirement:
comp_req__tc8_conformance__msg_resp_header- Test Function:
TestSomeipFireAndForgetAndErrors::test_ets_054_empty_payload_request
Purpose: Verify that a REQUEST with an empty payload (length = 8, no payload bytes) is handled correctly and elicits E_OK.
Stimulus: Send REQUEST with zero-length payload.
Expected Result: RESPONSE with return_code = E_OK.
TC8-MSG-027 — Fire-and-Forget Wrong Service: No Error (ETS_059)#
- OA Reference:
§5.1.6 — SOMEIP_ETS_059
- Requirement:
comp_req__tc8_conformance__msg_resp_header- Test Function:
TestSomeipFireAndForgetAndErrors::test_ets_059_fire_and_forget_wrong_service_no_error
Purpose: Verify that a REQUEST_NO_RETURN to an unknown service does not elicit an error response.
Stimulus: Send REQUEST_NO_RETURN to service_id = 0xDEAD.
Expected Result: No response received.
TC8-MSG-028 — Two Sequential Requests (ETS_061)#
- OA Reference:
§5.1.6 — SOMEIP_ETS_061
- Requirement:
comp_req__tc8_conformance__msg_resp_header- Test Function:
TestSomeipFireAndForgetAndErrors::test_ets_061_two_sequential_requests
Purpose: Verify that two sequential REQUESTs each receive a correct RESPONSE.
Stimulus: Send two consecutive REQUESTs with different session_ids.
Expected Result: Two RESPONSEs received with matching session_ids and E_OK.
TC8-MSG-029 — NOTIFICATION as REQUEST Ignored (ETS_075)#
- OA Reference:
§5.1.6 — SOMEIP_ETS_075
- Requirement:
comp_req__tc8_conformance__msg_malformed- Test Function:
TestSomeipFireAndForgetAndErrors::test_ets_075_notification_as_request_ignored
Purpose: Verify that the DUT ignores a NOTIFICATION message (message_type = 0x02) sent as if it were a REQUEST (i.e., directed at the service port).
Stimulus: Send SOME/IP message with message_type = 0x02 (NOTIFICATION) to the service port.
Expected Result: No RESPONSE or ERROR received within the timeout.
TC8-MSG-030 — RESPONSE Uses Big-Endian Byte Order (ETS_005)#
- OA Reference:
§5.1.6 — SOMEIP_ETS_005
- Requirement:
comp_req__tc8_conformance__msg_resp_header- Test Function:
TestSomeipResponseFields::test_ets_005_response_uses_big_endian_byte_order
Purpose: Verify that all multi-byte fields in a SOME/IP RESPONSE header (length, request_id, interface_version, etc.) are encoded in big-endian byte order as required by the SOME/IP protocol specification.
Stimulus: Send REQUEST; capture RESPONSE bytes; inspect raw byte ordering of length and request_id fields.
Expected Result:
Raw bytes of length and request_id fields match the big-endian encoding
of the decoded values (struct.pack(">I", ...)).
TC8-MSG-031 — Oversized Length Field Does Not Crash DUT (ETS_058)#
- OA Reference:
§5.1.6 — SOMEIP_ETS_058
- Requirement:
comp_req__tc8_conformance__msg_malformed_handling- Test Function:
TestSomeipFireAndForgetAndErrors::test_ets_058_oversized_length_field_no_crash
Purpose: Verify that the DUT does not crash or freeze when a SOME/IP message is received with a length field value that far exceeds the actual UDP payload size.
Stimulus: Send SOME/IP REQUEST where the length header field is set to 0xFFFFFFFF while the UDP payload is only 16 bytes.
Expected Result: DUT discards the malformed message; a subsequent valid REQUEST receives a correct RESPONSE (DUT alive).