1e4c6323d0819a4a71c321a37eefcdef7b06e4649Sanket Padawe/* 2e4c6323d0819a4a71c321a37eefcdef7b06e4649Sanket Padawe * Copyright (C) 2017 The Android Open Source Project 3e4c6323d0819a4a71c321a37eefcdef7b06e4649Sanket Padawe * 4e4c6323d0819a4a71c321a37eefcdef7b06e4649Sanket Padawe * Licensed under the Apache License, Version 2.0 (the "License"); 5e4c6323d0819a4a71c321a37eefcdef7b06e4649Sanket Padawe * you may not use this file except in compliance with the License. 6e4c6323d0819a4a71c321a37eefcdef7b06e4649Sanket Padawe * You may obtain a copy of the License at 7e4c6323d0819a4a71c321a37eefcdef7b06e4649Sanket Padawe * 8e4c6323d0819a4a71c321a37eefcdef7b06e4649Sanket Padawe * http://www.apache.org/licenses/LICENSE-2.0 9e4c6323d0819a4a71c321a37eefcdef7b06e4649Sanket Padawe * 10e4c6323d0819a4a71c321a37eefcdef7b06e4649Sanket Padawe * Unless required by applicable law or agreed to in writing, software 11e4c6323d0819a4a71c321a37eefcdef7b06e4649Sanket Padawe * distributed under the License is distributed on an "AS IS" BASIS, 12e4c6323d0819a4a71c321a37eefcdef7b06e4649Sanket Padawe * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e4c6323d0819a4a71c321a37eefcdef7b06e4649Sanket Padawe * See the License for the specific language governing permissions and 14e4c6323d0819a4a71c321a37eefcdef7b06e4649Sanket Padawe * limitations under the License. 15e4c6323d0819a4a71c321a37eefcdef7b06e4649Sanket Padawe */ 16e4c6323d0819a4a71c321a37eefcdef7b06e4649Sanket Padawe 170c74fc78392703e19ba51ce0ced510a55a0a994bsqian#include <radio_hidl_hal_utils_v1_0.h> 18e4c6323d0819a4a71c321a37eefcdef7b06e4649Sanket Padawe 19e4c6323d0819a4a71c321a37eefcdef7b06e4649Sanket Padawevoid RadioHidlTest::SetUp() { 2021b0a0ad2555d3cf5231864a474399fdb00992b2Zhuoyao Zhang radio = ::testing::VtsHalHidlTargetTestBase::getService<IRadio>( 2121b0a0ad2555d3cf5231864a474399fdb00992b2Zhuoyao Zhang RadioHidlEnvironment::Instance()->getServiceName<IRadio>(hidl_string(RADIO_SERVICE_NAME))); 22fe32af21bdc1ced4a2736d2f3f5fe9ccdf0e36f1sqian if (radio == NULL) { 23fe32af21bdc1ced4a2736d2f3f5fe9ccdf0e36f1sqian sleep(60); 24fe32af21bdc1ced4a2736d2f3f5fe9ccdf0e36f1sqian radio = ::testing::VtsHalHidlTargetTestBase::getService<IRadio>( 2521b0a0ad2555d3cf5231864a474399fdb00992b2Zhuoyao Zhang RadioHidlEnvironment::Instance()->getServiceName<IRadio>( 2621b0a0ad2555d3cf5231864a474399fdb00992b2Zhuoyao Zhang hidl_string(RADIO_SERVICE_NAME))); 27fe32af21bdc1ced4a2736d2f3f5fe9ccdf0e36f1sqian } 2854d88b7a997888b71c682dddf0f24d6dccbfbcddsqian ASSERT_NE(nullptr, radio.get()); 29e4c6323d0819a4a71c321a37eefcdef7b06e4649Sanket Padawe 3054d88b7a997888b71c682dddf0f24d6dccbfbcddsqian radioRsp = new (std::nothrow) RadioResponse(*this); 3154d88b7a997888b71c682dddf0f24d6dccbfbcddsqian ASSERT_NE(nullptr, radioRsp.get()); 32e4c6323d0819a4a71c321a37eefcdef7b06e4649Sanket Padawe 3342c66f700aedb76506f0cd9f7e3be1316bdc7846sqian count = 0; 34e4c6323d0819a4a71c321a37eefcdef7b06e4649Sanket Padawe 3554d88b7a997888b71c682dddf0f24d6dccbfbcddsqian radioInd = new (std::nothrow) RadioIndication(*this); 3654d88b7a997888b71c682dddf0f24d6dccbfbcddsqian ASSERT_NE(nullptr, radioInd.get()); 3754d88b7a997888b71c682dddf0f24d6dccbfbcddsqian 3842c66f700aedb76506f0cd9f7e3be1316bdc7846sqian radio->setResponseFunctions(radioRsp, radioInd); 391512edb314e42dbae1e7b55971d466904ed88e13Sanket Padawe 40788eb8083059ff0dca686734ceebf942042c4893sqian updateSimCardStatus(); 4142c66f700aedb76506f0cd9f7e3be1316bdc7846sqian EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type); 4242c66f700aedb76506f0cd9f7e3be1316bdc7846sqian EXPECT_EQ(serial, radioRsp->rspInfo.serial); 4342c66f700aedb76506f0cd9f7e3be1316bdc7846sqian EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error); 440e323b268953c208124db675a6d6d2af2b5a145dsqian 45788eb8083059ff0dca686734ceebf942042c4893sqian /* Enforce Vts Testing with Sim Status Present only. */ 46788eb8083059ff0dca686734ceebf942042c4893sqian EXPECT_EQ(CardState::PRESENT, cardStatus.cardState); 47e4c6323d0819a4a71c321a37eefcdef7b06e4649Sanket Padawe} 48e4c6323d0819a4a71c321a37eefcdef7b06e4649Sanket Padawe 49788eb8083059ff0dca686734ceebf942042c4893sqianvoid RadioHidlTest::notify(int receivedSerial) { 5042c66f700aedb76506f0cd9f7e3be1316bdc7846sqian std::unique_lock<std::mutex> lock(mtx); 51788eb8083059ff0dca686734ceebf942042c4893sqian if (serial == receivedSerial) { 52788eb8083059ff0dca686734ceebf942042c4893sqian count++; 53788eb8083059ff0dca686734ceebf942042c4893sqian cv.notify_one(); 54788eb8083059ff0dca686734ceebf942042c4893sqian } 55e4c6323d0819a4a71c321a37eefcdef7b06e4649Sanket Padawe} 56e4c6323d0819a4a71c321a37eefcdef7b06e4649Sanket Padawe 576429f0677f87c5657802d26345dc3334ab26e33aIris Changstd::cv_status RadioHidlTest::wait(int sec) { 5842c66f700aedb76506f0cd9f7e3be1316bdc7846sqian std::unique_lock<std::mutex> lock(mtx); 5987bde3312ab61714a3469f59084b40c46a6627deYuexi Ma 6042c66f700aedb76506f0cd9f7e3be1316bdc7846sqian std::cv_status status = std::cv_status::no_timeout; 6142c66f700aedb76506f0cd9f7e3be1316bdc7846sqian auto now = std::chrono::system_clock::now(); 6242c66f700aedb76506f0cd9f7e3be1316bdc7846sqian while (count == 0) { 636429f0677f87c5657802d26345dc3334ab26e33aIris Chang status = cv.wait_until(lock, now + std::chrono::seconds(sec)); 6442c66f700aedb76506f0cd9f7e3be1316bdc7846sqian if (status == std::cv_status::timeout) { 6542c66f700aedb76506f0cd9f7e3be1316bdc7846sqian return status; 6642c66f700aedb76506f0cd9f7e3be1316bdc7846sqian } 6742c66f700aedb76506f0cd9f7e3be1316bdc7846sqian } 6842c66f700aedb76506f0cd9f7e3be1316bdc7846sqian count--; 6942c66f700aedb76506f0cd9f7e3be1316bdc7846sqian return status; 7021b0a0ad2555d3cf5231864a474399fdb00992b2Zhuoyao Zhang} 71788eb8083059ff0dca686734ceebf942042c4893sqian 72788eb8083059ff0dca686734ceebf942042c4893sqianvoid RadioHidlTest::updateSimCardStatus() { 73788eb8083059ff0dca686734ceebf942042c4893sqian serial = GetRandomSerialNumber(); 74788eb8083059ff0dca686734ceebf942042c4893sqian radio->getIccCardStatus(serial); 75788eb8083059ff0dca686734ceebf942042c4893sqian EXPECT_EQ(std::cv_status::no_timeout, wait()); 76788eb8083059ff0dca686734ceebf942042c4893sqian}