tpm_utility_test.cc revision c364caa9d091baae8eeb9144a6abf69e1fcabb39
1c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn// Copyright 2014 The Chromium OS Authors. All rights reserved.
2c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn// Use of this source code is governed by a BSD-style license that can be
3c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn// found in the LICENSE file.
4c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
5c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include <gmock/gmock.h>
6c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include <gtest/gtest.h>
7c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
8c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include "trunks/mock_tpm.h"
9c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include "trunks/mock_tpm_state.h"
10c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include "trunks/tpm_utility_impl.h"
11c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include "trunks/trunks_factory_for_test.h"
12c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
13c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnusing testing::_;
14c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnusing testing::NiceMock;
15c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnusing testing::Return;
16c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
17c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnnamespace trunks {
18c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
19c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn// A test fixture for TpmUtility tests.
20c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnclass TpmUtilityTest : public testing::Test {
21c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn public:
22c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  TpmUtilityTest() {}
23c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  virtual ~TpmUtilityTest() {}
24c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  void SetUp() {
25c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn    factory_.set_tpm_state(&mock_tpm_state_);
26c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn    factory_.set_tpm(&mock_tpm_);
27c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  }
28c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn protected:
29c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  TrunksFactoryForTest factory_;
30c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  NiceMock<MockTpmState> mock_tpm_state_;
31c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  NiceMock<MockTpm> mock_tpm_;
32c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn};
33c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
34c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren KrahnTEST_F(TpmUtilityTest, InitializeTpmAlreadyInit) {
35c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  TpmUtilityImpl utility(factory_);
36c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  EXPECT_EQ(TPM_RC_SUCCESS, utility.InitializeTpm());
37c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn}
38c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
39c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren KrahnTEST_F(TpmUtilityTest, InitializeTpmSuccess) {
40c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  TpmUtilityImpl utility(factory_);
41c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  // Setup a hierarchy that needs to be disabled.
42c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  EXPECT_CALL(mock_tpm_state_, IsPlatformHierarchyEnabled())
43c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn      .WillOnce(Return(true));
44c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  EXPECT_EQ(TPM_RC_SUCCESS, utility.InitializeTpm());
45c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn}
46c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
47c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren KrahnTEST_F(TpmUtilityTest, InitializeTpmBadAuth) {
48c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  TpmUtilityImpl utility(factory_);
49c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  // Setup a hierarchy that needs to be disabled.
50c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  EXPECT_CALL(mock_tpm_state_, IsPlatformHierarchyEnabled())
51c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn      .WillOnce(Return(true));
52c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  // Reject attempts to set platform auth.
53c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_PLATFORM, _, _, _))
54c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn      .WillRepeatedly(Return(TPM_RC_FAILURE));
55c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  EXPECT_EQ(TPM_RC_FAILURE, utility.InitializeTpm());
56c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn}
57c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
58c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren KrahnTEST_F(TpmUtilityTest, InitializeTpmLockNVFails) {
59c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  TpmUtilityImpl utility(factory_);
60c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  // Setup a hierarchy that needs to be disabled.
61c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  EXPECT_CALL(mock_tpm_state_, IsPlatformHierarchyEnabled())
62c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn      .WillOnce(Return(true));
63c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  // Reject attempts to lock nv.
64c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  EXPECT_CALL(mock_tpm_, NV_GlobalWriteLockSync(_, _, _))
65c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn      .WillRepeatedly(Return(TPM_RC_FAILURE));
66c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  EXPECT_EQ(TPM_RC_FAILURE, utility.InitializeTpm());
67c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn}
68c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
69c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren KrahnTEST_F(TpmUtilityTest, InitializeTpmDisablePHFails) {
70c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  TpmUtilityImpl utility(factory_);
71c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  // Setup a hierarchy that needs to be disabled.
72c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  EXPECT_CALL(mock_tpm_state_, IsPlatformHierarchyEnabled())
73c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn      .WillOnce(Return(true));
74c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  // Reject attempts disable the platform hierarchy.
75c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  EXPECT_CALL(mock_tpm_, HierarchyControlSync(_, _, TPM_RH_PLATFORM, _, _, _))
76c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn      .WillRepeatedly(Return(TPM_RC_FAILURE));
77c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  EXPECT_EQ(TPM_RC_FAILURE, utility.InitializeTpm());
78c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn}
79c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
80c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn}  // namespace trunks
81