blob: a55a4442dae83e182fcfbd188c08f0b3abf4b1a2 [file] [log] [blame]
/* main.c - Application main entry point */
/*
* Copyright (c) 2023-2024 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <stdlib.h>
#include <zephyr/bluetooth/audio/cap.h>
#include <zephyr/fff.h>
#include "bluetooth.h"
#include "cap_commander.h"
#include "conn.h"
#include "expects_util.h"
#include "test_common.h"
DEFINE_FFF_GLOBALS;
static void mock_init_rule_before(const struct ztest_unit_test *test, void *fixture)
{
test_mocks_init();
}
static void mock_destroy_rule_after(const struct ztest_unit_test *test, void *fixture)
{
test_mocks_cleanup();
}
ZTEST_RULE(mock_rule, mock_init_rule_before, mock_destroy_rule_after);
struct cap_commander_test_suite_fixture {
struct bt_conn conns[CONFIG_BT_MAX_CONN];
};
static void cap_commander_test_suite_fixture_init(struct cap_commander_test_suite_fixture *fixture)
{
for (size_t i = 0; i < ARRAY_SIZE(fixture->conns); i++) {
test_conn_init(&fixture->conns[i]);
}
}
static void *cap_commander_test_suite_setup(void)
{
struct cap_commander_test_suite_fixture *fixture;
fixture = malloc(sizeof(*fixture));
zassert_not_null(fixture);
return fixture;
}
static void cap_commander_test_suite_before(void *f)
{
memset(f, 0, sizeof(struct cap_commander_test_suite_fixture));
cap_commander_test_suite_fixture_init(f);
}
static void cap_commander_test_suite_after(void *f)
{
struct cap_commander_test_suite_fixture *fixture = f;
bt_cap_commander_unregister_cb(&mock_cap_commander_cb);
for (size_t i = 0; i < ARRAY_SIZE(fixture->conns); i++) {
mock_bt_conn_disconnected(&fixture->conns[i], BT_HCI_ERR_REMOTE_USER_TERM_CONN);
}
}
static void cap_commander_test_suite_teardown(void *f)
{
free(f);
}
ZTEST_SUITE(cap_commander_test_suite, NULL, cap_commander_test_suite_setup,
cap_commander_test_suite_before, cap_commander_test_suite_after,
cap_commander_test_suite_teardown);
ZTEST_F(cap_commander_test_suite, test_commander_register_cb)
{
int err;
err = bt_cap_commander_register_cb(&mock_cap_commander_cb);
zassert_equal(0, err, "Unexpected return value %d", err);
}
ZTEST_F(cap_commander_test_suite, test_commander_register_cb_inval_param_null)
{
int err;
err = bt_cap_commander_register_cb(NULL);
zassert_equal(-EINVAL, err, "Unexpected return value %d", err);
}
ZTEST_F(cap_commander_test_suite, test_commander_register_cb_inval_double_register)
{
int err;
err = bt_cap_commander_register_cb(&mock_cap_commander_cb);
zassert_equal(0, err, "Unexpected return value %d", err);
err = bt_cap_commander_register_cb(&mock_cap_commander_cb);
zassert_equal(-EALREADY, err, "Unexpected return value %d", err);
}
ZTEST_F(cap_commander_test_suite, test_commander_unregister_cb)
{
int err;
err = bt_cap_commander_register_cb(&mock_cap_commander_cb);
zassert_equal(0, err, "Unexpected return value %d", err);
err = bt_cap_commander_unregister_cb(&mock_cap_commander_cb);
zassert_equal(0, err, "Unexpected return value %d", err);
}
ZTEST_F(cap_commander_test_suite, test_commander_unregister_cb_inval_param_null)
{
int err;
err = bt_cap_commander_unregister_cb(NULL);
zassert_equal(-EINVAL, err, "Unexpected return value %d", err);
}
ZTEST_F(cap_commander_test_suite, test_commander_unregister_cb_inval_double_unregister)
{
int err;
err = bt_cap_commander_register_cb(&mock_cap_commander_cb);
zassert_equal(0, err, "Unexpected return value %d", err);
err = bt_cap_commander_unregister_cb(&mock_cap_commander_cb);
zassert_equal(0, err, "Unexpected return value %d", err);
err = bt_cap_commander_unregister_cb(&mock_cap_commander_cb);
zassert_equal(-EINVAL, err, "Unexpected return value %d", err);
}
ZTEST_F(cap_commander_test_suite, test_commander_discover)
{
int err;
err = bt_cap_commander_register_cb(&mock_cap_commander_cb);
zassert_equal(0, err, "Unexpected return value %d", err);
for (size_t i = 0; i < ARRAY_SIZE(fixture->conns); i++) {
err = bt_cap_commander_discover(&fixture->conns[i]);
zassert_equal(0, err, "Unexpected return value %d", err);
}
zexpect_call_count("bt_cap_commander_cb.discovery_complete", ARRAY_SIZE(fixture->conns),
mock_cap_commander_discovery_complete_cb_fake.call_count);
}
ZTEST_F(cap_commander_test_suite, test_commander_discover_inval_param_null)
{
int err;
err = bt_cap_commander_register_cb(&mock_cap_commander_cb);
zassert_equal(0, err, "Unexpected return value %d", err);
err = bt_cap_commander_discover(NULL);
zassert_equal(-EINVAL, err, "Unexpected return value %d", err);
}