From 912ce33eeba8ea761465d8b399e6829eb57066bd Mon Sep 17 00:00:00 2001 From: Ruchi Kandoi Date: Wed, 31 Jan 2018 13:47:17 -0800 Subject: Add NFC 1.1 VTS Test Test: Run VtsHalNfcV1_1TargetTest Bug: 72746517 Change-Id: I11db8782e89fe06a33d9d7b56d3270b0ad0341cd --- nfc/1.1/vts/functional/Android.bp | 25 +++ nfc/1.1/vts/functional/VtsHalNfcV1_1TargetTest.cpp | 220 +++++++++++++++++++++ 2 files changed, 245 insertions(+) create mode 100644 nfc/1.1/vts/functional/Android.bp create mode 100644 nfc/1.1/vts/functional/VtsHalNfcV1_1TargetTest.cpp (limited to 'nfc') diff --git a/nfc/1.1/vts/functional/Android.bp b/nfc/1.1/vts/functional/Android.bp new file mode 100644 index 000000000..0ce531f6a --- /dev/null +++ b/nfc/1.1/vts/functional/Android.bp @@ -0,0 +1,25 @@ +// +// Copyright (C) 2018 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. +// + +cc_test { + name: "VtsHalNfcV1_1TargetTest", + defaults: ["VtsHalTargetTestDefaults"], + srcs: ["VtsHalNfcV1_1TargetTest.cpp"], + static_libs: [ + "android.hardware.nfc@1.0", + "android.hardware.nfc@1.1", + ], +} diff --git a/nfc/1.1/vts/functional/VtsHalNfcV1_1TargetTest.cpp b/nfc/1.1/vts/functional/VtsHalNfcV1_1TargetTest.cpp new file mode 100644 index 000000000..a5b40d479 --- /dev/null +++ b/nfc/1.1/vts/functional/VtsHalNfcV1_1TargetTest.cpp @@ -0,0 +1,220 @@ +/* + * Copyright (C) 2018 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. + */ + +#define LOG_TAG "nfc_hidl_hal_test" +#include + +#include +#include +#include +#include +#include + +#include +#include + +using ::android::hardware::nfc::V1_1::INfc; +using ::android::hardware::nfc::V1_1::INfcClientCallback; +using ::android::hardware::nfc::V1_1::NfcEvent; +using ::android::hardware::nfc::V1_0::NfcStatus; +using ::android::hardware::nfc::V1_0::NfcData; +using ::android::hardware::Return; +using ::android::hardware::Void; +using ::android::hardware::hidl_vec; +using ::android::sp; + +constexpr char kCallbackNameSendEvent[] = "sendEvent"; +constexpr char kCallbackNameSendData[] = "sendData"; + +class NfcClientCallbackArgs { + public: + NfcEvent last_event_; + NfcStatus last_status_; + NfcData last_data_; +}; + +/* Callback class for data & Event. */ +class NfcClientCallback : public ::testing::VtsHalHidlTargetCallbackBase, + public INfcClientCallback { + public: + virtual ~NfcClientCallback() = default; + + /* sendEvent callback function - Records the Event & Status + * and notifies the TEST + **/ + Return sendEvent_1_1(NfcEvent event, NfcStatus event_status) override { + NfcClientCallbackArgs args; + args.last_event_ = event; + args.last_status_ = event_status; + NotifyFromCallback(kCallbackNameSendEvent, args); + return Void(); + }; + + /** NFC 1.1 HAL shouldn't send 1.0 callbacks */ + Return sendEvent(__attribute__((unused))::android::hardware::nfc::V1_0::NfcEvent event, + __attribute__((unused)) NfcStatus event_status) override { + return Void(); + } + + /* sendData callback function. Records the data and notifies the TEST*/ + Return sendData(const NfcData& data) override { + NfcClientCallbackArgs args; + args.last_data_ = data; + NotifyFromCallback(kCallbackNameSendData, args); + return Void(); + }; +}; + +// The main test class for NFC HIDL HAL. +class NfcHidlTest : public ::testing::VtsHalHidlTargetTestBase { + public: + virtual void SetUp() override { + nfc_ = ::testing::VtsHalHidlTargetTestBase::getService(); + ASSERT_NE(nfc_, nullptr); + + nfc_cb_ = new NfcClientCallback(); + ASSERT_NE(nfc_cb_, nullptr); + + EXPECT_EQ(NfcStatus::OK, nfc_->open_1_1(nfc_cb_)); + // Wait for OPEN_CPLT event + auto res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent); + EXPECT_TRUE(res.no_timeout); + EXPECT_EQ(NfcEvent::OPEN_CPLT, res.args->last_event_); + EXPECT_EQ(NfcStatus::OK, res.args->last_status_); + + /* + * Close the hal and then re-open to make sure we are in a predictable + * state for all the tests. + */ + EXPECT_EQ(NfcStatus::OK, nfc_->close()); + // Wait for CLOSE_CPLT event + res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent); + EXPECT_TRUE(res.no_timeout); + EXPECT_EQ(NfcEvent::CLOSE_CPLT, res.args->last_event_); + EXPECT_EQ(NfcStatus::OK, res.args->last_status_); + + EXPECT_EQ(NfcStatus::OK, nfc_->open_1_1(nfc_cb_)); + // Wait for OPEN_CPLT event + res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent); + EXPECT_TRUE(res.no_timeout); + EXPECT_EQ(NfcEvent::OPEN_CPLT, res.args->last_event_); + EXPECT_EQ(NfcStatus::OK, res.args->last_status_); + } + + virtual void TearDown() override { + EXPECT_EQ(NfcStatus::OK, nfc_->close()); + // Wait for CLOSE_CPLT event + auto res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent); + EXPECT_TRUE(res.no_timeout); + EXPECT_EQ(NfcEvent::CLOSE_CPLT, res.args->last_event_); + EXPECT_EQ(NfcStatus::OK, res.args->last_status_); + } + + sp nfc_; + sp nfc_cb_; +}; + +// A class for test environment setup (kept since this file is a template). +class NfcHidlEnvironment : public ::testing::Environment { + public: + virtual void SetUp() {} + virtual void TearDown() {} + + private: +}; + +/* + * factoryReset + * calls factoryReset() + * checks status + */ +TEST_F(NfcHidlTest, FactoryReset) { + nfc_->factoryReset(); + + EXPECT_EQ(NfcStatus::OK, nfc_->close()); + // Wait for CLOSE_CPLT event + auto res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent); + EXPECT_TRUE(res.no_timeout); + EXPECT_EQ(NfcEvent::CLOSE_CPLT, res.args->last_event_); + EXPECT_EQ(NfcStatus::OK, res.args->last_status_); + + EXPECT_EQ(NfcStatus::OK, nfc_->open_1_1(nfc_cb_)); + // Wait for OPEN_CPLT event + res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent); + EXPECT_TRUE(res.no_timeout); + EXPECT_EQ(NfcEvent::OPEN_CPLT, res.args->last_event_); + EXPECT_EQ(NfcStatus::OK, res.args->last_status_); +} + +/* + * OpenAndClose: + * Makes an open call, waits for NfcEvent.OPEN_CPLT + * Immediately calls closeforPowerOffCase() and waits for NfcEvent.CLOSE_CPLT + */ +TEST_F(NfcHidlTest, OpenAndCloseForPowerOff) { + EXPECT_EQ(NfcStatus::OK, nfc_->closeForPowerOffCase()); + // Wait for CLOSE_CPLT event + auto res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent); + EXPECT_TRUE(res.no_timeout); + EXPECT_EQ(NfcEvent::CLOSE_CPLT, res.args->last_event_); + EXPECT_EQ(NfcStatus::OK, res.args->last_status_); + + EXPECT_EQ(NfcStatus::OK, nfc_->open_1_1(nfc_cb_)); + // Wait for OPEN_CPLT event + res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent); + EXPECT_TRUE(res.no_timeout); + EXPECT_EQ(NfcEvent::OPEN_CPLT, res.args->last_event_); + EXPECT_EQ(NfcStatus::OK, res.args->last_status_); +} + +/* + * CloseForPowerOffCaseAfterClose: + * Calls closeForPowerOffCase() + * Calls close() - checks failed status + */ +TEST_F(NfcHidlTest, CloseForPowerCaseOffAfterClose) { + EXPECT_EQ(NfcStatus::OK, nfc_->closeForPowerOffCase()); + // Wait for CLOSE_CPLT event + auto res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent); + EXPECT_TRUE(res.no_timeout); + EXPECT_EQ(NfcEvent::CLOSE_CPLT, res.args->last_event_); + EXPECT_EQ(NfcStatus::OK, res.args->last_status_); + + EXPECT_EQ(NfcStatus::FAILED, nfc_->close()); + + EXPECT_EQ(NfcStatus::OK, nfc_->open_1_1(nfc_cb_)); + // Wait for OPEN_CPLT event + res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent); + EXPECT_TRUE(res.no_timeout); + EXPECT_EQ(NfcEvent::OPEN_CPLT, res.args->last_event_); + EXPECT_EQ(NfcStatus::OK, res.args->last_status_); +} + +int main(int argc, char** argv) { + ::testing::AddGlobalTestEnvironment(new NfcHidlEnvironment); + ::testing::InitGoogleTest(&argc, argv); + + std::system("svc nfc disable"); /* Turn off NFC */ + sleep(5); + + int status = RUN_ALL_TESTS(); + LOG(INFO) << "Test result = " << status; + + std::system("svc nfc enable"); /* Turn on NFC */ + sleep(5); + + return status; +} -- cgit v1.2.3