Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2f945a39 authored by Chris Manton's avatar Chris Manton
Browse files

Add bd_name utilities

Bug: 277389348
Test: net_test_types64

Change-Id: I19fd28910d2744fd12eb68c666788ff61a95373e
parent 6aec0a74
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -56,4 +56,21 @@ inline size_t bd_name_copy(BD_NAME bd_name_dest, const BD_NAME bd_name_src) {
  return strlcpy(reinterpret_cast<char*>(bd_name_dest),
                 reinterpret_cast<const char*>(bd_name_src), kBdNameLength + 1);
}
inline void bd_name_clear(BD_NAME bd_name) { *bd_name = {0}; }
inline bool bd_name_is_empty(const BD_NAME bd_name) {
  return bd_name[0] == '\0';
}

inline void bd_name_from_char_pointer(BD_NAME bd_name_dest,
                                      const char* bd_name_char) {
  if (bd_name_char != nullptr) {
    strlcpy(reinterpret_cast<char*>(bd_name_dest), bd_name_char,
            kBdNameLength + 1);
  }
}
inline bool bd_name_is_equal(const BD_NAME bd_name1, const BD_NAME bd_name2) {
  return memcmp(reinterpret_cast<void*>(const_cast<uint8_t*>(bd_name1)),
                reinterpret_cast<void*>(const_cast<uint8_t*>(bd_name2)),
                kBdNameLength + 1) == 0;
}
#endif
+5 −1
Original line number Diff line number Diff line
@@ -58,7 +58,10 @@ cc_library_static {

cc_test {
    name: "net_test_types",
    static_libs: ["libchrome"],
    static_libs: [
        "libchrome",
        "libosi", // strlcpy
    ],
    test_suites: ["device-tests"],
    defaults: [
        "bluetooth_gtest_x86_asan_workaround",
@@ -72,6 +75,7 @@ cc_test {
    srcs: [
        "test/ble_address_with_type_unittest.cc",
        "test/bluetooth/uuid_unittest.cc",
        "test/bt_name_test.cc",
        "test/class_of_device_unittest.cc",
        "test/raw_address_unittest.cc",
    ],
+93 −0
Original line number Diff line number Diff line
/*
 * Copyright 2023 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "stack/include/bt_name.h"

#include <gtest/gtest.h>

TEST(BtNameTest, new_name) {
  BD_NAME bd_name1 = {};
  bd_name_from_char_pointer(bd_name1, "ATestName");

  BD_NAME bd_name2 = {};
  bd_name_from_char_pointer(bd_name2, "ATestName");

  BD_NAME bd_name3 = {};
  bd_name_from_char_pointer(bd_name3, "ADifferentTestName");

  ASSERT_TRUE(bd_name_is_equal(bd_name1, bd_name2));
  ASSERT_FALSE(bd_name_is_equal(bd_name1, bd_name3));
}

TEST(BtNameTest, new_name_nullptr) {
  BD_NAME bd_name1 = {0};
  bd_name_from_char_pointer(bd_name1, nullptr);
  ASSERT_TRUE(bd_name_is_empty(bd_name1));

  BD_NAME bd_name2 = {};
  bd_name_from_char_pointer(bd_name2, "ARealTestName");
  bd_name_from_char_pointer(bd_name2, nullptr);
  ASSERT_FALSE(bd_name_is_empty(bd_name2));
}

TEST(BtNameTest, clear) {
  BD_NAME bd_name = {};
  bd_name_from_char_pointer(bd_name, "ATestName");

  bd_name_clear(bd_name);
  ASSERT_TRUE(bd_name_is_empty(bd_name));
}

TEST(BtNameTest, copy_name) {
  BD_NAME bd_name1 = {};
  bd_name_from_char_pointer(bd_name1, "OldName");

  BD_NAME bd_name2 = {};
  bd_name_from_char_pointer(bd_name2, "ATestName");

  const size_t len = bd_name_copy(bd_name1, bd_name2);

  ASSERT_EQ(strlen(reinterpret_cast<const char*>(bd_name2)), len);
  ASSERT_TRUE(bd_name_is_equal(bd_name1, bd_name2));
}

TEST(BtNameTest, copy_name_max_chars) {
  BD_NAME bd_name1 = {};
  std::string s(kBdNameLength, 'a');
  s.replace(kBdNameLength - 1, 1, std::string("b"));
  bd_name_from_char_pointer(bd_name1, s.data());
  ASSERT_EQ('\0', bd_name1[kBdNameLength]);

  BD_NAME bd_name2 = {};

  const size_t len = bd_name_copy(bd_name2, bd_name1);
  ASSERT_EQ('\0', bd_name2[kBdNameLength]);
  ASSERT_EQ('b', bd_name2[kBdNameLength - 1]);

  ASSERT_EQ(strlen(reinterpret_cast<const char*>(bd_name1)), len);
  ASSERT_EQ(kBdNameLength, len);
  ASSERT_TRUE(bd_name_is_equal(bd_name1, bd_name2));
}

TEST(BtNameTest, too_many_characters) {
  std::string s(kBdNameLength + 1, 'a');
  BD_NAME bd_name1 = {};
  bd_name_from_char_pointer(bd_name1, s.data());
  ASSERT_EQ('\0', bd_name1[kBdNameLength]);

  ASSERT_EQ(kBdNameLength + 1, s.length());
  ASSERT_EQ(kBdNameLength, strlen(reinterpret_cast<const char*>(bd_name1)));
}