blob: d999eb24f6c63d0f7f492a1c3477ea7e2727e43d [file] [log] [blame]
Leo Laid045adc2022-03-31 07:42:521// Copyright 2022 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "trunks/real_response_serializer.h"
6
7#include <gmock/gmock.h>
8#include <gtest/gtest.h>
9
10#include "trunks/command_parser.h"
11#include "trunks/tpm_generated.h"
12
13namespace trunks {
14
Leo Lai40e33d52022-03-31 07:42:5215namespace {
16
17void InitializeFake(TPMS_CAPABILITY_DATA* data) {
18 memset(data, 0, sizeof(*data));
19 data->capability = TPM_CAP_HANDLES;
20 for (int i = 0; i < 3; ++i) {
21 data->data.handles.handle[data->data.handles.count] = i;
22 ++data->data.handles.count;
23 }
24}
25
26} // namespace
27
Leo Laid045adc2022-03-31 07:42:5228// A placeholder test fixture.
29class RealResponseSerializerTest : public testing::Test {
30 protected:
31 RealResponseSerializer serializer_;
32};
33
34namespace {
35
36TEST_F(RealResponseSerializerTest, SerializeHeaderOnlyResponse) {
37 std::string response;
38 const TPM_RC rc = TPM_RC_LOCKOUT;
39 serializer_.SerializeHeaderOnlyResponse(rc, &response);
40
41 TPMI_ST_COMMAND_TAG tag = TPM_ST_NULL;
42 EXPECT_EQ(Parse_TPMI_ST_COMMAND_TAG(&response, &tag, nullptr),
43 TPM_RC_SUCCESS);
44 EXPECT_EQ(tag, TPM_ST_NO_SESSIONS);
45
46 UINT32 size = 0;
47 EXPECT_EQ(Parse_UINT32(&response, &size, nullptr), TPM_RC_SUCCESS);
48 EXPECT_EQ(size, kHeaderSize);
49
50 TPM_RC rc_out = TPM_RC_SUCCESS;
51 EXPECT_EQ(Parse_TPM_RC(&response, &rc_out, nullptr), TPM_RC_SUCCESS);
52 EXPECT_EQ(rc_out, rc);
53}
54
55TEST_F(RealResponseSerializerTest, SerializeHeaderOnlyResponseBadTag) {
56 std::string response;
57 const TPM_RC rc = TPM_RC_BAD_TAG;
58 serializer_.SerializeHeaderOnlyResponse(rc, &response);
59
60 TPMI_ST_COMMAND_TAG tag = TPM_ST_NULL;
61 EXPECT_EQ(Parse_TPMI_ST_COMMAND_TAG(&response, &tag, nullptr),
62 TPM_RC_SUCCESS);
63 EXPECT_EQ(tag, TPM_ST_RSP_COMMAND);
64
65 UINT32 size = 0;
66 EXPECT_EQ(Parse_UINT32(&response, &size, nullptr), TPM_RC_SUCCESS);
67 EXPECT_EQ(size, kHeaderSize);
68
69 TPM_RC rc_out = TPM_RC_SUCCESS;
70 EXPECT_EQ(Parse_TPM_RC(&response, &rc_out, nullptr), TPM_RC_SUCCESS);
71 EXPECT_EQ(rc_out, rc);
72}
73
Leo Lai40e33d52022-03-31 07:42:5274TEST_F(RealResponseSerializerTest, SerializeResponseGetCapability) {
75 const TPMI_YES_NO more = YES;
76 TPMS_CAPABILITY_DATA data;
77 InitializeFake(&data);
78 std::string response;
79 serializer_.SerializeResponseGetCapability(more, data, &response);
80
81 TPMI_YES_NO more_out = NO;
82 TPMS_CAPABILITY_DATA data_out = {};
83
84 ASSERT_EQ(
85 Tpm::ParseResponse_GetCapability(response, &more_out, &data_out,
86 /*authorization_delegate=*/nullptr),
87 TPM_RC_SUCCESS);
88 EXPECT_EQ(more_out, more);
89 EXPECT_EQ(memcmp(&data, &data_out, sizeof(data_out)), 0);
90}
91
Leo Laid045adc2022-03-31 07:42:5292} // namespace
93
94} // namespace trunks