tests: drivers: mbox: Add negative tests for MBOX driver
Add negative test cases for the MBOX driver. Confirm that driver implementation is aligned with the MBOX API documentation available at https://docs.zephyrproject.org/latest/hardware/peripherals/mbox.html Enable test execution on nRF54H20 Application and PPR cores. Signed-off-by: Sebastian Głąb <sebastian.glab@nordicsemi.no>
This commit is contained in:
parent
745c9543c6
commit
6e045743f8
6 changed files with 647 additions and 0 deletions
11
tests/drivers/mbox/mbox_error_cases/CMakeLists.txt
Normal file
11
tests/drivers/mbox/mbox_error_cases/CMakeLists.txt
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
#
|
||||||
|
# Copyright 2024 Nordic Semiconductor ASA
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
||||||
|
cmake_minimum_required(VERSION 3.20.0)
|
||||||
|
|
||||||
|
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
|
||||||
|
project(mbox_error_cases)
|
||||||
|
|
||||||
|
target_sources(app PRIVATE src/main.c)
|
|
@ -0,0 +1,22 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2024 Nordic Semiconductor ASA
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
/ {
|
||||||
|
mbox-consumer {
|
||||||
|
compatible = "vnd,mbox-consumer";
|
||||||
|
mboxes = <&cpuppr_vevif 15>, <&cpuppr_vevif 32>,
|
||||||
|
<&cpuapp_bellboard 18>, <&cpuapp_bellboard 32>;
|
||||||
|
mbox-names = "remote_valid", "remote_incorrect",
|
||||||
|
"local_valid", "local_incorrect";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&cpuapp_bellboard {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&cpuppr_vevif {
|
||||||
|
status = "okay";
|
||||||
|
};
|
|
@ -0,0 +1,22 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2024 Nordic Semiconductor ASA
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
/ {
|
||||||
|
mbox-consumer {
|
||||||
|
compatible = "vnd,mbox-consumer";
|
||||||
|
mboxes = <&cpuapp_bellboard 18>, <&cpuapp_bellboard 32>,
|
||||||
|
<&cpuppr_vevif 15>, <&cpuppr_vevif 32>;
|
||||||
|
mbox-names = "remote_valid", "remote_incorrect",
|
||||||
|
"local_valid", "local_incorrect";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&cpuapp_bellboard {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&cpuppr_vevif {
|
||||||
|
status = "okay";
|
||||||
|
};
|
3
tests/drivers/mbox/mbox_error_cases/prj.conf
Normal file
3
tests/drivers/mbox/mbox_error_cases/prj.conf
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
CONFIG_ZTEST=y
|
||||||
|
|
||||||
|
CONFIG_MBOX=y
|
13
tests/drivers/mbox/mbox_error_cases/sample.yaml
Normal file
13
tests/drivers/mbox/mbox_error_cases/sample.yaml
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
sample:
|
||||||
|
name: MBOX IPC negative test cases
|
||||||
|
common:
|
||||||
|
tags: drivers mbox
|
||||||
|
harness: ztest
|
||||||
|
tests:
|
||||||
|
|
||||||
|
tests.drivers.mbox_error_cases:
|
||||||
|
platform_allow:
|
||||||
|
- nrf54h20dk/nrf54h20/cpuapp
|
||||||
|
- nrf54h20dk/nrf54h20/cpuppr
|
||||||
|
integration_platforms:
|
||||||
|
- nrf54h20dk/nrf54h20/cpuapp
|
576
tests/drivers/mbox/mbox_error_cases/src/main.c
Normal file
576
tests/drivers/mbox/mbox_error_cases/src/main.c
Normal file
|
@ -0,0 +1,576 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2024, Nordic Semiconductor ASA
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <zephyr/kernel.h>
|
||||||
|
#include <zephyr/ztest.h>
|
||||||
|
#include <zephyr/drivers/mbox.h>
|
||||||
|
|
||||||
|
int dummy_value;
|
||||||
|
|
||||||
|
#if defined(CONFIG_SOC_NRF54L15) || defined(CONFIG_SOC_NRF54H20)
|
||||||
|
#define EXPECTED_MTU_VALUE (0)
|
||||||
|
#define DATA_TRANSFER_MODE_SUPPORTED (0)
|
||||||
|
#define REMOTE_BUSY_SUPPORTED (0)
|
||||||
|
#else
|
||||||
|
#define EXPECTED_MTU_VALUE (4)
|
||||||
|
#define DATA_TRANSFER_MODE_SUPPORTED (1)
|
||||||
|
#define REMOTE_BUSY_SUPPORTED (1)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static void dummy_callback(const struct device *dev, mbox_channel_id_t channel_id,
|
||||||
|
void *user_data, struct mbox_msg *data)
|
||||||
|
{
|
||||||
|
ARG_UNUSED(dev);
|
||||||
|
ARG_UNUSED(channel_id);
|
||||||
|
ARG_UNUSED(user_data);
|
||||||
|
ARG_UNUSED(data);
|
||||||
|
/* Nothing here */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void dummy_callback_2(const struct device *dev, mbox_channel_id_t channel_id,
|
||||||
|
void *user_data, struct mbox_msg *data)
|
||||||
|
{
|
||||||
|
ARG_UNUSED(dev);
|
||||||
|
ARG_UNUSED(channel_id);
|
||||||
|
ARG_UNUSED(data);
|
||||||
|
|
||||||
|
int *temp = (int *) user_data;
|
||||||
|
(*temp)++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief mbox_is_ready_dt() positive test
|
||||||
|
*
|
||||||
|
* Confirm that mbox_is_ready_dt() returns True
|
||||||
|
* on valid local and remote mbox channels.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
ZTEST(mbox_error_cases, test_01a_mbox_is_ready_positive)
|
||||||
|
{
|
||||||
|
const struct mbox_dt_spec rx_channel =
|
||||||
|
MBOX_DT_SPEC_GET(DT_PATH(mbox_consumer), local_valid);
|
||||||
|
const struct mbox_dt_spec tx_channel =
|
||||||
|
MBOX_DT_SPEC_GET(DT_PATH(mbox_consumer), remote_valid);
|
||||||
|
bool ret;
|
||||||
|
|
||||||
|
ret = mbox_is_ready_dt(&tx_channel);
|
||||||
|
zassert_true(
|
||||||
|
ret,
|
||||||
|
"mbox_is_ready_dt(tx_channel) should return True,"
|
||||||
|
" got unexpected value of %d",
|
||||||
|
ret
|
||||||
|
);
|
||||||
|
|
||||||
|
ret = mbox_is_ready_dt(&rx_channel);
|
||||||
|
zassert_true(
|
||||||
|
ret,
|
||||||
|
"mbox_is_ready_dt(rx_channel) should return True,"
|
||||||
|
" got unexpected value of %d",
|
||||||
|
ret
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief mbox_is_ready_dt() on incorrect channels
|
||||||
|
*
|
||||||
|
* Confirm that mbox_is_ready_dt() returns True
|
||||||
|
* on invalid local and remote mbox channel.
|
||||||
|
* (Device is ready, channel is not checked.)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
ZTEST(mbox_error_cases, test_01b_mbox_is_ready_negative)
|
||||||
|
{
|
||||||
|
const struct mbox_dt_spec rx_channel =
|
||||||
|
MBOX_DT_SPEC_GET(DT_PATH(mbox_consumer), local_incorrect);
|
||||||
|
const struct mbox_dt_spec tx_channel =
|
||||||
|
MBOX_DT_SPEC_GET(DT_PATH(mbox_consumer), remote_incorrect);
|
||||||
|
bool ret;
|
||||||
|
|
||||||
|
ret = mbox_is_ready_dt(&tx_channel);
|
||||||
|
zassert_true(
|
||||||
|
ret,
|
||||||
|
"mbox_is_ready_dt(tx_invalid_channel) should return True,"
|
||||||
|
" got unexpected value of %d",
|
||||||
|
ret
|
||||||
|
);
|
||||||
|
|
||||||
|
ret = mbox_is_ready_dt(&rx_channel);
|
||||||
|
zassert_true(
|
||||||
|
ret,
|
||||||
|
"mbox_is_ready_dt(rx_invalid_channel) should return True,"
|
||||||
|
" got unexpected value of %d", ret
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief mbox_send_dt() on invalid TX channel shall fail
|
||||||
|
*
|
||||||
|
* Confirm that mbox_send_dt() returns
|
||||||
|
* -EINVAL when TX channel is invalid.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
ZTEST(mbox_error_cases, test_02a_mbox_send_on_invalid_tx_channel)
|
||||||
|
{
|
||||||
|
const struct mbox_dt_spec tx_channel =
|
||||||
|
MBOX_DT_SPEC_GET(DT_PATH(mbox_consumer), remote_incorrect);
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = mbox_send_dt(&tx_channel, NULL);
|
||||||
|
zassert_true(
|
||||||
|
(ret == -EINVAL),
|
||||||
|
"mbox_send_dt(incorrect_tx_channel) shall return -EINVAL (-22)"
|
||||||
|
" got unexpected %d",
|
||||||
|
ret
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief mbox_send_dt() on RX channel shall fail
|
||||||
|
*
|
||||||
|
* Confirm that mbox_send_dt() returns
|
||||||
|
* -ENOSYS when user tries to send on RX channel.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
ZTEST(mbox_error_cases, test_02b_mbox_send_on_rx_channel)
|
||||||
|
{
|
||||||
|
const struct mbox_dt_spec rx_channel =
|
||||||
|
MBOX_DT_SPEC_GET(DT_PATH(mbox_consumer), local_valid);
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = mbox_send_dt(&rx_channel, NULL);
|
||||||
|
zassert_true(
|
||||||
|
(ret == -ENOSYS),
|
||||||
|
"mbox_send_dt(rx_channel) shall return -ENOSYS (-88)"
|
||||||
|
" got unexpected %d",
|
||||||
|
ret
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief mbox_send_dt() with nonzero data field
|
||||||
|
*
|
||||||
|
* Confirm that mbox_send_dt() returns
|
||||||
|
* -EMSGSIZE when driver does NOT support DATA transfer.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
ZTEST(mbox_error_cases, test_02c_mbox_send_message_with_data)
|
||||||
|
{
|
||||||
|
const struct mbox_dt_spec tx_channel =
|
||||||
|
MBOX_DT_SPEC_GET(DT_PATH(mbox_consumer), remote_valid);
|
||||||
|
struct mbox_msg data_msg = {0};
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (DATA_TRANSFER_MODE_SUPPORTED) {
|
||||||
|
/* Skip this test because data transfer is supported. */
|
||||||
|
ztest_test_skip();
|
||||||
|
}
|
||||||
|
|
||||||
|
data_msg.data = &dummy_value;
|
||||||
|
data_msg.size = 4;
|
||||||
|
|
||||||
|
ret = mbox_send_dt(&tx_channel, &data_msg);
|
||||||
|
zassert_true(
|
||||||
|
(ret == -EMSGSIZE),
|
||||||
|
"mbox_send_dt(rx_channel, data) shall return -EMSGSIZE (-122)"
|
||||||
|
" got unexpected %d",
|
||||||
|
ret
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief mbox_send_dt() remote busy
|
||||||
|
*
|
||||||
|
* Confirm that mbox_send_dt() returns
|
||||||
|
* -EBUSY when remote hasn’t yet read the last data sent.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
ZTEST(mbox_error_cases, test_02d_mbox_send_message_remote_busy)
|
||||||
|
{
|
||||||
|
const struct mbox_dt_spec tx_channel =
|
||||||
|
MBOX_DT_SPEC_GET(DT_PATH(mbox_consumer), remote_valid);
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (!REMOTE_BUSY_SUPPORTED) {
|
||||||
|
/* Skip this test because driver is not
|
||||||
|
* capable of detecting that remote is busy.
|
||||||
|
*/
|
||||||
|
ztest_test_skip();
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = mbox_send_dt(&tx_channel, NULL);
|
||||||
|
zassert_true(
|
||||||
|
(ret == 0),
|
||||||
|
"mbox_send_dt(rx_channel) shall return 0"
|
||||||
|
" got unexpected %d",
|
||||||
|
ret
|
||||||
|
);
|
||||||
|
|
||||||
|
ret = mbox_send_dt(&tx_channel, NULL);
|
||||||
|
zassert_true(
|
||||||
|
(ret == -EBUSY),
|
||||||
|
"mbox_send_dt(rx_channel) shall return -EBUSY (-16)"
|
||||||
|
" got unexpected %d",
|
||||||
|
ret
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief mbox_register_callback_dt() on TX channel shall fail
|
||||||
|
*
|
||||||
|
* Confirm that mbox_register_callback_dt() returns
|
||||||
|
* -ENOSYS when user tries to register callback on TX mbox channel.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
ZTEST(mbox_error_cases, test_03a_mbox_register_callback_on_remote_channel)
|
||||||
|
{
|
||||||
|
const struct mbox_dt_spec tx_channel =
|
||||||
|
MBOX_DT_SPEC_GET(DT_PATH(mbox_consumer), remote_valid);
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = mbox_register_callback_dt(&tx_channel, dummy_callback, NULL);
|
||||||
|
zassert_true(
|
||||||
|
(ret == -ENOSYS),
|
||||||
|
"mbox_register_callback(remote_channel) shall return -ENOSYS (-88)"
|
||||||
|
" got unexpected %d",
|
||||||
|
ret
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief mbox_register_callback_dt() on incorrect channel shall fail
|
||||||
|
*
|
||||||
|
* Confirm that mbox_register_callback_dt() returns
|
||||||
|
* -EINVAL when user tries to register callback on incorrect mbox channel.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
ZTEST(mbox_error_cases, test_03b_mbox_register_callback_on_invalid_channel)
|
||||||
|
{
|
||||||
|
const struct mbox_dt_spec rx_channel =
|
||||||
|
MBOX_DT_SPEC_GET(DT_PATH(mbox_consumer), local_incorrect);
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = mbox_register_callback_dt(&rx_channel, dummy_callback, NULL);
|
||||||
|
zassert_true(
|
||||||
|
(ret == -EINVAL),
|
||||||
|
"mbox_register_callback(incorrect_channel) shall return -EINVAL (-22)"
|
||||||
|
" got unexpected %d",
|
||||||
|
ret
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief mbox_register_callback_dt() multiple use on same channel
|
||||||
|
*
|
||||||
|
* Confirm that mbox_register_callback_dt() returns
|
||||||
|
* 0 when user tries to register callback
|
||||||
|
* on already configured mbox channel.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
ZTEST(mbox_error_cases, test_03c_mbox_register_callback_twice_on_same_channel)
|
||||||
|
{
|
||||||
|
const struct mbox_dt_spec rx_channel =
|
||||||
|
MBOX_DT_SPEC_GET(DT_PATH(mbox_consumer), local_valid);
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = mbox_register_callback_dt(&rx_channel, dummy_callback, NULL);
|
||||||
|
zassert_true(
|
||||||
|
(ret == 0),
|
||||||
|
"mbox_register_callback(valid_channel) shall return 0"
|
||||||
|
" got unexpected %d",
|
||||||
|
ret
|
||||||
|
);
|
||||||
|
|
||||||
|
ret = mbox_register_callback_dt(&rx_channel, dummy_callback_2, &dummy_value);
|
||||||
|
zassert_true(
|
||||||
|
(ret == 0),
|
||||||
|
"mbox_register_callback(valid_channel) shall return 0"
|
||||||
|
" got unexpected %d",
|
||||||
|
ret
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief mbox_mtu_get_dt() on RX channel shall fail
|
||||||
|
*
|
||||||
|
* Confirm that mbox_mtu_get_dt() returns
|
||||||
|
* -ENOSYS for RX mbox channel.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
ZTEST(mbox_error_cases, test_04a_mbox_mtu_get_on_rx_channel)
|
||||||
|
{
|
||||||
|
const struct mbox_dt_spec rx_channel =
|
||||||
|
MBOX_DT_SPEC_GET(DT_PATH(mbox_consumer), local_valid);
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = mbox_mtu_get_dt(&rx_channel);
|
||||||
|
zassert_true(
|
||||||
|
(ret == -ENOSYS),
|
||||||
|
"mbox_mtu_get_dt(rx_channel) shall return -ENOSYS (-88)"
|
||||||
|
" got unexpected %d",
|
||||||
|
ret
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief mbox_mtu_get_dt() on TX channel functional test
|
||||||
|
*
|
||||||
|
* Confirm that mbox_mtu_get_dt() returns
|
||||||
|
* expected value for TX mbox channel.
|
||||||
|
* (No matter if channel is valid or incorrect.)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
ZTEST(mbox_error_cases, test_04b_mbox_mtu_get_on_tx_channel)
|
||||||
|
{
|
||||||
|
const struct mbox_dt_spec tx_channel =
|
||||||
|
MBOX_DT_SPEC_GET(DT_PATH(mbox_consumer), remote_valid);
|
||||||
|
const struct mbox_dt_spec tx_channel_incorrect =
|
||||||
|
MBOX_DT_SPEC_GET(DT_PATH(mbox_consumer), remote_incorrect);
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = mbox_mtu_get_dt(&tx_channel);
|
||||||
|
zassert_true(
|
||||||
|
(ret == EXPECTED_MTU_VALUE),
|
||||||
|
"mbox_mtu_get_dt(tx_channel) shall return %d"
|
||||||
|
" got unexpected %d",
|
||||||
|
EXPECTED_MTU_VALUE,
|
||||||
|
ret
|
||||||
|
);
|
||||||
|
|
||||||
|
ret = mbox_mtu_get_dt(&tx_channel_incorrect);
|
||||||
|
zassert_true(
|
||||||
|
(ret == EXPECTED_MTU_VALUE),
|
||||||
|
"mbox_mtu_get_dt(tx_channel_incorrect) shall return %d"
|
||||||
|
" got unexpected %d",
|
||||||
|
EXPECTED_MTU_VALUE,
|
||||||
|
ret
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief mbox_set_enabled_dt() - Enable TX channel shall fail
|
||||||
|
*
|
||||||
|
* Confirm that mbox_set_enabled_dt() returns
|
||||||
|
* -ENOSYS for TX mbox channel.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
ZTEST(mbox_error_cases, test_05a_mbox_set_enabled_on_tx_channel)
|
||||||
|
{
|
||||||
|
const struct mbox_dt_spec tx_channel =
|
||||||
|
MBOX_DT_SPEC_GET(DT_PATH(mbox_consumer), remote_valid);
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = mbox_set_enabled_dt(&tx_channel, true);
|
||||||
|
zassert_true(
|
||||||
|
(ret == -ENOSYS),
|
||||||
|
"mbox_set_enabled_dt(tx_channel, true) shall return -ENOSYS (-88)"
|
||||||
|
" got unexpected %d",
|
||||||
|
ret
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief mbox_set_enabled_dt() - Enable incorrect channel shall fail
|
||||||
|
*
|
||||||
|
* Confirm that mbox_set_enabled_dt() returns
|
||||||
|
* -EINVAL for incorrect RX mbox channel.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
ZTEST(mbox_error_cases, test_05b_mbox_set_enabled_on_incorrect_rx_channel)
|
||||||
|
{
|
||||||
|
const struct mbox_dt_spec rx_channel =
|
||||||
|
MBOX_DT_SPEC_GET(DT_PATH(mbox_consumer), local_incorrect);
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = mbox_set_enabled_dt(&rx_channel, true);
|
||||||
|
zassert_true(
|
||||||
|
(ret == -EINVAL),
|
||||||
|
"mbox_set_enabled_dt(incorrect_channel, true) shall return -EINVAL (-22)"
|
||||||
|
" got unexpected %d",
|
||||||
|
ret
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief mbox_set_enabled_dt() - Enable already enabled channel shall fail
|
||||||
|
*
|
||||||
|
* Confirm that mbox_set_enabled_dt() returns
|
||||||
|
* -EALREADY when user tries to enable already enabled RX mbox channel.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
ZTEST(mbox_error_cases, test_05c_mbox_set_enabled_on_already_enabled_rx_channel)
|
||||||
|
{
|
||||||
|
const struct mbox_dt_spec rx_channel =
|
||||||
|
MBOX_DT_SPEC_GET(DT_PATH(mbox_consumer), local_valid);
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/* The user must take care of installing a proper callback
|
||||||
|
* on the channel before enabling it.
|
||||||
|
*/
|
||||||
|
ret = mbox_register_callback_dt(&rx_channel, dummy_callback, NULL);
|
||||||
|
zassert_true(
|
||||||
|
(ret == 0),
|
||||||
|
"mbox_register_callback(tx_channel) shall return 0"
|
||||||
|
" got unexpected %d",
|
||||||
|
ret
|
||||||
|
);
|
||||||
|
|
||||||
|
ret = mbox_set_enabled_dt(&rx_channel, true);
|
||||||
|
zassert_true(
|
||||||
|
(ret == 0),
|
||||||
|
"mbox_set_enabled_dt(tx_channel, true) shall return 0"
|
||||||
|
" got unexpected %d",
|
||||||
|
ret
|
||||||
|
);
|
||||||
|
|
||||||
|
ret = mbox_set_enabled_dt(&rx_channel, true);
|
||||||
|
zassert_true(
|
||||||
|
(ret == -EALREADY),
|
||||||
|
"mbox_set_enabled_dt(enabled_tx_channel, true) shall return -EALREADY (-120)"
|
||||||
|
" got unexpected %d",
|
||||||
|
ret
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Cleanup - disable mbox channel */
|
||||||
|
ret = mbox_set_enabled_dt(&rx_channel, false);
|
||||||
|
zassert_true(
|
||||||
|
(ret == 0),
|
||||||
|
"mbox_set_enabled_dt(enabled_tx_channel, false) shall return 0"
|
||||||
|
" got unexpected %d",
|
||||||
|
ret
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief mbox_set_enabled_dt() - Dsiable already disabled channel shall fail
|
||||||
|
*
|
||||||
|
* Confirm that mbox_set_enabled_dt() returns
|
||||||
|
* -EALREADY when user tries to disable already disabled RX mbox channel.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
ZTEST(mbox_error_cases, test_05d_mbox_set_enabled_on_already_disabled_rx_channel)
|
||||||
|
{
|
||||||
|
const struct mbox_dt_spec rx_channel =
|
||||||
|
MBOX_DT_SPEC_GET(DT_PATH(mbox_consumer), local_valid);
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/* The user must take care of installing a proper callback
|
||||||
|
* on the channel before enabling it.
|
||||||
|
*/
|
||||||
|
ret = mbox_register_callback_dt(&rx_channel, dummy_callback, NULL);
|
||||||
|
zassert_true(
|
||||||
|
(ret == 0),
|
||||||
|
"mbox_register_callback(tx_channel) shall return 0"
|
||||||
|
" got unexpected %d",
|
||||||
|
ret
|
||||||
|
);
|
||||||
|
|
||||||
|
ret = mbox_set_enabled_dt(&rx_channel, true);
|
||||||
|
zassert_true(
|
||||||
|
(ret == 0),
|
||||||
|
"mbox_set_enabled_dt(tx_channel, true) shall return 0"
|
||||||
|
" got unexpected %d",
|
||||||
|
ret
|
||||||
|
);
|
||||||
|
|
||||||
|
ret = mbox_set_enabled_dt(&rx_channel, false);
|
||||||
|
zassert_true(
|
||||||
|
(ret == 0),
|
||||||
|
"mbox_set_enabled_dt(enabled_tx_channel, false) shall return 0"
|
||||||
|
" got unexpected %d",
|
||||||
|
ret
|
||||||
|
);
|
||||||
|
|
||||||
|
ret = mbox_set_enabled_dt(&rx_channel, false);
|
||||||
|
zassert_true(
|
||||||
|
(ret == -EALREADY),
|
||||||
|
"mbox_set_enabled_dt(disabled_tx_channel, false) shall return -EALREADY (-120)"
|
||||||
|
" got unexpected %d",
|
||||||
|
ret
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief mbox_max_channels_get_dt() functional test
|
||||||
|
*
|
||||||
|
* Confirm that mbox_max_channels_get_dt() returns
|
||||||
|
* >0 Maximum possible number of supported channels on success
|
||||||
|
* (No matter if channel is valid or incorrect.)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
ZTEST(mbox_error_cases, test_06_mbox_max_channels_get_functional)
|
||||||
|
{
|
||||||
|
const struct mbox_dt_spec tx_channel =
|
||||||
|
MBOX_DT_SPEC_GET(DT_PATH(mbox_consumer), remote_valid);
|
||||||
|
const struct mbox_dt_spec tx_channel_incorrect =
|
||||||
|
MBOX_DT_SPEC_GET(DT_PATH(mbox_consumer), remote_incorrect);
|
||||||
|
const struct mbox_dt_spec rx_channel =
|
||||||
|
MBOX_DT_SPEC_GET(DT_PATH(mbox_consumer), local_valid);
|
||||||
|
const struct mbox_dt_spec rx_channel_incorrect =
|
||||||
|
MBOX_DT_SPEC_GET(DT_PATH(mbox_consumer), local_incorrect);
|
||||||
|
int ret1, ret2;
|
||||||
|
|
||||||
|
ret1 = mbox_max_channels_get_dt(&tx_channel);
|
||||||
|
TC_PRINT("mbox_max_channels_get_dt(tx_channel): %d\n", ret1);
|
||||||
|
zassert_true(
|
||||||
|
(ret1 > 0),
|
||||||
|
"mbox_max_channels_get_dt(tx_channel) shall return value greater than 0"
|
||||||
|
" got unexpected %d",
|
||||||
|
ret1
|
||||||
|
);
|
||||||
|
|
||||||
|
ret2 = mbox_max_channels_get_dt(&tx_channel_incorrect);
|
||||||
|
TC_PRINT("mbox_max_channels_get_dt(tx_channel_incorrect): %d\n", ret2);
|
||||||
|
zassert_true(
|
||||||
|
(ret2 > 0),
|
||||||
|
"mbox_max_channels_get_dt(tx_channel_incorrect) shall return value greater than 0"
|
||||||
|
" got unexpected %d",
|
||||||
|
ret2
|
||||||
|
);
|
||||||
|
|
||||||
|
zassert_true(
|
||||||
|
(ret1 == ret2),
|
||||||
|
"mbox_max_channels_get_dt() shall return same value disregarding channel No."
|
||||||
|
" got unexpected %d and %d",
|
||||||
|
ret1,
|
||||||
|
ret2
|
||||||
|
);
|
||||||
|
|
||||||
|
ret1 = mbox_max_channels_get_dt(&rx_channel);
|
||||||
|
TC_PRINT("mbox_max_channels_get_dt(rx_channel): %d\n", ret1);
|
||||||
|
zassert_true(
|
||||||
|
(ret1 > 0),
|
||||||
|
"mbox_max_channels_get_dt(rx_channel) shall return value greater than 0"
|
||||||
|
" got unexpected %d",
|
||||||
|
ret1
|
||||||
|
);
|
||||||
|
|
||||||
|
ret2 = mbox_max_channels_get_dt(&rx_channel_incorrect);
|
||||||
|
TC_PRINT("mbox_max_channels_get_dt(rx_channel_incorrect): %d\n", ret2);
|
||||||
|
zassert_true(
|
||||||
|
(ret2 > 0),
|
||||||
|
"mbox_max_channels_get_dt(rx_channel_incorrect) shall return value greater than 0"
|
||||||
|
" got unexpected %d",
|
||||||
|
ret2
|
||||||
|
);
|
||||||
|
|
||||||
|
zassert_true(
|
||||||
|
(ret1 == ret2),
|
||||||
|
"mbox_max_channels_get_dt() shall return same value disregarding channel No."
|
||||||
|
" got unexpected %d and %d",
|
||||||
|
ret1,
|
||||||
|
ret2
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void *suite_setup(void)
|
||||||
|
{
|
||||||
|
TC_PRINT("Test executed on %s\n", CONFIG_BOARD_TARGET);
|
||||||
|
TC_PRINT("===================================================================\n");
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ZTEST_SUITE(mbox_error_cases, NULL, suite_setup, NULL, NULL, NULL);
|
Loading…
Add table
Add a link
Reference in a new issue