Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Unified Diff: chromeos/dbus/biod/biod_client_unittest.cc

Issue 2799043007: CrOS: Add success/failure indicators for biod methods with no callback. (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chromeos/dbus/biod/biod_client_unittest.cc
diff --git a/chromeos/dbus/biod/biod_client_unittest.cc b/chromeos/dbus/biod/biod_client_unittest.cc
index ec86d098b77081aed6d556f4d4493677ea977746..806114de46e68a276f055d7925cba3debb0a32e2 100644
--- a/chromeos/dbus/biod/biod_client_unittest.cc
+++ b/chromeos/dbus/biod/biod_client_unittest.cc
@@ -52,6 +52,16 @@ void CopyString(std::string* dest_str, const std::string& src_str) {
*dest_str = src_str;
}
+void CopyDBusMethodCallStatus(DBusMethodCallStatus* dest_status,
+ DBusMethodCallStatus src_status) {
+ *dest_status = src_status;
+}
+
+void CopyBiometricType(biod::BiometricType* dest_type,
+ biod::BiometricType src_type) {
+ *dest_type = src_type;
+}
+
// Matcher that verifies that a dbus::Message has member |name|.
MATCHER_P(HasMember, name, "") {
if (arg->GetMember() != name) {
@@ -135,7 +145,7 @@ class BiodClientTest : public testing::Test {
protected:
// Add an expectation for method with |method_name| to be called. When the
- // method is called the response shoudl match |response|.
+ // method is called the response should match |response|.
void AddMethodExpectation(const std::string& method_name,
std::unique_ptr<dbus::Response> response) {
ASSERT_FALSE(pending_method_calls_.count(method_name));
@@ -144,6 +154,16 @@ class BiodClientTest : public testing::Test {
.WillOnce(Invoke(this, &BiodClientTest::OnCallMethod));
}
+ void AddMethodWithErrorCallbackExpectation(
Daniel Erat 2017/04/08 00:12:34 per earlier comment, you probably don't need this
sammiequon 2017/04/08 01:03:30 Done.
+ const std::string& method_name,
+ std::unique_ptr<dbus::Response> response) {
+ ASSERT_FALSE(pending_method_calls_.count(method_name));
+ pending_method_calls_[method_name] = std::move(response);
+ EXPECT_CALL(*proxy_.get(),
+ CallMethodWithErrorCallback(HasMember(method_name), _, _, _))
+ .WillOnce(Invoke(this, &BiodClientTest::OnCallMethodWithErrorCallback));
+ }
+
// Synchronously passes |signal| to |client_|'s handler, simulating the signal
// from biometrics.
void EmitSignal(dbus::Signal* signal) {
@@ -234,6 +254,21 @@ class BiodClientTest : public testing::Test {
base::Passed(&pending_response)));
}
+ void OnCallMethodWithErrorCallback(
Daniel Erat 2017/04/08 00:12:34 or this
sammiequon 2017/04/08 01:03:30 Done.
+ dbus::MethodCall* method_call,
+ int timeout_ms,
+ const dbus::ObjectProxy::ResponseCallback& callback,
+ const dbus::ObjectProxy::ErrorCallback& error_callback) {
+ auto it = pending_method_calls_.find(method_call->GetMember());
+ ASSERT_TRUE(it != pending_method_calls_.end());
+ auto pending_response = std::move(it->second);
+ pending_method_calls_.erase(it);
+
+ message_loop_.task_runner()->PostTask(
+ FROM_HERE, base::Bind(&RunResponseCallback, callback,
+ base::Passed(&pending_response)));
+ }
+
DISALLOW_COPY_AND_ASSIGN(BiodClientTest);
};
@@ -312,6 +347,31 @@ TEST_F(BiodClientTest, TestGetRecordsForUser) {
EXPECT_EQ(std::vector<dbus::ObjectPath>(), returned_object_paths);
}
+TEST_F(BiodClientTest, TestDestroyAllRecords) {
+ std::unique_ptr<dbus::Response> response(dbus::Response::CreateEmpty());
+ dbus::MessageWriter writer(response.get());
+
+ // Create a fake response with nothing. The destroy all records call should
+ // return success.
+ AddMethodWithErrorCallbackExpectation(
+ biod::kBiometricsManagerDestroyAllRecordsMethod, std::move(response));
+ DBusMethodCallStatus returned_status = static_cast<DBusMethodCallStatus>(-1);
+ client_->DestroyAllRecords(
+ base::Bind(&CopyDBusMethodCallStatus, &returned_status));
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(DBUS_METHOD_CALL_SUCCESS, returned_status);
+
+ // Create a fake response with nothing. The destroy all records call should
+ // return failure.
+ AddMethodWithErrorCallbackExpectation(
+ biod::kBiometricsManagerDestroyAllRecordsMethod, nullptr);
+ returned_status = static_cast<DBusMethodCallStatus>(-1);
+ client_->DestroyAllRecords(
+ base::Bind(&CopyDBusMethodCallStatus, &returned_status));
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(DBUS_METHOD_CALL_FAILURE, returned_status);
+}
+
TEST_F(BiodClientTest, TestStartAuthentication) {
const dbus::ObjectPath kFakeObjectPath(std::string("/fake/object/path"));
@@ -347,6 +407,62 @@ TEST_F(BiodClientTest, TestStartAuthentication) {
EXPECT_EQ(dbus::ObjectPath(), returned_path);
}
+TEST_F(BiodClientTest, TestRequestBiometricType) {
+ const biod::BiometricType kFakeBiometricType =
+ biod::BiometricType::BIOMETRIC_TYPE_FINGERPRINT;
+
+ std::unique_ptr<dbus::Response> response(dbus::Response::CreateEmpty());
+ dbus::MessageWriter writer(response.get());
+ writer.AppendVariantOfUint32(static_cast<uint32_t>(kFakeBiometricType));
+
+ // Create a fake response with biometric type. The get label call should
+ // return this exact biometric type.
+ biod::BiometricType returned_biometric_type =
+ biod::BiometricType::BIOMETRIC_TYPE_MAX;
+ AddMethodExpectation(dbus::kDBusPropertiesGet, std::move(response));
+ client_->RequestType(
+ base::Bind(&CopyBiometricType, &returned_biometric_type));
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(kFakeBiometricType, returned_biometric_type);
+
+ // Verify that by sending a empty reponse the response is an unknown biometric
+ // type. Also, logs will get printed.
Daniel Erat 2017/04/08 00:12:35 what's the reason for mentioning that messages wil
sammiequon 2017/04/08 01:03:30 No, I thought it would be a good heads ups for fil
Daniel Erat 2017/04/08 01:06:03 i think that switching to CallMethod (and letting
sammiequon 2017/04/08 01:31:47 I see. I think think spam was the wrong word, it w
+ returned_biometric_type = biod::BiometricType::BIOMETRIC_TYPE_MAX;
+ AddMethodExpectation(dbus::kDBusPropertiesGet, nullptr);
+ client_->RequestType(
+ base::Bind(&CopyBiometricType, &returned_biometric_type));
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(biod::BiometricType::BIOMETRIC_TYPE_UNKNOWN,
+ returned_biometric_type);
+}
+
+TEST_F(BiodClientTest, TestRequestRecordLabel) {
+ const std::string kFakeLabel("fakeLabel");
+ const dbus::ObjectPath kFakeRecordPath(std::string("/fake/record/path"));
+
+ std::unique_ptr<dbus::Response> response(dbus::Response::CreateEmpty());
+ dbus::MessageWriter writer(response.get());
+ writer.AppendString(kFakeLabel);
+
+ // Create a fake response with string. The get label call should return this
+ // exact string.
+ std::string returned_label = kInvalidString;
+ AddMethodExpectation(dbus::kDBusPropertiesGet, std::move(response));
+ client_->RequestRecordLabel(kFakeRecordPath,
+ base::Bind(&CopyString, &returned_label));
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(kFakeLabel, returned_label);
+
+ // Verify that by sending a empty reponse the response is an empty string.
+ // Also, logs will get printed.
+ returned_label = kInvalidString;
+ AddMethodExpectation(dbus::kDBusPropertiesGet, nullptr);
+ client_->RequestRecordLabel(kFakeRecordPath,
+ base::Bind(&CopyString, &returned_label));
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ("", returned_label);
+}
+
// Verify when signals are mocked, an observer will catch the signals as
// expected.
TEST_F(BiodClientTest, TestNotifyObservers) {
@@ -378,31 +494,4 @@ TEST_F(BiodClientTest, TestNotifyObservers) {
EXPECT_EQ(1, observer.num_auth_scans_received());
EXPECT_EQ(1, observer.num_failures_received());
}
-
-TEST_F(BiodClientTest, TestGetRecordLabel) {
- const std::string kFakeLabel("fakeLabel");
- const dbus::ObjectPath kFakeRecordPath(std::string("/fake/record/path"));
-
- std::unique_ptr<dbus::Response> response(dbus::Response::CreateEmpty());
- dbus::MessageWriter writer(response.get());
- writer.AppendString(kFakeLabel);
-
- // Create a fake response with string. The get label call should return this
- // exact string.
- std::string returned_label = kInvalidString;
- AddMethodExpectation(dbus::kDBusPropertiesGet, std::move(response));
- client_->RequestRecordLabel(kFakeRecordPath,
- base::Bind(&CopyString, &returned_label));
- base::RunLoop().RunUntilIdle();
- EXPECT_EQ(kFakeLabel, returned_label);
-
- // Verify that by sending a empty reponse the response is an empty string.
- // Also, logs will get printed.
- returned_label = kInvalidString;
- AddMethodExpectation(dbus::kDBusPropertiesGet, nullptr);
- client_->RequestRecordLabel(kFakeRecordPath,
- base::Bind(&CopyString, &returned_label));
- base::RunLoop().RunUntilIdle();
- EXPECT_EQ("", returned_label);
-}
} // namespace chromeos

Powered by Google App Engine
This is Rietveld 408576698