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}