Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e80aabbc authored by Gabriel Biren's avatar Gabriel Biren Committed by Keir Fraser
Browse files

Revert "Remove dependencies on the HIDL Vendor HAL from"

This reverts commit fc6bd8c5.

Reason for revert: Blocking Wembley team

Bug: 261042084
Test: Local test as in 261042084#comment8
Change-Id: I9103fa8bdcdea48648574f034c51ea8f2b9c25cc
parent fc6bd8c5
Loading
Loading
Loading
Loading
+13 −3
Original line number Diff line number Diff line
@@ -20,10 +20,20 @@ cc_test {
        "libvndksupport",
    ],
    static_libs: [
        "android.hardware.wifi-V1-ndk",
        "android.hardware.wifi.hostapd-V1-ndk",
        "libwifi-system-iface",
        "VtsHalWifiTargetTestUtil",
        "VtsHalWifiV1_0TargetTestUtil",
        "VtsHalWifiV1_5TargetTestUtil",
        "VtsHalWifiHostapdV1_0TargetTestUtil",
        "android.hardware.wifi.hostapd@1.0",
        "android.hardware.wifi.hostapd@1.1",
        "android.hardware.wifi.hostapd@1.2",
        "android.hardware.wifi.hostapd@1.3",
        "android.hardware.wifi@1.0",
        "android.hardware.wifi@1.1",
        "android.hardware.wifi@1.2",
        "android.hardware.wifi@1.3",
        "android.hardware.wifi@1.4",
        "android.hardware.wifi@1.5",
    ],
    test_suites: [
        "general-tests",
+23 −18
Original line number Diff line number Diff line
@@ -13,7 +13,8 @@
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
#include <aidl/android/hardware/wifi/IWifi.h>
#include <android/hardware/wifi/1.0/IWifi.h>
#include <android/hardware/wifi/hostapd/1.3/IHostapd.h>

#include <VtsCoreUtil.h>
#include <aidl/Gtest.h>
@@ -23,11 +24,12 @@
#include <android/binder_manager.h>
#include <binder/IServiceManager.h>
#include <binder/ProcessState.h>
#include <hidl/ServiceManagement.h>
#include <hostapd_hidl_call_util.h>
#include <hostapd_hidl_test_utils.h>
#include <wifi_hidl_test_utils.h>
#include <wifi_hidl_test_utils_1_5.h>

#include "wifi_aidl_test_utils.h"

using aidl::android::hardware::wifi::IWifi;
using aidl::android::hardware::wifi::IWifiApIface;
using aidl::android::hardware::wifi::hostapd::BandMask;
using aidl::android::hardware::wifi::hostapd::BnHostapdCallback;
using aidl::android::hardware::wifi::hostapd::ChannelBandwidth;
@@ -42,8 +44,6 @@ using aidl::android::hardware::wifi::hostapd::NetworkParams;
using android::ProcessState;

namespace {
const std::string kWifiInstanceNameStr = std::string() + IWifi::descriptor + "/default";
const char* kWifiInstanceName = kWifiInstanceNameStr.c_str();
const unsigned char kNwSsid[] = {'t', 'e', 's', 't', '1', '2', '3', '4', '5'};
const std::string kPassphrase = "test12345";
const std::string kInvalidMinPassphrase = "test";
@@ -77,11 +77,15 @@ class HostapdAidl : public testing::TestWithParam<std::string> {
        isBridgedSupport = testing::checkSubstringInCommandOutput(
            "/system/bin/cmd wifi get-softap-supported-features",
            "wifi_softap_bridged_ap_supported");
        const std::vector<std::string> instances = android::hardware::getAllHalInstanceNames(
                ::android::hardware::wifi::V1_0::IWifi::descriptor);
        EXPECT_NE(0, instances.size());
        wifiInstanceName = instances[0];
    }

    virtual void TearDown() override {
        if (getWifi(kWifiInstanceName) != nullptr) {
            stopWifiService(kWifiInstanceName);
        if (getWifi(wifiInstanceName) != nullptr) {
            stopWifi(wifiInstanceName);
        }
        hostapd->terminate();
        //  Wait 3 seconds to allow terminate to complete
@@ -89,23 +93,24 @@ class HostapdAidl : public testing::TestWithParam<std::string> {
    }

    std::shared_ptr<IHostapd> hostapd;
    std::string wifiInstanceName;
    bool isAcsSupport;
    bool isWpa3SaeSupport;
    bool isBridgedSupport;

    std::string setupApIfaceAndGetName(bool isBridged) {
        std::shared_ptr<IWifiApIface> wifi_ap_iface;
        android::sp<::android::hardware::wifi::V1_0::IWifiApIface> wifi_ap_iface;
        if (isBridged) {
            wifi_ap_iface = getBridgedWifiApIface(kWifiInstanceName);
            wifi_ap_iface = getBridgedWifiApIface_1_5(wifiInstanceName);
        } else {
            wifi_ap_iface = getWifiApIface(kWifiInstanceName);
            wifi_ap_iface = getWifiApIface_1_5(wifiInstanceName);
        }
        EXPECT_NE(nullptr, wifi_ap_iface.get());

        std::string ap_iface_name;
        auto status = wifi_ap_iface->getName(&ap_iface_name);
        EXPECT_TRUE(status.isOk());
        return ap_iface_name;
        const auto& status_and_name = HIDL_INVOKE(wifi_ap_iface, getName);
        EXPECT_EQ(android::hardware::wifi::V1_0::WifiStatusCode::SUCCESS,
                  status_and_name.first.code);
        return status_and_name.second;
    }

    IfaceParams getIfaceParamsWithoutAcs(std::string iface_name) {
+33 −6
Original line number Diff line number Diff line
@@ -36,11 +36,20 @@ cc_test {
        "libvndksupport",
    ],
    static_libs: [
        "android.hardware.wifi-V1-ndk",
        "android.hardware.wifi@1.0",
        "android.hardware.wifi@1.1",
        "android.hardware.wifi@1.2",
        "android.hardware.wifi@1.3",
        "android.hardware.wifi@1.4",
        "android.hardware.wifi@1.5",
        "android.hardware.wifi.supplicant@1.0",
        "android.hardware.wifi.supplicant@1.1",
        "android.hardware.wifi.supplicant-V2-ndk",
        "libwifi-system",
        "libwifi-system-iface",
        "VtsHalWifiTargetTestUtil",
        "VtsHalWifiV1_0TargetTestUtil",
        "VtsHalWifiV1_5TargetTestUtil",
        "VtsHalWifiSupplicantV1_0TargetTestUtil",
    ],
    test_suites: [
        "general-tests",
@@ -61,11 +70,20 @@ cc_test {
        "libvndksupport",
    ],
    static_libs: [
        "android.hardware.wifi-V1-ndk",
        "android.hardware.wifi@1.0",
        "android.hardware.wifi@1.1",
        "android.hardware.wifi@1.2",
        "android.hardware.wifi@1.3",
        "android.hardware.wifi@1.4",
        "android.hardware.wifi@1.5",
        "android.hardware.wifi.supplicant@1.0",
        "android.hardware.wifi.supplicant@1.1",
        "android.hardware.wifi.supplicant-V2-ndk",
        "libwifi-system",
        "libwifi-system-iface",
        "VtsHalWifiTargetTestUtil",
        "VtsHalWifiV1_0TargetTestUtil",
        "VtsHalWifiV1_5TargetTestUtil",
        "VtsHalWifiSupplicantV1_0TargetTestUtil",
    ],
    test_suites: [
        "general-tests",
@@ -86,11 +104,20 @@ cc_test {
        "libvndksupport",
    ],
    static_libs: [
        "android.hardware.wifi-V1-ndk",
        "android.hardware.wifi@1.0",
        "android.hardware.wifi@1.1",
        "android.hardware.wifi@1.2",
        "android.hardware.wifi@1.3",
        "android.hardware.wifi@1.4",
        "android.hardware.wifi@1.5",
        "android.hardware.wifi.supplicant@1.0",
        "android.hardware.wifi.supplicant@1.1",
        "android.hardware.wifi.supplicant-V2-ndk",
        "libwifi-system",
        "libwifi-system-iface",
        "VtsHalWifiTargetTestUtil",
        "VtsHalWifiV1_0TargetTestUtil",
        "VtsHalWifiV1_5TargetTestUtil",
        "VtsHalWifiSupplicantV1_0TargetTestUtil",
    ],
    test_suites: [
        "general-tests",
+19 −111
Original line number Diff line number Diff line
@@ -14,18 +14,16 @@
 * limitations under the License.
 */

#pragma once
#ifndef SUPPLICANT_TEST_UTILS_H
#define SUPPLICANT_TEST_UTILS_H

#include <VtsCoreUtil.h>
#include <aidl/android/hardware/wifi/IWifi.h>
#include <android-base/logging.h>
#include <android/hardware/wifi/1.0/IWifi.h>
#include <hidl/ServiceManagement.h>
#include <supplicant_hidl_test_utils.h>
#include <wifi_system/supplicant_manager.h>

#include "wifi_aidl_test_utils.h"

using aidl::android::hardware::wifi::IfaceConcurrencyType;
using aidl::android::hardware::wifi::IWifi;
using aidl::android::hardware::wifi::IWifiChip;
using aidl::android::hardware::wifi::supplicant::IfaceInfo;
using aidl::android::hardware::wifi::supplicant::ISupplicant;
using aidl::android::hardware::wifi::supplicant::ISupplicantP2pIface;
@@ -33,90 +31,6 @@ using aidl::android::hardware::wifi::supplicant::ISupplicantStaIface;
using aidl::android::hardware::wifi::supplicant::KeyMgmtMask;
using android::wifi_system::SupplicantManager;

const std::string kWifiInstanceName = std::string() + IWifi::descriptor + "/default";

// Initialize the driver and firmware to STA mode using the vendor HAL.
void initializeDriverAndFirmware(const std::string& wifi_instance_name) {
    // Skip if wifi instance is not set.
    if (wifi_instance_name == "") {
        return;
    }
    if (getWifi(wifi_instance_name.c_str()) != nullptr) {
        std::shared_ptr<IWifiChip> wifi_chip = getWifiChip(wifi_instance_name.c_str());
        int mode_id;
        EXPECT_TRUE(configureChipToSupportConcurrencyType(wifi_chip, IfaceConcurrencyType::STA,
                                                          &mode_id));
    } else {
        LOG(WARNING) << __func__ << ": Vendor HAL not supported";
    }
}

// Deinitialize the driver and firmware using the vendor HAL.
void deInitializeDriverAndFirmware(const std::string& wifi_instance_name) {
    // Skip if wifi instance is not set.
    if (wifi_instance_name == "") {
        return;
    }
    if (getWifi(wifi_instance_name.c_str()) != nullptr) {
        stopWifiService(wifi_instance_name.c_str());
    } else {
        LOG(WARNING) << __func__ << ": Vendor HAL not supported";
    }
}

bool waitForSupplicantState(bool is_running) {
    SupplicantManager supplicant_manager;
    int count = 50; /* wait at most 5 seconds for completion */
    while (count-- > 0) {
        if (supplicant_manager.IsSupplicantRunning() == is_running) {
            return true;
        }
        usleep(100000);
    }
    LOG(ERROR) << "Supplicant not " << is_running ? "running" : "stopped";
    return false;
}

bool waitForSupplicantStart() {
    return waitForSupplicantState(true);
}

bool waitForSupplicantStop() {
    return waitForSupplicantState(false);
}

bool waitForWifiHalStop(const std::string& wifi_instance_name) {
    std::shared_ptr<IWifi> wifi = getWifi(wifi_instance_name.c_str());
    int count = 50; /* wait at most 5 seconds for completion */
    while (count-- > 0) {
        if (wifi != nullptr) {
            bool started = false;
            auto status = wifi->isStarted(&started);
            if (status.isOk() && !started) {
                return true;
            }
        }
        usleep(100000);
        wifi = getWifi(wifi_instance_name.c_str());
    }
    LOG(ERROR) << "Wifi HAL was not stopped";
    return false;
}

bool waitForFrameworkReady() {
    int waitCount = 15;
    do {
        // Check whether package service is ready or not.
        if (!testing::checkSubstringInCommandOutput("/system/bin/service check package",
                                                    ": not found")) {
            return true;
        }
        LOG(INFO) << "Framework is not ready";
        sleep(1);
    } while (waitCount-- > 0);
    return false;
}

std::string getStaIfaceName() {
    std::array<char, PROPERTY_VALUE_MAX> buffer;
    property_get("wifi.interface", buffer.data(), "wlan0");
@@ -129,6 +43,14 @@ std::string getP2pIfaceName() {
    return std::string(buffer.data());
}

std::string getWifiInstanceName() {
    const std::vector<std::string> instances =
        android::hardware::getAllHalInstanceNames(
            ::android::hardware::wifi::V1_0::IWifi::descriptor);
    EXPECT_NE(0, instances.size());
    return instances.size() != 0 ? instances[0] : "";
}

bool keyMgmtSupported(std::shared_ptr<ISupplicantStaIface> iface,
                      KeyMgmtMask expected) {
    KeyMgmtMask caps;
@@ -146,33 +68,17 @@ bool isFilsSupported(std::shared_ptr<ISupplicantStaIface> iface) {
}

void startSupplicant() {
    initializeDriverAndFirmware(kWifiInstanceName);
    initializeDriverAndFirmware(getWifiInstanceName());
    SupplicantManager supplicant_manager;
    ASSERT_TRUE(supplicant_manager.StartSupplicant());
    ASSERT_TRUE(supplicant_manager.IsSupplicantRunning());
}

void stopSupplicantService() {
    SupplicantManager supplicant_manager;
    ASSERT_TRUE(supplicant_manager.StopSupplicant());
    deInitializeDriverAndFirmware(kWifiInstanceName);
    ASSERT_FALSE(supplicant_manager.IsSupplicantRunning());
}

bool startWifiFramework() {
    std::system("svc wifi enable");
    std::system("cmd wifi set-scan-always-available enabled");
    return waitForSupplicantStart();  // wait for wifi to start.
}

bool stopWifiFramework(const std::string& wifi_instance_name) {
    std::system("svc wifi disable");
    std::system("cmd wifi set-scan-always-available disabled");
    return waitForSupplicantStop() && waitForWifiHalStop(wifi_instance_name);
}
// Wrapper around the implementation in supplicant_hidl_test_util.
void stopSupplicantService() { stopSupplicant(getWifiInstanceName()); }

void initializeService() {
    ASSERT_TRUE(stopWifiFramework(kWifiInstanceName));
    ASSERT_TRUE(stopWifiFramework(getWifiInstanceName()));
    std::system("/system/bin/start");
    ASSERT_TRUE(waitForFrameworkReady());
    stopSupplicantService();
@@ -200,3 +106,5 @@ std::shared_ptr<ISupplicant> getSupplicant(const char* supplicant_name) {
    }
    return supplicant;
}

#endif  // SUPPLICANT_TEST_UTILS_H
 No newline at end of file