1 /*
2  * Copyright (C) 2023 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #include "stack/btm/sco_pkt_status.h"
18 
19 #include <gtest/gtest.h>
20 
21 namespace {
22 
23 using testing::Test;
24 
25 class ScoPktStatusTest : public Test {
26 public:
27 protected:
SetUp()28   void SetUp() override {}
TearDown()29   void TearDown() override {}
30 };
31 
TEST_F(ScoPktStatusTest,Update)32 TEST_F(ScoPktStatusTest, Update) {
33   tBTM_SCO_PKT_STATUS pkt_status;
34   pkt_status.init();
35   pkt_status.update(true);
36   ASSERT_NE(pkt_status.begin_ts_raw_us(), (uint64_t)0);
37   ASSERT_EQ(pkt_status.end_ts_raw_us(), pkt_status.begin_ts_raw_us() + 7500);
38   ASSERT_EQ(pkt_status.data_to_hex_string(), "01");
39   ASSERT_EQ(pkt_status.data_to_binary_string(), "1");
40 }
41 
TEST_F(ScoPktStatusTest,data_to_string)42 TEST_F(ScoPktStatusTest, data_to_string) {
43   bool pl[9] = {1, 0, 1, 1, 0, 1, 1, 1, 1};
44   tBTM_SCO_PKT_STATUS pkt_status;
45   pkt_status.init();
46   for (bool b : pl) {
47     pkt_status.update(b);
48   }
49   ASSERT_EQ(pkt_status.data_to_binary_string(), "101101111");
50   ASSERT_EQ(pkt_status.data_to_hex_string(), "ed01");
51 }
52 
TEST_F(ScoPktStatusTest,data_full)53 TEST_F(ScoPktStatusTest, data_full) {
54   bool pl[BTM_PKT_STATUS_LEN * 8] = {
55           1, 1, 1, 1, 1, 1, 1, 1, /* ff */
56           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
57           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
58           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
59           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
60           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
61           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
62           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
63           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
64           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
65           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
66           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
67           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
68           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
69           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
70           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
71           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
72           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
73           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
74           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
75           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
76           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
77           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
78           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
79           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
80           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
81           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
82           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
83           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
84           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
85           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
86           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
87           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
88           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
89           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
90           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
91           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
92           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
93           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
94           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
95           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
96           0, 0, 0, 0, 0, 0, 0, 0, /* 00 */
97           0, 0, 0, 1, 1, 1, 1, 1, /* f8 */
98           1, 1, 1, 1, 1, 1, 1, 1, /* ff */
99           1, 1, 1, 1, 1, 1, 1, 1, /* ff */
100           1, 1, 1, 1, 1, 1, 1, 1, /* ff */
101           1, 1, 1, 1, 1, 1, 1, 1, /* ff */
102           1, 1, 1, 1, 1, 1, 1, 1, /* ff */
103           1, 1, 1, 1, 1, 1, 1, 1, /* ff */
104           1, 1, 1, 1, 1, 1, 1, 1, /* ff */
105           1, 1, 1, 1, 1, 1, 1, 1, /* ff */
106           1, 1, 1, 1, 1, 1, 1, 1, /* ff */
107           1, 1, 1, 1, 1, 1, 1, 1, /* ff */
108           1, 1, 1, 1, 1, 1, 1, 1, /* ff */
109           1, 1, 1, 1, 1, 1, 1, 1, /* ff */
110           1, 1, 1, 1, 1, 1, 1, 1, /* ff */
111           1, 1, 1, 1, 1, 1, 1, 1, /* ff */
112           1, 1, 1, 1, 1, 1, 1, 1, /* ff */
113           1, 1, 1, 1, 1, 1, 1, 1, /* ff */
114           1, 1, 1, 1, 1, 1, 1, 1, /* ff */
115           1, 1, 1, 1, 1, 1, 1, 1, /* ff */
116           1, 1, 1, 1, 1, 1, 1, 1, /* ff */
117           1, 1, 1, 1, 1, 1, 1, 0, /* 7f */
118           0, 0, 0, 0, 0, 0, 0, 0  /* 00 */
119   };
120   tBTM_SCO_PKT_STATUS pkt_status;
121   pkt_status.init();
122   for (bool b : pl) {
123     pkt_status.update(b);
124   }
125   ASSERT_EQ(pkt_status.data_to_binary_string(),
126             "111111110000000000000000000000000000000000000000000000000000000000"
127             "000000000000000000000000000000000000000000000000000000000000000000"
128             "000000000000000000000000000000000000000000000000000000000000000000"
129             "000000000000000000000000000000000000000000000000000000000000000000"
130             "000000000000000000000000000000000000000000000000000000000000000000"
131             "000000000111111111111111111111111111111111111111111111111111111111"
132             "111111111111111111111111111111111111111111111111111111111111111111"
133             "11111111111111111111111111111111111111111000000000");
134   uint64_t begin_ts_raw_us = pkt_status.begin_ts_raw_us();
135   ASSERT_EQ(pkt_status.data_to_hex_string(),
136             "ff0000000000000000000000000000000000000000000000000000000000000000"
137             "000000000000000000f8ffffffffffffffffffffffffffffffffffffff7f00");
138   pkt_status.update(true);
139   ASSERT_NE(begin_ts_raw_us, pkt_status.begin_ts_raw_us());
140   ASSERT_EQ(pkt_status.end_ts_raw_us(),
141             pkt_status.begin_ts_raw_us() + BTM_PKT_STATUS_WBS_FRAME_US * BTM_PKT_STATUS_LEN * 8);
142   ASSERT_EQ(pkt_status.data_to_binary_string(),
143             "11111110000000000000000000000000000000000000000000000000000000000"
144             "000000000000000000000000000000000000000000000000000000000000000000"
145             "000000000000000000000000000000000000000000000000000000000000000000"
146             "000000000000000000000000000000000000000000000000000000000000000000"
147             "000000000000000000000000000000000000000000000000000000000000000000"
148             "000000000111111111111111111111111111111111111111111111111111111111"
149             "111111111111111111111111111111111111111111111111111111111111111111"
150             "111111111111111111111111111111111111111110000000001");
151   ASSERT_EQ(pkt_status.data_to_hex_string(),
152             "fe0000000000000000000000000000000000000000000000000000000000000000"
153             "000000000000000000f9ffffffffffffffffffffffffffffffffffffff7e01");
154 }
155 
156 }  // namespace
157