1/******************************************************************************
2 *
3 *  Copyright (C) 2017 The Android Open Source Project
4 *
5 *  Licensed under the Apache License, Version 2.0 (the "License");
6 *  you may not use this file except in compliance with the License.
7 *  You may obtain a copy of the License at:
8 *
9 *  http://www.apache.org/licenses/LICENSE-2.0
10 *
11 *  Unless required by applicable law or agreed to in writing, software
12 *  distributed under the License is distributed on an "AS IS" BASIS,
13 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 *  See the License for the specific language governing permissions and
15 *  limitations under the License.
16 *
17 ******************************************************************************/
18
19#include <gtest/gtest.h>
20
21#include "raw_address.h"
22
23static const char* test_addr = "12:34:56:78:9a:bc";
24static const char* test_addr2 = "cb:a9:87:65:43:21";
25
26TEST(RawAddressUnittest, test_is_empty) {
27  RawAddress empty;
28  RawAddress::FromString("00:00:00:00:00:00", empty);
29  ASSERT_TRUE(empty.IsEmpty());
30
31  RawAddress not_empty;
32  RawAddress::FromString("00:00:00:00:00:01", not_empty);
33  ASSERT_FALSE(not_empty.IsEmpty());
34}
35
36TEST(RawAddressUnittest, test_to_from_str) {
37  RawAddress bdaddr;
38  RawAddress::FromString(test_addr, bdaddr);
39
40  ASSERT_EQ(0x12, bdaddr.address[0]);
41  ASSERT_EQ(0x34, bdaddr.address[1]);
42  ASSERT_EQ(0x56, bdaddr.address[2]);
43  ASSERT_EQ(0x78, bdaddr.address[3]);
44  ASSERT_EQ(0x9A, bdaddr.address[4]);
45  ASSERT_EQ(0xBC, bdaddr.address[5]);
46
47  std::string ret = bdaddr.ToString();
48
49  ASSERT_STREQ(test_addr, ret.c_str());
50}
51
52TEST(RawAddressTest, test_equals) {
53  RawAddress bdaddr1;
54  RawAddress bdaddr2;
55  RawAddress bdaddr3;
56  RawAddress::FromString(test_addr, bdaddr1);
57  RawAddress::FromString(test_addr, bdaddr2);
58  EXPECT_TRUE(bdaddr1 == bdaddr2);
59  EXPECT_FALSE(bdaddr1 != bdaddr2);
60  EXPECT_TRUE(bdaddr1 == bdaddr1);
61  EXPECT_FALSE(bdaddr1 != bdaddr1);
62
63  RawAddress::FromString(test_addr2, bdaddr3);
64  EXPECT_FALSE(bdaddr2 == bdaddr3);
65  EXPECT_TRUE(bdaddr2 != bdaddr3);
66}
67
68TEST(RawAddressTest, test_less_than) {
69  RawAddress bdaddr1;
70  RawAddress bdaddr2;
71  RawAddress bdaddr3;
72  RawAddress::FromString(test_addr, bdaddr1);
73  RawAddress::FromString(test_addr, bdaddr2);
74  EXPECT_FALSE(bdaddr1 < bdaddr2);
75  EXPECT_FALSE(bdaddr1 < bdaddr1);
76
77  RawAddress::FromString(test_addr2, bdaddr3);
78  EXPECT_TRUE(bdaddr2 < bdaddr3);
79  EXPECT_FALSE(bdaddr3 < bdaddr2);
80}
81
82TEST(RawAddressTest, test_more_than) {
83  RawAddress bdaddr1;
84  RawAddress bdaddr2;
85  RawAddress bdaddr3;
86  RawAddress::FromString(test_addr, bdaddr1);
87  RawAddress::FromString(test_addr, bdaddr2);
88  EXPECT_FALSE(bdaddr1 > bdaddr2);
89  EXPECT_FALSE(bdaddr1 > bdaddr1);
90
91  RawAddress::FromString(test_addr2, bdaddr3);
92  EXPECT_FALSE(bdaddr2 > bdaddr3);
93  EXPECT_TRUE(bdaddr3 > bdaddr2);
94}
95
96TEST(RawAddressTest, test_less_than_or_equal) {
97  RawAddress bdaddr1;
98  RawAddress bdaddr2;
99  RawAddress bdaddr3;
100  RawAddress::FromString(test_addr, bdaddr1);
101  RawAddress::FromString(test_addr, bdaddr2);
102  EXPECT_TRUE(bdaddr1 <= bdaddr2);
103  EXPECT_TRUE(bdaddr1 <= bdaddr1);
104
105  RawAddress::FromString(test_addr2, bdaddr3);
106  EXPECT_TRUE(bdaddr2 <= bdaddr3);
107  EXPECT_FALSE(bdaddr3 <= bdaddr2);
108}
109
110TEST(RawAddressTest, test_more_than_or_equal) {
111  RawAddress bdaddr1;
112  RawAddress bdaddr2;
113  RawAddress bdaddr3;
114  RawAddress::FromString(test_addr, bdaddr1);
115  RawAddress::FromString(test_addr, bdaddr2);
116  EXPECT_TRUE(bdaddr1 >= bdaddr2);
117  EXPECT_TRUE(bdaddr1 >= bdaddr1);
118
119  RawAddress::FromString(test_addr2, bdaddr3);
120  EXPECT_FALSE(bdaddr2 >= bdaddr3);
121  EXPECT_TRUE(bdaddr3 >= bdaddr2);
122}
123
124TEST(RawAddressTest, test_copy) {
125  RawAddress bdaddr1;
126  RawAddress bdaddr2;
127  RawAddress::FromString(test_addr, bdaddr1);
128  bdaddr2 = bdaddr1;
129
130  EXPECT_TRUE(bdaddr1 == bdaddr2);
131}
132
133TEST(RawAddressTest, IsValidAddress) {
134  EXPECT_FALSE(RawAddress::IsValidAddress(""));
135  EXPECT_FALSE(RawAddress::IsValidAddress("000000000000"));
136  EXPECT_FALSE(RawAddress::IsValidAddress("00:00:00:00:0000"));
137  EXPECT_FALSE(RawAddress::IsValidAddress("00:00:00:00:00:0"));
138  EXPECT_FALSE(RawAddress::IsValidAddress("00:00:00:00:00:0;"));
139  EXPECT_TRUE(RawAddress::IsValidAddress("00:00:00:00:00:00"));
140  EXPECT_TRUE(RawAddress::IsValidAddress("AB:cd:00:00:00:00"));
141  EXPECT_FALSE(RawAddress::IsValidAddress("aB:cD:eF:Gh:iJ:Kl"));
142}
143
144TEST(RawAddressTest, BdAddrFromString) {
145  RawAddress addr;
146  memset(&addr, 0, sizeof(addr));
147
148  EXPECT_TRUE(RawAddress::FromString("00:00:00:00:00:00", addr));
149  const RawAddress result0 = {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
150  EXPECT_EQ(0, memcmp(&addr, &result0, sizeof(addr)));
151
152  EXPECT_TRUE(RawAddress::FromString("ab:01:4C:d5:21:9f", addr));
153  const RawAddress result1 = {{0xab, 0x01, 0x4c, 0xd5, 0x21, 0x9f}};
154  EXPECT_EQ(0, memcmp(&addr, &result1, sizeof(addr)));
155}
156