Merge "Finish IRadio 1.6/IRadioConfig 1.3 AIDL VTS"

This commit is contained in:
Sarah Chin
2022-01-05 00:09:12 +00:00
committed by Android (Google) Code Review
32 changed files with 432 additions and 136 deletions

View File

@@ -29,6 +29,9 @@ cc_test {
],
srcs: [
"radio_aidl_hal_utils.cpp",
"radio_config_indication.cpp",
"radio_config_response.cpp",
"radio_config_test.cpp",
"radio_data_indication.cpp",
"radio_data_response.cpp",
"radio_data_test.cpp",

View File

@@ -16,6 +16,7 @@
#include <android/binder_process.h>
#include "radio_config_utils.h"
#include "radio_data_utils.h"
#include "radio_messaging_utils.h"
#include "radio_modem_utils.h"
@@ -23,6 +24,12 @@
#include "radio_sim_utils.h"
#include "radio_voice_utils.h"
GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(RadioConfigTest);
INSTANTIATE_TEST_SUITE_P(
PerInstance, RadioConfigTest,
testing::ValuesIn(android::getAidlHalInstanceNames(IRadioConfig::descriptor)),
android::PrintInstanceNameToString);
GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(RadioDataTest);
INSTANTIATE_TEST_SUITE_P(
PerInstance, RadioDataTest,

View File

@@ -18,12 +18,14 @@
#include "radio_aidl_hal_utils.h"
#include <iostream>
#include "VtsCoreUtil.h"
using namespace aidl::android::hardware::radio::network;
#include "radio_config_utils.h"
#include "radio_sim_utils.h"
#define WAIT_TIMEOUT_PERIOD 75
aidl::android::hardware::radio::sim::CardStatus cardStatus = {};
sim::CardStatus cardStatus = {};
int serial = 0;
int count_ = 0;
int GetRandomSerialNumber() {
return rand();
@@ -103,23 +105,33 @@ bool isVoiceEmergencyOnly(RegState state) {
RegState::UNKNOWN_EM == state;
}
bool stringEndsWith(std::string const& string, std::string const& end) {
if (string.size() >= end.size()) {
return (0 == string.compare(string.size() - end.size() - 1, end.size(), end));
} else {
return false;
}
}
bool isServiceValidForDeviceConfiguration(std::string& serviceName) {
if (isSsSsEnabled()) {
// Device is configured as SSSS.
if (serviceName != RADIO_SERVICE_SLOT1_NAME) {
if (stringEndsWith(serviceName, RADIO_SERVICE_SLOT1_NAME)) {
ALOGI("%s instance is not valid for SSSS device.", serviceName.c_str());
return false;
}
} else if (isDsDsEnabled()) {
// Device is configured as DSDS.
if (serviceName != RADIO_SERVICE_SLOT1_NAME && serviceName != RADIO_SERVICE_SLOT2_NAME) {
if (!stringEndsWith(serviceName, RADIO_SERVICE_SLOT1_NAME) &&
!stringEndsWith(serviceName, RADIO_SERVICE_SLOT2_NAME)) {
ALOGI("%s instance is not valid for DSDS device.", serviceName.c_str());
return false;
}
} else if (isTsTsEnabled()) {
// Device is configured as TSTS.
if (serviceName != RADIO_SERVICE_SLOT1_NAME && serviceName != RADIO_SERVICE_SLOT2_NAME &&
serviceName != RADIO_SERVICE_SLOT3_NAME) {
if (!stringEndsWith(serviceName, RADIO_SERVICE_SLOT1_NAME) &&
!stringEndsWith(serviceName, RADIO_SERVICE_SLOT2_NAME) &&
!stringEndsWith(serviceName, RADIO_SERVICE_SLOT3_NAME)) {
ALOGI("%s instance is not valid for TSTS device.", serviceName.c_str());
return false;
}
@@ -130,7 +142,7 @@ bool isServiceValidForDeviceConfiguration(std::string& serviceName) {
/*
* Notify that the response message is received.
*/
void RadioResponseWaiter::notify(int receivedSerial) {
void RadioServiceTest::notify(int receivedSerial) {
std::unique_lock<std::mutex> lock(mtx_);
if (serial == receivedSerial) {
count_++;
@@ -141,7 +153,7 @@ void RadioResponseWaiter::notify(int receivedSerial) {
/*
* Wait till the response message is notified or till WAIT_TIMEOUT_PERIOD.
*/
std::cv_status RadioResponseWaiter::wait() {
std::cv_status RadioServiceTest::wait() {
std::unique_lock<std::mutex> lock(mtx_);
std::cv_status status = std::cv_status::no_timeout;
auto now = std::chrono::system_clock::now();
@@ -158,19 +170,37 @@ std::cv_status RadioResponseWaiter::wait() {
/**
* Specific features on the Radio HAL rely on Radio HAL Capabilities.
* The VTS test related to those features must not run if the related capability is disabled.
* Typical usage within VTS: if (getRadioHalCapabilities()) return;
* Typical usage within VTS:
* if (getRadioHalCapabilities()) return;
*/
bool RadioResponseWaiter::getRadioHalCapabilities() {
// TODO(b/210712359): implement after RadioConfig VTS is created
/**
// Get HalDeviceCapabilities from the radio config
std::shared_ptr<RadioConfigResponse> radioConfigRsp = new (std::nothrow)
RadioConfigResponse(*this); radioConfig->setResponseFunctions(radioConfigRsp, nullptr); serial =
GetRandomSerialNumber();
radioConfig->getHalDeviceCapabilities(serial);
bool RadioServiceTest::getRadioHalCapabilities() {
// Get HalDeviceCapabilities from RadioConfig
std::shared_ptr<RadioConfigResponse> radioConfigRsp =
ndk::SharedRefBase::make<RadioConfigResponse>(*this);
std::shared_ptr<RadioConfigIndication> radioConfigInd =
ndk::SharedRefBase::make<RadioConfigIndication>(*this);
radio_config->setResponseFunctions(radioConfigRsp, radioConfigInd);
serial = GetRandomSerialNumber();
radio_config->getHalDeviceCapabilities(serial);
EXPECT_EQ(std::cv_status::no_timeout, wait());
return radioConfigRsp->modemReducedFeatureSet1;
**/
return true;
}
}
/**
* Some VTS tests require the SIM card status to be present before running.
* Update the SIM card status, which can be accessed via the extern cardStatus.
*/
void RadioServiceTest::updateSimCardStatus() {
// Update CardStatus from RadioSim
std::shared_ptr<RadioSimResponse> radioSimRsp =
ndk::SharedRefBase::make<RadioSimResponse>(*this);
std::shared_ptr<RadioSimIndication> radioSimInd =
ndk::SharedRefBase::make<RadioSimIndication>(*this);
radio_sim->setResponseFunctions(radioSimRsp, radioSimInd);
serial = GetRandomSerialNumber();
radio_sim->getIccCardStatus(serial);
EXPECT_EQ(std::cv_status::no_timeout, wait());
EXPECT_EQ(RadioResponseType::SOLICITED, radioSimRsp->rspInfo.type);
EXPECT_EQ(serial, radioSimRsp->rspInfo.serial);
EXPECT_EQ(RadioError::NONE, radioSimRsp->rspInfo.error);
}

View File

@@ -19,15 +19,20 @@
#include <aidl/Gtest.h>
#include <aidl/Vintf.h>
#include <aidl/android/hardware/radio/RadioError.h>
#include <aidl/android/hardware/radio/config/IRadioConfig.h>
#include <aidl/android/hardware/radio/network/RegState.h>
#include <aidl/android/hardware/radio/sim/CardStatus.h>
#include <aidl/android/hardware/radio/sim/IRadioSim.h>
#include <utils/Log.h>
#include <vector>
using namespace aidl::android::hardware::radio;
using aidl::android::hardware::radio::network::RegState;
using aidl::android::hardware::radio::sim::CardStatus;
extern CardStatus cardStatus;
extern int serial;
extern int count_;
/*
* MACRO used to skip test case when radio response return error REQUEST_NOT_SUPPORTED
@@ -102,12 +107,12 @@ bool isTsTsEnabled();
/*
* Check if voice status is in emergency only.
*/
bool isVoiceEmergencyOnly(aidl::android::hardware::radio::network::RegState state);
bool isVoiceEmergencyOnly(RegState state);
/*
* Check if voice status is in service.
*/
bool isVoiceInService(aidl::android::hardware::radio::network::RegState state);
bool isVoiceInService(RegState state);
/*
* Check if service is valid for device configuration
@@ -115,26 +120,25 @@ bool isVoiceInService(aidl::android::hardware::radio::network::RegState state);
bool isServiceValidForDeviceConfiguration(std::string& serviceName);
/**
* Used when waiting for an asynchronous response from the HAL.
* RadioServiceTest base class
*/
class RadioResponseWaiter {
class RadioServiceTest {
protected:
std::mutex mtx_;
std::condition_variable cv_;
int count_;
std::shared_ptr<config::IRadioConfig> radio_config;
std::shared_ptr<sim::IRadioSim> radio_sim;
public:
/* Serial number for radio request */
int serial;
/* Used as a mechanism to inform the test about data/event callback */
void notify(int receivedSerial);
/* Test code calls this function to wait for response */
std::cv_status wait();
// TODO(b/210712359): this probably isn't the best place to put this, but it works for now
// since all RadioXTest extend RadioResponseWaiter
/* Used to get the radio HAL capabilities */
/* Get the radio HAL capabilities */
bool getRadioHalCapabilities();
/* Update SIM card status */
void updateSimCardStatus();
};

View File

@@ -0,0 +1,24 @@
/*
* Copyright (C) 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "radio_config_utils.h"
RadioConfigIndication::RadioConfigIndication(RadioServiceTest& parent) : parent_config(parent) {}
ndk::ScopedAStatus RadioConfigIndication::simSlotsStatusChanged(
RadioIndicationType /*type*/, const std::vector<SimSlotStatus>& /*slotStatus*/) {
return ndk::ScopedAStatus::ok();
}

View File

@@ -0,0 +1,59 @@
/*
* Copyright (C) 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "radio_config_utils.h"
RadioConfigResponse::RadioConfigResponse(RadioServiceTest& parent) : parent_config(parent) {}
ndk::ScopedAStatus RadioConfigResponse::getSimSlotsStatusResponse(
const RadioResponseInfo& /* info */, const std::vector<SimSlotStatus>& /* slotStatus */) {
return ndk::ScopedAStatus::ok();
}
ndk::ScopedAStatus RadioConfigResponse::setSimSlotsMappingResponse(
const RadioResponseInfo& /* info */) {
return ndk::ScopedAStatus::ok();
}
ndk::ScopedAStatus RadioConfigResponse::getPhoneCapabilityResponse(
const RadioResponseInfo& info, const PhoneCapability& phoneCapability) {
rspInfo = info;
phoneCap = phoneCapability;
parent_config.notify(info.serial);
return ndk::ScopedAStatus::ok();
}
ndk::ScopedAStatus RadioConfigResponse::setPreferredDataModemResponse(
const RadioResponseInfo& /* info */) {
return ndk::ScopedAStatus::ok();
}
ndk::ScopedAStatus RadioConfigResponse::getNumOfLiveModemsResponse(
const RadioResponseInfo& /* info */, const int8_t /* numOfLiveModems */) {
return ndk::ScopedAStatus::ok();
}
ndk::ScopedAStatus RadioConfigResponse::setNumOfLiveModemsResponse(
const RadioResponseInfo& /* info */) {
return ndk::ScopedAStatus::ok();
}
ndk::ScopedAStatus RadioConfigResponse::getHalDeviceCapabilitiesResponse(
const RadioResponseInfo& info, bool modemReducedFeatures) {
modemReducedFeatureSet1 = modemReducedFeatures;
parent_config.notify(info.serial);
return ndk::ScopedAStatus::ok();
}

View File

@@ -0,0 +1,56 @@
/*
* Copyright (C) 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <android-base/logging.h>
#include <android/binder_manager.h>
#include "radio_config_utils.h"
#define ASSERT_OK(ret) ASSERT_TRUE(ret.isOk())
void RadioConfigTest::SetUp() {
std::string serviceName = GetParam();
if (!isServiceValidForDeviceConfiguration(serviceName)) {
ALOGI("Skipped the test due to device configuration.");
GTEST_SKIP();
}
radio_config = IRadioConfig::fromBinder(
ndk::SpAIBinder(AServiceManager_waitForService(GetParam().c_str())));
ASSERT_NE(nullptr, radio_config.get());
radioRsp_config = ndk::SharedRefBase::make<RadioConfigResponse>(*this);
ASSERT_NE(nullptr, radioRsp_config.get());
count_ = 0;
radioInd_config = ndk::SharedRefBase::make<RadioConfigIndication>(*this);
ASSERT_NE(nullptr, radioInd_config.get());
radio_config->setResponseFunctions(radioRsp_config, radioInd_config);
}
/*
* Test IRadioConfig.getHalDeviceCapabilities() for the response returned.
*/
TEST_P(RadioConfigTest, getHalDeviceCapabilities) {
serial = GetRandomSerialNumber();
ndk::ScopedAStatus res = radio_config->getHalDeviceCapabilities(serial);
ASSERT_OK(res);
ALOGI("getHalDeviceCapabilities, rspInfo.error = %s\n",
toString(radioRsp_config->rspInfo.error).c_str());
}

View File

@@ -0,0 +1,86 @@
/*
* Copyright (C) 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#pragma once
#include <aidl/android/hardware/radio/config/BnRadioConfigIndication.h>
#include <aidl/android/hardware/radio/config/BnRadioConfigResponse.h>
#include <aidl/android/hardware/radio/config/IRadioConfig.h>
#include "radio_aidl_hal_utils.h"
using namespace aidl::android::hardware::radio::config;
class RadioConfigTest;
/* Callback class for radio config response */
class RadioConfigResponse : public BnRadioConfigResponse {
protected:
RadioServiceTest& parent_config;
public:
RadioConfigResponse(RadioServiceTest& parent_config);
virtual ~RadioConfigResponse() = default;
RadioResponseInfo rspInfo;
PhoneCapability phoneCap;
bool modemReducedFeatureSet1;
virtual ndk::ScopedAStatus getSimSlotsStatusResponse(
const RadioResponseInfo& info, const std::vector<SimSlotStatus>& slotStatus) override;
virtual ndk::ScopedAStatus setSimSlotsMappingResponse(const RadioResponseInfo& info) override;
virtual ndk::ScopedAStatus getPhoneCapabilityResponse(
const RadioResponseInfo& info, const PhoneCapability& phoneCapability) override;
virtual ndk::ScopedAStatus setPreferredDataModemResponse(
const RadioResponseInfo& info) override;
virtual ndk::ScopedAStatus getNumOfLiveModemsResponse(const RadioResponseInfo& info,
const int8_t numOfLiveModems) override;
virtual ndk::ScopedAStatus setNumOfLiveModemsResponse(const RadioResponseInfo& info) override;
virtual ndk::ScopedAStatus getHalDeviceCapabilitiesResponse(
const RadioResponseInfo& info, bool modemReducedFeatureSet1) override;
};
/* Callback class for radio config indication */
class RadioConfigIndication : public BnRadioConfigIndication {
protected:
RadioServiceTest& parent_config;
public:
RadioConfigIndication(RadioServiceTest& parent_config);
virtual ~RadioConfigIndication() = default;
virtual ndk::ScopedAStatus simSlotsStatusChanged(
RadioIndicationType type, const std::vector<SimSlotStatus>& slotStatus) override;
};
// The main test class for Radio AIDL Config.
class RadioConfigTest : public ::testing::TestWithParam<std::string>, public RadioServiceTest {
public:
virtual void SetUp() override;
ndk::ScopedAStatus updateSimCardStatus();
/* radio config service handle in RadioServiceTest */
/* radio config response handle */
std::shared_ptr<RadioConfigResponse> radioRsp_config;
/* radio config indication handle */
std::shared_ptr<RadioConfigIndication> radioInd_config;
};

View File

@@ -16,7 +16,7 @@
#include "radio_data_utils.h"
RadioDataIndication::RadioDataIndication(RadioDataTest& parent) : parent_data(parent) {}
RadioDataIndication::RadioDataIndication(RadioServiceTest& parent) : parent_data(parent) {}
ndk::ScopedAStatus RadioDataIndication::dataCallListChanged(
RadioIndicationType /*type*/, const std::vector<SetupDataCallResult>& /*dcList*/) {

View File

@@ -16,7 +16,7 @@
#include "radio_data_utils.h"
RadioDataResponse::RadioDataResponse(RadioResponseWaiter& parent) : parent_data(parent) {}
RadioDataResponse::RadioDataResponse(RadioServiceTest& parent) : parent_data(parent) {}
ndk::ScopedAStatus RadioDataResponse::acknowledgeRequest(int32_t /*serial*/) {
return ndk::ScopedAStatus::ok();

View File

@@ -46,12 +46,17 @@ void RadioDataTest::SetUp() {
radio_data->setResponseFunctions(radioRsp_data, radioInd_data);
// Assert IRadioSim exists and SIM is present before testing
radio_sim = sim::IRadioSim::fromBinder(ndk::SpAIBinder(
AServiceManager_waitForService("android.hardware.radio.sim.IRadioSim/slot1")));
ASSERT_NE(nullptr, radio_sim.get());
updateSimCardStatus();
EXPECT_EQ(CardStatus::STATE_PRESENT, cardStatus.cardState);
// Assert IRadioConfig exists before testing
std::shared_ptr<aidl::android::hardware::radio::config::IRadioConfig> radioConfig =
aidl::android::hardware::radio::config::IRadioConfig::fromBinder(
ndk::SpAIBinder(AServiceManager_waitForService(
"android.hardware.radio.config.IRadioConfig/default")));
ASSERT_NE(nullptr, radioConfig.get());
radio_config = config::IRadioConfig::fromBinder(ndk::SpAIBinder(
AServiceManager_waitForService("android.hardware.radio.config.IRadioConfig/default")));
ASSERT_NE(nullptr, radio_config.get());
}
ndk::ScopedAStatus RadioDataTest::getDataCallList() {

View File

@@ -23,17 +23,16 @@
#include "radio_aidl_hal_utils.h"
using namespace aidl::android::hardware::radio::data;
using aidl::android::hardware::radio::sim::CardStatus;
class RadioDataTest;
/* Callback class for radio data response */
class RadioDataResponse : public BnRadioDataResponse {
protected:
RadioResponseWaiter& parent_data;
RadioServiceTest& parent_data;
public:
RadioDataResponse(RadioResponseWaiter& parent_data);
RadioDataResponse(RadioServiceTest& parent_data);
virtual ~RadioDataResponse() = default;
RadioResponseInfo rspInfo;
@@ -80,10 +79,10 @@ class RadioDataResponse : public BnRadioDataResponse {
/* Callback class for radio data indication */
class RadioDataIndication : public BnRadioDataIndication {
protected:
RadioDataTest& parent_data;
RadioServiceTest& parent_data;
public:
RadioDataIndication(RadioDataTest& parent_data);
RadioDataIndication(RadioServiceTest& parent_data);
virtual ~RadioDataIndication() = default;
virtual ndk::ScopedAStatus dataCallListChanged(
@@ -99,7 +98,7 @@ class RadioDataIndication : public BnRadioDataIndication {
};
// The main test class for Radio AIDL Data.
class RadioDataTest : public ::testing::TestWithParam<std::string>, public RadioResponseWaiter {
class RadioDataTest : public ::testing::TestWithParam<std::string>, public RadioServiceTest {
protected:
/* Get current data call list */
ndk::ScopedAStatus getDataCallList();

View File

@@ -16,7 +16,7 @@
#include "radio_messaging_utils.h"
RadioMessagingIndication::RadioMessagingIndication(RadioMessagingTest& parent)
RadioMessagingIndication::RadioMessagingIndication(RadioServiceTest& parent)
: parent_messaging(parent) {}
ndk::ScopedAStatus RadioMessagingIndication::cdmaNewSms(RadioIndicationType /*type*/,

View File

@@ -16,7 +16,7 @@
#include "radio_messaging_utils.h"
RadioMessagingResponse::RadioMessagingResponse(RadioResponseWaiter& parent)
RadioMessagingResponse::RadioMessagingResponse(RadioServiceTest& parent)
: parent_messaging(parent) {}
ndk::ScopedAStatus RadioMessagingResponse::acknowledgeIncomingGsmSmsWithPduResponse(

View File

@@ -44,12 +44,17 @@ void RadioMessagingTest::SetUp() {
radio_messaging->setResponseFunctions(radioRsp_messaging, radioInd_messaging);
// Assert IRadioSim exists and SIM is present before testing
radio_sim = sim::IRadioSim::fromBinder(ndk::SpAIBinder(
AServiceManager_waitForService("android.hardware.radio.sim.IRadioSim/slot1")));
ASSERT_NE(nullptr, radio_sim.get());
updateSimCardStatus();
EXPECT_EQ(CardStatus::STATE_PRESENT, cardStatus.cardState);
// Assert IRadioConfig exists before testing
std::shared_ptr<aidl::android::hardware::radio::config::IRadioConfig> radioConfig =
aidl::android::hardware::radio::config::IRadioConfig::fromBinder(
ndk::SpAIBinder(AServiceManager_waitForService(
"android.hardware.radio.config.IRadioConfig/default")));
ASSERT_NE(nullptr, radioConfig.get());
radio_config = config::IRadioConfig::fromBinder(ndk::SpAIBinder(
AServiceManager_waitForService("android.hardware.radio.config.IRadioConfig/default")));
ASSERT_NE(nullptr, radio_config.get());
}
/*

View File

@@ -29,10 +29,10 @@ class RadioMessagingTest;
/* Callback class for radio messaging response */
class RadioMessagingResponse : public BnRadioMessagingResponse {
protected:
RadioResponseWaiter& parent_messaging;
RadioServiceTest& parent_messaging;
public:
RadioMessagingResponse(RadioResponseWaiter& parent_messaging);
RadioMessagingResponse(RadioServiceTest& parent_messaging);
virtual ~RadioMessagingResponse() = default;
RadioResponseInfo rspInfo;
@@ -110,10 +110,10 @@ class RadioMessagingResponse : public BnRadioMessagingResponse {
/* Callback class for radio messaging indication */
class RadioMessagingIndication : public BnRadioMessagingIndication {
protected:
RadioMessagingTest& parent_messaging;
RadioServiceTest& parent_messaging;
public:
RadioMessagingIndication(RadioMessagingTest& parent_messaging);
RadioMessagingIndication(RadioServiceTest& parent_messaging);
virtual ~RadioMessagingIndication() = default;
virtual ndk::ScopedAStatus cdmaNewSms(RadioIndicationType type,
@@ -139,8 +139,7 @@ class RadioMessagingIndication : public BnRadioMessagingIndication {
};
// The main test class for Radio AIDL Messaging.
class RadioMessagingTest : public ::testing::TestWithParam<std::string>,
public RadioResponseWaiter {
class RadioMessagingTest : public ::testing::TestWithParam<std::string>, public RadioServiceTest {
public:
virtual void SetUp() override;

View File

@@ -16,7 +16,7 @@
#include "radio_modem_utils.h"
RadioModemIndication::RadioModemIndication(RadioModemTest& parent) : parent_modem(parent) {}
RadioModemIndication::RadioModemIndication(RadioServiceTest& parent) : parent_modem(parent) {}
ndk::ScopedAStatus RadioModemIndication::hardwareConfigChanged(
RadioIndicationType /*type*/, const std::vector<HardwareConfig>& /*configs*/) {

View File

@@ -16,7 +16,7 @@
#include "radio_modem_utils.h"
RadioModemResponse::RadioModemResponse(RadioResponseWaiter& parent) : parent_modem(parent) {}
RadioModemResponse::RadioModemResponse(RadioServiceTest& parent) : parent_modem(parent) {}
ndk::ScopedAStatus RadioModemResponse::acknowledgeRequest(int32_t /*serial*/) {
return ndk::ScopedAStatus::ok();

View File

@@ -44,12 +44,17 @@ void RadioModemTest::SetUp() {
radio_modem->setResponseFunctions(radioRsp_modem, radioInd_modem);
// Assert IRadioSim exists and SIM is present before testing
radio_sim = sim::IRadioSim::fromBinder(ndk::SpAIBinder(
AServiceManager_waitForService("android.hardware.radio.sim.IRadioSim/slot1")));
ASSERT_NE(nullptr, radio_sim.get());
updateSimCardStatus();
EXPECT_EQ(CardStatus::STATE_PRESENT, cardStatus.cardState);
// Assert IRadioConfig exists before testing
std::shared_ptr<aidl::android::hardware::radio::config::IRadioConfig> radioConfig =
aidl::android::hardware::radio::config::IRadioConfig::fromBinder(
ndk::SpAIBinder(AServiceManager_waitForService(
"android.hardware.radio.config.IRadioConfig/default")));
ASSERT_NE(nullptr, radioConfig.get());
radio_config = config::IRadioConfig::fromBinder(ndk::SpAIBinder(
AServiceManager_waitForService("android.hardware.radio.config.IRadioConfig/default")));
ASSERT_NE(nullptr, radio_config.get());
}
/*

View File

@@ -22,7 +22,6 @@
#include "radio_aidl_hal_utils.h"
using namespace aidl::android::hardware::radio::config;
using namespace aidl::android::hardware::radio::modem;
class RadioModemTest;
@@ -30,10 +29,10 @@ class RadioModemTest;
/* Callback class for radio modem response */
class RadioModemResponse : public BnRadioModemResponse {
protected:
RadioResponseWaiter& parent_modem;
RadioServiceTest& parent_modem;
public:
RadioModemResponse(RadioResponseWaiter& parent_modem);
RadioModemResponse(RadioServiceTest& parent_modem);
virtual ~RadioModemResponse() = default;
RadioResponseInfo rspInfo;
@@ -87,10 +86,10 @@ class RadioModemResponse : public BnRadioModemResponse {
/* Callback class for radio modem indication */
class RadioModemIndication : public BnRadioModemIndication {
protected:
RadioModemTest& parent_modem;
RadioServiceTest& parent_modem;
public:
RadioModemIndication(RadioModemTest& parent_modem);
RadioModemIndication(RadioServiceTest& parent_modem);
virtual ~RadioModemIndication() = default;
virtual ndk::ScopedAStatus hardwareConfigChanged(
@@ -109,7 +108,7 @@ class RadioModemIndication : public BnRadioModemIndication {
};
// The main test class for Radio AIDL Modem.
class RadioModemTest : public ::testing::TestWithParam<std::string>, public RadioResponseWaiter {
class RadioModemTest : public ::testing::TestWithParam<std::string>, public RadioServiceTest {
public:
virtual void SetUp() override;

View File

@@ -16,7 +16,7 @@
#include "radio_network_utils.h"
RadioNetworkIndication::RadioNetworkIndication(RadioNetworkTest& parent) : parent_network(parent) {}
RadioNetworkIndication::RadioNetworkIndication(RadioServiceTest& parent) : parent_network(parent) {}
ndk::ScopedAStatus RadioNetworkIndication::barringInfoChanged(
RadioIndicationType /*type*/, const CellIdentity& /*cellIdentity*/,

View File

@@ -16,7 +16,7 @@
#include "radio_network_utils.h"
RadioNetworkResponse::RadioNetworkResponse(RadioResponseWaiter& parent) : parent_network(parent) {}
RadioNetworkResponse::RadioNetworkResponse(RadioServiceTest& parent) : parent_network(parent) {}
ndk::ScopedAStatus RadioNetworkResponse::acknowledgeRequest(int32_t /*serial*/) {
return ndk::ScopedAStatus::ok();
@@ -112,7 +112,7 @@ ndk::ScopedAStatus RadioNetworkResponse::getVoiceRadioTechnologyResponse(
ndk::ScopedAStatus RadioNetworkResponse::getVoiceRegistrationStateResponse(
const RadioResponseInfo& info, const RegStateResult& regResponse) {
rspInfo = info;
regStateResp.regState = regResponse.regState;
voiceRegResp.regState = regResponse.regState;
parent_network.notify(info.serial);
return ndk::ScopedAStatus::ok();
}

View File

@@ -45,12 +45,17 @@ void RadioNetworkTest::SetUp() {
radio_network->setResponseFunctions(radioRsp_network, radioInd_network);
// Assert IRadioSim exists and SIM is present before testing
radio_sim = sim::IRadioSim::fromBinder(ndk::SpAIBinder(
AServiceManager_waitForService("android.hardware.radio.sim.IRadioSim/slot1")));
ASSERT_NE(nullptr, radio_sim.get());
updateSimCardStatus();
EXPECT_EQ(CardStatus::STATE_PRESENT, cardStatus.cardState);
// Assert IRadioConfig exists before testing
std::shared_ptr<aidl::android::hardware::radio::config::IRadioConfig> radioConfig =
aidl::android::hardware::radio::config::IRadioConfig::fromBinder(
ndk::SpAIBinder(AServiceManager_waitForService(
"android.hardware.radio.config.IRadioConfig/default")));
ASSERT_NE(nullptr, radioConfig.get());
radio_config = config::IRadioConfig::fromBinder(ndk::SpAIBinder(
AServiceManager_waitForService("android.hardware.radio.config.IRadioConfig/default")));
ASSERT_NE(nullptr, radio_config.get());
}
/*

View File

@@ -29,10 +29,10 @@ class RadioNetworkTest;
/* Callback class for radio network response */
class RadioNetworkResponse : public BnRadioNetworkResponse {
protected:
RadioResponseWaiter& parent_network;
RadioServiceTest& parent_network;
public:
RadioNetworkResponse(RadioResponseWaiter& parent_network);
RadioNetworkResponse(RadioServiceTest& parent_network);
virtual ~RadioNetworkResponse() = default;
RadioResponseInfo rspInfo;
@@ -40,7 +40,7 @@ class RadioNetworkResponse : public BnRadioNetworkResponse {
std::vector<OperatorInfo> networkInfos;
bool isNrDualConnectivityEnabled;
int networkTypeBitmapResponse;
RegStateResult regStateResp;
RegStateResult voiceRegResp;
CellIdentity barringCellIdentity;
std::vector<BarringInfo> barringInfos;
UsageSetting usageSetting;
@@ -150,10 +150,10 @@ class RadioNetworkResponse : public BnRadioNetworkResponse {
/* Callback class for radio network indication */
class RadioNetworkIndication : public BnRadioNetworkIndication {
protected:
RadioNetworkTest& parent_network;
RadioServiceTest& parent_network;
public:
RadioNetworkIndication(RadioNetworkTest& parent_network);
RadioNetworkIndication(RadioServiceTest& parent_network);
virtual ~RadioNetworkIndication() = default;
virtual ndk::ScopedAStatus barringInfoChanged(
@@ -202,7 +202,7 @@ class RadioNetworkIndication : public BnRadioNetworkIndication {
};
// The main test class for Radio AIDL Network.
class RadioNetworkTest : public ::testing::TestWithParam<std::string>, public RadioResponseWaiter {
class RadioNetworkTest : public ::testing::TestWithParam<std::string>, public RadioServiceTest {
public:
virtual void SetUp() override;

View File

@@ -16,7 +16,7 @@
#include "radio_sim_utils.h"
RadioSimIndication::RadioSimIndication(RadioSimTest& parent) : parent_sim(parent) {}
RadioSimIndication::RadioSimIndication(RadioServiceTest& parent) : parent_sim(parent) {}
ndk::ScopedAStatus RadioSimIndication::carrierInfoForImsiEncryption(RadioIndicationType /*info*/) {
return ndk::ScopedAStatus::ok();

View File

@@ -16,7 +16,7 @@
#include "radio_sim_utils.h"
RadioSimResponse::RadioSimResponse(RadioResponseWaiter& parent) : parent_sim(parent) {}
RadioSimResponse::RadioSimResponse(RadioServiceTest& parent) : parent_sim(parent) {}
ndk::ScopedAStatus RadioSimResponse::acknowledgeRequest(int32_t /*serial*/) {
return ndk::ScopedAStatus::ok();

View File

@@ -43,20 +43,23 @@ void RadioSimTest::SetUp() {
ASSERT_NE(nullptr, radioInd_sim.get());
radio_sim->setResponseFunctions(radioRsp_sim, radioInd_sim);
// Assert SIM is present before testing
updateSimCardStatus();
EXPECT_EQ(CardStatus::STATE_PRESENT, cardStatus.cardState);
// Assert IRadioConfig exists before testing
std::shared_ptr<aidl::android::hardware::radio::config::IRadioConfig> radioConfig =
aidl::android::hardware::radio::config::IRadioConfig::fromBinder(
ndk::SpAIBinder(AServiceManager_waitForService(
"android.hardware.radio.config.IRadioConfig/default")));
ASSERT_NE(nullptr, radioConfig.get());
radio_config = config::IRadioConfig::fromBinder(ndk::SpAIBinder(
AServiceManager_waitForService("android.hardware.radio.config.IRadioConfig/default")));
ASSERT_NE(nullptr, radio_config.get());
}
ndk::ScopedAStatus RadioSimTest::updateSimCardStatus() {
void RadioSimTest::updateSimCardStatus() {
serial = GetRandomSerialNumber();
radio_sim->getIccCardStatus(serial);
EXPECT_EQ(std::cv_status::no_timeout, wait());
return ndk::ScopedAStatus::ok();
EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_sim->rspInfo.type);
EXPECT_EQ(serial, radioRsp_sim->rspInfo.serial);
EXPECT_EQ(RadioError::NONE, radioRsp_sim->rspInfo.error);
}
/*

View File

@@ -29,10 +29,10 @@ class RadioSimTest;
/* Callback class for radio SIM response */
class RadioSimResponse : public BnRadioSimResponse {
protected:
RadioResponseWaiter& parent_sim;
RadioServiceTest& parent_sim;
public:
RadioSimResponse(RadioResponseWaiter& parent_sim);
RadioSimResponse(RadioServiceTest& parent_sim);
virtual ~RadioSimResponse() = default;
RadioResponseInfo rspInfo;
@@ -152,10 +152,10 @@ class RadioSimResponse : public BnRadioSimResponse {
/* Callback class for radio SIM indication */
class RadioSimIndication : public BnRadioSimIndication {
protected:
RadioSimTest& parent_sim;
RadioServiceTest& parent_sim;
public:
RadioSimIndication(RadioSimTest& parent_sim);
RadioSimIndication(RadioServiceTest& parent_sim);
virtual ~RadioSimIndication() = default;
virtual ndk::ScopedAStatus carrierInfoForImsiEncryption(RadioIndicationType info) override;
@@ -190,16 +190,14 @@ class RadioSimIndication : public BnRadioSimIndication {
};
// The main test class for Radio AIDL SIM.
class RadioSimTest : public ::testing::TestWithParam<std::string>, public RadioResponseWaiter {
protected:
/* Update Sim Card Status */
virtual ndk::ScopedAStatus updateSimCardStatus();
class RadioSimTest : public ::testing::TestWithParam<std::string>, public RadioServiceTest {
public:
virtual void SetUp() override;
/* radio SIM service handle */
std::shared_ptr<IRadioSim> radio_sim;
/* Override updateSimCardStatus in RadioServiceTest to not call setResponseFunctions */
void updateSimCardStatus();
/* radio SIM service handle in RadioServiceTest */
/* radio SIM response handle */
std::shared_ptr<RadioSimResponse> radioRsp_sim;
/* radio SIM indication handle */

View File

@@ -16,7 +16,7 @@
#include "radio_voice_utils.h"
RadioVoiceIndication::RadioVoiceIndication(RadioVoiceTest& parent) : parent_voice(parent) {}
RadioVoiceIndication::RadioVoiceIndication(RadioServiceTest& parent) : parent_voice(parent) {}
ndk::ScopedAStatus RadioVoiceIndication::callRing(RadioIndicationType /*type*/, bool /*isGsm*/,
const CdmaSignalInfoRecord& /*record*/) {

View File

@@ -16,7 +16,7 @@
#include "radio_voice_utils.h"
RadioVoiceResponse::RadioVoiceResponse(RadioResponseWaiter& parent) : parent_voice(parent) {}
RadioVoiceResponse::RadioVoiceResponse(RadioServiceTest& parent) : parent_voice(parent) {}
ndk::ScopedAStatus RadioVoiceResponse::acceptCallResponse(const RadioResponseInfo& /*info*/) {
return ndk::ScopedAStatus::ok();

View File

@@ -45,12 +45,26 @@ void RadioVoiceTest::SetUp() {
radio_voice->setResponseFunctions(radioRsp_voice, radioInd_voice);
// Assert IRadioSim exists and SIM is present before testing
radio_sim = sim::IRadioSim::fromBinder(ndk::SpAIBinder(
AServiceManager_waitForService("android.hardware.radio.sim.IRadioSim/slot1")));
ASSERT_NE(nullptr, radio_sim.get());
updateSimCardStatus();
EXPECT_EQ(CardStatus::STATE_PRESENT, cardStatus.cardState);
// Assert IRadioConfig exists before testing
std::shared_ptr<aidl::android::hardware::radio::config::IRadioConfig> radioConfig =
aidl::android::hardware::radio::config::IRadioConfig::fromBinder(
ndk::SpAIBinder(AServiceManager_waitForService(
"android.hardware.radio.config.IRadioConfig/default")));
ASSERT_NE(nullptr, radioConfig.get());
radio_config = config::IRadioConfig::fromBinder(ndk::SpAIBinder(
AServiceManager_waitForService("android.hardware.radio.config.IRadioConfig/default")));
ASSERT_NE(nullptr, radio_config.get());
if (isDsDsEnabled() || isTsTsEnabled()) {
radio_network = IRadioNetwork::fromBinder(ndk::SpAIBinder(AServiceManager_waitForService(
"android.hardware.radio.network.IRadioNetwork/slot1")));
ASSERT_NE(nullptr, radio_network.get());
radioRsp_network = ndk::SharedRefBase::make<RadioNetworkResponse>(*this);
radioInd_network = ndk::SharedRefBase::make<RadioNetworkIndication>(*this);
radio_network->setResponseFunctions(radioRsp_network, radioInd_network);
}
}
ndk::ScopedAStatus RadioVoiceTest::clearPotentialEstablishedCalls() {
@@ -113,16 +127,13 @@ TEST_P(RadioVoiceTest, emergencyDial) {
// In DSDS or TSTS, we only check the result if the current slot is IN_SERVICE
// or Emergency_Only.
if (isDsDsEnabled() || isTsTsEnabled()) {
// TODO(b/210712359): maybe create a local RadioNetwork instance
/**
serial = GetRandomSerialNumber();
radio_v1_6->getVoiceRegistrationState(serial);
radio_network->getVoiceRegistrationState(serial);
EXPECT_EQ(std::cv_status::no_timeout, wait());
if (isVoiceEmergencyOnly(radioRsp_v1_6->voiceRegResp.regState) ||
isVoiceInService(radioRsp_v1_6->voiceRegResp.regState)) {
if (isVoiceEmergencyOnly(radioRsp_network->voiceRegResp.regState) ||
isVoiceInService(radioRsp_network->voiceRegResp.regState)) {
EXPECT_EQ(RadioError::NONE, rspEmergencyDial);
}
**/
} else {
EXPECT_EQ(RadioError::NONE, rspEmergencyDial);
}
@@ -171,16 +182,13 @@ TEST_P(RadioVoiceTest, emergencyDial_withServices) {
// In DSDS or TSTS, we only check the result if the current slot is IN_SERVICE
// or Emergency_Only.
if (isDsDsEnabled() || isTsTsEnabled()) {
// TODO(b/210712359): maybe create a local RadioNetwork instance
/**
serial = GetRandomSerialNumber();
radio_v1_6->getVoiceRegistrationState_1_6(serial);
radio_network->getVoiceRegistrationState(serial);
EXPECT_EQ(std::cv_status::no_timeout, wait());
if (isVoiceEmergencyOnly(radioRsp_v1_6->voiceRegResp.regState) ||
isVoiceInService(radioRsp_v1_6->voiceRegResp.regState)) {
if (isVoiceEmergencyOnly(radioRsp_network->voiceRegResp.regState) ||
isVoiceInService(radioRsp_network->voiceRegResp.regState)) {
EXPECT_EQ(RadioError::NONE, rspEmergencyDial);
}
**/
} else {
EXPECT_EQ(RadioError::NONE, rspEmergencyDial);
}
@@ -228,16 +236,13 @@ TEST_P(RadioVoiceTest, emergencyDial_withEmergencyRouting) {
// In DSDS or TSTS, we only check the result if the current slot is IN_SERVICE
// or Emergency_Only.
if (isDsDsEnabled() || isTsTsEnabled()) {
// TODO(b/210712359): maybe create a local RadioNetwork instance
/**
serial = GetRandomSerialNumber();
radio_v1_6->getVoiceRegistrationState_1_6(serial);
radio_network->getVoiceRegistrationState(serial);
EXPECT_EQ(std::cv_status::no_timeout, wait());
if (isVoiceEmergencyOnly(radioRsp_v1_6->voiceRegResp.regState) ||
isVoiceInService(radioRsp_v1_6->voiceRegResp.regState)) {
if (isVoiceEmergencyOnly(radioRsp_network->voiceRegResp.regState) ||
isVoiceInService(radioRsp_network->voiceRegResp.regState)) {
EXPECT_EQ(RadioError::NONE, rspEmergencyDial);
}
**/
} else {
EXPECT_EQ(RadioError::NONE, rspEmergencyDial);
}

View File

@@ -21,6 +21,7 @@
#include <aidl/android/hardware/radio/voice/IRadioVoice.h>
#include "radio_aidl_hal_utils.h"
#include "radio_network_utils.h"
using namespace aidl::android::hardware::radio::voice;
@@ -29,10 +30,10 @@ class RadioVoiceTest;
/* Callback class for radio voice response */
class RadioVoiceResponse : public BnRadioVoiceResponse {
protected:
RadioResponseWaiter& parent_voice;
RadioServiceTest& parent_voice;
public:
RadioVoiceResponse(RadioResponseWaiter& parent_voice);
RadioVoiceResponse(RadioServiceTest& parent_voice);
virtual ~RadioVoiceResponse() = default;
RadioResponseInfo rspInfo;
@@ -130,10 +131,10 @@ class RadioVoiceResponse : public BnRadioVoiceResponse {
/* Callback class for radio voice indication */
class RadioVoiceIndication : public BnRadioVoiceIndication {
protected:
RadioVoiceTest& parent_voice;
RadioServiceTest& parent_voice;
public:
RadioVoiceIndication(RadioVoiceTest& parent_voice);
RadioVoiceIndication(RadioServiceTest& parent_voice);
virtual ~RadioVoiceIndication() = default;
virtual ndk::ScopedAStatus callRing(RadioIndicationType type, bool isGsm,
@@ -175,10 +176,13 @@ class RadioVoiceIndication : public BnRadioVoiceIndication {
};
// The main test class for Radio AIDL Voice.
class RadioVoiceTest : public ::testing::TestWithParam<std::string>, public RadioResponseWaiter {
class RadioVoiceTest : public ::testing::TestWithParam<std::string>, public RadioServiceTest {
protected:
/* Clear Potential Established Calls */
virtual ndk::ScopedAStatus clearPotentialEstablishedCalls();
std::shared_ptr<network::IRadioNetwork> radio_network;
std::shared_ptr<RadioNetworkResponse> radioRsp_network;
std::shared_ptr<RadioNetworkIndication> radioInd_network;
public:
virtual void SetUp() override;