1 //
2 // Copyright (C) 2014 The Android Open Source Project
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 // http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 //
16
17 #include "trunks/hmac_session_impl.h"
18
19 #include <base/logging.h>
20 #include <gmock/gmock.h>
21 #include <gtest/gtest.h>
22
23 #include "trunks/mock_session_manager.h"
24 #include "trunks/mock_tpm.h"
25 #include "trunks/tpm_generated.h"
26 #include "trunks/trunks_factory_for_test.h"
27
28 using testing::_;
29 using testing::DoAll;
30 using testing::NiceMock;
31 using testing::Return;
32 using testing::SaveArg;
33 using testing::SetArgPointee;
34
35 namespace trunks {
36
37 class HmacSessionTest : public testing::Test {
38 public:
HmacSessionTest()39 HmacSessionTest() {}
~HmacSessionTest()40 ~HmacSessionTest() override {}
41
SetUp()42 void SetUp() override {
43 factory_.set_tpm(&mock_tpm_);
44 factory_.set_session_manager(&mock_session_manager_);
45 }
46
GetHmacDelegate(HmacSessionImpl * session)47 HmacAuthorizationDelegate* GetHmacDelegate(HmacSessionImpl* session) {
48 return &(session->hmac_delegate_);
49 }
50
51 protected:
52 TrunksFactoryForTest factory_;
53 NiceMock<MockTpm> mock_tpm_;
54 NiceMock<MockSessionManager> mock_session_manager_;
55 };
56
TEST_F(HmacSessionTest,GetDelegateUninitialized)57 TEST_F(HmacSessionTest, GetDelegateUninitialized) {
58 HmacSessionImpl session(factory_);
59 EXPECT_CALL(mock_session_manager_, GetSessionHandle())
60 .WillRepeatedly(Return(kUninitializedHandle));
61 EXPECT_EQ(nullptr, session.GetDelegate());
62 }
63
TEST_F(HmacSessionTest,GetDelegateSuccess)64 TEST_F(HmacSessionTest, GetDelegateSuccess) {
65 HmacSessionImpl session(factory_);
66 EXPECT_EQ(GetHmacDelegate(&session), session.GetDelegate());
67 }
68
TEST_F(HmacSessionTest,StartBoundSessionSuccess)69 TEST_F(HmacSessionTest, StartBoundSessionSuccess) {
70 HmacSessionImpl session(factory_);
71 TPM_HANDLE bind_entity = TPM_RH_FIRST;
72 EXPECT_CALL(mock_session_manager_, StartSession(TPM_SE_HMAC, bind_entity,
73 _, true, _))
74 .WillOnce(Return(TPM_RC_SUCCESS));
75 EXPECT_EQ(TPM_RC_SUCCESS, session.StartBoundSession(bind_entity, "", true));
76 }
77
TEST_F(HmacSessionTest,StartBoundSessionFailure)78 TEST_F(HmacSessionTest, StartBoundSessionFailure) {
79 HmacSessionImpl session(factory_);
80 TPM_HANDLE bind_entity = TPM_RH_FIRST;
81 EXPECT_CALL(mock_session_manager_, StartSession(TPM_SE_HMAC, bind_entity,
82 _, true, _))
83 .WillOnce(Return(TPM_RC_FAILURE));
84 EXPECT_EQ(TPM_RC_FAILURE, session.StartBoundSession(bind_entity, "", true));
85 }
86
TEST_F(HmacSessionTest,EntityAuthorizationForwardingTest)87 TEST_F(HmacSessionTest, EntityAuthorizationForwardingTest) {
88 HmacSessionImpl session(factory_);
89 std::string test_auth("test_auth");
90 session.SetEntityAuthorizationValue(test_auth);
91 HmacAuthorizationDelegate* hmac_delegate = GetHmacDelegate(&session);
92 std::string entity_auth = hmac_delegate->entity_authorization_value();
93 EXPECT_EQ(0, test_auth.compare(entity_auth));
94 }
95
TEST_F(HmacSessionTest,FutureAuthorizationForwardingTest)96 TEST_F(HmacSessionTest, FutureAuthorizationForwardingTest) {
97 HmacSessionImpl session(factory_);
98 std::string test_auth("test_auth");
99 session.SetFutureAuthorizationValue(test_auth);
100 HmacAuthorizationDelegate* hmac_delegate = GetHmacDelegate(&session);
101 std::string entity_auth = hmac_delegate->future_authorization_value();
102 EXPECT_EQ(0, test_auth.compare(entity_auth));
103 }
104
105 } // namespace trunks
106