1bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi//
2bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// Copyright (C) 2014 The Android Open Source Project
3bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi//
4bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// Licensed under the Apache License, Version 2.0 (the "License");
5bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// you may not use this file except in compliance with the License.
6bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// You may obtain a copy of the License at
7bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi//
8bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi//      http://www.apache.org/licenses/LICENSE-2.0
9bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi//
10bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// Unless required by applicable law or agreed to in writing, software
11bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// distributed under the License is distributed on an "AS IS" BASIS,
12bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// See the License for the specific language governing permissions and
14bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// limitations under the License.
15bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi//
16c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
17c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#ifndef TRUNKS_TRUNKS_FACTORY_FOR_TEST_H_
18c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#define TRUNKS_TRUNKS_FACTORY_FOR_TEST_H_
19c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
20c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include "trunks/trunks_factory.h"
21c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
2230c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez#include <memory>
23c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include <string>
24c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
25c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include <base/macros.h>
26c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
276318d4413806a501783a003bf249e3ae627c73edUtkarsh Sanghi#include "trunks/password_authorization_delegate.h"
28ef87f3e63b93ff722a8cbcee9c54d55d085221a3Darren Krahn#include "trunks/trunks_export.h"
296318d4413806a501783a003bf249e3ae627c73edUtkarsh Sanghi
30c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnnamespace trunks {
31c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
32c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnclass AuthorizationDelegate;
330ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghiclass MockBlobParser;
34ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghiclass MockHmacSession;
35ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghiclass MockPolicySession;
36ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghiclass MockSessionManager;
37c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnclass MockTpm;
38c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnclass MockTpmState;
3903d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahnclass MockTpmUtility;
40ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghiclass HmacSession;
416318d4413806a501783a003bf249e3ae627c73edUtkarsh Sanghiclass PasswordAuthorizationDelegate;
42ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghiclass PolicySession;
43ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghiclass SessionManager;
44c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnclass Tpm;
45c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnclass TpmState;
46c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnclass TpmUtility;
47c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
48c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn// A factory implementation for testing. Custom instances can be injected. If no
49c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn// instance has been injected, a default mock instance will be used. Objects for
50c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn// which ownership is passed to the caller are instantiated as forwarders which
51c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn// simply forward calls to the current instance set for the class.
52c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn//
53c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn// Example usage:
54c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn//   TrunksFactoryForTest factory;
55c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn//   MockTpmState mock_tpm_state;
56c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn//   factory.set_tpm_state(mock_tpm_state);
57c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn//   // Set expectations on mock_tpm_state...
58ef87f3e63b93ff722a8cbcee9c54d55d085221a3Darren Krahnclass TRUNKS_EXPORT TrunksFactoryForTest : public TrunksFactory {
59c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn public:
60c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  TrunksFactoryForTest();
61295e851b66fb19c05a14401e834337962a58c493Darren Krahn  ~TrunksFactoryForTest() override;
62c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
63c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  // TrunksFactory methods.
64c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  Tpm* GetTpm() const override;
6530c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez  std::unique_ptr<TpmState> GetTpmState() const override;
6630c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez  std::unique_ptr<TpmUtility> GetTpmUtility() const override;
6730c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez  std::unique_ptr<AuthorizationDelegate> GetPasswordAuthorization(
68c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn      const std::string& password) const override;
6930c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez  std::unique_ptr<SessionManager> GetSessionManager() const override;
7030c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez  std::unique_ptr<HmacSession> GetHmacSession() const override;
7130c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez  std::unique_ptr<PolicySession> GetPolicySession() const override;
7230c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez  std::unique_ptr<PolicySession> GetTrialSession() const override;
7330c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez  std::unique_ptr<BlobParser> GetBlobParser() const override;
74c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
75c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  // Mutators to inject custom mocks.
764dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn  void set_tpm(Tpm* tpm) { tpm_ = tpm; }
77c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
784dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn  void set_tpm_state(TpmState* tpm_state) { tpm_state_ = tpm_state; }
79c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
804dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn  void set_tpm_utility(TpmUtility* tpm_utility) { tpm_utility_ = tpm_utility; }
8103d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn
82a19238f46d4341489fd1d3140df1bb09bdbd8f01Darren Krahn  void set_password_authorization_delegate(AuthorizationDelegate* delegate) {
83a19238f46d4341489fd1d3140df1bb09bdbd8f01Darren Krahn    password_authorization_delegate_ = delegate;
84c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  }
85c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
86ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi  void set_session_manager(SessionManager* session_manager) {
87ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi    session_manager_ = session_manager;
88ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi  }
89ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi
90ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi  void set_hmac_session(HmacSession* hmac_session) {
91ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi    hmac_session_ = hmac_session;
92ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi  }
93ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi
94ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi  void set_policy_session(PolicySession* policy_session) {
95ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi    policy_session_ = policy_session;
9652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn  }
9752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn
98b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn  void set_trial_session(PolicySession* trial_session) {
99b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn    trial_session_ = trial_session;
100b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn  }
101b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn
1024dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn  void set_blob_parser(BlobParser* blob_parser) { blob_parser_ = blob_parser; }
1030ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi
104c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn private:
10530c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez  std::unique_ptr<MockTpm> default_tpm_;
106c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  Tpm* tpm_;
10730c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez  std::unique_ptr<MockTpmState> default_tpm_state_;
108c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  TpmState* tpm_state_;
10930c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez  std::unique_ptr<MockTpmUtility> default_tpm_utility_;
11003d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn  TpmUtility* tpm_utility_;
111b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn  std::unique_ptr<PasswordAuthorizationDelegate>
112b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn      default_authorization_delegate_;
113a19238f46d4341489fd1d3140df1bb09bdbd8f01Darren Krahn  AuthorizationDelegate* password_authorization_delegate_;
11430c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez  std::unique_ptr<MockSessionManager> default_session_manager_;
115ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi  SessionManager* session_manager_;
11630c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez  std::unique_ptr<MockHmacSession> default_hmac_session_;
117ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi  HmacSession* hmac_session_;
11830c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez  std::unique_ptr<MockPolicySession> default_policy_session_;
119ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi  PolicySession* policy_session_;
120b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn  std::unique_ptr<MockPolicySession> default_trial_session_;
121b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn  PolicySession* trial_session_;
12230c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez  std::unique_ptr<MockBlobParser> default_blob_parser_;
1230ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi  BlobParser* blob_parser_;
124c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
125c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  DISALLOW_COPY_AND_ASSIGN(TrunksFactoryForTest);
126c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn};
127c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
128c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn}  // namespace trunks
129c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
130c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#endif  // TRUNKS_TRUNKS_FACTORY_FOR_TEST_H_
131