Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 1 addition & 5 deletions REUSE.toml
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,9 @@ path = [
"tests/integration_test/vsomeip-local.json",
"tests/integration_test/vsomeip.json",
"tests/benchmarks/config/benchmark_mw_com_config.json",
"tests/tc8_conformance/**/*.json",
"quality/integration_testing/environments/qnx8_qemu/qemu_config.json",
"quality/integration_testing/environments/ubuntu24_04_qemu/*"
]
SPDX-FileCopyrightText = "Copyright (c) 2026 Contributors to the Eclipse Foundation"
SPDX-License-Identifier = "Apache-2.0"

[[annotations]]
path = ["tests/tc8_conformance/config/*.json"]
SPDX-FileCopyrightText = "Copyright (c) 2026 Contributors to the Eclipse Foundation"
SPDX-License-Identifier = "Apache-2.0"
33 changes: 16 additions & 17 deletions score/someipd/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,11 @@
#include <getopt.h>

#include <atomic>
#include <chrono>
#include <csignal>
#include <cstdlib>
#include <fstream>
#include <iostream>
#include <memory>
#include <thread>

#include "local_network_service.h"
#include "remote_network_service.h"
Expand All @@ -40,9 +38,8 @@ using namespace score::someipd;
// Global flag to control application shutdown
static std::atomic<bool> shutdown_requested{false};

// Signal handler for graceful shutdown
void termination_handler(int /*signal*/) {
std::cout << "Received termination signal. Initiating graceful shutdown..." << std::endl;
score::mw::log::LogWarn() << "Received termination signal. Initiating graceful shutdown...";
shutdown_requested.store(true);
}

Expand Down Expand Up @@ -148,7 +145,7 @@ int main(int argc, char* argv[]) {
score::mw::log::LogFatal() << "[someipd] Failed to start IPC server";
return 1;
}
std::cout << "[someipd] IPC server started, waiting for gatewayd connection..." << std::endl;
score::mw::log::LogInfo() << "[someipd] IPC server started, waiting for gatewayd connection...";

