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