Add a VTS test for BarringInfo am: 666a2d3d83
am: 7db532d253
Change-Id: Ia2e3dda00b63a6d579d8f9cf1c5a8795f1380d95
This commit is contained in:
commit
659e917a10
3 changed files with 115 additions and 2 deletions
|
@ -1162,3 +1162,110 @@ TEST_F(RadioHidlTest_v1_5, sendCdmaSmsExpectMore) {
|
|||
CHECK_GENERAL_ERROR));
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Test IRadio.getBarringInfo() for the response returned.
|
||||
*/
|
||||
TEST_F(RadioHidlTest_v1_5, getBarringInfo) {
|
||||
serial = GetRandomSerialNumber();
|
||||
|
||||
Return<void> res = radio_v1_5->getBarringInfo(serial);
|
||||
EXPECT_EQ(std::cv_status::no_timeout, wait());
|
||||
EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
|
||||
EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
|
||||
|
||||
ASSERT_TRUE(radioRsp_v1_5->barringInfos.size() > 0);
|
||||
|
||||
std::set<BarringInfo::ServiceType> reportedServices;
|
||||
|
||||
// validate that the service types are in range
|
||||
for (const auto& info : radioRsp_v1_5->barringInfos) {
|
||||
ASSERT_TRUE((info.serviceType >= BarringInfo::ServiceType::CS_SERVICE &&
|
||||
info.serviceType <= BarringInfo::ServiceType::SMS) ||
|
||||
(info.serviceType >= BarringInfo::ServiceType::OPERATOR_1 &&
|
||||
info.serviceType <= BarringInfo::ServiceType::OPERATOR_32));
|
||||
reportedServices.insert(info.serviceType);
|
||||
|
||||
// Any type that is "conditional" must have sane values for conditional barring
|
||||
// factor and time.
|
||||
switch (info.barringType) {
|
||||
case BarringInfo::BarringType::NONE: // fall through
|
||||
case BarringInfo::BarringType::UNCONDITIONAL:
|
||||
break;
|
||||
case BarringInfo::BarringType::CONDITIONAL: {
|
||||
const int32_t barringFactor = info.barringTypeSpecificInfo.conditional().factor;
|
||||
ASSERT_TRUE(barringFactor >= 0 && barringFactor <= 100);
|
||||
ASSERT_TRUE(info.barringTypeSpecificInfo.conditional().timeSeconds > 0);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
FAIL();
|
||||
}
|
||||
}
|
||||
|
||||
// Certain types of barring are relevant for certain RANs. Ensure that only the right
|
||||
// types are reported. Note that no types are required, simply that for a given technology
|
||||
// only certain types are valid. This is one way to sanity check that implementations are
|
||||
// not providing information that they don't have.
|
||||
static const std::set<BarringInfo::ServiceType> UTRA_SERVICES{
|
||||
BarringInfo::ServiceType::CS_SERVICE, BarringInfo::ServiceType::PS_SERVICE,
|
||||
BarringInfo::ServiceType::CS_VOICE, BarringInfo::ServiceType::EMERGENCY,
|
||||
BarringInfo::ServiceType::SMS,
|
||||
};
|
||||
|
||||
static const std::set<BarringInfo::ServiceType> EUTRA_SERVICES{
|
||||
BarringInfo::ServiceType::MO_SIGNALLING, BarringInfo::ServiceType::MO_DATA,
|
||||
BarringInfo::ServiceType::CS_FALLBACK, BarringInfo::ServiceType::MMTEL_VOICE,
|
||||
BarringInfo::ServiceType::MMTEL_VIDEO, BarringInfo::ServiceType::EMERGENCY,
|
||||
BarringInfo::ServiceType::SMS,
|
||||
};
|
||||
|
||||
static const std::set<BarringInfo::ServiceType> NGRA_SERVICES = {
|
||||
BarringInfo::ServiceType::MO_SIGNALLING, BarringInfo::ServiceType::MO_DATA,
|
||||
BarringInfo::ServiceType::CS_FALLBACK, BarringInfo::ServiceType::MMTEL_VOICE,
|
||||
BarringInfo::ServiceType::MMTEL_VIDEO, BarringInfo::ServiceType::EMERGENCY,
|
||||
BarringInfo::ServiceType::SMS, BarringInfo::ServiceType::OPERATOR_1,
|
||||
BarringInfo::ServiceType::OPERATOR_2, BarringInfo::ServiceType::OPERATOR_3,
|
||||
BarringInfo::ServiceType::OPERATOR_4, BarringInfo::ServiceType::OPERATOR_5,
|
||||
BarringInfo::ServiceType::OPERATOR_6, BarringInfo::ServiceType::OPERATOR_7,
|
||||
BarringInfo::ServiceType::OPERATOR_8, BarringInfo::ServiceType::OPERATOR_9,
|
||||
BarringInfo::ServiceType::OPERATOR_10, BarringInfo::ServiceType::OPERATOR_11,
|
||||
BarringInfo::ServiceType::OPERATOR_12, BarringInfo::ServiceType::OPERATOR_13,
|
||||
BarringInfo::ServiceType::OPERATOR_14, BarringInfo::ServiceType::OPERATOR_15,
|
||||
BarringInfo::ServiceType::OPERATOR_16, BarringInfo::ServiceType::OPERATOR_17,
|
||||
BarringInfo::ServiceType::OPERATOR_18, BarringInfo::ServiceType::OPERATOR_19,
|
||||
BarringInfo::ServiceType::OPERATOR_20, BarringInfo::ServiceType::OPERATOR_21,
|
||||
BarringInfo::ServiceType::OPERATOR_22, BarringInfo::ServiceType::OPERATOR_23,
|
||||
BarringInfo::ServiceType::OPERATOR_24, BarringInfo::ServiceType::OPERATOR_25,
|
||||
BarringInfo::ServiceType::OPERATOR_26, BarringInfo::ServiceType::OPERATOR_27,
|
||||
BarringInfo::ServiceType::OPERATOR_28, BarringInfo::ServiceType::OPERATOR_29,
|
||||
BarringInfo::ServiceType::OPERATOR_30, BarringInfo::ServiceType::OPERATOR_31,
|
||||
};
|
||||
|
||||
const std::set<BarringInfo::ServiceType>* compareTo = nullptr;
|
||||
|
||||
switch (radioRsp_v1_5->barringCellIdentity.getDiscriminator()) {
|
||||
case android::hardware::radio::V1_5::CellIdentity::hidl_discriminator::wcdma:
|
||||
// fall through
|
||||
case android::hardware::radio::V1_5::CellIdentity::hidl_discriminator::tdscdma:
|
||||
compareTo = &UTRA_SERVICES;
|
||||
break;
|
||||
case android::hardware::radio::V1_5::CellIdentity::hidl_discriminator::lte:
|
||||
compareTo = &EUTRA_SERVICES;
|
||||
break;
|
||||
case android::hardware::radio::V1_5::CellIdentity::hidl_discriminator::nr:
|
||||
compareTo = &NGRA_SERVICES;
|
||||
break;
|
||||
|
||||
case android::hardware::radio::V1_5::CellIdentity::hidl_discriminator::cdma:
|
||||
// fall through
|
||||
default:
|
||||
FAIL();
|
||||
break;
|
||||
}
|
||||
|
||||
std::set<BarringInfo::ServiceType> diff;
|
||||
|
||||
std::set_difference(reportedServices.begin(), reportedServices.end(), compareTo->begin(),
|
||||
compareTo->end(), std::inserter(diff, diff.begin()));
|
||||
}
|
||||
|
|
|
@ -86,6 +86,10 @@ class RadioResponse_v1_5 : public ::android::hardware::radio::V1_5::IRadioRespon
|
|||
// Whether Uicc applications are enabled or not.
|
||||
bool areUiccApplicationsEnabled;
|
||||
|
||||
// Barring Info Response
|
||||
::android::hardware::radio::V1_5::CellIdentity barringCellIdentity;
|
||||
::android::hardware::hidl_vec<::android::hardware::radio::V1_5::BarringInfo> barringInfos;
|
||||
|
||||
RadioResponse_v1_5(RadioHidlTest_v1_5& parent_v1_5);
|
||||
virtual ~RadioResponse_v1_5() = default;
|
||||
|
||||
|
|
|
@ -977,9 +977,11 @@ Return<void> RadioResponse_v1_5::setIndicationFilterResponse_1_5(const RadioResp
|
|||
|
||||
Return<void> RadioResponse_v1_5::getBarringInfoResponse(
|
||||
const RadioResponseInfo& info,
|
||||
const ::android::hardware::radio::V1_5::CellIdentity& /*cellIdentity*/,
|
||||
const ::android::hardware::radio::V1_5::CellIdentity& cellIdentity,
|
||||
const ::android::hardware::hidl_vec<::android::hardware::radio::V1_5::BarringInfo>&
|
||||
/*barringInfos*/) {
|
||||
barringInfos) {
|
||||
this->barringCellIdentity = cellIdentity;
|
||||
this->barringInfos = barringInfos;
|
||||
rspInfo = info;
|
||||
parent_v1_5.notify(info.serial);
|
||||
return Void();
|
||||
|
|
Loading…
Reference in a new issue