test: zbus: Add tests for MSG_SUBSCRIBERS
Add specification-based and integration tests for `MSG_SUBSCRIBERS`. Signed-off-by: Rodrigo Peixoto <rodrigopex@gmail.com>
This commit is contained in:
parent
94f98b6cf0
commit
43c8df7893
6 changed files with 204 additions and 7 deletions
|
@ -5,3 +5,5 @@ CONFIG_LOG=y
|
||||||
CONFIG_ZBUS=y
|
CONFIG_ZBUS=y
|
||||||
CONFIG_ZBUS_LOG_LEVEL_DBG=y
|
CONFIG_ZBUS_LOG_LEVEL_DBG=y
|
||||||
CONFIG_ZBUS_CHANNEL_NAME=y
|
CONFIG_ZBUS_CHANNEL_NAME=y
|
||||||
|
CONFIG_ZBUS_MSG_SUBSCRIBER=y
|
||||||
|
CONFIG_HEAP_MEM_POOL_SIZE=1024
|
||||||
|
|
|
@ -34,6 +34,15 @@ ZBUS_CHAN_DEFINE(net_pkt_chan, /* Name */
|
||||||
ZBUS_MSG_INIT(.total = 0) /* Initial value */
|
ZBUS_MSG_INIT(.total = 0) /* Initial value */
|
||||||
);
|
);
|
||||||
|
|
||||||
|
ZBUS_CHAN_DEFINE(net_log_chan, /* Name */
|
||||||
|
struct net_log_msg, /* Message type */
|
||||||
|
|
||||||
|
NULL, /* Validator */
|
||||||
|
NULL, /* User data */
|
||||||
|
ZBUS_OBSERVERS(net_log_sub), /* observers */
|
||||||
|
ZBUS_MSG_INIT(0) /* Initial value */
|
||||||
|
);
|
||||||
|
|
||||||
ZBUS_CHAN_DEFINE(start_measurement_chan, /* Name */
|
ZBUS_CHAN_DEFINE(start_measurement_chan, /* Name */
|
||||||
struct action_msg, /* Message type */
|
struct action_msg, /* Message type */
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,8 @@
|
||||||
#include <zephyr/ztest_assert.h>
|
#include <zephyr/ztest_assert.h>
|
||||||
LOG_MODULE_DECLARE(zbus, CONFIG_ZBUS_LOG_LEVEL);
|
LOG_MODULE_DECLARE(zbus, CONFIG_ZBUS_LOG_LEVEL);
|
||||||
|
|
||||||
ZBUS_CHAN_DECLARE(version_chan, sensor_data_chan, net_pkt_chan, start_measurement_chan, busy_chan);
|
ZBUS_CHAN_DECLARE(version_chan, sensor_data_chan, net_pkt_chan, net_log_chan,
|
||||||
|
start_measurement_chan, busy_chan);
|
||||||
|
|
||||||
static int count_callback;
|
static int count_callback;
|
||||||
|
|
||||||
|
@ -69,12 +70,38 @@ static void net_thread(void)
|
||||||
zbus_chan_read(&net_pkt_chan, &pkt, K_NO_WAIT);
|
zbus_chan_read(&net_pkt_chan, &pkt, K_NO_WAIT);
|
||||||
|
|
||||||
LOG_DBG("[Net] Total %d", pkt.total);
|
LOG_DBG("[Net] Total %d", pkt.total);
|
||||||
|
|
||||||
|
struct net_log_msg log_msg = {.count_net = count_net,
|
||||||
|
.pkt_total = pkt.total};
|
||||||
|
|
||||||
|
zbus_chan_pub(&net_log_chan, &log_msg, K_MSEC(500));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
K_THREAD_DEFINE(net_thread_id, 1024, net_thread, NULL, NULL, NULL, 3, 0, 0);
|
K_THREAD_DEFINE(net_thread_id, 1024, net_thread, NULL, NULL, NULL, 3, 0, 0);
|
||||||
|
|
||||||
|
static int count_net_log;
|
||||||
|
|
||||||
|
ZBUS_MSG_SUBSCRIBER_DEFINE(net_log_sub);
|
||||||
|
|
||||||
|
static void net_log_thread(void)
|
||||||
|
{
|
||||||
|
const struct zbus_channel *chan;
|
||||||
|
struct net_log_msg log_msg;
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
if (!zbus_sub_wait_msg(&net_log_sub, &chan, &log_msg, K_FOREVER)) {
|
||||||
|
count_net_log++;
|
||||||
|
|
||||||
|
LOG_DBG("[Net log]: count_net = %d, pkt.total = %d", log_msg.count_net,
|
||||||
|
log_msg.pkt_total);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
K_THREAD_DEFINE(net_log_thread_id, 1024, net_log_thread, NULL, NULL, NULL, 3, 0, 0);
|
||||||
|
|
||||||
static int a;
|
static int a;
|
||||||
static int b;
|
static int b;
|
||||||
static int count_peripheral;
|
static int count_peripheral;
|
||||||
|
@ -116,6 +143,7 @@ static void context_reset(void *f)
|
||||||
count_callback = 0;
|
count_callback = 0;
|
||||||
count_core = 0;
|
count_core = 0;
|
||||||
count_net = 0;
|
count_net = 0;
|
||||||
|
count_net_log = 0;
|
||||||
count_peripheral = 0;
|
count_peripheral = 0;
|
||||||
pkt.total = 0;
|
pkt.total = 0;
|
||||||
struct net_pkt_msg *p;
|
struct net_pkt_msg *p;
|
||||||
|
@ -134,15 +162,22 @@ static void context_reset(void *f)
|
||||||
zbus_obs_set_enable(&critical_lis, true);
|
zbus_obs_set_enable(&critical_lis, true);
|
||||||
zbus_obs_set_enable(&peripheral_sub, true);
|
zbus_obs_set_enable(&peripheral_sub, true);
|
||||||
zbus_chan_claim(&start_measurement_chan, K_NO_WAIT);
|
zbus_chan_claim(&start_measurement_chan, K_NO_WAIT);
|
||||||
struct action_msg *act = (struct action_msg *)start_measurement_chan.message;
|
struct action_msg *act = (struct action_msg *)zbus_chan_msg(&start_measurement_chan);
|
||||||
|
|
||||||
act->status = false;
|
act->status = false;
|
||||||
zbus_chan_finish(&start_measurement_chan);
|
zbus_chan_finish(&start_measurement_chan);
|
||||||
|
zbus_chan_claim(&net_log_chan, K_NO_WAIT);
|
||||||
|
struct net_log_msg *lm = (struct net_log_msg *)zbus_chan_msg(&net_log_chan);
|
||||||
|
|
||||||
|
lm->count_net = 0;
|
||||||
|
lm->pkt_total = 0;
|
||||||
|
zbus_chan_finish(&net_log_chan);
|
||||||
}
|
}
|
||||||
|
|
||||||
ZTEST(integration, test_basic)
|
ZTEST(integration, test_basic)
|
||||||
{
|
{
|
||||||
struct action_msg start = {true};
|
struct action_msg start = {true};
|
||||||
|
struct net_log_msg *lm = (struct net_log_msg *)zbus_chan_const_msg(&net_log_chan);
|
||||||
|
|
||||||
zassert_equal(0, zbus_chan_pub(&start_measurement_chan, &start, K_MSEC(200)), NULL);
|
zassert_equal(0, zbus_chan_pub(&start_measurement_chan, &start, K_MSEC(200)), NULL);
|
||||||
|
|
||||||
|
@ -152,6 +187,8 @@ ZTEST(integration, test_basic)
|
||||||
zassert_equal(count_core, 1, NULL);
|
zassert_equal(count_core, 1, NULL);
|
||||||
zassert_equal(count_net, 1, NULL);
|
zassert_equal(count_net, 1, NULL);
|
||||||
zassert_equal(count_peripheral, 1, NULL);
|
zassert_equal(count_peripheral, 1, NULL);
|
||||||
|
zassert_equal(count_net_log, 1, NULL);
|
||||||
|
zassert_equal(count_net, lm->count_net, NULL);
|
||||||
|
|
||||||
zassert_equal(0, zbus_chan_pub(&start_measurement_chan, &start, K_MSEC(200)), NULL);
|
zassert_equal(0, zbus_chan_pub(&start_measurement_chan, &start, K_MSEC(200)), NULL);
|
||||||
|
|
||||||
|
@ -161,6 +198,8 @@ ZTEST(integration, test_basic)
|
||||||
zassert_equal(count_core, 2, NULL);
|
zassert_equal(count_core, 2, NULL);
|
||||||
zassert_equal(count_net, 2, NULL);
|
zassert_equal(count_net, 2, NULL);
|
||||||
zassert_equal(count_peripheral, 2, NULL);
|
zassert_equal(count_peripheral, 2, NULL);
|
||||||
|
zassert_equal(count_net_log, 2, NULL);
|
||||||
|
zassert_equal(count_net, lm->count_net, NULL);
|
||||||
|
|
||||||
zassert_equal(0, zbus_chan_pub(&start_measurement_chan, &start, K_MSEC(200)), NULL);
|
zassert_equal(0, zbus_chan_pub(&start_measurement_chan, &start, K_MSEC(200)), NULL);
|
||||||
|
|
||||||
|
@ -170,13 +209,17 @@ ZTEST(integration, test_basic)
|
||||||
zassert_equal(count_core, 3, NULL);
|
zassert_equal(count_core, 3, NULL);
|
||||||
zassert_equal(count_net, 3, NULL);
|
zassert_equal(count_net, 3, NULL);
|
||||||
zassert_equal(count_peripheral, 3, NULL);
|
zassert_equal(count_peripheral, 3, NULL);
|
||||||
|
zassert_equal(count_net_log, 3, NULL);
|
||||||
|
zassert_equal(count_net, lm->count_net, NULL);
|
||||||
|
|
||||||
zassert_equal(pkt.total, 6, "result was %d", pkt.total);
|
zassert_equal(pkt.total, 6, "result was %d", pkt.total);
|
||||||
|
zassert_equal(pkt.total, lm->pkt_total, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
ZTEST(integration, test_channel_set_enable)
|
ZTEST(integration, test_channel_set_enable)
|
||||||
{
|
{
|
||||||
struct action_msg start = {true};
|
struct action_msg start = {true};
|
||||||
|
const struct net_log_msg *lm = zbus_chan_const_msg(&net_log_chan);
|
||||||
|
|
||||||
zassert_equal(0, zbus_obs_set_enable(&critical_lis, false), NULL);
|
zassert_equal(0, zbus_obs_set_enable(&critical_lis, false), NULL);
|
||||||
zassert_equal(0, zbus_obs_set_enable(&peripheral_sub, false), NULL);
|
zassert_equal(0, zbus_obs_set_enable(&peripheral_sub, false), NULL);
|
||||||
|
@ -186,8 +229,10 @@ ZTEST(integration, test_channel_set_enable)
|
||||||
|
|
||||||
zassert_equal(count_callback, 0, NULL);
|
zassert_equal(count_callback, 0, NULL);
|
||||||
zassert_equal(count_core, 0, NULL);
|
zassert_equal(count_core, 0, NULL);
|
||||||
zassert_equal(count_net, 0, NULL);
|
|
||||||
zassert_equal(count_peripheral, 0, NULL);
|
zassert_equal(count_peripheral, 0, NULL);
|
||||||
|
zassert_equal(count_net, 0, NULL);
|
||||||
|
zassert_equal(count_net_log, 0, NULL);
|
||||||
|
zassert_equal(count_net, lm->count_net, NULL);
|
||||||
|
|
||||||
zassert_equal(0, zbus_obs_set_enable(&critical_lis, false), NULL);
|
zassert_equal(0, zbus_obs_set_enable(&critical_lis, false), NULL);
|
||||||
zassert_equal(0, zbus_obs_set_enable(&peripheral_sub, true), NULL);
|
zassert_equal(0, zbus_obs_set_enable(&peripheral_sub, true), NULL);
|
||||||
|
@ -199,6 +244,8 @@ ZTEST(integration, test_channel_set_enable)
|
||||||
zassert_equal(count_core, 1, NULL);
|
zassert_equal(count_core, 1, NULL);
|
||||||
zassert_equal(count_net, 1, NULL);
|
zassert_equal(count_net, 1, NULL);
|
||||||
zassert_equal(count_peripheral, 1, NULL);
|
zassert_equal(count_peripheral, 1, NULL);
|
||||||
|
zassert_equal(count_net_log, 1, NULL);
|
||||||
|
zassert_equal(count_net, lm->count_net, NULL);
|
||||||
|
|
||||||
zassert_equal(0, zbus_obs_set_enable(&critical_lis, true), NULL);
|
zassert_equal(0, zbus_obs_set_enable(&critical_lis, true), NULL);
|
||||||
zassert_equal(0, zbus_obs_set_enable(&peripheral_sub, false), NULL);
|
zassert_equal(0, zbus_obs_set_enable(&peripheral_sub, false), NULL);
|
||||||
|
@ -210,6 +257,8 @@ ZTEST(integration, test_channel_set_enable)
|
||||||
zassert_equal(count_core, 1, NULL);
|
zassert_equal(count_core, 1, NULL);
|
||||||
zassert_equal(count_net, 1, NULL);
|
zassert_equal(count_net, 1, NULL);
|
||||||
zassert_equal(count_peripheral, 1, NULL);
|
zassert_equal(count_peripheral, 1, NULL);
|
||||||
|
zassert_equal(count_net_log, 1, NULL);
|
||||||
|
zassert_equal(count_net, lm->count_net, NULL);
|
||||||
|
|
||||||
zassert_equal(0, zbus_obs_set_enable(&critical_lis, true), NULL);
|
zassert_equal(0, zbus_obs_set_enable(&critical_lis, true), NULL);
|
||||||
zassert_equal(0, zbus_obs_set_enable(&peripheral_sub, true), NULL);
|
zassert_equal(0, zbus_obs_set_enable(&peripheral_sub, true), NULL);
|
||||||
|
@ -219,10 +268,13 @@ ZTEST(integration, test_channel_set_enable)
|
||||||
|
|
||||||
zassert_equal(count_callback, 2, NULL);
|
zassert_equal(count_callback, 2, NULL);
|
||||||
zassert_equal(count_core, 2, NULL);
|
zassert_equal(count_core, 2, NULL);
|
||||||
zassert_equal(count_net, 2, NULL);
|
|
||||||
zassert_equal(count_peripheral, 2, NULL);
|
zassert_equal(count_peripheral, 2, NULL);
|
||||||
|
zassert_equal(count_net, 2, NULL);
|
||||||
|
zassert_equal(count_net_log, 2, NULL);
|
||||||
|
zassert_equal(count_net, lm->count_net, NULL);
|
||||||
|
|
||||||
zassert_equal(pkt.total, 4, "result was %d", pkt.total);
|
zassert_equal(pkt.total, 4, "result was %d", pkt.total);
|
||||||
|
zassert_equal(pkt.total, lm->pkt_total, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void greedy_thread_entry(void *p1, void *p2, void *p3)
|
static void greedy_thread_entry(void *p1, void *p2, void *p3)
|
||||||
|
|
|
@ -26,4 +26,8 @@ struct action_msg {
|
||||||
bool status;
|
bool status;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct net_log_msg {
|
||||||
|
int count_net;
|
||||||
|
int pkt_total;
|
||||||
|
};
|
||||||
#endif /* _ZBUS_MESSAGES_H_ */
|
#endif /* _ZBUS_MESSAGES_H_ */
|
||||||
|
|
|
@ -6,6 +6,8 @@ CONFIG_ZBUS=y
|
||||||
CONFIG_ZBUS_LOG_LEVEL_DBG=y
|
CONFIG_ZBUS_LOG_LEVEL_DBG=y
|
||||||
CONFIG_ZBUS_ASSERT_MOCK=y
|
CONFIG_ZBUS_ASSERT_MOCK=y
|
||||||
CONFIG_IRQ_OFFLOAD=y
|
CONFIG_IRQ_OFFLOAD=y
|
||||||
|
CONFIG_ZBUS_MSG_SUBSCRIBER=y
|
||||||
|
CONFIG_ZBUS_MSG_SUBSCRIBER_NET_BUF_POOL_SIZE=2
|
||||||
CONFIG_ZBUS_RUNTIME_OBSERVERS=y
|
CONFIG_ZBUS_RUNTIME_OBSERVERS=y
|
||||||
CONFIG_HEAP_MEM_POOL_SIZE=2048
|
CONFIG_HEAP_MEM_POOL_SIZE=2048
|
||||||
CONFIG_ZBUS_CHANNEL_NAME=y
|
CONFIG_ZBUS_CHANNEL_NAME=y
|
||||||
|
|
|
@ -86,6 +86,20 @@ ZBUS_CHAN_DEFINE(stuck_chan, /* Name */
|
||||||
ZBUS_MSG_INIT(0) /* Initial value major 0, minor 1, build 1023 */
|
ZBUS_MSG_INIT(0) /* Initial value major 0, minor 1, build 1023 */
|
||||||
);
|
);
|
||||||
|
|
||||||
|
ZBUS_CHAN_DEFINE(msg_sub_fail_chan, /* Name */
|
||||||
|
int, /* Message type */
|
||||||
|
NULL, /* Validator */
|
||||||
|
NULL, /* User data */
|
||||||
|
ZBUS_OBSERVERS(foo_msg_sub, invalid_obs), /* observers */
|
||||||
|
ZBUS_MSG_INIT(0) /* Initial value major 0, minor 1, build 1023 */
|
||||||
|
);
|
||||||
|
ZBUS_CHAN_DEFINE(msg_sub_no_pool_chan, /* Name */
|
||||||
|
int, /* Message type */
|
||||||
|
NULL, /* Validator */
|
||||||
|
NULL, /* User data */
|
||||||
|
ZBUS_OBSERVERS(foo_msg_sub, foo2_msg_sub), /* observers */
|
||||||
|
ZBUS_MSG_INIT(0) /* Initial value major 0, minor 1, build 1023 */
|
||||||
|
);
|
||||||
static int count_fast;
|
static int count_fast;
|
||||||
|
|
||||||
static void callback(const struct zbus_channel *chan)
|
static void callback(const struct zbus_channel *chan)
|
||||||
|
@ -207,6 +221,15 @@ static void wq_dh_cb(struct k_work *item)
|
||||||
}
|
}
|
||||||
|
|
||||||
ZBUS_SUBSCRIBER_DEFINE(sub1, 1);
|
ZBUS_SUBSCRIBER_DEFINE(sub1, 1);
|
||||||
|
ZBUS_MSG_SUBSCRIBER_DEFINE_WITH_ENABLE(foo_msg_sub, false);
|
||||||
|
ZBUS_MSG_SUBSCRIBER_DEFINE_WITH_ENABLE(foo2_msg_sub, false);
|
||||||
|
static K_FIFO_DEFINE(_zbus_observer_fifo_invalid_obs);
|
||||||
|
STRUCT_SECTION_ITERABLE(zbus_observer, invalid_obs) = {
|
||||||
|
ZBUS_OBSERVER_NAME_INIT(invalid_obs) /* Name field */
|
||||||
|
.type = ZBUS_OBSERVER_MSG_SUBSCRIBER_TYPE + 10,
|
||||||
|
.enabled = false,
|
||||||
|
.message_fifo = &_zbus_observer_fifo_invalid_obs,
|
||||||
|
};
|
||||||
|
|
||||||
ZTEST(basic, test_specification_based__zbus_chan)
|
ZTEST(basic, test_specification_based__zbus_chan)
|
||||||
{
|
{
|
||||||
|
@ -268,6 +291,14 @@ ZTEST(basic, test_specification_based__zbus_chan)
|
||||||
|
|
||||||
zassert_equal(0, zbus_chan_finish(&aux2_chan), "It must finish correctly");
|
zassert_equal(0, zbus_chan_finish(&aux2_chan), "It must finish correctly");
|
||||||
|
|
||||||
|
int fail = 10;
|
||||||
|
|
||||||
|
zbus_obs_set_enable(&invalid_obs, true);
|
||||||
|
int err = zbus_chan_pub(&msg_sub_fail_chan, &fail, K_MSEC(200));
|
||||||
|
|
||||||
|
zassert_equal(-EFAULT, err, "It must reach the default on the switch. Err %d", err);
|
||||||
|
zbus_obs_set_enable(&invalid_obs, false);
|
||||||
|
|
||||||
struct action_msg repeated = {.status = false};
|
struct action_msg repeated = {.status = false};
|
||||||
|
|
||||||
zbus_chan_pub(&aux3_on_change_chan, &repeated, K_NO_WAIT);
|
zbus_chan_pub(&aux3_on_change_chan, &repeated, K_NO_WAIT);
|
||||||
|
@ -307,6 +338,19 @@ ZTEST(basic, test_specification_based__zbus_chan)
|
||||||
ISR_OP(ADD_OBS_ISR_INVAL, -EFAULT);
|
ISR_OP(ADD_OBS_ISR_INVAL, -EFAULT);
|
||||||
ISR_OP(RM_OBS_ISR, -EFAULT);
|
ISR_OP(RM_OBS_ISR, -EFAULT);
|
||||||
ISR_OP(RM_OBS_ISR_INVAL, -EFAULT);
|
ISR_OP(RM_OBS_ISR_INVAL, -EFAULT);
|
||||||
|
|
||||||
|
int msg;
|
||||||
|
const struct zbus_channel *chan;
|
||||||
|
|
||||||
|
zbus_obs_set_enable(&foo_msg_sub, true);
|
||||||
|
zbus_obs_set_enable(&foo2_msg_sub, true);
|
||||||
|
zassert_equal(-ENOMEM, zbus_chan_notify(&msg_sub_no_pool_chan, K_MSEC(200)),
|
||||||
|
"It must return an error, the pool only have 2 slots. For publishing to "
|
||||||
|
"MSG_SUBSCRIBERS it is necessary at least one per each and a spare one.");
|
||||||
|
|
||||||
|
zassert_equal(0, zbus_sub_wait_msg(&foo_msg_sub, &chan, &msg, K_MSEC(500)), NULL);
|
||||||
|
zbus_obs_set_enable(&foo_msg_sub, false);
|
||||||
|
zbus_obs_set_enable(&foo2_msg_sub, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool always_true_chan_iterator(const struct zbus_channel *chan)
|
static bool always_true_chan_iterator(const struct zbus_channel *chan)
|
||||||
|
@ -353,9 +397,17 @@ static bool check_chan_iterator(const struct zbus_channel *chan, void *user_data
|
||||||
zassert_mem_equal__(zbus_chan_name(chan), "hard_chan", 9, "Must be equal");
|
zassert_mem_equal__(zbus_chan_name(chan), "hard_chan", 9, "Must be equal");
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
zassert_mem_equal__(zbus_chan_name(chan), "stuck_chan", 10, "Must be equal");
|
zassert_mem_equal__(zbus_chan_name(chan), "msg_sub_fail_chan",
|
||||||
|
sizeof("msg_sub_fail_chan"), "Must be equal");
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
|
zassert_mem_equal__(zbus_chan_name(chan), "msg_sub_no_pool_chan",
|
||||||
|
sizeof("msg_sub_no_pool_chan"), "Must be equal");
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
zassert_mem_equal__(zbus_chan_name(chan), "stuck_chan", 10, "Must be equal");
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
zassert_mem_equal__(zbus_chan_name(chan), "version_chan", 12, "Must be equal");
|
zassert_mem_equal__(zbus_chan_name(chan), "version_chan", 12, "Must be equal");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -380,12 +432,31 @@ static bool check_obs_iterator(const struct zbus_observer *obs, void *user_data)
|
||||||
zassert_mem_equal__(zbus_obs_name(obs), "fast_lis", 8, "Must be equal");
|
zassert_mem_equal__(zbus_obs_name(obs), "fast_lis", 8, "Must be equal");
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
zassert_mem_equal__(zbus_obs_name(obs), "foo_sub", 7, "Must be equal");
|
zassert_mem_equal__(zbus_obs_name(obs), "foo2_msg_sub", sizeof("foo2_msg_sub"),
|
||||||
|
"Must be equal");
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
zassert_mem_equal__(zbus_obs_name(obs), "rt_fast_lis", 11, "Must be equal");
|
zassert_mem_equal__(zbus_obs_name(obs), "foo_msg_sub", 11, "Must be equal");
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
|
zassert_mem_equal__(zbus_obs_name(obs), "foo_sub", 7, "Must be equal");
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
zassert_mem_equal__(zbus_obs_name(obs), "invalid_obs", strlen("invalid_obs"),
|
||||||
|
"Must be equal");
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
zassert_mem_equal__(zbus_obs_name(obs), "invalid_sub", strlen("invalid_sub"),
|
||||||
|
"Must be equal");
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
zassert_mem_equal__(zbus_obs_name(obs), "not_observing_sub",
|
||||||
|
strlen("not_observing_sub"), "Must be equal");
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
zassert_mem_equal__(zbus_obs_name(obs), "rt_fast_lis", 11, "Must be equal");
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
zassert_mem_equal__(zbus_obs_name(obs), "sub1", 4, "Must be equal");
|
zassert_mem_equal__(zbus_obs_name(obs), "sub1", 4, "Must be equal");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -570,9 +641,12 @@ ZTEST(basic, test_specification_based__zbus_obs_set_enable)
|
||||||
zassert_equal(0, zbus_chan_rm_obs(&aux1_chan, &rt_fast_lis, K_MSEC(200)), NULL);
|
zassert_equal(0, zbus_chan_rm_obs(&aux1_chan, &rt_fast_lis, K_MSEC(200)), NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ZBUS_SUBSCRIBER_DEFINE(not_observing_sub, 0);
|
||||||
|
|
||||||
ZTEST(basic, test_specification_based__zbus_obs_set_chan_notification_mask)
|
ZTEST(basic, test_specification_based__zbus_obs_set_chan_notification_mask)
|
||||||
{
|
{
|
||||||
bool enabled = false;
|
bool enabled = false;
|
||||||
|
bool masked = false;
|
||||||
|
|
||||||
count_fast = 0;
|
count_fast = 0;
|
||||||
|
|
||||||
|
@ -584,6 +658,24 @@ ZTEST(basic, test_specification_based__zbus_obs_set_chan_notification_mask)
|
||||||
|
|
||||||
zassert_equal(-EFAULT, zbus_obs_set_chan_notification_mask(NULL, &aux1_chan, true), NULL);
|
zassert_equal(-EFAULT, zbus_obs_set_chan_notification_mask(NULL, &aux1_chan, true), NULL);
|
||||||
|
|
||||||
|
zassert_equal(-ESRCH,
|
||||||
|
zbus_obs_set_chan_notification_mask(¬_observing_sub, &aux1_chan, true),
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
zassert_equal(-EFAULT, zbus_obs_is_chan_notification_masked(NULL, NULL, NULL), NULL);
|
||||||
|
|
||||||
|
zassert_equal(-EFAULT, zbus_obs_is_chan_notification_masked(NULL, NULL, &masked), NULL);
|
||||||
|
|
||||||
|
zassert_equal(-EFAULT, zbus_obs_is_chan_notification_masked(&fast_lis, NULL, &masked),
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
zassert_equal(-EFAULT, zbus_obs_is_chan_notification_masked(NULL, &aux1_chan, &masked),
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
zassert_equal(-ESRCH,
|
||||||
|
zbus_obs_is_chan_notification_masked(¬_observing_sub, &aux1_chan, &masked),
|
||||||
|
NULL);
|
||||||
|
|
||||||
zbus_obs_set_chan_notification_mask(&fast_lis, &aux1_chan, true);
|
zbus_obs_set_chan_notification_mask(&fast_lis, &aux1_chan, true);
|
||||||
|
|
||||||
zbus_obs_is_chan_notification_masked(&fast_lis, &aux1_chan, &enabled);
|
zbus_obs_is_chan_notification_masked(&fast_lis, &aux1_chan, &enabled);
|
||||||
|
@ -608,6 +700,10 @@ ZTEST(basic, test_specification_based__zbus_obs_set_chan_notification_mask)
|
||||||
|
|
||||||
ZBUS_SUBSCRIBER_DEFINE(foo_sub, 1);
|
ZBUS_SUBSCRIBER_DEFINE(foo_sub, 1);
|
||||||
|
|
||||||
|
STRUCT_SECTION_ITERABLE(zbus_observer,
|
||||||
|
invalid_sub) = {ZBUS_OBSERVER_NAME_INIT(invalid_sub) /* Name field */
|
||||||
|
.type = ZBUS_OBSERVER_SUBSCRIBER_TYPE,
|
||||||
|
.enabled = false, .queue = NULL};
|
||||||
static void isr_sub_wait(const void *operation)
|
static void isr_sub_wait(const void *operation)
|
||||||
{
|
{
|
||||||
const struct zbus_channel *chan;
|
const struct zbus_channel *chan;
|
||||||
|
@ -616,6 +712,7 @@ static void isr_sub_wait(const void *operation)
|
||||||
zassert_equal(-EFAULT, zbus_sub_wait(NULL, NULL, K_NO_WAIT), NULL);
|
zassert_equal(-EFAULT, zbus_sub_wait(NULL, NULL, K_NO_WAIT), NULL);
|
||||||
zassert_equal(-EFAULT, zbus_sub_wait(&foo_sub, NULL, K_NO_WAIT), NULL);
|
zassert_equal(-EFAULT, zbus_sub_wait(&foo_sub, NULL, K_NO_WAIT), NULL);
|
||||||
zassert_equal(-EFAULT, zbus_sub_wait(&foo_sub, &chan, K_NO_WAIT), NULL);
|
zassert_equal(-EFAULT, zbus_sub_wait(&foo_sub, &chan, K_NO_WAIT), NULL);
|
||||||
|
zassert_equal(-EFAULT, zbus_sub_wait(&invalid_sub, &chan, K_NO_WAIT), NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
ZTEST(basic, test_specification_based__zbus_sub_wait)
|
ZTEST(basic, test_specification_based__zbus_sub_wait)
|
||||||
|
@ -625,11 +722,42 @@ ZTEST(basic, test_specification_based__zbus_sub_wait)
|
||||||
|
|
||||||
zassert_equal(-EFAULT, zbus_sub_wait(NULL, NULL, K_NO_WAIT), NULL);
|
zassert_equal(-EFAULT, zbus_sub_wait(NULL, NULL, K_NO_WAIT), NULL);
|
||||||
zassert_equal(-EFAULT, zbus_sub_wait(&foo_sub, NULL, K_NO_WAIT), NULL);
|
zassert_equal(-EFAULT, zbus_sub_wait(&foo_sub, NULL, K_NO_WAIT), NULL);
|
||||||
|
zassert_equal(-EFAULT, zbus_sub_wait(&foo_msg_sub, NULL, K_NO_WAIT), NULL);
|
||||||
|
|
||||||
/* It must run but return a -ENOMSG because of the K_NO_WAIT */
|
/* It must run but return a -ENOMSG because of the K_NO_WAIT */
|
||||||
zassert_equal(-ENOMSG, zbus_sub_wait(&foo_sub, &chan, K_NO_WAIT), NULL);
|
zassert_equal(-ENOMSG, zbus_sub_wait(&foo_sub, &chan, K_NO_WAIT), NULL);
|
||||||
|
zassert_equal(-EAGAIN, zbus_sub_wait(&foo_sub, &chan, K_MSEC(200)), NULL);
|
||||||
|
|
||||||
irq_offload(isr_sub_wait, NULL);
|
irq_offload(isr_sub_wait, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void isr_sub_wait_msg(const void *operation)
|
||||||
|
{
|
||||||
|
const struct zbus_channel *chan;
|
||||||
|
|
||||||
|
/* All the calls must not work. Zbus cannot work in IRSs */
|
||||||
|
zassert_equal(-EFAULT, zbus_sub_wait_msg(NULL, NULL, NULL, K_NO_WAIT), NULL);
|
||||||
|
zassert_equal(-EFAULT, zbus_sub_wait_msg(&foo_sub, NULL, NULL, K_NO_WAIT), NULL);
|
||||||
|
zassert_equal(-EFAULT, zbus_sub_wait(&foo_msg_sub, NULL, K_NO_WAIT), NULL);
|
||||||
|
int a = 0;
|
||||||
|
|
||||||
|
zassert_equal(-EFAULT, zbus_sub_wait_msg(&foo_msg_sub, &chan, &a, K_NO_WAIT), NULL);
|
||||||
|
}
|
||||||
|
ZTEST(basic, test_specification_based__zbus_sub_wait_msg)
|
||||||
|
{
|
||||||
|
count_fast = 0;
|
||||||
|
const struct zbus_channel *chan;
|
||||||
|
|
||||||
|
zassert_equal(-EFAULT, zbus_sub_wait_msg(NULL, NULL, NULL, K_NO_WAIT), NULL);
|
||||||
|
zassert_equal(-EFAULT, zbus_sub_wait_msg(&foo_sub, NULL, NULL, K_NO_WAIT), NULL);
|
||||||
|
zassert_equal(-EFAULT, zbus_sub_wait_msg(&foo_msg_sub, NULL, NULL, K_NO_WAIT), NULL);
|
||||||
|
zassert_equal(-EFAULT, zbus_sub_wait_msg(&foo_msg_sub, &chan, NULL, K_NO_WAIT), NULL);
|
||||||
|
int a = 0;
|
||||||
|
|
||||||
|
zassert_equal(-ENOMSG, zbus_sub_wait_msg(&foo_msg_sub, &chan, &a, K_NO_WAIT), NULL);
|
||||||
|
zassert_equal(-ENOMSG, zbus_sub_wait_msg(&foo_msg_sub, &chan, &a, K_MSEC(200)), NULL);
|
||||||
|
|
||||||
|
irq_offload(isr_sub_wait_msg, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
ZTEST_SUITE(basic, NULL, NULL, NULL, NULL, NULL);
|
ZTEST_SUITE(basic, NULL, NULL, NULL, NULL, NULL);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue