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 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 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