Home | History | Annotate | Download | only in tests
      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