auto routing = Routing::Create(config);
if (!routing.has_value()) {
Expand All @@ -165,11 +162,12 @@ int main(int argc, char* argv[]) {
continue;
}
for (auto const& service_instance_config : *service_instances) {
std::cout << "[someipd] Creating LocalNetworkService: "
<< service_type_config->service_type_name()->string_view()
<< " (service_id=0x" << std::hex << service_type_config->service_id()
<< std::dec << ", instance_id=0x" << std::hex
<< service_instance_config->instance_id() << std::dec << ")" << std::endl;
score::mw::log::LogInfo()
<< "[someipd] Creating LocalNetworkService: "
<< service_type_config->service_type_name()->string_view()
<< " service_id=0x" << score::mw::log::LogHex16{service_type_config->service_id()}
<< " instance_id=0x"
<< score::mw::log::LogHex16{service_instance_config->instance_id()};
auto create_result = LocalNetworkService::Create(
std::shared_ptr<const score::mw_someip_config::ServiceInstance>(
config, service_instance_config),
Expand All @@ -196,11 +194,12 @@ int main(int argc, char* argv[]) {
continue;
}
for (auto const& service_instance_config : *service_instances) {
std::cout << "[someipd] Creating RemoteNetworkService: "
<< service_type_config->service_type_name()->string_view()
<< " (service_id=0x" << std::hex << service_type_config->service_id()
<< std::dec << ", instance_id=0x" << std::hex
<< service_instance_config->instance_id() << std::dec << ")" << std::endl;
score::mw::log::LogInfo()
<< "[someipd] Creating RemoteNetworkService: "
<< service_type_config->service_type_name()->string_view()
<< " service_id=0x" << score::mw::log::LogHex16{service_type_config->service_id()}
<< " instance_id=0x"
<< score::mw::log::LogHex16{service_instance_config->instance_id()};
auto create_result = RemoteNetworkService::Create(
std::shared_ptr<const score::mw_someip_config::ServiceInstance>(
config, service_instance_config),
Expand All @@ -217,13 +216,13 @@ int main(int argc, char* argv[]) {
}
}

std::cout << "[someipd] Starting routing loop..." << std::endl;
score::mw::log::LogInfo() << "[someipd] Starting routing loop...";
routing.value().Run(shutdown_requested, [&remote_network_services]() {
for (auto& svc : remote_network_services) {
svc->setup_vsomeip();
}
});

std::cout << "[someipd] Shutting down SOME/IP daemon..." << std::endl;
score::mw::log::LogInfo() << "[someipd] Shutting down SOME/IP daemon...";
return EXIT_SUCCESS;
}
30 changes: 30 additions & 0 deletions tests/tc8_conformance/application/README.md
Comment thread
lurtz marked this conversation as resolved.
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<!-- ----------------------------------------------------------------------------
Copyright (c) 2026 Contributors to the Eclipse Foundation

See the NOTICE file(s) distributed with this work for additional
information regarding copyright ownership.

This program and the accompanying materials are made available under the
terms of the Apache License Version 2.0 which is available at
https://www.apache.org/licenses/LICENSE-2.0

SPDX-License-Identifier: Apache-2.0
----------------------------------------------------------------------------- -->

# TC8 Conformance — Application Components

C++ applications used by the TC8 conformance test suite.

## Structure

```
application/
├── shared/ # Shared header: tc8_ets_service constants and event descriptors
└── ets_stub/ # ETS stub binary: offers tc8_service via mw::com skeleton,
# sends periodic event notifications for TC8 test capture
└── config/ # mw::com manifest (tc8_ets_stub_mw_com_config.json)
```

## See Also

- Protocol conformance tests in the parent directory [`tests/tc8_conformance/`](../)
32 changes: 32 additions & 0 deletions tests/tc8_conformance/application/ets_stub/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# *******************************************************************************
# Copyright (c) 2026 Contributors to the Eclipse Foundation
#
# See the NOTICE file(s) distributed with this work for additional
# information regarding copyright ownership.
#
# This program and the accompanying materials are made available under the
# terms of the Apache License Version 2.0 which is available at
# https://www.apache.org/licenses/LICENSE-2.0
#
# SPDX-License-Identifier: Apache-2.0
# *******************************************************************************

load("@rules_cc//cc:cc_binary.bzl", "cc_binary")

exports_files(
["config/tc8_ets_stub_mw_com_config.json"],
visibility = ["//tests/tc8_conformance:__pkg__"],
)

cc_binary(
name = "tc8_ets_stub",
srcs = ["tc8_ets_stub.cpp"],
visibility = ["//tests/tc8_conformance:__pkg__"],
deps = [
"//score/serializer:pre_serialized_data",
"//tests/tc8_conformance/application/shared:tc8_ets_service",
"@score_baselibs//score/filesystem",
"@score_baselibs//score/mw/log",
"@score_communication//score/mw/com",
],
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
{
"serviceTypes": [
{
"serviceTypeName": "tc8_service",
"version": {
"major": 1,
"minor": 0
},
"bindings": [
{
"binding": "SHM",
"serviceId": 4660,
"events": [
{
"eventName": "TestEventUINT8",
"eventId": 1
},
{
"eventName": "TestEventUINT8Array",
"eventId": 2
},
{
"eventName": "TestEventUINT8Reliable",
"eventId": 3
},
{
"eventName": "TestEventUINT8E2E",
"eventId": 4
},
{
"eventName": "InterfaceVersion",
"eventId": 5
},
{
"eventName": "TestFieldUINT8",
"eventId": 6
},
{
"eventName": "TestFieldUINT8Array",
"eventId": 7
},
{
"eventName": "TestFieldUINT8Reliable",
"eventId": 8
},
{
"eventName": "TestEventUINT8Multicast",
"eventId": 9
}
]
}
]
}
],
"serviceInstances": [
{
"instanceSpecifier": "tc8/tc8_service",
"serviceTypeName": "tc8_service",
"version": {
"major": 1,
"minor": 0
},
"instances": [
{
"instanceId": 22136,
"asil-level": "QM",
"binding": "SHM",
"events": [
{
"eventName": "TestEventUINT8",
"numberOfSampleSlots": 10,
"maxSubscribers": 1
},
{
"eventName": "TestEventUINT8Array",
"numberOfSampleSlots": 10,
"maxSubscribers": 1
},
{
"eventName": "TestEventUINT8Reliable",
"numberOfSampleSlots": 10,
"maxSubscribers": 1
},
{
"eventName": "TestEventUINT8E2E",
"numberOfSampleSlots": 10,
"maxSubscribers": 1
},
{
"eventName": "InterfaceVersion",
"numberOfSampleSlots": 10,
"maxSubscribers": 1
},
{
"eventName": "TestFieldUINT8",
"numberOfSampleSlots": 10,
"maxSubscribers": 1
},
{
"eventName": "TestFieldUINT8Array",
"numberOfSampleSlots": 10,
"maxSubscribers": 1
},
{
"eventName": "TestFieldUINT8Reliable",
"numberOfSampleSlots": 10,
"maxSubscribers": 1
},
{
"eventName": "TestEventUINT8Multicast",
"numberOfSampleSlots": 10,
"maxSubscribers": 1
}
]
}
]
}
],
"global": {
"asil-level": "QM"
}
}
Loading
Loading