1 /* 2 * Copyright (C) 2017 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 <radio_hidl_hal_utils_v1_1.h> 18 #include <vector> 19 20 /* 21 * Test IRadio.setSimCardPower() for the response returned. 22 */ 23 TEST_F(RadioHidlTest_v1_1, setSimCardPower_1_1) { 24 /* Record the sim card state for the testing environment */ 25 CardState cardStateForTest = cardStatus.cardState; 26 27 /* Test setSimCardPower power down */ 28 serial = GetRandomSerialNumber(); 29 radio_v1_1->setSimCardPower_1_1(serial, CardPowerState::POWER_DOWN); 30 EXPECT_EQ(std::cv_status::no_timeout, wait()); 31 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_1->rspInfo.type); 32 EXPECT_EQ(serial, radioRsp_v1_1->rspInfo.serial); 33 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_1->rspInfo.error, 34 {RadioError::NONE, RadioError::REQUEST_NOT_SUPPORTED, 35 RadioError::INVALID_ARGUMENTS, RadioError::RADIO_NOT_AVAILABLE})); 36 /* Wait some time for setting sim power down and then verify it */ 37 updateSimCardStatus(); 38 auto startTime = std::chrono::system_clock::now(); 39 while (cardStatus.cardState != CardState::ABSENT && 40 std::chrono::duration_cast<chrono::seconds>(std::chrono::system_clock::now() - startTime) 41 .count() < 80) { 42 /* Set 2 seconds as interval to check card status */ 43 sleep(2); 44 updateSimCardStatus(); 45 } 46 EXPECT_EQ(CardState::ABSENT, cardStatus.cardState); 47 48 /* Test setSimCardPower power up */ 49 serial = GetRandomSerialNumber(); 50 radio_v1_1->setSimCardPower_1_1(serial, CardPowerState::POWER_UP); 51 EXPECT_EQ(std::cv_status::no_timeout, wait()); 52 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_1->rspInfo.type); 53 EXPECT_EQ(serial, radioRsp_v1_1->rspInfo.serial); 54 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_1->rspInfo.error, 55 {RadioError::NONE, RadioError::REQUEST_NOT_SUPPORTED, 56 RadioError::INVALID_ARGUMENTS, RadioError::RADIO_NOT_AVAILABLE})); 57 58 /** 59 * If the sim card status for the testing environment is PRESENT, 60 * verify if sim status is reset back. 61 */ 62 if (cardStateForTest == CardState::PRESENT) { 63 /* Wait some time for resetting back to sim power on and then verify it */ 64 updateSimCardStatus(); 65 startTime = std::chrono::system_clock::now(); 66 while (cardStatus.cardState != CardState::PRESENT && 67 std::chrono::duration_cast<chrono::seconds>(std::chrono::system_clock::now() - 68 startTime) 69 .count() < 80) { 70 /* Set 2 seconds as interval to check card status */ 71 sleep(2); 72 updateSimCardStatus(); 73 } 74 EXPECT_EQ(CardState::PRESENT, cardStatus.cardState); 75 } 76 } 77 78 /* 79 * Test IRadio.startNetworkScan() for the response returned. 80 */ 81 TEST_F(RadioHidlTest_v1_1, startNetworkScan) { 82 serial = GetRandomSerialNumber(); 83 84 NetworkScanRequest request; 85 request.type = ScanType::ONE_SHOT; 86 request.interval = 60; 87 RadioAccessSpecifier specifier; 88 specifier.radioAccessNetwork = RadioAccessNetworks::GERAN; 89 specifier.geranBands.resize(2); 90 specifier.geranBands[0] = GeranBands::BAND_450; 91 specifier.geranBands[1] = GeranBands::BAND_480; 92 specifier.channels.resize(2); 93 specifier.channels[0] = 1; 94 specifier.channels[1] = 2; 95 request.specifiers.resize(1); 96 request.specifiers[0] = specifier; 97 98 radio_v1_1->startNetworkScan(serial, request); 99 EXPECT_EQ(std::cv_status::no_timeout, wait()); 100 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_1->rspInfo.type); 101 EXPECT_EQ(serial, radioRsp_v1_1->rspInfo.serial); 102 103 if (cardStatus.cardState == CardState::ABSENT) { 104 ALOGI("startNetworkScan, rspInfo.error = %d\n", (int32_t)radioRsp_v1_1->rspInfo.error); 105 ASSERT_TRUE(CheckAnyOfErrors( 106 radioRsp_v1_1->rspInfo.error, 107 {RadioError::NONE, RadioError::REQUEST_NOT_SUPPORTED, RadioError::INVALID_ARGUMENTS, 108 RadioError::SIM_ABSENT, RadioError::OPERATION_NOT_ALLOWED})); 109 } 110 } 111 112 /* 113 * Test IRadio.startNetworkScan() for the response returned. 114 */ 115 TEST_F(RadioHidlTest_v1_1, startNetworkScan_InvalidArgument) { 116 serial = GetRandomSerialNumber(); 117 118 NetworkScanRequest request; 119 request.type = ScanType::ONE_SHOT; 120 request.interval = 60; 121 122 radio_v1_1->startNetworkScan(serial, request); 123 EXPECT_EQ(std::cv_status::no_timeout, wait()); 124 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_1->rspInfo.type); 125 EXPECT_EQ(serial, radioRsp_v1_1->rspInfo.serial); 126 127 if (cardStatus.cardState == CardState::ABSENT) { 128 ALOGI("startNetworkScan_InvalidArgument, rspInfo.error = %d\n", 129 (int32_t)radioRsp_v1_1->rspInfo.error); 130 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_1->rspInfo.error, 131 {RadioError::INVALID_ARGUMENTS, RadioError::SIM_ABSENT, 132 RadioError::REQUEST_NOT_SUPPORTED})); 133 } 134 } 135 136 /* 137 * Test IRadio.stopNetworkScan() for the response returned. 138 */ 139 TEST_F(RadioHidlTest_v1_1, stopNetworkScan) { 140 serial = GetRandomSerialNumber(); 141 142 radio_v1_1->stopNetworkScan(serial); 143 EXPECT_EQ(std::cv_status::no_timeout, wait()); 144 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_1->rspInfo.type); 145 EXPECT_EQ(serial, radioRsp_v1_1->rspInfo.serial); 146 147 if (cardStatus.cardState == CardState::ABSENT) { 148 ALOGI("stopNetworkScan rspInfo.error = %d\n", (int32_t)radioRsp_v1_1->rspInfo.error); 149 ASSERT_TRUE(CheckAnyOfErrors( 150 radioRsp_v1_1->rspInfo.error, 151 {RadioError::NONE, RadioError::SIM_ABSENT, RadioError::REQUEST_NOT_SUPPORTED})); 152 } 153 } 154 155 /* 156 * Test IRadio.setCarrierInfoForImsiEncryption() for the response returned. 157 */ 158 TEST_F(RadioHidlTest_v1_1, setCarrierInfoForImsiEncryption) { 159 serial = GetRandomSerialNumber(); 160 ImsiEncryptionInfo imsiInfo; 161 imsiInfo.mcc = "310"; 162 imsiInfo.mnc = "004"; 163 imsiInfo.carrierKey = (std::vector<uint8_t>){1, 2, 3, 4, 5, 6}; 164 imsiInfo.keyIdentifier = "Test"; 165 imsiInfo.expirationTime = 20180101; 166 167 radio_v1_1->setCarrierInfoForImsiEncryption(serial, imsiInfo); 168 EXPECT_EQ(std::cv_status::no_timeout, wait()); 169 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_1->rspInfo.type); 170 EXPECT_EQ(serial, radioRsp_v1_1->rspInfo.serial); 171 172 if (cardStatus.cardState == CardState::ABSENT) { 173 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_1->rspInfo.error, 174 {RadioError::NONE, RadioError::REQUEST_NOT_SUPPORTED})); 175 } 176 } 177 178 /* 179 * Test IRadio.startKeepalive() for the response returned. 180 */ 181 TEST_F(RadioHidlTest_v1_1, startKeepalive) { 182 std::vector<KeepaliveRequest> requests = { 183 { 184 // Invalid IPv4 source address 185 KeepaliveType::NATT_IPV4, 186 {192, 168, 0 /*, 100*/}, 187 1234, 188 {8, 8, 4, 4}, 189 4500, 190 20000, 191 0xBAD, 192 }, 193 { 194 // Invalid IPv4 destination address 195 KeepaliveType::NATT_IPV4, 196 {192, 168, 0, 100}, 197 1234, 198 {8, 8, 4, 4, 1, 2, 3, 4}, 199 4500, 200 20000, 201 0xBAD, 202 }, 203 { 204 // Invalid Keepalive Type 205 static_cast<KeepaliveType>(-1), 206 {192, 168, 0, 100}, 207 1234, 208 {8, 8, 4, 4}, 209 4500, 210 20000, 211 0xBAD, 212 }, 213 { 214 // Invalid IPv6 source address 215 KeepaliveType::NATT_IPV6, 216 {0xDE, 0xAD, 0xBE, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xED, 217 0xBE, 0xEF, 0xBD}, 218 1234, 219 {0x20, 0x01, 0x48, 0x60, 0x48, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 220 0x88, 0x44}, 221 4500, 222 20000, 223 0xBAD, 224 }, 225 { 226 // Invalid IPv6 destination address 227 KeepaliveType::NATT_IPV6, 228 {0xDE, 0xAD, 0xBE, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xED, 229 0xBE, 0xEF}, 230 1234, 231 {0x20, 0x01, 0x48, 0x60, 0x48, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 232 0x88, 233 /*0x44*/}, 234 4500, 235 20000, 236 0xBAD, 237 }, 238 { 239 // Invalid Context ID (cid), this should survive the initial 240 // range checking and fail in the modem data layer 241 KeepaliveType::NATT_IPV4, 242 {192, 168, 0, 100}, 243 1234, 244 {8, 8, 4, 4}, 245 4500, 246 20000, 247 0xBAD, 248 }, 249 { 250 // Invalid Context ID (cid), this should survive the initial 251 // range checking and fail in the modem data layer 252 KeepaliveType::NATT_IPV6, 253 {0xDE, 0xAD, 0xBE, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xED, 254 0xBE, 0xEF}, 255 1234, 256 {0x20, 0x01, 0x48, 0x60, 0x48, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 257 0x88, 0x44}, 258 4500, 259 20000, 260 0xBAD, 261 }}; 262 263 for (auto req = requests.begin(); req != requests.end(); req++) { 264 serial = GetRandomSerialNumber(); 265 radio_v1_1->startKeepalive(serial, *req); 266 EXPECT_EQ(std::cv_status::no_timeout, wait()); 267 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_1->rspInfo.type); 268 EXPECT_EQ(serial, radioRsp_v1_1->rspInfo.serial); 269 270 ASSERT_TRUE( 271 CheckAnyOfErrors(radioRsp_v1_1->rspInfo.error, 272 {RadioError::INVALID_ARGUMENTS, RadioError::REQUEST_NOT_SUPPORTED})); 273 } 274 } 275 276 /* 277 * Test IRadio.stopKeepalive() for the response returned. 278 */ 279 TEST_F(RadioHidlTest_v1_1, stopKeepalive) { 280 serial = GetRandomSerialNumber(); 281 282 radio_v1_1->stopKeepalive(serial, 0xBAD); 283 EXPECT_EQ(std::cv_status::no_timeout, wait()); 284 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_1->rspInfo.type); 285 EXPECT_EQ(serial, radioRsp_v1_1->rspInfo.serial); 286 287 ASSERT_TRUE( 288 CheckAnyOfErrors(radioRsp_v1_1->rspInfo.error, 289 {RadioError::INVALID_ARGUMENTS, RadioError::REQUEST_NOT_SUPPORTED})); 290 } 291