Skip to content

Commit 6466365

Browse files
tests: zbus: add shadow channel test suite
Add test suite to verify the shadow channel functionality when CONFIG_ZBUS_MULTIDOMAIN is enabled. Signed-off-by: Trond F. Christiansen <[email protected]>
1 parent d1879d1 commit 6466365

File tree

4 files changed

+122
-0
lines changed

4 files changed

+122
-0
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#
2+
# Copyright (c) 2025 Nordic Semiconductor ASA
3+
#
4+
# SPDX-License-Identifier: Apache-2.0
5+
#
6+
7+
cmake_minimum_required(VERSION 3.20.0)
8+
9+
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
10+
project(test_shadow_channels)
11+
12+
FILE(GLOB app_sources src/main.c)
13+
target_sources(app PRIVATE ${app_sources})
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#
2+
# Copyright (c) 2025 Nordic Semiconductor ASA
3+
#
4+
# SPDX-License-Identifier: Apache-2.0
5+
#
6+
7+
CONFIG_ZTEST=y
8+
CONFIG_ASSERT=n
9+
CONFIG_LOG=y
10+
CONFIG_CRC=y
11+
CONFIG_ZBUS=y
12+
CONFIG_ZBUS_CHANNEL_ID=y
13+
CONFIG_ZBUS_CHANNEL_NAME=y
14+
CONFIG_ZBUS_MSG_SUBSCRIBER=y
15+
CONFIG_ZBUS_MULTIDOMAIN=y
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
/*
2+
* Copyright (c) 2025 Nordic Semiconductor ASA
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
#include <zephyr/zbus/zbus.h>
8+
#include <zephyr/ztest.h>
9+
#include <zephyr/ztest_assert.h>
10+
11+
struct msg {
12+
int x;
13+
};
14+
15+
enum channel_ids {
16+
CHAN_B = 123,
17+
CHAN_D = 125,
18+
};
19+
20+
/* Normal channels */
21+
ZBUS_CHAN_DEFINE(chan_a, struct msg, NULL, NULL, ZBUS_OBSERVERS_EMPTY, ZBUS_MSG_INIT(0));
22+
ZBUS_CHAN_DEFINE_WITH_ID(chan_b, CHAN_B, struct msg, NULL, NULL, ZBUS_OBSERVERS_EMPTY,
23+
ZBUS_MSG_INIT(0));
24+
25+
/* Shadow channels */
26+
ZBUS_SHADOW_CHAN_DEFINE(chan_c, struct msg, NULL, NULL, ZBUS_OBSERVERS_EMPTY, ZBUS_MSG_INIT(0));
27+
ZBUS_SHADOW_CHAN_DEFINE_WITH_ID(chan_d, CHAN_D, struct msg, NULL, NULL, ZBUS_OBSERVERS_EMPTY,
28+
ZBUS_MSG_INIT(0));
29+
30+
/* Multidomain channels */
31+
ZBUS_MULTIDOMAIN_CHAN_DEFINE(chan_e, struct msg, NULL, NULL, ZBUS_OBSERVERS_EMPTY, ZBUS_MSG_INIT(0),
32+
true, true);
33+
ZBUS_MULTIDOMAIN_CHAN_DEFINE(chan_f, struct msg, NULL, NULL, ZBUS_OBSERVERS_EMPTY, ZBUS_MSG_INIT(0),
34+
false, true);
35+
ZBUS_MULTIDOMAIN_CHAN_DEFINE(chan_g, struct msg, NULL, NULL, ZBUS_OBSERVERS_EMPTY, ZBUS_MSG_INIT(0),
36+
false, false);
37+
38+
ZTEST(shadow_channels, test_shadow_channel_identification)
39+
{
40+
/* Check shadow channel identification */
41+
zassert_false(ZBUS_CHANNEL_IS_SHADOW(&chan_a));
42+
zassert_false(ZBUS_CHANNEL_IS_SHADOW(&chan_b));
43+
44+
zassert_true(ZBUS_CHANNEL_IS_SHADOW(&chan_c));
45+
zassert_true(ZBUS_CHANNEL_IS_SHADOW(&chan_d));
46+
47+
zassert_false(ZBUS_CHANNEL_IS_SHADOW(&chan_e));
48+
zassert_true(ZBUS_CHANNEL_IS_SHADOW(&chan_f));
49+
50+
/* Check master channel identification */
51+
zassert_true(ZBUS_CHANNEL_IS_MASTER(&chan_a));
52+
zassert_true(ZBUS_CHANNEL_IS_MASTER(&chan_b));
53+
54+
zassert_false(ZBUS_CHANNEL_IS_MASTER(&chan_c));
55+
zassert_false(ZBUS_CHANNEL_IS_MASTER(&chan_d));
56+
57+
zassert_true(ZBUS_CHANNEL_IS_MASTER(&chan_e));
58+
zassert_false(ZBUS_CHANNEL_IS_MASTER(&chan_f));
59+
}
60+
61+
ZTEST(shadow_channels, test_shadow_channel_exclusion)
62+
{
63+
/* NOTE: chan_g should not be defined as _is_included in the macro is false
64+
* Therefore, zbus_chan_from_name("chan_g") should return NULL
65+
*/
66+
zassert_is_null(zbus_chan_from_name("chan_g"));
67+
}
68+
69+
ZTEST(shadow_channels, test_pub)
70+
{
71+
struct msg msg = {42};
72+
73+
/* normal publish cannot be used on shadow channels */
74+
zassert_equal(-EPERM, zbus_chan_pub(&chan_c, &msg, K_NO_WAIT));
75+
zassert_equal(-EPERM, zbus_chan_pub(&chan_d, &msg, K_NO_WAIT));
76+
zassert_equal(-EPERM, zbus_chan_pub(&chan_f, &msg, K_NO_WAIT));
77+
78+
/* shadow publish can be used on shadow channels */
79+
zassert_equal(0, zbus_chan_pub_shadow(&chan_c, &msg, K_NO_WAIT));
80+
zassert_equal(0, zbus_chan_pub_shadow(&chan_d, &msg, K_NO_WAIT));
81+
zassert_equal(0, zbus_chan_pub_shadow(&chan_f, &msg, K_NO_WAIT));
82+
83+
/* shadow publish cannot be used on normal channels */
84+
zassert_equal(-EPERM, zbus_chan_pub_shadow(&chan_a, NULL, K_NO_WAIT));
85+
zassert_equal(-EPERM, zbus_chan_pub_shadow(&chan_b, NULL, K_NO_WAIT));
86+
zassert_equal(-EPERM, zbus_chan_pub_shadow(&chan_e, NULL, K_NO_WAIT));
87+
}
88+
89+
ZTEST_SUITE(shadow_channels, NULL, NULL, NULL, NULL, NULL);
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
tests:
2+
message_bus.zbus.shadow_channels:
3+
tags: zbus
4+
integration_platforms:
5+
- native_sim

0 commit comments

Comments
 (0)