mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 16:50:18 +00:00
Add VTS tests for Sap Apis.
Bug: 32022332 Test: vts Change-Id: I9a55978aa485a59510090f46a8e5edfb87bccc0e
This commit is contained in:
@@ -44,3 +44,27 @@ cc_test {
|
||||
"-g",
|
||||
],
|
||||
}
|
||||
|
||||
cc_test {
|
||||
name: "VtsHalSapV1_0TargetTest",
|
||||
defaults: ["hidl_defaults"],
|
||||
srcs: ["sap_callback.cpp",
|
||||
"sap_hidl_hal_api.cpp",
|
||||
"sap_hidl_hal_test.cpp",
|
||||
"VtsHalSapV1_0TargetTest.cpp"],
|
||||
shared_libs: [
|
||||
"libbase",
|
||||
"liblog",
|
||||
"libcutils",
|
||||
"libhidlbase",
|
||||
"libhidltransport",
|
||||
"libnativehelper",
|
||||
"libutils",
|
||||
"android.hardware.radio@1.0",
|
||||
],
|
||||
static_libs: ["VtsHalHidlTargetTestBase"],
|
||||
cflags: [
|
||||
"-O0",
|
||||
"-g",
|
||||
],
|
||||
}
|
||||
|
||||
28
radio/1.0/vts/functional/VtsHalSapV1_0TargetTest.cpp
Normal file
28
radio/1.0/vts/functional/VtsHalSapV1_0TargetTest.cpp
Normal file
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include<sap_hidl_hal_utils.h>
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
// Add Sim-access Profile Hidl Environment
|
||||
::testing::AddGlobalTestEnvironment(new SapHidlEnvironment);
|
||||
::testing::InitGoogleTest(&argc, argv);
|
||||
|
||||
int status = RUN_ALL_TESTS();
|
||||
LOG(INFO) << "Test result = " << status;
|
||||
|
||||
return status;
|
||||
}
|
||||
92
radio/1.0/vts/functional/sap_callback.cpp
Normal file
92
radio/1.0/vts/functional/sap_callback.cpp
Normal file
@@ -0,0 +1,92 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include<sap_hidl_hal_utils.h>
|
||||
|
||||
SapCallback::SapCallback(SapHidlTest& parent) : parent(parent) {
|
||||
}
|
||||
|
||||
Return<void> SapCallback::connectResponse(int32_t token, SapConnectRsp /*sapConnectRsp*/,
|
||||
int32_t /*maxMsgSize*/) {
|
||||
sapResponseToken = token;
|
||||
parent.notify();
|
||||
return Void();
|
||||
}
|
||||
|
||||
Return<void> SapCallback::disconnectResponse(int32_t token) {
|
||||
sapResponseToken = token;
|
||||
parent.notify();
|
||||
return Void();
|
||||
}
|
||||
|
||||
Return<void> SapCallback::disconnectIndication(int32_t /*token*/,
|
||||
SapDisconnectType /*disconnectType*/) {
|
||||
return Void();
|
||||
}
|
||||
|
||||
Return<void> SapCallback::apduResponse(int32_t token, SapResultCode resultCode,
|
||||
const ::android::hardware::hidl_vec<uint8_t>& /*apduRsp*/) {
|
||||
sapResponseToken = token;
|
||||
sapResultCode = resultCode;
|
||||
parent.notify();
|
||||
return Void();
|
||||
}
|
||||
|
||||
Return<void> SapCallback::transferAtrResponse(int32_t token, SapResultCode resultCode,
|
||||
const ::android::hardware::hidl_vec<uint8_t>& /*atr*/) {
|
||||
sapResponseToken = token;
|
||||
sapResultCode = resultCode;
|
||||
parent.notify();
|
||||
return Void();
|
||||
}
|
||||
|
||||
Return<void> SapCallback::powerResponse(int32_t token, SapResultCode resultCode) {
|
||||
sapResponseToken = token;
|
||||
sapResultCode = resultCode;
|
||||
parent.notify();
|
||||
return Void();
|
||||
}
|
||||
|
||||
Return<void> SapCallback::resetSimResponse(int32_t token, SapResultCode resultCode) {
|
||||
sapResponseToken = token;
|
||||
sapResultCode = resultCode;
|
||||
parent.notify();
|
||||
return Void();
|
||||
}
|
||||
|
||||
Return<void> SapCallback::statusIndication(int32_t /*token*/, SapStatus /*status*/) {
|
||||
return Void();
|
||||
}
|
||||
|
||||
Return<void> SapCallback::transferCardReaderStatusResponse(int32_t token,
|
||||
SapResultCode resultCode, int32_t /*cardReaderStatus*/) {
|
||||
sapResponseToken = token;
|
||||
sapResultCode = resultCode;
|
||||
parent.notify();
|
||||
return Void();
|
||||
}
|
||||
|
||||
Return<void> SapCallback::errorResponse(int32_t /*token*/) {
|
||||
return Void();
|
||||
}
|
||||
|
||||
Return<void> SapCallback::transferProtocolResponse(int32_t token,
|
||||
SapResultCode resultCode) {
|
||||
sapResponseToken = token;
|
||||
sapResultCode = resultCode;
|
||||
parent.notify();
|
||||
return Void();
|
||||
}
|
||||
131
radio/1.0/vts/functional/sap_hidl_hal_api.cpp
Normal file
131
radio/1.0/vts/functional/sap_hidl_hal_api.cpp
Normal file
@@ -0,0 +1,131 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include<sap_hidl_hal_utils.h>
|
||||
|
||||
/*
|
||||
* Test ISap.connectReq() for the response returned.
|
||||
*/
|
||||
TEST_F(SapHidlTest, connectReq) {
|
||||
int32_t token = 0;
|
||||
int32_t maxMsgSize = 100;
|
||||
|
||||
sap->connectReq(++token, maxMsgSize);
|
||||
EXPECT_EQ(std::cv_status::no_timeout, wait());
|
||||
EXPECT_EQ(sapCb->sapResponseToken, token);
|
||||
}
|
||||
|
||||
/*
|
||||
* Test IRadio.disconnectReq() for the response returned
|
||||
*/
|
||||
TEST_F(SapHidlTest, disconnectReq) {
|
||||
int32_t token = 0;
|
||||
|
||||
sap->disconnectReq(++token);
|
||||
EXPECT_EQ(std::cv_status::no_timeout, wait());
|
||||
EXPECT_EQ(sapCb->sapResponseToken, token);
|
||||
}
|
||||
|
||||
/*
|
||||
* Test IRadio.apduReq() for the response returned.
|
||||
*/
|
||||
TEST_F(SapHidlTest, apduReq) {
|
||||
int32_t token = 0;
|
||||
SapApduType sapApduType = SapApduType::APDU;
|
||||
android::hardware::hidl_vec<uint8_t> command = {};
|
||||
|
||||
sap->apduReq(++token, sapApduType, command);
|
||||
EXPECT_EQ(std::cv_status::no_timeout, wait());
|
||||
EXPECT_EQ(sapCb->sapResponseToken, token);
|
||||
|
||||
ASSERT_TRUE(SapResultCode::CARD_NOT_ACCESSSIBLE == sapCb->sapResultCode ||
|
||||
SapResultCode::CARD_ALREADY_POWERED_OFF == sapCb->sapResultCode ||
|
||||
SapResultCode::CARD_REMOVED == sapCb->sapResultCode);
|
||||
}
|
||||
|
||||
/*
|
||||
* Test IRadio.transferAtrReq() for the response returned.
|
||||
*/
|
||||
TEST_F(SapHidlTest, transferAtrReq) {
|
||||
int32_t token = 0;
|
||||
|
||||
sap->transferAtrReq(++token);
|
||||
EXPECT_EQ(std::cv_status::no_timeout, wait());
|
||||
EXPECT_EQ(sapCb->sapResponseToken, token);
|
||||
|
||||
ASSERT_TRUE(SapResultCode::DATA_NOT_AVAILABLE == sapCb->sapResultCode ||
|
||||
SapResultCode::CARD_ALREADY_POWERED_OFF == sapCb->sapResultCode ||
|
||||
SapResultCode::CARD_REMOVED == sapCb->sapResultCode);
|
||||
}
|
||||
|
||||
/*
|
||||
* Test IRadio.powerReq() for the response returned.
|
||||
*/
|
||||
TEST_F(SapHidlTest, powerReq) {
|
||||
int32_t token = 0;
|
||||
bool state = true;
|
||||
|
||||
sap->powerReq(++token, state);
|
||||
EXPECT_EQ(std::cv_status::no_timeout, wait());
|
||||
EXPECT_EQ(sapCb->sapResponseToken, token);
|
||||
|
||||
ASSERT_TRUE(SapResultCode::CARD_NOT_ACCESSSIBLE == sapCb->sapResultCode ||
|
||||
SapResultCode::CARD_ALREADY_POWERED_OFF == sapCb->sapResultCode ||
|
||||
SapResultCode::CARD_REMOVED == sapCb->sapResultCode ||
|
||||
SapResultCode::CARD_ALREADY_POWERED_ON == sapCb->sapResultCode);
|
||||
}
|
||||
|
||||
/*
|
||||
* Test IRadio.resetSimReq() for the response returned.
|
||||
*/
|
||||
TEST_F(SapHidlTest, resetSimReq) {
|
||||
int32_t token = 0;
|
||||
|
||||
sap->resetSimReq(++token);
|
||||
EXPECT_EQ(std::cv_status::no_timeout, wait());
|
||||
EXPECT_EQ(sapCb->sapResponseToken, token);
|
||||
|
||||
ASSERT_TRUE(SapResultCode::CARD_NOT_ACCESSSIBLE == sapCb->sapResultCode ||
|
||||
SapResultCode::CARD_ALREADY_POWERED_OFF == sapCb->sapResultCode ||
|
||||
SapResultCode::CARD_REMOVED == sapCb->sapResultCode);
|
||||
}
|
||||
|
||||
/*
|
||||
* Test IRadio.transferCardReaderStatusReq() for the response returned.
|
||||
*/
|
||||
TEST_F(SapHidlTest, transferCardReaderStatusReq) {
|
||||
int32_t token = 0;
|
||||
|
||||
sap->transferCardReaderStatusReq(++token);
|
||||
EXPECT_EQ(std::cv_status::no_timeout, wait());
|
||||
EXPECT_EQ(sapCb->sapResponseToken, token);
|
||||
|
||||
EXPECT_EQ(SapResultCode::DATA_NOT_AVAILABLE, sapCb->sapResultCode);
|
||||
}
|
||||
|
||||
/*
|
||||
* Test IRadio.setTransferProtocolReq() for the response returned.
|
||||
*/
|
||||
TEST_F(SapHidlTest, setTransferProtocolReq) {
|
||||
int32_t token = 0;
|
||||
SapTransferProtocol sapTransferProtocol = SapTransferProtocol::T0;
|
||||
|
||||
sap->setTransferProtocolReq(++token, sapTransferProtocol);
|
||||
EXPECT_EQ(std::cv_status::no_timeout, wait());
|
||||
EXPECT_EQ(sapCb->sapResponseToken, token);
|
||||
|
||||
EXPECT_EQ(SapResultCode::NOT_SUPPORTED, sapCb->sapResultCode);
|
||||
}
|
||||
54
radio/1.0/vts/functional/sap_hidl_hal_test.cpp
Normal file
54
radio/1.0/vts/functional/sap_hidl_hal_test.cpp
Normal file
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include<sap_hidl_hal_utils.h>
|
||||
|
||||
void SapHidlTest::SetUp() {
|
||||
sap = ::testing::VtsHalHidlTargetTestBase::getService<ISap>(hidl_string("sap_uim_socket1"));
|
||||
ASSERT_NE(sap, nullptr);
|
||||
|
||||
sapCb = new SapCallback(*this);
|
||||
ASSERT_NE(sapCb, nullptr);
|
||||
|
||||
count = 0;
|
||||
|
||||
sap->setCallback(sapCb);
|
||||
}
|
||||
|
||||
void SapHidlTest::TearDown() {
|
||||
}
|
||||
|
||||
void SapHidlTest::notify() {
|
||||
std::unique_lock<std::mutex> lock(mtx);
|
||||
count++;
|
||||
cv.notify_one();
|
||||
}
|
||||
|
||||
std::cv_status SapHidlTest::wait() {
|
||||
std::unique_lock<std::mutex> lock(mtx);
|
||||
|
||||
std::cv_status status = std::cv_status::no_timeout;
|
||||
auto now = std::chrono::system_clock::now();
|
||||
while (count == 0) {
|
||||
status = cv.wait_until(lock, now + std::chrono::seconds(TIMEOUT_PERIOD));
|
||||
if (status == std::cv_status::timeout) {
|
||||
return status;
|
||||
}
|
||||
}
|
||||
count--;
|
||||
return status;
|
||||
}
|
||||
|
||||
109
radio/1.0/vts/functional/sap_hidl_hal_utils.h
Normal file
109
radio/1.0/vts/functional/sap_hidl_hal_utils.h
Normal file
@@ -0,0 +1,109 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include <android-base/logging.h>
|
||||
|
||||
#include <VtsHalHidlTargetTestBase.h>
|
||||
#include <chrono>
|
||||
#include <condition_variable>
|
||||
#include <mutex>
|
||||
|
||||
#include <android/hardware/radio/1.0/ISap.h>
|
||||
#include <android/hardware/radio/1.0/ISapCallback.h>
|
||||
#include <android/hardware/radio/1.0/types.h>
|
||||
|
||||
using namespace ::android::hardware::radio::V1_0;
|
||||
|
||||
using ::android::hardware::hidl_string;
|
||||
using ::android::hardware::hidl_vec;
|
||||
using ::android::hardware::Return;
|
||||
using ::android::hardware::Void;
|
||||
using ::android::sp;
|
||||
|
||||
#define TIMEOUT_PERIOD 40
|
||||
|
||||
class SapHidlTest;
|
||||
|
||||
/* Callback class for sap response */
|
||||
class SapCallback : public ISapCallback {
|
||||
private:
|
||||
SapHidlTest& parent;
|
||||
|
||||
public:
|
||||
SapResultCode sapResultCode;
|
||||
int32_t sapResponseToken;
|
||||
|
||||
SapCallback(SapHidlTest& parent);
|
||||
|
||||
virtual ~SapCallback() = default;
|
||||
|
||||
Return<void> connectResponse(int32_t token, SapConnectRsp sapConnectRsp, int32_t maxMsgSize);
|
||||
|
||||
Return<void> disconnectResponse(int32_t token);
|
||||
|
||||
Return<void> disconnectIndication(int32_t token, SapDisconnectType disconnectType);
|
||||
|
||||
Return<void> apduResponse(int32_t token, SapResultCode resultCode,
|
||||
const ::android::hardware::hidl_vec<uint8_t>& apduRsp);
|
||||
|
||||
Return<void> transferAtrResponse(int32_t token, SapResultCode resultCode,
|
||||
const ::android::hardware::hidl_vec<uint8_t>& atr);
|
||||
|
||||
Return<void> powerResponse(int32_t token, SapResultCode resultCode);
|
||||
|
||||
Return<void> resetSimResponse(int32_t token, SapResultCode resultCode);
|
||||
|
||||
Return<void> statusIndication(int32_t token, SapStatus status);
|
||||
|
||||
Return<void> transferCardReaderStatusResponse(int32_t token, SapResultCode resultCode,
|
||||
int32_t cardReaderStatus);
|
||||
|
||||
Return<void> errorResponse(int32_t token);
|
||||
|
||||
Return<void> transferProtocolResponse(int32_t token, SapResultCode resultCode);
|
||||
};
|
||||
|
||||
// The main test class for Sap HIDL.
|
||||
class SapHidlTest : public ::testing::VtsHalHidlTargetTestBase {
|
||||
private:
|
||||
std::mutex mtx;
|
||||
std::condition_variable cv;
|
||||
int count;
|
||||
|
||||
public:
|
||||
virtual void SetUp() override;
|
||||
|
||||
virtual void TearDown() override;
|
||||
|
||||
/* Used as a mechanism to inform the test about data/event callback */
|
||||
void notify();
|
||||
|
||||
/* Test code calls this function to wait for response */
|
||||
std::cv_status wait();
|
||||
|
||||
/* Sap service */
|
||||
sp<ISap> sap;
|
||||
|
||||
/* Sap Callback object */
|
||||
sp<SapCallback> sapCb;
|
||||
};
|
||||
|
||||
// A class for test environment setup
|
||||
class SapHidlEnvironment : public ::testing::Environment {
|
||||
public:
|
||||
virtual void SetUp() {}
|
||||
virtual void TearDown() {}
|
||||
};
|
||||
Reference in New Issue
Block a user