Index: chromeos/dbus/nfc_client_unittest.cc |
diff --git a/chromeos/dbus/nfc_client_unittest.cc b/chromeos/dbus/nfc_client_unittest.cc |
deleted file mode 100644 |
index 7e90e47eacff29aeeda5c8ff7b5421856369d2b2..0000000000000000000000000000000000000000 |
--- a/chromeos/dbus/nfc_client_unittest.cc |
+++ /dev/null |
@@ -1,898 +0,0 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include <stddef.h> |
- |
-#include "base/bind.h" |
-#include "base/location.h" |
-#include "base/message_loop/message_loop.h" |
-#include "base/single_thread_task_runner.h" |
-#include "chromeos/dbus/nfc_adapter_client.h" |
-#include "chromeos/dbus/nfc_client_helpers.h" |
-#include "chromeos/dbus/nfc_device_client.h" |
-#include "chromeos/dbus/nfc_manager_client.h" |
-#include "chromeos/dbus/nfc_record_client.h" |
-#include "chromeos/dbus/nfc_tag_client.h" |
-#include "dbus/mock_bus.h" |
-#include "dbus/mock_object_proxy.h" |
-#include "testing/gmock/include/gmock/gmock.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
-#include "third_party/cros_system_api/dbus/service_constants.h" |
- |
-using ::testing::_; |
-using ::testing::Invoke; |
-using ::testing::Mock; |
-using ::testing::Return; |
- |
-using chromeos::nfc_client_helpers::ObjectPathVector; |
- |
-namespace chromeos { |
- |
-namespace { |
- |
-// D-Bus service name used by the test. |
-const char kTestServiceName[] = "test.service.name"; |
- |
-// Object paths that are used for testing. |
-const char kTestManagerPath[] = "/test/nfc/manager"; |
-const char kTestAdapterPath0[] = "/test/nfc/adapter0"; |
-const char kTestAdapterPath1[] = "/test/nfc/adapter1"; |
-const char kTestDevicePath0[] = "/test/nfc/device0"; |
-const char kTestDevicePath1[] = "/test/nfc/device1"; |
-const char kTestRecordPath0[] = "/test/nfc/record0"; |
-const char kTestRecordPath1[] = "/test/nfc/record1"; |
-const char kTestRecordPath2[] = "/test/nfc/record2"; |
-const char kTestRecordPath3[] = "/test/nfc/record3"; |
-const char kTestTagPath0[] = "/test/nfc/tag0"; |
-const char kTestTagPath1[] = "/test/nfc/tag1"; |
- |
-class MockNfcManagerObserver : public NfcManagerClient::Observer { |
- public: |
- MOCK_METHOD1(AdapterAdded, void(const dbus::ObjectPath&)); |
- MOCK_METHOD1(AdapterRemoved, void(const dbus::ObjectPath&)); |
- MOCK_METHOD1(ManagerPropertyChanged, void(const std::string&)); |
-}; |
- |
-class MockNfcAdapterObserver : public NfcAdapterClient::Observer { |
- public: |
- MOCK_METHOD1(AdapterAdded, void(const dbus::ObjectPath&)); |
- MOCK_METHOD1(AdapterRemoved, void(const dbus::ObjectPath&)); |
- MOCK_METHOD2(AdapterPropertyChanged, void(const dbus::ObjectPath&, |
- const std::string&)); |
-}; |
- |
-class MockNfcDeviceObserver : public NfcDeviceClient::Observer { |
- public: |
- MOCK_METHOD1(DeviceAdded, void(const dbus::ObjectPath&)); |
- MOCK_METHOD1(DeviceRemoved, void(const dbus::ObjectPath&)); |
- MOCK_METHOD2(DevicePropertyChanged, void(const dbus::ObjectPath&, |
- const std::string&)); |
-}; |
- |
-class MockNfcRecordObserver : public NfcRecordClient::Observer { |
- public: |
- MOCK_METHOD1(RecordAdded, void(const dbus::ObjectPath&)); |
- MOCK_METHOD1(RecordRemoved, void(const dbus::ObjectPath&)); |
- MOCK_METHOD2(RecordPropertyChanged, void(const dbus::ObjectPath&, |
- const std::string&)); |
- MOCK_METHOD1(RecordPropertiesReceived, void(const dbus::ObjectPath&)); |
-}; |
- |
-class MockNfcTagObserver : public NfcTagClient::Observer { |
- public: |
- MOCK_METHOD1(TagAdded, void(const dbus::ObjectPath&)); |
- MOCK_METHOD1(TagRemoved, void(const dbus::ObjectPath&)); |
- MOCK_METHOD2(TagPropertyChanged, void(const dbus::ObjectPath&, |
- const std::string&)); |
-}; |
- |
-} // namespace |
- |
-class NfcClientTest : public testing::Test { |
- public: |
- NfcClientTest() : response_(NULL) {} |
- ~NfcClientTest() override {} |
- |
- void SetUp() override { |
- // Create the mock bus. |
- dbus::Bus::Options options; |
- options.bus_type = dbus::Bus::SYSTEM; |
- mock_bus_ = new dbus::MockBus(options); |
- |
- // Create the mock proxies. |
- mock_manager_proxy_ = new dbus::MockObjectProxy( |
- mock_bus_.get(), |
- kTestServiceName, |
- dbus::ObjectPath(kTestManagerPath)); |
- mock_adapter0_proxy_ = new dbus::MockObjectProxy( |
- mock_bus_.get(), |
- kTestServiceName, |
- dbus::ObjectPath(kTestAdapterPath0)); |
- mock_adapter1_proxy_ = new dbus::MockObjectProxy( |
- mock_bus_.get(), |
- kTestServiceName, |
- dbus::ObjectPath(kTestAdapterPath1)); |
- mock_device0_proxy_ = new dbus::MockObjectProxy( |
- mock_bus_.get(), |
- kTestServiceName, |
- dbus::ObjectPath(kTestDevicePath0)); |
- mock_device1_proxy_ = new dbus::MockObjectProxy( |
- mock_bus_.get(), |
- kTestServiceName, |
- dbus::ObjectPath(kTestDevicePath1)); |
- mock_record0_proxy_ = new dbus::MockObjectProxy( |
- mock_bus_.get(), |
- kTestServiceName, |
- dbus::ObjectPath(kTestRecordPath0)); |
- mock_record1_proxy_ = new dbus::MockObjectProxy( |
- mock_bus_.get(), |
- kTestServiceName, |
- dbus::ObjectPath(kTestRecordPath1)); |
- mock_record2_proxy_ = new dbus::MockObjectProxy( |
- mock_bus_.get(), |
- kTestServiceName, |
- dbus::ObjectPath(kTestRecordPath2)); |
- mock_record3_proxy_ = new dbus::MockObjectProxy( |
- mock_bus_.get(), |
- kTestServiceName, |
- dbus::ObjectPath(kTestRecordPath3)); |
- mock_tag0_proxy_ = new dbus::MockObjectProxy( |
- mock_bus_.get(), |
- kTestServiceName, |
- dbus::ObjectPath(kTestTagPath0)); |
- mock_tag1_proxy_ = new dbus::MockObjectProxy( |
- mock_bus_.get(), |
- kTestServiceName, |
- dbus::ObjectPath(kTestTagPath1)); |
- |
- // Set expectations that use NfcClientTest::OnConnectToSignal when the |
- // client connect signals on the mock proxies. |
- EXPECT_CALL(*mock_manager_proxy_.get(), ConnectToSignal(_, _, _, _)) |
- .WillRepeatedly(Invoke(this, &NfcClientTest::OnConnectToSignal)); |
- EXPECT_CALL(*mock_adapter0_proxy_.get(), ConnectToSignal(_, _, _, _)) |
- .WillRepeatedly(Invoke(this, &NfcClientTest::OnConnectToSignal)); |
- EXPECT_CALL(*mock_adapter1_proxy_.get(), ConnectToSignal(_, _, _, _)) |
- .WillRepeatedly(Invoke(this, &NfcClientTest::OnConnectToSignal)); |
- |
- // Set expectations that return our mock proxies on demand. |
- EXPECT_CALL( |
- *mock_bus_.get(), |
- GetObjectProxy(nfc_manager::kNfcManagerServiceName, |
- dbus::ObjectPath(nfc_manager::kNfcManagerServicePath))) |
- .WillRepeatedly(Return(mock_manager_proxy_.get())); |
- EXPECT_CALL(*mock_bus_.get(), |
- GetObjectProxy(nfc_adapter::kNfcAdapterServiceName, |
- dbus::ObjectPath(kTestAdapterPath0))) |
- .WillRepeatedly(Return(mock_adapter0_proxy_.get())); |
- EXPECT_CALL(*mock_bus_.get(), |
- GetObjectProxy(nfc_adapter::kNfcAdapterServiceName, |
- dbus::ObjectPath(kTestAdapterPath1))) |
- .WillRepeatedly(Return(mock_adapter1_proxy_.get())); |
- EXPECT_CALL(*mock_bus_.get(), |
- GetObjectProxy(nfc_device::kNfcDeviceServiceName, |
- dbus::ObjectPath(kTestDevicePath0))) |
- .WillRepeatedly(Return(mock_device0_proxy_.get())); |
- EXPECT_CALL(*mock_bus_.get(), |
- GetObjectProxy(nfc_device::kNfcDeviceServiceName, |
- dbus::ObjectPath(kTestDevicePath1))) |
- .WillRepeatedly(Return(mock_device1_proxy_.get())); |
- EXPECT_CALL(*mock_bus_.get(), |
- GetObjectProxy(nfc_record::kNfcRecordServiceName, |
- dbus::ObjectPath(kTestRecordPath0))) |
- .WillRepeatedly(Return(mock_record0_proxy_.get())); |
- EXPECT_CALL(*mock_bus_.get(), |
- GetObjectProxy(nfc_record::kNfcRecordServiceName, |
- dbus::ObjectPath(kTestRecordPath1))) |
- .WillRepeatedly(Return(mock_record1_proxy_.get())); |
- EXPECT_CALL(*mock_bus_.get(), |
- GetObjectProxy(nfc_record::kNfcRecordServiceName, |
- dbus::ObjectPath(kTestRecordPath2))) |
- .WillRepeatedly(Return(mock_record2_proxy_.get())); |
- EXPECT_CALL(*mock_bus_.get(), |
- GetObjectProxy(nfc_record::kNfcRecordServiceName, |
- dbus::ObjectPath(kTestRecordPath3))) |
- .WillRepeatedly(Return(mock_record3_proxy_.get())); |
- EXPECT_CALL(*mock_bus_.get(), |
- GetObjectProxy(nfc_tag::kNfcTagServiceName, |
- dbus::ObjectPath(kTestTagPath0))) |
- .WillRepeatedly(Return(mock_tag0_proxy_.get())); |
- EXPECT_CALL(*mock_bus_.get(), |
- GetObjectProxy(nfc_tag::kNfcTagServiceName, |
- dbus::ObjectPath(kTestTagPath1))) |
- .WillRepeatedly(Return(mock_tag1_proxy_.get())); |
- |
- // Handle |manager_client_|'s request to register a callback |
- // for |mock_manager_proxy_|'s D-Bus service becoming available. |
- EXPECT_CALL(*mock_manager_proxy_.get(), WaitForServiceToBeAvailable(_)) |
- .WillRepeatedly( |
- Invoke(this, &NfcClientTest::OnWaitForServiceToBeAvailable)); |
- |
- // ShutdownAndBlock will be called in TearDown. |
- EXPECT_CALL(*mock_bus_.get(), ShutdownAndBlock()).WillOnce(Return()); |
- |
- // Create the clients. |
- manager_client_.reset(NfcManagerClient::Create()); |
- adapter_client_.reset(NfcAdapterClient::Create(manager_client_.get())); |
- device_client_.reset(NfcDeviceClient::Create(adapter_client_.get())); |
- tag_client_.reset(NfcTagClient::Create(adapter_client_.get())); |
- record_client_.reset( |
- NfcRecordClient::Create(device_client_.get(), tag_client_.get())); |
- manager_client_->Init(mock_bus_.get()); |
- adapter_client_->Init(mock_bus_.get()); |
- device_client_->Init(mock_bus_.get()); |
- tag_client_->Init(mock_bus_.get()); |
- record_client_->Init(mock_bus_.get()); |
- manager_client_->AddObserver(&mock_manager_observer_); |
- adapter_client_->AddObserver(&mock_adapter_observer_); |
- device_client_->AddObserver(&mock_device_observer_); |
- tag_client_->AddObserver(&mock_tag_observer_); |
- record_client_->AddObserver(&mock_record_observer_); |
- |
- message_loop_.RunUntilIdle(); |
- } |
- |
- void TearDown() override { |
- tag_client_->RemoveObserver(&mock_tag_observer_); |
- device_client_->RemoveObserver(&mock_device_observer_); |
- adapter_client_->RemoveObserver(&mock_adapter_observer_); |
- manager_client_->RemoveObserver(&mock_manager_observer_); |
- mock_bus_->ShutdownAndBlock(); |
- } |
- |
- void SimulateAdaptersChanged( |
- const ObjectPathVector& adapter_paths) { |
- NfcManagerClient::Properties* properties = |
- manager_client_->GetProperties(); |
- ASSERT_TRUE(properties); |
- EXPECT_CALL(mock_manager_observer_, |
- ManagerPropertyChanged(nfc_manager::kAdaptersProperty)); |
- SendArrayPropertyChangedSignal( |
- properties, |
- nfc_manager::kNfcManagerInterface, |
- nfc_manager::kAdaptersProperty, |
- adapter_paths); |
- Mock::VerifyAndClearExpectations(&mock_manager_observer_); |
- } |
- |
- void SimulateTagsChanged(const ObjectPathVector& tag_paths, |
- const dbus::ObjectPath& adapter_path) { |
- NfcAdapterClient::Properties* properties = |
- adapter_client_->GetProperties(adapter_path); |
- ASSERT_TRUE(properties); |
- EXPECT_CALL(mock_adapter_observer_, |
- AdapterPropertyChanged(adapter_path, |
- nfc_adapter::kTagsProperty)); |
- SendArrayPropertyChangedSignal( |
- properties, |
- nfc_adapter::kNfcAdapterInterface, |
- nfc_adapter::kTagsProperty, |
- tag_paths); |
- Mock::VerifyAndClearExpectations(&mock_adapter_observer_); |
- } |
- |
- void SimulateDevicesChanged(const ObjectPathVector& device_paths, |
- const dbus::ObjectPath& adapter_path) { |
- NfcAdapterClient::Properties* properties = |
- adapter_client_->GetProperties(adapter_path); |
- ASSERT_TRUE(properties); |
- EXPECT_CALL(mock_adapter_observer_, |
- AdapterPropertyChanged(adapter_path, |
- nfc_adapter::kDevicesProperty)); |
- SendArrayPropertyChangedSignal( |
- properties, |
- nfc_adapter::kNfcAdapterInterface, |
- nfc_adapter::kDevicesProperty, |
- device_paths); |
- Mock::VerifyAndClearExpectations(&mock_adapter_observer_); |
- } |
- |
- void SimulateDeviceRecordsChanged( |
- const ObjectPathVector& record_paths, |
- const dbus::ObjectPath& device_path) { |
- NfcDeviceClient::Properties* properties = |
- device_client_->GetProperties(device_path); |
- ASSERT_TRUE(properties); |
- EXPECT_CALL(mock_device_observer_, |
- DevicePropertyChanged(device_path, |
- nfc_device::kRecordsProperty)); |
- SendArrayPropertyChangedSignal( |
- properties, |
- nfc_device::kNfcDeviceInterface, |
- nfc_device::kRecordsProperty, |
- record_paths); |
- Mock::VerifyAndClearExpectations(&mock_device_observer_); |
- } |
- |
- void SimulateTagRecordsChanged( |
- const ObjectPathVector& record_paths, |
- const dbus::ObjectPath& tag_path) { |
- NfcTagClient::Properties* properties = |
- tag_client_->GetProperties(tag_path); |
- ASSERT_TRUE(properties); |
- EXPECT_CALL(mock_tag_observer_, |
- TagPropertyChanged(tag_path, |
- nfc_tag::kRecordsProperty)); |
- SendArrayPropertyChangedSignal( |
- properties, |
- nfc_tag::kNfcTagInterface, |
- nfc_tag::kRecordsProperty, |
- record_paths); |
- Mock::VerifyAndClearExpectations(&mock_tag_observer_); |
- } |
- |
- void SendArrayPropertyChangedSignal( |
- dbus::PropertySet* properties, |
- const std::string& interface, |
- const std::string& property_name, |
- ObjectPathVector object_paths) { |
- dbus::Signal signal(interface, nfc_common::kPropertyChangedSignal); |
- dbus::MessageWriter writer(&signal); |
- writer.AppendString(property_name); |
- dbus::MessageWriter variant_writer(NULL); |
- writer.OpenVariant("ao", &variant_writer); |
- variant_writer.AppendArrayOfObjectPaths(object_paths); |
- writer.CloseContainer(&variant_writer); |
- properties->ChangedReceived(&signal); |
- } |
- |
- MOCK_METHOD0(SuccessCallback, void(void)); |
- MOCK_METHOD2(ErrorCallback, void(const std::string& error_name, |
- const std::string& error_message)); |
- |
- protected: |
- // The mock object proxies. |
- scoped_refptr<dbus::MockObjectProxy> mock_manager_proxy_; |
- scoped_refptr<dbus::MockObjectProxy> mock_adapter0_proxy_; |
- scoped_refptr<dbus::MockObjectProxy> mock_adapter1_proxy_; |
- scoped_refptr<dbus::MockObjectProxy> mock_device0_proxy_; |
- scoped_refptr<dbus::MockObjectProxy> mock_device1_proxy_; |
- scoped_refptr<dbus::MockObjectProxy> mock_record0_proxy_; |
- scoped_refptr<dbus::MockObjectProxy> mock_record1_proxy_; |
- scoped_refptr<dbus::MockObjectProxy> mock_record2_proxy_; |
- scoped_refptr<dbus::MockObjectProxy> mock_record3_proxy_; |
- scoped_refptr<dbus::MockObjectProxy> mock_tag0_proxy_; |
- scoped_refptr<dbus::MockObjectProxy> mock_tag1_proxy_; |
- // The mock bus. |
- scoped_refptr<dbus::MockBus> mock_bus_; |
- // A message loop to emulate asynchronous behavior. |
- base::MessageLoop message_loop_; |
- // Response returned by mock methods. |
- dbus::Response* response_; |
- // The D-Bus client objects under test. |
- std::unique_ptr<NfcManagerClient> manager_client_; |
- std::unique_ptr<NfcAdapterClient> adapter_client_; |
- std::unique_ptr<NfcDeviceClient> device_client_; |
- std::unique_ptr<NfcTagClient> tag_client_; |
- std::unique_ptr<NfcRecordClient> record_client_; |
- // Mock observers. |
- MockNfcManagerObserver mock_manager_observer_; |
- MockNfcAdapterObserver mock_adapter_observer_; |
- MockNfcDeviceObserver mock_device_observer_; |
- MockNfcTagObserver mock_tag_observer_; |
- MockNfcRecordObserver mock_record_observer_; |
- // The signal callbacks used to simulate asychronous signals. |
- dbus::ObjectProxy::SignalCallback manager_adapter_added_signal_callback_; |
- dbus::ObjectProxy::SignalCallback manager_adapter_removed_signal_callback_; |
- |
- private: |
- // Used to inform |manager_client_| that |mock_manager_proxy_| is ready. |
- void OnWaitForServiceToBeAvailable( |
- dbus::ObjectProxy::WaitForServiceToBeAvailableCallback callback) { |
- message_loop_.task_runner()->PostTask(FROM_HERE, |
- base::Bind(callback, true)); |
- } |
- |
- // Used to implement the mock proxy. |
- void OnConnectToSignal( |
- const std::string& interface_name, |
- const std::string& signal_name, |
- const dbus::ObjectProxy::SignalCallback& signal_callback, |
- const dbus::ObjectProxy::OnConnectedCallback& on_connected_callback) { |
- if (interface_name == nfc_manager::kNfcManagerInterface) { |
- if (signal_name == nfc_manager::kAdapterAddedSignal) |
- manager_adapter_added_signal_callback_ = signal_callback; |
- else if (signal_name == nfc_manager::kAdapterRemovedSignal) |
- manager_adapter_removed_signal_callback_ = signal_callback; |
- } |
- message_loop_.task_runner()->PostTask( |
- FROM_HERE, |
- base::Bind(on_connected_callback, interface_name, signal_name, true)); |
- } |
-}; |
- |
-// Tests that when adapters are added and removed through the manager, all |
-// observers are notified and the proxies are created and removed |
-// accordingly. |
-TEST_F(NfcClientTest, AdaptersAddedAndRemoved) { |
- // Invoking methods on adapters that haven't been added should fail. |
- EXPECT_CALL(*this, |
- ErrorCallback(nfc_client_helpers::kUnknownObjectError, _)); |
- adapter_client_->StartPollLoop( |
- dbus::ObjectPath(kTestAdapterPath0), |
- nfc_adapter::kModeInitiator, |
- base::Bind(&NfcClientTest::SuccessCallback, base::Unretained(this)), |
- base::Bind(&NfcClientTest::ErrorCallback, base::Unretained(this))); |
- Mock::VerifyAndClearExpectations(this); |
- |
- // Add adapter 0. |
- ObjectPathVector adapter_paths; |
- adapter_paths.push_back(dbus::ObjectPath(kTestAdapterPath0)); |
- EXPECT_CALL(mock_adapter_observer_, |
- AdapterAdded(dbus::ObjectPath(kTestAdapterPath0))); |
- SimulateAdaptersChanged(adapter_paths); |
- |
- // Invoking methods should succeed on adapter 0 but fail on adapter 1. |
- EXPECT_CALL(*mock_adapter0_proxy_, CallMethodWithErrorCallback(_, _, _, _)); |
- adapter_client_->StartPollLoop( |
- dbus::ObjectPath(kTestAdapterPath0), |
- nfc_adapter::kModeInitiator, |
- base::Bind(&NfcClientTest::SuccessCallback, base::Unretained(this)), |
- base::Bind(&NfcClientTest::ErrorCallback, base::Unretained(this))); |
- Mock::VerifyAndClearExpectations(&mock_adapter0_proxy_); |
- EXPECT_CALL(*this, |
- ErrorCallback(nfc_client_helpers::kUnknownObjectError, _)); |
- EXPECT_CALL(*mock_adapter1_proxy_, CallMethodWithErrorCallback(_, _, _, _)) |
- .Times(1); |
- adapter_client_->StartPollLoop( |
- dbus::ObjectPath(kTestAdapterPath1), |
- nfc_adapter::kModeInitiator, |
- base::Bind(&NfcClientTest::SuccessCallback, base::Unretained(this)), |
- base::Bind(&NfcClientTest::ErrorCallback, base::Unretained(this))); |
- Mock::VerifyAndClearExpectations(this); |
- Mock::VerifyAndClearExpectations(&mock_adapter1_proxy_); |
- |
- // Add adapter 1. |
- adapter_paths.push_back(dbus::ObjectPath(kTestAdapterPath1)); |
- EXPECT_CALL(mock_adapter_observer_, |
- AdapterAdded(dbus::ObjectPath(kTestAdapterPath1))); |
- SimulateAdaptersChanged(adapter_paths); |
- |
- // Invoking methods should succeed on both adapters. |
- EXPECT_CALL(*mock_adapter0_proxy_, CallMethodWithErrorCallback(_, _, _, _)); |
- EXPECT_CALL(*mock_adapter1_proxy_, CallMethodWithErrorCallback(_, _, _, _)); |
- adapter_client_->StartPollLoop( |
- dbus::ObjectPath(kTestAdapterPath0), |
- nfc_adapter::kModeInitiator, |
- base::Bind(&NfcClientTest::SuccessCallback, base::Unretained(this)), |
- base::Bind(&NfcClientTest::ErrorCallback, base::Unretained(this))); |
- adapter_client_->StartPollLoop( |
- dbus::ObjectPath(kTestAdapterPath1), |
- nfc_adapter::kModeInitiator, |
- base::Bind(&NfcClientTest::SuccessCallback, base::Unretained(this)), |
- base::Bind(&NfcClientTest::ErrorCallback, base::Unretained(this))); |
- Mock::VerifyAndClearExpectations(&mock_adapter0_proxy_); |
- Mock::VerifyAndClearExpectations(&mock_adapter1_proxy_); |
- |
- // Remove adapter 0. |
- adapter_paths.erase(adapter_paths.begin()); |
- EXPECT_CALL(mock_adapter_observer_, |
- AdapterRemoved(dbus::ObjectPath(kTestAdapterPath0))); |
- SimulateAdaptersChanged(adapter_paths); |
- |
- // Invoking methods should succeed on adapter 1 but fail on adapter 0. |
- EXPECT_CALL(*this, |
- ErrorCallback(nfc_client_helpers::kUnknownObjectError, _)); |
- EXPECT_CALL(*mock_adapter0_proxy_, CallMethodWithErrorCallback(_, _, _, _)) |
- .Times(0); |
- adapter_client_->StartPollLoop( |
- dbus::ObjectPath(kTestAdapterPath0), |
- nfc_adapter::kModeInitiator, |
- base::Bind(&NfcClientTest::SuccessCallback, base::Unretained(this)), |
- base::Bind(&NfcClientTest::ErrorCallback, base::Unretained(this))); |
- Mock::VerifyAndClearExpectations(this); |
- |
- EXPECT_CALL(*mock_adapter1_proxy_, CallMethodWithErrorCallback(_, _, _, _)); |
- adapter_client_->StartPollLoop( |
- dbus::ObjectPath(kTestAdapterPath1), |
- nfc_adapter::kModeInitiator, |
- base::Bind(&NfcClientTest::SuccessCallback, base::Unretained(this)), |
- base::Bind(&NfcClientTest::ErrorCallback, base::Unretained(this))); |
- Mock::VerifyAndClearExpectations(&mock_adapter0_proxy_); |
- Mock::VerifyAndClearExpectations(&mock_adapter1_proxy_); |
- |
- // Remove adapter 1. |
- adapter_paths.clear(); |
- EXPECT_CALL(mock_adapter_observer_, |
- AdapterRemoved(dbus::ObjectPath(kTestAdapterPath1))); |
- SimulateAdaptersChanged(adapter_paths); |
- |
- // Invoking methods should fail on both adapters. |
- EXPECT_CALL(*this, |
- ErrorCallback(nfc_client_helpers::kUnknownObjectError, _)) |
- .Times(2); |
- EXPECT_CALL(*mock_adapter0_proxy_, CallMethodWithErrorCallback(_, _, _, _)) |
- .Times(0); |
- EXPECT_CALL(*mock_adapter1_proxy_, CallMethodWithErrorCallback(_, _, _, _)) |
- .Times(0); |
- adapter_client_->StartPollLoop( |
- dbus::ObjectPath(kTestAdapterPath0), |
- nfc_adapter::kModeInitiator, |
- base::Bind(&NfcClientTest::SuccessCallback, base::Unretained(this)), |
- base::Bind(&NfcClientTest::ErrorCallback, base::Unretained(this))); |
- adapter_client_->StartPollLoop( |
- dbus::ObjectPath(kTestAdapterPath1), |
- nfc_adapter::kModeInitiator, |
- base::Bind(&NfcClientTest::SuccessCallback, base::Unretained(this)), |
- base::Bind(&NfcClientTest::ErrorCallback, base::Unretained(this))); |
-} |
- |
-// Tests that when tags are added and removed through an adapter, all |
-// observers are notified and the proxies are created and removed |
-// accordingly. |
-TEST_F(NfcClientTest, TagsAddedAndRemoved) { |
- // Invoking methods on tags that haven't been added should fail. |
- EXPECT_CALL(*this, |
- ErrorCallback(nfc_client_helpers::kUnknownObjectError, _)); |
- base::DictionaryValue write_data; |
- write_data.SetString(nfc_record::kTypeProperty, nfc_record::kTypeText); |
- tag_client_->Write(dbus::ObjectPath(kTestTagPath0), write_data, |
- base::Bind(&NfcClientTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcClientTest::ErrorCallback, |
- base::Unretained(this))); |
- Mock::VerifyAndClearExpectations(this); |
- |
- // Add adapter 0. |
- ObjectPathVector adapter_paths; |
- adapter_paths.push_back(dbus::ObjectPath(kTestAdapterPath0)); |
- EXPECT_CALL(mock_adapter_observer_, |
- AdapterAdded(dbus::ObjectPath(kTestAdapterPath0))); |
- SimulateAdaptersChanged(adapter_paths); |
- Mock::VerifyAndClearExpectations(&mock_adapter_observer_); |
- |
- // Add tag 0. |
- ObjectPathVector tag_paths; |
- tag_paths.push_back(dbus::ObjectPath(kTestTagPath0)); |
- EXPECT_CALL(mock_tag_observer_, |
- TagAdded(dbus::ObjectPath(kTestTagPath0))); |
- SimulateTagsChanged(tag_paths, dbus::ObjectPath(kTestAdapterPath0)); |
- Mock::VerifyAndClearExpectations(&mock_tag_observer_); |
- |
- // Invoking methods should succeed on tag 0 but fail on tag 1. |
- EXPECT_CALL(*mock_tag0_proxy_, CallMethodWithErrorCallback(_, _, _, _)); |
- tag_client_->Write(dbus::ObjectPath(kTestTagPath0), write_data, |
- base::Bind(&NfcClientTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcClientTest::ErrorCallback, |
- base::Unretained(this))); |
- Mock::VerifyAndClearExpectations(&mock_tag0_proxy_); |
- EXPECT_CALL(*this, |
- ErrorCallback(nfc_client_helpers::kUnknownObjectError, _)); |
- EXPECT_CALL(*mock_tag1_proxy_, CallMethodWithErrorCallback(_, _, _, _)) |
- .Times(1); |
- tag_client_->Write(dbus::ObjectPath(kTestTagPath1), write_data, |
- base::Bind(&NfcClientTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcClientTest::ErrorCallback, |
- base::Unretained(this))); |
- Mock::VerifyAndClearExpectations(this); |
- Mock::VerifyAndClearExpectations(&mock_tag1_proxy_); |
- |
- // Add tag 1. |
- tag_paths.push_back(dbus::ObjectPath(kTestTagPath1)); |
- EXPECT_CALL(mock_tag_observer_, |
- TagAdded(dbus::ObjectPath(kTestTagPath1))); |
- SimulateTagsChanged(tag_paths, dbus::ObjectPath(kTestAdapterPath0)); |
- Mock::VerifyAndClearExpectations(&mock_tag_observer_); |
- |
- // Invoking methods should succeed on both tags. |
- EXPECT_CALL(*mock_tag0_proxy_, CallMethodWithErrorCallback(_, _, _, _)); |
- EXPECT_CALL(*mock_tag1_proxy_, CallMethodWithErrorCallback(_, _, _, _)); |
- tag_client_->Write(dbus::ObjectPath(kTestTagPath0), write_data, |
- base::Bind(&NfcClientTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcClientTest::ErrorCallback, |
- base::Unretained(this))); |
- tag_client_->Write(dbus::ObjectPath(kTestTagPath1), write_data, |
- base::Bind(&NfcClientTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcClientTest::ErrorCallback, |
- base::Unretained(this))); |
- Mock::VerifyAndClearExpectations(&mock_tag0_proxy_); |
- Mock::VerifyAndClearExpectations(&mock_tag1_proxy_); |
- |
- // Remove tag 0. |
- tag_paths.erase(tag_paths.begin()); |
- EXPECT_CALL(mock_tag_observer_, |
- TagRemoved(dbus::ObjectPath(kTestTagPath0))); |
- SimulateTagsChanged(tag_paths, dbus::ObjectPath(kTestAdapterPath0)); |
- Mock::VerifyAndClearExpectations(&mock_tag_observer_); |
- |
- // Invoking methods should succeed on tag 1 but fail on tag 0. |
- EXPECT_CALL(*this, |
- ErrorCallback(nfc_client_helpers::kUnknownObjectError, _)); |
- EXPECT_CALL(*mock_tag0_proxy_, CallMethodWithErrorCallback(_, _, _, _)) |
- .Times(0); |
- tag_client_->Write(dbus::ObjectPath(kTestTagPath0), write_data, |
- base::Bind(&NfcClientTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcClientTest::ErrorCallback, |
- base::Unretained(this))); |
- Mock::VerifyAndClearExpectations(this); |
- Mock::VerifyAndClearExpectations(&mock_tag0_proxy_); |
- EXPECT_CALL(*mock_tag1_proxy_, CallMethodWithErrorCallback(_, _, _, _)); |
- tag_client_->Write(dbus::ObjectPath(kTestTagPath1), write_data, |
- base::Bind(&NfcClientTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcClientTest::ErrorCallback, |
- base::Unretained(this))); |
- Mock::VerifyAndClearExpectations(&mock_tag1_proxy_); |
- |
- // Remove tag 1. |
- tag_paths.clear(); |
- EXPECT_CALL(mock_tag_observer_, |
- TagRemoved(dbus::ObjectPath(kTestTagPath1))); |
- SimulateTagsChanged(tag_paths, dbus::ObjectPath(kTestAdapterPath0)); |
- Mock::VerifyAndClearExpectations(&mock_tag_observer_); |
- |
- // Invoking methods should fail on both tags. |
- EXPECT_CALL(*this, |
- ErrorCallback(nfc_client_helpers::kUnknownObjectError, _)) |
- .Times(2); |
- EXPECT_CALL(*mock_tag0_proxy_, CallMethodWithErrorCallback(_, _, _, _)) |
- .Times(0); |
- EXPECT_CALL(*mock_tag1_proxy_, CallMethodWithErrorCallback(_, _, _, _)) |
- .Times(0); |
- tag_client_->Write(dbus::ObjectPath(kTestTagPath0), write_data, |
- base::Bind(&NfcClientTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcClientTest::ErrorCallback, |
- base::Unretained(this))); |
- tag_client_->Write(dbus::ObjectPath(kTestTagPath1), write_data, |
- base::Bind(&NfcClientTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcClientTest::ErrorCallback, |
- base::Unretained(this))); |
-} |
- |
-// Tests that when devices are added and removed through an adapter, all |
-// observers are notified and the proxies are created and removed |
-// accordingly. |
-TEST_F(NfcClientTest, DevicesAddedAndRemoved) { |
- // Invoking methods on devices that haven't been added should fail. |
- EXPECT_CALL(*this, |
- ErrorCallback(nfc_client_helpers::kUnknownObjectError, _)); |
- base::DictionaryValue write_data; |
- write_data.SetString(nfc_record::kTypeProperty, nfc_record::kTypeText); |
- device_client_->Push(dbus::ObjectPath(kTestDevicePath0), write_data, |
- base::Bind(&NfcClientTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcClientTest::ErrorCallback, |
- base::Unretained(this))); |
- Mock::VerifyAndClearExpectations(this); |
- |
- // Add adapter 0. |
- ObjectPathVector adapter_paths; |
- adapter_paths.push_back(dbus::ObjectPath(kTestAdapterPath0)); |
- EXPECT_CALL(mock_adapter_observer_, |
- AdapterAdded(dbus::ObjectPath(kTestAdapterPath0))); |
- SimulateAdaptersChanged(adapter_paths); |
- |
- // Add device 0. |
- ObjectPathVector device_paths; |
- device_paths.push_back(dbus::ObjectPath(kTestDevicePath0)); |
- EXPECT_CALL(mock_device_observer_, |
- DeviceAdded(dbus::ObjectPath(kTestDevicePath0))); |
- SimulateDevicesChanged(device_paths, dbus::ObjectPath(kTestAdapterPath0)); |
- Mock::VerifyAndClearExpectations(&mock_device_observer_); |
- |
- // Invoking methods should succeed on device 0 but fail on device 1. |
- EXPECT_CALL(*mock_device0_proxy_, CallMethodWithErrorCallback(_, _, _, _)); |
- device_client_->Push(dbus::ObjectPath(kTestDevicePath0), write_data, |
- base::Bind(&NfcClientTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcClientTest::ErrorCallback, |
- base::Unretained(this))); |
- Mock::VerifyAndClearExpectations(&mock_device0_proxy_); |
- EXPECT_CALL(*this, |
- ErrorCallback(nfc_client_helpers::kUnknownObjectError, _)); |
- EXPECT_CALL(*mock_device1_proxy_, CallMethodWithErrorCallback(_, _, _, _)) |
- .Times(1); |
- device_client_->Push(dbus::ObjectPath(kTestDevicePath1), write_data, |
- base::Bind(&NfcClientTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcClientTest::ErrorCallback, |
- base::Unretained(this))); |
- Mock::VerifyAndClearExpectations(this); |
- Mock::VerifyAndClearExpectations(&mock_device1_proxy_); |
- |
- // Add device 1. |
- device_paths.push_back(dbus::ObjectPath(kTestDevicePath1)); |
- EXPECT_CALL(mock_device_observer_, |
- DeviceAdded(dbus::ObjectPath(kTestDevicePath1))); |
- SimulateDevicesChanged(device_paths, dbus::ObjectPath(kTestAdapterPath0)); |
- Mock::VerifyAndClearExpectations(&mock_device_observer_); |
- |
- // Invoking methods should succeed on both devices. |
- EXPECT_CALL(*mock_device0_proxy_, CallMethodWithErrorCallback(_, _, _, _)); |
- EXPECT_CALL(*mock_device1_proxy_, CallMethodWithErrorCallback(_, _, _, _)); |
- device_client_->Push(dbus::ObjectPath(kTestDevicePath0), write_data, |
- base::Bind(&NfcClientTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcClientTest::ErrorCallback, |
- base::Unretained(this))); |
- device_client_->Push(dbus::ObjectPath(kTestDevicePath1), write_data, |
- base::Bind(&NfcClientTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcClientTest::ErrorCallback, |
- base::Unretained(this))); |
- Mock::VerifyAndClearExpectations(&mock_device0_proxy_); |
- Mock::VerifyAndClearExpectations(&mock_device1_proxy_); |
- |
- // Remove device 0. |
- device_paths.erase(device_paths.begin()); |
- EXPECT_CALL(mock_device_observer_, |
- DeviceRemoved(dbus::ObjectPath(kTestDevicePath0))); |
- SimulateDevicesChanged(device_paths, dbus::ObjectPath(kTestAdapterPath0)); |
- Mock::VerifyAndClearExpectations(&mock_device_observer_); |
- |
- // Invoking methods should succeed on device 1 but fail on device 0. |
- EXPECT_CALL(*this, |
- ErrorCallback(nfc_client_helpers::kUnknownObjectError, _)); |
- EXPECT_CALL(*mock_device0_proxy_, CallMethodWithErrorCallback(_, _, _, _)) |
- .Times(0); |
- device_client_->Push(dbus::ObjectPath(kTestDevicePath0), write_data, |
- base::Bind(&NfcClientTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcClientTest::ErrorCallback, |
- base::Unretained(this))); |
- Mock::VerifyAndClearExpectations(this); |
- Mock::VerifyAndClearExpectations(&mock_device0_proxy_); |
- EXPECT_CALL(*mock_device1_proxy_, CallMethodWithErrorCallback(_, _, _, _)); |
- device_client_->Push(dbus::ObjectPath(kTestDevicePath1), write_data, |
- base::Bind(&NfcClientTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcClientTest::ErrorCallback, |
- base::Unretained(this))); |
- Mock::VerifyAndClearExpectations(&mock_device1_proxy_); |
- |
- // Remove device 1. |
- device_paths.clear(); |
- EXPECT_CALL(mock_device_observer_, |
- DeviceRemoved(dbus::ObjectPath(kTestDevicePath1))); |
- SimulateDevicesChanged(device_paths, dbus::ObjectPath(kTestAdapterPath0)); |
- Mock::VerifyAndClearExpectations(&mock_device_observer_); |
- |
- // Invoking methods should fail on both devices. |
- EXPECT_CALL(*this, |
- ErrorCallback(nfc_client_helpers::kUnknownObjectError, _)) |
- .Times(2); |
- EXPECT_CALL(*mock_device0_proxy_, CallMethodWithErrorCallback(_, _, _, _)) |
- .Times(0); |
- EXPECT_CALL(*mock_device1_proxy_, CallMethodWithErrorCallback(_, _, _, _)) |
- .Times(0); |
- device_client_->Push(dbus::ObjectPath(kTestDevicePath0), write_data, |
- base::Bind(&NfcClientTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcClientTest::ErrorCallback, |
- base::Unretained(this))); |
- device_client_->Push(dbus::ObjectPath(kTestDevicePath1), write_data, |
- base::Bind(&NfcClientTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcClientTest::ErrorCallback, |
- base::Unretained(this))); |
-} |
- |
-TEST_F(NfcClientTest, ObjectCleanup) { |
- // Tests that when an adapter gets removed, proxies that belong to the |
- // adapter, device, tag, and record hierarchy get cleaned up properly. |
- ObjectPathVector object_paths; |
- |
- // Add adapters. |
- EXPECT_CALL(mock_adapter_observer_, |
- AdapterAdded(dbus::ObjectPath(kTestAdapterPath0))); |
- EXPECT_CALL(mock_adapter_observer_, |
- AdapterAdded(dbus::ObjectPath(kTestAdapterPath1))); |
- object_paths.push_back(dbus::ObjectPath(kTestAdapterPath0)); |
- object_paths.push_back(dbus::ObjectPath(kTestAdapterPath1)); |
- SimulateAdaptersChanged(object_paths); |
- Mock::VerifyAndClearExpectations(&mock_adapter_observer_); |
- |
- // Add devices and a tags. Assign them like the following: |
- // - device 0 -> adapter 0 |
- // - tag 0 -> adapter 0 |
- // - device 1 -> adapter 1 |
- // - tag 1 -> adapter 1 |
- EXPECT_CALL(mock_device_observer_, |
- DeviceAdded(dbus::ObjectPath(kTestDevicePath0))); |
- EXPECT_CALL(mock_device_observer_, |
- DeviceAdded(dbus::ObjectPath(kTestDevicePath1))); |
- EXPECT_CALL(mock_tag_observer_, |
- TagAdded(dbus::ObjectPath(kTestTagPath0))); |
- EXPECT_CALL(mock_tag_observer_, |
- TagAdded(dbus::ObjectPath(kTestTagPath1))); |
- object_paths.clear(); |
- object_paths.push_back(dbus::ObjectPath(kTestDevicePath0)); |
- SimulateDevicesChanged(object_paths, dbus::ObjectPath(kTestAdapterPath0)); |
- object_paths.clear(); |
- object_paths.push_back(dbus::ObjectPath(kTestTagPath0)); |
- SimulateTagsChanged(object_paths, dbus::ObjectPath(kTestAdapterPath0)); |
- object_paths.clear(); |
- object_paths.push_back(dbus::ObjectPath(kTestDevicePath1)); |
- SimulateDevicesChanged(object_paths, dbus::ObjectPath(kTestAdapterPath1)); |
- object_paths.clear(); |
- object_paths.push_back(dbus::ObjectPath(kTestTagPath1)); |
- SimulateTagsChanged(object_paths, dbus::ObjectPath(kTestAdapterPath1)); |
- Mock::VerifyAndClearExpectations(&mock_device_observer_); |
- Mock::VerifyAndClearExpectations(&mock_tag_observer_); |
- |
- // Add records. Assign them like the following: |
- // - record 0 -> device 0 |
- // - record 1 -> tag 0 |
- // - record 2 -> device 1 |
- // - record 3 -> tag 1 |
- EXPECT_CALL(mock_record_observer_, |
- RecordAdded(dbus::ObjectPath(kTestRecordPath0))); |
- EXPECT_CALL(mock_record_observer_, |
- RecordAdded(dbus::ObjectPath(kTestRecordPath1))); |
- EXPECT_CALL(mock_record_observer_, |
- RecordAdded(dbus::ObjectPath(kTestRecordPath2))); |
- EXPECT_CALL(mock_record_observer_, |
- RecordAdded(dbus::ObjectPath(kTestRecordPath3))); |
- object_paths.clear(); |
- object_paths.push_back(dbus::ObjectPath(kTestRecordPath0)); |
- SimulateDeviceRecordsChanged(object_paths, |
- dbus::ObjectPath(kTestDevicePath0)); |
- object_paths.clear(); |
- object_paths.push_back(dbus::ObjectPath(kTestRecordPath1)); |
- SimulateTagRecordsChanged(object_paths, |
- dbus::ObjectPath(kTestTagPath0)); |
- object_paths.clear(); |
- object_paths.push_back(dbus::ObjectPath(kTestRecordPath2)); |
- SimulateDeviceRecordsChanged(object_paths, |
- dbus::ObjectPath(kTestDevicePath1)); |
- object_paths.clear(); |
- object_paths.push_back(dbus::ObjectPath(kTestRecordPath3)); |
- SimulateTagRecordsChanged(object_paths, |
- dbus::ObjectPath(kTestTagPath1)); |
- Mock::VerifyAndClearExpectations(&mock_record_observer_); |
- |
- // Check that the records have been assigned to the correct device or tag. |
- NfcTagClient::Properties* tag_properties = |
- tag_client_->GetProperties(dbus::ObjectPath(kTestTagPath0)); |
- EXPECT_EQ((size_t)1, tag_properties->records.value().size()); |
- EXPECT_EQ(dbus::ObjectPath(kTestRecordPath1), |
- tag_properties->records.value()[0]); |
- NfcDeviceClient::Properties* device_properties = |
- device_client_->GetProperties(dbus::ObjectPath(kTestDevicePath0)); |
- EXPECT_EQ((size_t)1, device_properties->records.value().size()); |
- EXPECT_EQ(dbus::ObjectPath(kTestRecordPath0), |
- device_properties->records.value()[0]); |
- |
- // Remove adapter 0. Make sure that all of the tag, device, and records that |
- // are in the adapter 0 hierarchy are removed. |
- object_paths.clear(); |
- object_paths.push_back(dbus::ObjectPath(kTestAdapterPath1)); |
- EXPECT_CALL(mock_adapter_observer_, |
- AdapterRemoved(dbus::ObjectPath(kTestAdapterPath0))); |
- EXPECT_CALL(mock_device_observer_, |
- DeviceRemoved(dbus::ObjectPath(kTestDevicePath0))); |
- EXPECT_CALL(mock_tag_observer_, |
- TagRemoved(dbus::ObjectPath(kTestTagPath0))); |
- EXPECT_CALL(mock_record_observer_, |
- RecordRemoved(dbus::ObjectPath(kTestRecordPath0))); |
- EXPECT_CALL(mock_record_observer_, |
- RecordRemoved(dbus::ObjectPath(kTestRecordPath1))); |
- SimulateAdaptersChanged(object_paths); |
- Mock::VerifyAndClearExpectations(&mock_adapter_observer_); |
- Mock::VerifyAndClearExpectations(&mock_device_observer_); |
- Mock::VerifyAndClearExpectations(&mock_tag_observer_); |
- Mock::VerifyAndClearExpectations(&mock_record_observer_); |
- |
- // Remove adapter 1. |
- object_paths.clear(); |
- EXPECT_CALL(mock_adapter_observer_, |
- AdapterRemoved(dbus::ObjectPath(kTestAdapterPath1))); |
- EXPECT_CALL(mock_device_observer_, |
- DeviceRemoved(dbus::ObjectPath(kTestDevicePath1))); |
- EXPECT_CALL(mock_tag_observer_, |
- TagRemoved(dbus::ObjectPath(kTestTagPath1))); |
- EXPECT_CALL(mock_record_observer_, |
- RecordRemoved(dbus::ObjectPath(kTestRecordPath2))); |
- EXPECT_CALL(mock_record_observer_, |
- RecordRemoved(dbus::ObjectPath(kTestRecordPath3))); |
- SimulateAdaptersChanged(object_paths); |
-} |
- |
-} // namespace chromeos |