fix SIM related VTS failures
1. Add 6s delay after setSimSlotsMapping because modem needs time to
process SIM configuration change. The next TC could fail at
checking SIM status if there is no delay. The default SIM
configuration on my test device is that physical#0 maps to
logical#1 and physical#1 maps to logical#0. When running
setSimSlotsMapping, it then becomes physical#0 maps to logical#0
and physical#1 maps to logical#1.
2. Support DSDS case and TSTS case for setSimSlotsMapping. The
original code only set for 1 slot and it caused 2nd slot SIM
absent when testing with DSDS enabled.
3. Set slotStatus from corresponding physical slot for
setSimCardPower.
Bug: 227579281
Test: run vts -m VtsHalRadioTargetTest
Change-Id: I8c12cb1dbc439655f9de88b1e217b3f34e44ebeb
Merged-In: I8c12cb1dbc439655f9de88b1e217b3f34e44ebeb
diff --git a/radio/aidl/vts/radio_aidl_hal_utils.cpp b/radio/aidl/vts/radio_aidl_hal_utils.cpp
index 8618851..efc4f26 100644
--- a/radio/aidl/vts/radio_aidl_hal_utils.cpp
+++ b/radio/aidl/vts/radio_aidl_hal_utils.cpp
@@ -206,7 +206,7 @@
EXPECT_EQ(RadioError::NONE, radioSimRsp->rspInfo.error);
}
-void RadioServiceTest::updateSimSlotStatus() {
+void RadioServiceTest::updateSimSlotStatus(int physicalSlotId) {
// Update SimSlotStatus from RadioConfig
std::shared_ptr<RadioConfigResponse> radioConfigRsp =
ndk::SharedRefBase::make<RadioConfigResponse>(*this);
@@ -219,8 +219,7 @@
EXPECT_EQ(RadioResponseType::SOLICITED, radioConfigRsp->rspInfo.type);
EXPECT_EQ(serial, radioConfigRsp->rspInfo.serial);
EXPECT_EQ(RadioError::NONE, radioConfigRsp->rspInfo.error);
- // assuming only 1 slot
- for (const SimSlotStatus& slotStatusResponse : radioConfigRsp->simSlotStatus) {
- slotStatus = slotStatusResponse;
+ if (radioConfigRsp->simSlotStatus.size() > physicalSlotId) {
+ slotStatus = radioConfigRsp->simSlotStatus[physicalSlotId];
}
}
diff --git a/radio/aidl/vts/radio_aidl_hal_utils.h b/radio/aidl/vts/radio_aidl_hal_utils.h
index d6f7bf7..47976b9 100644
--- a/radio/aidl/vts/radio_aidl_hal_utils.h
+++ b/radio/aidl/vts/radio_aidl_hal_utils.h
@@ -70,6 +70,7 @@
#define MODEM_EMERGENCY_CALL_ESTABLISH_TIME 3
#define MODEM_EMERGENCY_CALL_DISCONNECT_TIME 3
#define MODEM_SET_SIM_POWER_DELAY_IN_SECONDS 2
+#define MODEM_SET_SIM_SLOT_MAPPING_DELAY_IN_SECONDS 6
#define RADIO_SERVICE_SLOT1_NAME "slot1" // HAL instance name for SIM slot 1 or single SIM device
#define RADIO_SERVICE_SLOT2_NAME "slot2" // HAL instance name for SIM slot 2 on dual SIM device
@@ -146,5 +147,5 @@
void updateSimCardStatus();
/* Update SIM slot status */
- void updateSimSlotStatus();
+ void updateSimSlotStatus(int physicalSlotId);
};
diff --git a/radio/aidl/vts/radio_config_test.cpp b/radio/aidl/vts/radio_config_test.cpp
index 83c4de0..5e1c811 100644
--- a/radio/aidl/vts/radio_config_test.cpp
+++ b/radio/aidl/vts/radio_config_test.cpp
@@ -171,6 +171,15 @@
slotPortMapping.physicalSlotId = 0;
slotPortMapping.portId = 0;
std::vector<SlotPortMapping> slotPortMappingList = {slotPortMapping};
+ if (isDsDsEnabled()) {
+ slotPortMapping.physicalSlotId = 1;
+ slotPortMappingList.push_back(slotPortMapping);
+ } else if (isTsTsEnabled()) {
+ slotPortMapping.physicalSlotId = 1;
+ slotPortMappingList.push_back(slotPortMapping);
+ slotPortMapping.physicalSlotId = 2;
+ slotPortMappingList.push_back(slotPortMapping);
+ }
ndk::ScopedAStatus res = radio_config->setSimSlotsMapping(serial, slotPortMappingList);
ASSERT_OK(res);
EXPECT_EQ(std::cv_status::no_timeout, wait());
@@ -179,6 +188,9 @@
ALOGI("setSimSlotsMapping, rspInfo.error = %s\n",
toString(radioRsp_config->rspInfo.error).c_str());
ASSERT_TRUE(CheckAnyOfErrors(radioRsp_config->rspInfo.error, {RadioError::NONE}));
+
+ // Give some time for modem to fully switch SIM configuration
+ sleep(MODEM_SET_SIM_SLOT_MAPPING_DELAY_IN_SECONDS);
}
/*
diff --git a/radio/aidl/vts/radio_sim_test.cpp b/radio/aidl/vts/radio_sim_test.cpp
index f94a2a0..e69247d 100644
--- a/radio/aidl/vts/radio_sim_test.cpp
+++ b/radio/aidl/vts/radio_sim_test.cpp
@@ -108,7 +108,7 @@
// have CardStatus::STATE_PRESENT after turning the power back on
if (radioRsp_sim->rspInfo.error == RadioError::NONE) {
updateSimCardStatus();
- updateSimSlotStatus();
+ updateSimSlotStatus(cardStatus.slotMap.physicalSlotId);
EXPECT_EQ(CardStatus::STATE_PRESENT, cardStatus.cardState);
EXPECT_EQ(CardStatus::STATE_PRESENT, slotStatus.cardState);
if (CardStatus::STATE_PRESENT == slotStatus.cardState) {