blob: 58aeaab3f478c90bd130f5f8d1a9797df6a45fc7 [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
47 // Assert IRadioConfig exists before testing
48 std::shared_ptr<aidl::android::hardware::radio::config::IRadioConfig> radioConfig =
49 aidl::android::hardware::radio::config::IRadioConfig::fromBinder(
50 ndk::SpAIBinder(AServiceManager_waitForService(
51 "android.hardware.radio.config.IRadioConfig/default")));
52 ASSERT_NE(nullptr, radioConfig.get());
53}
54
55/*
56 * Test IRadioMessaging.sendSms() for the response returned.
57 */
58TEST_P(RadioMessagingTest, sendSms) {
59 LOG(DEBUG) << "sendSms";
60 serial = GetRandomSerialNumber();
61 GsmSmsMessage msg;
62 msg.smscPdu = "";
63 msg.pdu = "01000b916105770203f3000006d4f29c3e9b01";
64
65 radio_messaging->sendSms(serial, msg);
66
67 EXPECT_EQ(std::cv_status::no_timeout, wait());
68 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
69 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
70
71 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
72 ASSERT_TRUE(CheckAnyOfErrors(
73 radioRsp_messaging->rspInfo.error,
74 {RadioError::INVALID_ARGUMENTS, RadioError::INVALID_STATE, RadioError::SIM_ABSENT},
75 CHECK_GENERAL_ERROR));
76 EXPECT_EQ(0, radioRsp_messaging->sendSmsResult.errorCode);
77 }
78 LOG(DEBUG) << "sendSms finished";
79}
80
81/*
82 * Test IRadioMessaging.sendSmsExpectMore() for the response returned.
83 */
84TEST_P(RadioMessagingTest, sendSmsExpectMore) {
85 LOG(DEBUG) << "sendSmsExpectMore";
86 serial = GetRandomSerialNumber();
87 GsmSmsMessage msg;
88 msg.smscPdu = "";
89 msg.pdu = "01000b916105770203f3000006d4f29c3e9b01";
90
91 radio_messaging->sendSmsExpectMore(serial, msg);
92
93 EXPECT_EQ(std::cv_status::no_timeout, wait());
94 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
95 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
96
97 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
98 ASSERT_TRUE(CheckAnyOfErrors(
99 radioRsp_messaging->rspInfo.error,
100 {RadioError::INVALID_ARGUMENTS, RadioError::INVALID_STATE, RadioError::SIM_ABSENT},
101 CHECK_GENERAL_ERROR));
102 }
103 LOG(DEBUG) << "sendSmsExpectMore finished";
104}
105
106/*
107 * Test IRadioMessaging.sendCdmaSms() for the response returned.
108 */
109TEST_P(RadioMessagingTest, sendCdmaSms) {
110 LOG(DEBUG) << "sendCdmaSms";
111 serial = GetRandomSerialNumber();
112
113 // Create a CdmaSmsAddress
114 CdmaSmsAddress cdmaSmsAddress;
115 cdmaSmsAddress.digitMode = CdmaSmsAddress::DIGIT_MODE_FOUR_BIT;
116 cdmaSmsAddress.isNumberModeDataNetwork = false;
117 cdmaSmsAddress.numberType = CdmaSmsAddress::NUMBER_TYPE_UNKNOWN;
118 cdmaSmsAddress.numberPlan = CdmaSmsAddress::NUMBER_PLAN_UNKNOWN;
119 cdmaSmsAddress.digits = (std::vector<uint8_t>){11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
120
121 // Create a CdmaSmsSubAddress
122 CdmaSmsSubaddress cdmaSmsSubaddress;
123 cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddress::SUBADDRESS_TYPE_NSAP;
124 cdmaSmsSubaddress.odd = false;
125 cdmaSmsSubaddress.digits = (std::vector<uint8_t>){};
126
127 // Create a CdmaSmsMessage
128 CdmaSmsMessage cdmaSmsMessage;
129 cdmaSmsMessage.teleserviceId = 4098;
130 cdmaSmsMessage.isServicePresent = false;
131 cdmaSmsMessage.serviceCategory = 0;
132 cdmaSmsMessage.address = cdmaSmsAddress;
133 cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
134 cdmaSmsMessage.bearerData =
135 (std::vector<uint8_t>){15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
136
137 radio_messaging->sendCdmaSms(serial, cdmaSmsMessage);
138
139 EXPECT_EQ(std::cv_status::no_timeout, wait());
140 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
141 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
142
143 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
144 ASSERT_TRUE(CheckAnyOfErrors(
145 radioRsp_messaging->rspInfo.error,
146 {RadioError::INVALID_ARGUMENTS, RadioError::INVALID_STATE, RadioError::SIM_ABSENT},
147 CHECK_GENERAL_ERROR));
148 }
149 LOG(DEBUG) << "sendCdmaSms finished";
150}
151
152/*
153 * Test IRadioMessaging.sendCdmaSmsExpectMore() for the response returned.
154 */
155TEST_P(RadioMessagingTest, sendCdmaSmsExpectMore) {
156 serial = GetRandomSerialNumber();
157
158 // Create a CdmaSmsAddress
159 CdmaSmsAddress cdmaSmsAddress;
160 cdmaSmsAddress.digitMode = CdmaSmsAddress::DIGIT_MODE_FOUR_BIT;
161 cdmaSmsAddress.isNumberModeDataNetwork = false;
162 cdmaSmsAddress.numberType = CdmaSmsAddress::NUMBER_TYPE_UNKNOWN;
163 cdmaSmsAddress.numberPlan = CdmaSmsAddress::NUMBER_PLAN_UNKNOWN;
164 cdmaSmsAddress.digits = (std::vector<uint8_t>){11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
165
166 // Create a CdmaSmsSubAddress
167 CdmaSmsSubaddress cdmaSmsSubaddress;
168 cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddress::SUBADDRESS_TYPE_NSAP;
169 cdmaSmsSubaddress.odd = false;
170 cdmaSmsSubaddress.digits = (std::vector<uint8_t>){};
171
172 // Create a CdmaSmsMessage
173 CdmaSmsMessage cdmaSmsMessage;
174 cdmaSmsMessage.teleserviceId = 4098;
175 cdmaSmsMessage.isServicePresent = false;
176 cdmaSmsMessage.serviceCategory = 0;
177 cdmaSmsMessage.address = cdmaSmsAddress;
178 cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
179 cdmaSmsMessage.bearerData =
180 (std::vector<uint8_t>){15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
181
182 radio_messaging->sendCdmaSmsExpectMore(serial, cdmaSmsMessage);
183
184 EXPECT_EQ(std::cv_status::no_timeout, wait());
185 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
186 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
187
188 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
189 ASSERT_TRUE(CheckAnyOfErrors(
190 radioRsp_messaging->rspInfo.error,
191 {RadioError::INVALID_ARGUMENTS, RadioError::INVALID_STATE, RadioError::SIM_ABSENT},
192 CHECK_GENERAL_ERROR));
193 }
194}