blob: 5744c50339b812c147a2e2e9ecedf55eec6f33b8 [file] [log] [blame]
/*
* Copyright (c) 2022 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/
#include "mocks/id.h"
#include "mocks/id_expects.h"
#include "mocks/keys_help_utils.h"
#include "testing_common_defs.h"
#include <zephyr/bluetooth/bluetooth.h>
#include <zephyr/fff.h>
#include <zephyr/kernel.h>
DEFINE_FFF_GLOBALS;
static void tc_setup(void *f)
{
/* Clear keys pool */
clear_key_pool();
/* Register resets */
ID_FFF_FAKES_LIST(RESET_FAKE);
}
ZTEST_SUITE(bt_keys_clear_keys_with_state_not_set, NULL, NULL, tc_setup, NULL, NULL);
ZTEST_SUITE(bt_keys_clear_keys_with_state_set, NULL, NULL, tc_setup, NULL, NULL);
/*
* Clear an existing key and verify the result while 'BT_KEYS_ID_ADDED' state isn't set.
* As 'BT_KEYS_ID_ADDED' isn't set, bt_id_del() shouldn't be called.
*
* Constraints:
* - Key reference points to a valid item
*
* Expected behaviour:
* - The key content is cleared
* - bt_id_del() isn't called
*/
ZTEST(bt_keys_clear_keys_with_state_not_set, test_key_cleared_bt_id_del_not_called)
{
struct bt_keys empty_key;
struct bt_keys *key_ref_to_clear, *find_returned_ref;
uint8_t id = BT_ADDR_ID_0;
bt_addr_le_t *addr = BT_ADDR_LE_1;
if (IS_ENABLED(CONFIG_BT_SETTINGS)) {
ztest_test_skip();
}
memset(&empty_key, 0x00, sizeof(struct bt_keys));
/* Add custom item to the keys pool */
key_ref_to_clear = bt_keys_get_addr(id, addr);
zassert_true(key_ref_to_clear != NULL, "bt_keys_get_addr() returned a non-valid reference");
/* Ensure that item exists in the keys pool */
find_returned_ref = bt_keys_find_addr(id, addr);
zassert_true(find_returned_ref != NULL, "bt_keys_find_addr() returned a NULL reference");
bt_keys_clear(key_ref_to_clear);
expect_not_called_bt_id_del();
/* Verify that memory was cleared */
zassert_mem_equal(key_ref_to_clear, &empty_key, sizeof(struct bt_keys),
"Key content wasn't cleared by 'bt_keys_clear()'");
/* Ensure that item doesn't exist in the keys pool after calling bt_keys_clear() */
find_returned_ref = bt_keys_find_addr(id, addr);
zassert_true(find_returned_ref == NULL,
"bt_keys_find_addr() returned a non-NULL reference");
}
/*
* Clear an existing key and verify the result while 'BT_KEYS_ID_ADDED' state is set.
* As 'BT_KEYS_ID_ADDED' is set, bt_id_del() should be called.
*
* Constraints:
* - Key reference points to a valid item
*
* Expected behaviour:
* - The key content is cleared
* - bt_id_del() is called with correct key reference
*/
ZTEST(bt_keys_clear_keys_with_state_set, test_key_cleared_bt_id_del_called)
{
struct bt_keys empty_key;
struct bt_keys *key_ref_to_clear, *find_returned_ref;
uint8_t id = BT_ADDR_ID_0;
bt_addr_le_t *addr = BT_ADDR_LE_1;
if (IS_ENABLED(CONFIG_BT_SETTINGS)) {
ztest_test_skip();
}
memset(&empty_key, 0x00, sizeof(struct bt_keys));
/* Add custom item to the keys pool */
key_ref_to_clear = bt_keys_get_addr(id, addr);
zassert_true(key_ref_to_clear != NULL, "bt_keys_get_addr() returned a non-valid reference");
/* Ensure that item exists in the keys pool */
find_returned_ref = bt_keys_find_addr(id, addr);
zassert_true(find_returned_ref != NULL, "bt_keys_find_addr() returned a NULL reference");
key_ref_to_clear->state = BT_KEYS_ID_ADDED;
bt_keys_clear(key_ref_to_clear);
expect_single_call_bt_id_del(key_ref_to_clear);
/* Verify that memory was cleared */
zassert_mem_equal(key_ref_to_clear, &empty_key, sizeof(struct bt_keys),
"Key content wasn't cleared by 'bt_keys_clear()'");
/* Ensure that item doesn't exist in the keys pool after calling bt_keys_clear() */
find_returned_ref = bt_keys_find_addr(id, addr);
zassert_true(find_returned_ref == NULL,
"bt_keys_find_addr() returned a non-NULL reference");
}