blob: 8abd91d709b484912c8d4a54a059f10484a0e015 [file] [log] [blame]
Sarah Chind2a41192021-12-21 11:34:00 -08001/*
2 * Copyright (C) 2021 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 <aidl/android/hardware/radio/config/IRadioConfig.h>
18#include <android-base/logging.h>
19#include <android/binder_manager.h>
20
21#include "radio_messaging_utils.h"
22
23#define ASSERT_OK(ret) ASSERT_TRUE(ret.isOk())
24
25void RadioMessagingTest::SetUp() {
26 std::string serviceName = GetParam();
27
28 if (!isServiceValidForDeviceConfiguration(serviceName)) {
29 ALOGI("Skipped the test due to device configuration.");
30 GTEST_SKIP();
31 }
32
33 radio_messaging = IRadioMessaging::fromBinder(
34 ndk::SpAIBinder(AServiceManager_waitForService(GetParam().c_str())));
35 ASSERT_NE(nullptr, radio_messaging.get());
36
37 radioRsp_messaging = ndk::SharedRefBase::make<RadioMessagingResponse>(*this);
38 ASSERT_NE(nullptr, radioRsp_messaging.get());
39
40 count_ = 0;
41
42 radioInd_messaging = ndk::SharedRefBase::make<RadioMessagingIndication>(*this);
43 ASSERT_NE(nullptr, radioInd_messaging.get());
44
45 radio_messaging->setResponseFunctions(radioRsp_messaging, radioInd_messaging);
46
Sarah Chin91997ac2021-12-29 00:35:12 -080047 // Assert IRadioSim exists and SIM is present before testing
48 radio_sim = sim::IRadioSim::fromBinder(ndk::SpAIBinder(
49 AServiceManager_waitForService("android.hardware.radio.sim.IRadioSim/slot1")));
50 ASSERT_NE(nullptr, radio_sim.get());
51 updateSimCardStatus();
52 EXPECT_EQ(CardStatus::STATE_PRESENT, cardStatus.cardState);
53
Sarah Chind2a41192021-12-21 11:34:00 -080054 // Assert IRadioConfig exists before testing
Sarah Chin91997ac2021-12-29 00:35:12 -080055 radio_config = config::IRadioConfig::fromBinder(ndk::SpAIBinder(
56 AServiceManager_waitForService("android.hardware.radio.config.IRadioConfig/default")));
57 ASSERT_NE(nullptr, radio_config.get());
Sarah Chind2a41192021-12-21 11:34:00 -080058}
59
60/*
61 * Test IRadioMessaging.sendSms() for the response returned.
62 */
63TEST_P(RadioMessagingTest, sendSms) {
64 LOG(DEBUG) << "sendSms";
65 serial = GetRandomSerialNumber();
66 GsmSmsMessage msg;
67 msg.smscPdu = "";
68 msg.pdu = "01000b916105770203f3000006d4f29c3e9b01";
69
70 radio_messaging->sendSms(serial, msg);
71
72 EXPECT_EQ(std::cv_status::no_timeout, wait());
73 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
74 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
75
76 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
77 ASSERT_TRUE(CheckAnyOfErrors(
78 radioRsp_messaging->rspInfo.error,
79 {RadioError::INVALID_ARGUMENTS, RadioError::INVALID_STATE, RadioError::SIM_ABSENT},
80 CHECK_GENERAL_ERROR));
81 EXPECT_EQ(0, radioRsp_messaging->sendSmsResult.errorCode);
82 }
83 LOG(DEBUG) << "sendSms finished";
84}
85
86/*
87 * Test IRadioMessaging.sendSmsExpectMore() for the response returned.
88 */
89TEST_P(RadioMessagingTest, sendSmsExpectMore) {
90 LOG(DEBUG) << "sendSmsExpectMore";
91 serial = GetRandomSerialNumber();
92 GsmSmsMessage msg;
93 msg.smscPdu = "";
94 msg.pdu = "01000b916105770203f3000006d4f29c3e9b01";
95
96 radio_messaging->sendSmsExpectMore(serial, msg);
97
98 EXPECT_EQ(std::cv_status::no_timeout, wait());
99 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
100 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
101
102 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
103 ASSERT_TRUE(CheckAnyOfErrors(
104 radioRsp_messaging->rspInfo.error,
105 {RadioError::INVALID_ARGUMENTS, RadioError::INVALID_STATE, RadioError::SIM_ABSENT},
106 CHECK_GENERAL_ERROR));
107 }
108 LOG(DEBUG) << "sendSmsExpectMore finished";
109}
110
111/*
112 * Test IRadioMessaging.sendCdmaSms() for the response returned.
113 */
114TEST_P(RadioMessagingTest, sendCdmaSms) {
115 LOG(DEBUG) << "sendCdmaSms";
116 serial = GetRandomSerialNumber();
117
118 // Create a CdmaSmsAddress
119 CdmaSmsAddress cdmaSmsAddress;
120 cdmaSmsAddress.digitMode = CdmaSmsAddress::DIGIT_MODE_FOUR_BIT;
121 cdmaSmsAddress.isNumberModeDataNetwork = false;
122 cdmaSmsAddress.numberType = CdmaSmsAddress::NUMBER_TYPE_UNKNOWN;
123 cdmaSmsAddress.numberPlan = CdmaSmsAddress::NUMBER_PLAN_UNKNOWN;
124 cdmaSmsAddress.digits = (std::vector<uint8_t>){11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
125
126 // Create a CdmaSmsSubAddress
127 CdmaSmsSubaddress cdmaSmsSubaddress;
128 cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddress::SUBADDRESS_TYPE_NSAP;
129 cdmaSmsSubaddress.odd = false;
130 cdmaSmsSubaddress.digits = (std::vector<uint8_t>){};
131
132 // Create a CdmaSmsMessage
133 CdmaSmsMessage cdmaSmsMessage;
134 cdmaSmsMessage.teleserviceId = 4098;
135 cdmaSmsMessage.isServicePresent = false;
136 cdmaSmsMessage.serviceCategory = 0;
137 cdmaSmsMessage.address = cdmaSmsAddress;
138 cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
139 cdmaSmsMessage.bearerData =
140 (std::vector<uint8_t>){15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
141
142 radio_messaging->sendCdmaSms(serial, cdmaSmsMessage);
143
144 EXPECT_EQ(std::cv_status::no_timeout, wait());
145 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
146 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
147
148 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
149 ASSERT_TRUE(CheckAnyOfErrors(
150 radioRsp_messaging->rspInfo.error,
151 {RadioError::INVALID_ARGUMENTS, RadioError::INVALID_STATE, RadioError::SIM_ABSENT},
152 CHECK_GENERAL_ERROR));
153 }
154 LOG(DEBUG) << "sendCdmaSms finished";
155}
156
157/*
158 * Test IRadioMessaging.sendCdmaSmsExpectMore() for the response returned.
159 */
160TEST_P(RadioMessagingTest, sendCdmaSmsExpectMore) {
161 serial = GetRandomSerialNumber();
162
163 // Create a CdmaSmsAddress
164 CdmaSmsAddress cdmaSmsAddress;
165 cdmaSmsAddress.digitMode = CdmaSmsAddress::DIGIT_MODE_FOUR_BIT;
166 cdmaSmsAddress.isNumberModeDataNetwork = false;
167 cdmaSmsAddress.numberType = CdmaSmsAddress::NUMBER_TYPE_UNKNOWN;
168 cdmaSmsAddress.numberPlan = CdmaSmsAddress::NUMBER_PLAN_UNKNOWN;
169 cdmaSmsAddress.digits = (std::vector<uint8_t>){11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
170
171 // Create a CdmaSmsSubAddress
172 CdmaSmsSubaddress cdmaSmsSubaddress;
173 cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddress::SUBADDRESS_TYPE_NSAP;
174 cdmaSmsSubaddress.odd = false;
175 cdmaSmsSubaddress.digits = (std::vector<uint8_t>){};
176
177 // Create a CdmaSmsMessage
178 CdmaSmsMessage cdmaSmsMessage;
179 cdmaSmsMessage.teleserviceId = 4098;
180 cdmaSmsMessage.isServicePresent = false;
181 cdmaSmsMessage.serviceCategory = 0;
182 cdmaSmsMessage.address = cdmaSmsAddress;
183 cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
184 cdmaSmsMessage.bearerData =
185 (std::vector<uint8_t>){15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
186
187 radio_messaging->sendCdmaSmsExpectMore(serial, cdmaSmsMessage);
188
189 EXPECT_EQ(std::cv_status::no_timeout, wait());
190 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
191 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
192
193 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
194 ASSERT_TRUE(CheckAnyOfErrors(
195 radioRsp_messaging->rspInfo.error,
196 {RadioError::INVALID_ARGUMENTS, RadioError::INVALID_STATE, RadioError::SIM_ABSENT},
197 CHECK_GENERAL_ERROR));
198 }
199}