aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2021-03-02 19:06:05 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2021-03-02 19:06:05 +0000
commit49e32e333b40ff2fc34db6e7a6221dd0e93cf094 (patch)
tree4ffee6392e69398c0890b7c1045d8a86fea2cf6a
parent5a6e0148f4c028a0d617c7f1793f04c95ca0b066 (diff)
parent6315aa3bf13e2be08d174ec19084e57efc218c32 (diff)
downloadcuttlefish-49e32e333b40ff2fc34db6e7a6221dd0e93cf094.tar.gz
Merge "Create a unit test for keymaster_channel.cpp." am: 6315aa3bf1
Original change: https://android-review.googlesource.com/c/device/google/cuttlefish/+/1611280 MUST ONLY BE SUBMITTED BY AUTOMERGER Change-Id: Ib68fb41d9054b49a64f5ca142ba5d646dd82d591
-rw-r--r--common/libs/security/Android.bp24
-rw-r--r--common/libs/security/keymaster_channel_test.cpp78
2 files changed, 102 insertions, 0 deletions
diff --git a/common/libs/security/Android.bp b/common/libs/security/Android.bp
index a738d81b3..a1e5c857e 100644
--- a/common/libs/security/Android.bp
+++ b/common/libs/security/Android.bp
@@ -31,3 +31,27 @@ cc_library {
"liblog",
],
}
+
+cc_test {
+ name: "libcuttlefish_security_tests",
+ srcs: [
+ "keymaster_channel_test.cpp",
+ ],
+ shared_libs: [
+ "libbase",
+ "libcuttlefish_fs",
+ "libcuttlefish_security",
+ "libgatekeeper",
+ "libkeymaster_messages",
+ "liblog",
+ ],
+ static_libs: [
+ "libgmock",
+ "libgtest",
+ ],
+ defaults: ["cuttlefish_buildhost_only"],
+ test_suites: ["general-tests"],
+ test_options: {
+ unit_test: true,
+ },
+}
diff --git a/common/libs/security/keymaster_channel_test.cpp b/common/libs/security/keymaster_channel_test.cpp
new file mode 100644
index 000000000..aed5bed3f
--- /dev/null
+++ b/common/libs/security/keymaster_channel_test.cpp
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2021 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 <stdlib.h>
+#include <unistd.h>
+
+#include <string>
+
+#include "common/libs/fs/shared_fd.h"
+#include "common/libs/security/keymaster_channel.h"
+#include "gtest/gtest.h"
+
+namespace cuttlefish {
+
+TEST(KeymasterChannel, SendAndReceiveRequest) {
+ SharedFD read_fd;
+ SharedFD write_fd;
+ ASSERT_TRUE(SharedFD::Pipe(&read_fd, &write_fd)) << "Failed to create pipe";
+
+ KeymasterChannel channel{read_fd, write_fd};
+
+ char buffer[] = {1, 2, 3, 4, 5, 6};
+ keymaster::Buffer request(buffer, sizeof(buffer));
+
+ ASSERT_TRUE(channel.SendRequest(keymaster::GET_VERSION, request))
+ << "Failed to send request";
+ auto response = channel.ReceiveMessage();
+ EXPECT_EQ(response->cmd, keymaster::GET_VERSION) << "Command mismatch";
+ EXPECT_FALSE(response->is_response) << "Request/response mismatch";
+
+ keymaster::Buffer read;
+ const uint8_t* read_data = response->payload;
+ EXPECT_TRUE(read.Deserialize(&read_data, read_data + response->payload_size))
+ << "Failed to deserialize request";
+ ASSERT_EQ(request.end() - request.begin(), read.end() - read.begin());
+ ASSERT_EQ(request.buffer_size(), read.buffer_size());
+ ASSERT_TRUE(std::equal(request.begin(), request.end(), read.begin()));
+}
+
+TEST(KeymasterChannel, SendAndReceiveResponse) {
+ SharedFD read_fd;
+ SharedFD write_fd;
+ ASSERT_TRUE(SharedFD::Pipe(&read_fd, &write_fd)) << "Failed to create pipe";
+
+ KeymasterChannel channel{read_fd, write_fd};
+
+ char buffer[] = {1, 2, 3, 4, 5, 6};
+ keymaster::Buffer request(buffer, sizeof(buffer));
+
+ ASSERT_TRUE(channel.SendResponse(keymaster::GET_VERSION, request))
+ << "Failed to send request";
+ auto response = channel.ReceiveMessage();
+ EXPECT_EQ(response->cmd, keymaster::GET_VERSION) << "Command mismatch";
+ EXPECT_TRUE(response->is_response) << "Request/response mismatch";
+
+ keymaster::Buffer read;
+ const uint8_t* read_data = response->payload;
+ EXPECT_TRUE(read.Deserialize(&read_data, read_data + response->payload_size))
+ << "Failed to deserialize request";
+ ASSERT_EQ(request.end() - request.begin(), read.end() - read.begin());
+ ASSERT_EQ(request.buffer_size(), read.buffer_size());
+ ASSERT_TRUE(std::equal(request.begin(), request.end(), read.begin()));
+}
+
+} // namespace cuttlefish