Skip to content

Commit

Permalink
Bluetooth: Host: Test: bt_addr_from_str
Browse files Browse the repository at this point in the history
Some basic tests for `bt_addr_from_str`. This proves a bug.

Signed-off-by: Aleksander Wasaznik <aleksander.wasaznik@nordicsemi.no>
  • Loading branch information
alwa-nordic authored and nashif committed Jun 5, 2023
1 parent 74e98d5 commit 75bb62a
Show file tree
Hide file tree
Showing 2 changed files with 163 additions and 0 deletions.
1 change: 1 addition & 0 deletions tests/bluetooth/addr/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@ project(app)

target_sources(app PRIVATE
src/test_bt_addr_le_eq.c
src/test_bt_addr_from_str.c
)
162 changes: 162 additions & 0 deletions tests/bluetooth/addr/src/test_bt_addr_from_str.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
/* 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));
}

0 comments on commit 75bb62a

Please sign in to comment.