• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2017, 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 <android-base/logging.h>
18 #include <android-base/macros.h>
19 #include <gmock/gmock.h>
20 
21 #undef NAN
22 #include "hidl_struct_util.h"
23 
24 using testing::Test;
25 
26 namespace {
27 constexpr uint32_t kMacId1 = 1;
28 constexpr uint32_t kMacId2 = 2;
29 constexpr uint32_t kIfaceChannel1 = 3;
30 constexpr uint32_t kIfaceChannel2 = 5;
31 constexpr char kIfaceName1[] = "wlan0";
32 constexpr char kIfaceName2[] = "wlan1";
33 }  // namespace
34 namespace android {
35 namespace hardware {
36 namespace wifi {
37 namespace V1_2 {
38 namespace implementation {
39 using namespace android::hardware::wifi::V1_0;
40 
41 class HidlStructUtilTest : public Test {};
42 
TEST_F(HidlStructUtilTest,CanConvertLegacyWifiMacInfosToHidlWithOneMac)43 TEST_F(HidlStructUtilTest, CanConvertLegacyWifiMacInfosToHidlWithOneMac) {
44     std::vector<legacy_hal::WifiMacInfo> legacy_mac_infos;
45     legacy_hal::WifiMacInfo legacy_mac_info1 = {
46         .wlan_mac_id = kMacId1,
47         .mac_band =
48             legacy_hal::WLAN_MAC_5_0_BAND | legacy_hal::WLAN_MAC_2_4_BAND};
49     legacy_hal::WifiIfaceInfo legacy_iface_info1 = {.name = kIfaceName1,
50                                                     .channel = kIfaceChannel1};
51     legacy_hal::WifiIfaceInfo legacy_iface_info2 = {.name = kIfaceName2,
52                                                     .channel = kIfaceChannel2};
53     legacy_mac_info1.iface_infos.push_back(legacy_iface_info1);
54     legacy_mac_info1.iface_infos.push_back(legacy_iface_info2);
55     legacy_mac_infos.push_back(legacy_mac_info1);
56 
57     std::vector<IWifiChipEventCallback::RadioModeInfo> hidl_radio_mode_infos;
58     ASSERT_TRUE(hidl_struct_util::convertLegacyWifiMacInfosToHidl(
59         legacy_mac_infos, &hidl_radio_mode_infos));
60 
61     ASSERT_EQ(1u, hidl_radio_mode_infos.size());
62     auto hidl_radio_mode_info1 = hidl_radio_mode_infos[0];
63     EXPECT_EQ(legacy_mac_info1.wlan_mac_id, hidl_radio_mode_info1.radioId);
64     EXPECT_EQ(WifiBand::BAND_24GHZ_5GHZ, hidl_radio_mode_info1.bandInfo);
65     ASSERT_EQ(2u, hidl_radio_mode_info1.ifaceInfos.size());
66     auto hidl_iface_info1 = hidl_radio_mode_info1.ifaceInfos[0];
67     EXPECT_EQ(legacy_iface_info1.name, hidl_iface_info1.name);
68     EXPECT_EQ(static_cast<uint32_t>(legacy_iface_info1.channel),
69               hidl_iface_info1.channel);
70     auto hidl_iface_info2 = hidl_radio_mode_info1.ifaceInfos[1];
71     EXPECT_EQ(legacy_iface_info2.name, hidl_iface_info2.name);
72     EXPECT_EQ(static_cast<uint32_t>(legacy_iface_info2.channel),
73               hidl_iface_info2.channel);
74 }
75 
TEST_F(HidlStructUtilTest,CanConvertLegacyWifiMacInfosToHidlWithTwoMac)76 TEST_F(HidlStructUtilTest, CanConvertLegacyWifiMacInfosToHidlWithTwoMac) {
77     std::vector<legacy_hal::WifiMacInfo> legacy_mac_infos;
78     legacy_hal::WifiMacInfo legacy_mac_info1 = {
79         .wlan_mac_id = kMacId1, .mac_band = legacy_hal::WLAN_MAC_5_0_BAND};
80     legacy_hal::WifiIfaceInfo legacy_iface_info1 = {.name = kIfaceName1,
81                                                     .channel = kIfaceChannel1};
82     legacy_hal::WifiMacInfo legacy_mac_info2 = {
83         .wlan_mac_id = kMacId2, .mac_band = legacy_hal::WLAN_MAC_2_4_BAND};
84     legacy_hal::WifiIfaceInfo legacy_iface_info2 = {.name = kIfaceName2,
85                                                     .channel = kIfaceChannel2};
86     legacy_mac_info1.iface_infos.push_back(legacy_iface_info1);
87     legacy_mac_infos.push_back(legacy_mac_info1);
88     legacy_mac_info2.iface_infos.push_back(legacy_iface_info2);
89     legacy_mac_infos.push_back(legacy_mac_info2);
90 
91     std::vector<IWifiChipEventCallback::RadioModeInfo> hidl_radio_mode_infos;
92     ASSERT_TRUE(hidl_struct_util::convertLegacyWifiMacInfosToHidl(
93         legacy_mac_infos, &hidl_radio_mode_infos));
94 
95     ASSERT_EQ(2u, hidl_radio_mode_infos.size());
96 
97     // Find mac info 1.
98     const auto hidl_radio_mode_info1 = std::find_if(
99         hidl_radio_mode_infos.begin(), hidl_radio_mode_infos.end(),
100         [&legacy_mac_info1](const IWifiChipEventCallback::RadioModeInfo& x) {
101             return x.radioId == legacy_mac_info1.wlan_mac_id;
102         });
103     ASSERT_NE(hidl_radio_mode_infos.end(), hidl_radio_mode_info1);
104     EXPECT_EQ(WifiBand::BAND_5GHZ, hidl_radio_mode_info1->bandInfo);
105     ASSERT_EQ(1u, hidl_radio_mode_info1->ifaceInfos.size());
106     auto hidl_iface_info1 = hidl_radio_mode_info1->ifaceInfos[0];
107     EXPECT_EQ(legacy_iface_info1.name, hidl_iface_info1.name);
108     EXPECT_EQ(static_cast<uint32_t>(legacy_iface_info1.channel),
109               hidl_iface_info1.channel);
110 
111     // Find mac info 2.
112     const auto hidl_radio_mode_info2 = std::find_if(
113         hidl_radio_mode_infos.begin(), hidl_radio_mode_infos.end(),
114         [&legacy_mac_info2](const IWifiChipEventCallback::RadioModeInfo& x) {
115             return x.radioId == legacy_mac_info2.wlan_mac_id;
116         });
117     ASSERT_NE(hidl_radio_mode_infos.end(), hidl_radio_mode_info2);
118     EXPECT_EQ(WifiBand::BAND_24GHZ, hidl_radio_mode_info2->bandInfo);
119     ASSERT_EQ(1u, hidl_radio_mode_info2->ifaceInfos.size());
120     auto hidl_iface_info2 = hidl_radio_mode_info2->ifaceInfos[0];
121     EXPECT_EQ(legacy_iface_info2.name, hidl_iface_info2.name);
122     EXPECT_EQ(static_cast<uint32_t>(legacy_iface_info2.channel),
123               hidl_iface_info2.channel);
124 }
125 }  // namespace implementation
126 }  // namespace V1_2
127 }  // namespace wifi
128 }  // namespace hardware
129 }  // namespace android
130