diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2021-03-02 19:06:05 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2021-03-02 19:06:05 +0000 |
commit | 49e32e333b40ff2fc34db6e7a6221dd0e93cf094 (patch) | |
tree | 4ffee6392e69398c0890b7c1045d8a86fea2cf6a | |
parent | 5a6e0148f4c028a0d617c7f1793f04c95ca0b066 (diff) | |
parent | 6315aa3bf13e2be08d174ec19084e57efc218c32 (diff) | |
download | cuttlefish-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.bp | 24 | ||||
-rw-r--r-- | common/libs/security/keymaster_channel_test.cpp | 78 |
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 |