blob: 9420f324fd6d6200d8f42f904665cbd990978613 [file] [log] [blame]
/* Copyright (c) 2023 Nordic Semiconductor ASA
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/bluetooth/addr.h>
#include <zephyr/ztest.h>
ZTEST_SUITE(bt_addr_from_str, NULL, NULL, NULL, NULL, NULL);
ZTEST(bt_addr_from_str, test_reject_empty_string)
{
char *addr_str = "";
bt_addr_t a;
zassert_equal(bt_addr_from_str(addr_str, &a), -EINVAL);
}
ZTEST(bt_addr_from_str, test_reject_missing_octet)
{
char *addr_str = "ab:ab:ab:ab:ab";
bt_addr_t a;
zassert_equal(bt_addr_from_str(addr_str, &a), -EINVAL);
}
ZTEST(bt_addr_from_str, test_reject_empty_octet)
{
char *addr_str = "ab:ab:ab:ab::ab";
bt_addr_t a;
zassert_equal(bt_addr_from_str(addr_str, &a), -EINVAL);
}
ZTEST(bt_addr_from_str, test_reject_short_octet)
{
char *addr_str = "ab:ab:ab:ab:b:ab";
bt_addr_t a;
zassert_equal(bt_addr_from_str(addr_str, &a), -EINVAL);
}
ZTEST(bt_addr_from_str, test_reject_trailing_colon)
{
char *addr_str = "ab:ab:ab:ab:ab:ab:";
bt_addr_t a;
zassert_equal(bt_addr_from_str(addr_str, &a), -EINVAL);
}
ZTEST(bt_addr_from_str, test_reject_octet_colon_a)
{
char *addr_str = "ab:ab:ab:ab:a::ab";
bt_addr_t a;
zassert_equal(bt_addr_from_str(addr_str, &a), -EINVAL);
}
ZTEST(bt_addr_from_str, test_reject_octet_colon_b)
{
char *addr_str = "ab:ab:ab:ab::b:ab";
bt_addr_t a;
zassert_equal(bt_addr_from_str(addr_str, &a), -EINVAL);
}
ZTEST(bt_addr_from_str, test_reject_octet_space_a)
{
char *addr_str = "ab:ab:ab:ab: b:ab";
bt_addr_t a;
zassert_equal(bt_addr_from_str(addr_str, &a), -EINVAL);
}
ZTEST(bt_addr_from_str, test_reject_octet_space_b)
{
char *addr_str = "ab:ab:ab:ab:a :ab";
bt_addr_t a;
zassert_equal(bt_addr_from_str(addr_str, &a), -EINVAL);
}
ZTEST(bt_addr_from_str, test_reject_extra_space_before)
{
char *addr_str = " 00:00:00:00:00:00";
bt_addr_t a;
zassert_equal(bt_addr_from_str(addr_str, &a), -EINVAL);
}
ZTEST(bt_addr_from_str, test_reject_extra_space_after)
{
char *addr_str = "00:00:00:00:00:00 ";
bt_addr_t a;
zassert_equal(bt_addr_from_str(addr_str, &a), -EINVAL);
}
ZTEST(bt_addr_from_str, test_reject_replace_space_first)
{
char *addr_str = " 0:00:00:00:00:00";
bt_addr_t a;
zassert_equal(bt_addr_from_str(addr_str, &a), -EINVAL);
}
ZTEST(bt_addr_from_str, test_reject_replace_colon_first)
{
char *addr_str = ":0:00:00:00:00:00";
bt_addr_t a;
zassert_equal(bt_addr_from_str(addr_str, &a), -EINVAL);
}
ZTEST(bt_addr_from_str, test_reject_non_hex)
{
char *addr_str = "00:00:00:00:g0:00";
bt_addr_t a;
zassert_equal(bt_addr_from_str(addr_str, &a), -EINVAL);
}
ZTEST(bt_addr_from_str, test_reject_bad_colon)
{
char *addr_str = "00.00:00:00:00:00";
bt_addr_t a;
zassert_equal(bt_addr_from_str(addr_str, &a), -EINVAL);
}
ZTEST(bt_addr_from_str, test_order)
{
char *addr_str = "01:02:03:04:05:06";
bt_addr_t a;
bt_addr_t b = {{6, 5, 4, 3, 2, 1}};
zassert_equal(bt_addr_from_str(addr_str, &a), 0);
zassert_true(bt_addr_eq(&a, &b));
}
ZTEST(bt_addr_from_str, test_hex_case_equal)
{
char *addr_str_a = "ab:cd:ef:00:00:00";
char *addr_str_b = "AB:CD:EF:00:00:00";
bt_addr_t a;
bt_addr_t b;
zassert_equal(bt_addr_from_str(addr_str_a, &a), 0);
zassert_equal(bt_addr_from_str(addr_str_b, &b), 0);
zassert_true(bt_addr_eq(&a, &b));
}
ZTEST(bt_addr_from_str, test_hex_case_not_equal)
{
char *addr_str_a = "aa:aa:aa:00:00:00";
char *addr_str_b = "bb:bb:bb:00:00:00";
bt_addr_t a;
bt_addr_t b;
zassert_equal(bt_addr_from_str(addr_str_a, &a), 0);
zassert_equal(bt_addr_from_str(addr_str_b, &b), 0);
zassert_false(bt_addr_eq(&a, &b));
}