Index: net/quic/test_tools/fake_proof_source.h |
diff --git a/net/quic/test_tools/fake_proof_source.h b/net/quic/test_tools/fake_proof_source.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3c9bfe61cf5b1a81af4f9b06532d18b7206fa88b |
--- /dev/null |
+++ b/net/quic/test_tools/fake_proof_source.h |
@@ -0,0 +1,84 @@ |
+// Copyright (c) 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef NET_QUIC_TEST_TOOLS_FAKE_PROOF_SOURCE_H_ |
+#define NET_QUIC_TEST_TOOLS_FAKE_PROOF_SOURCE_H_ |
+ |
+#include <memory> |
+#include <string> |
+#include <vector> |
+ |
+#include "net/quic/core/crypto/proof_source.h" |
+ |
+namespace net { |
+namespace test { |
+ |
+// Implementation of ProofSource which delegates to a ProofSourceForTesting, |
+// except that when the async GetProof is called, it captures the call and |
+// allows tests to see that a call is pending, which they can then cause to |
+// complete at a time of their choosing. |
+class FakeProofSource : public ProofSource { |
+ public: |
+ FakeProofSource(); |
+ ~FakeProofSource() override; |
+ |
+ // Before this object is "active", all calls to GetProof will be delegated |
+ // immediately. Once "active", the async ones will be intercepted. This |
+ // distinction is necessary to ensure that GetProof can be called without |
+ // interference during test case setup. |
+ void Activate(); |
+ |
+ // ProofSource interface |
+ bool GetProof(const IPAddress& server_ip, |
+ const std::string& hostname, |
+ const std::string& server_config, |
+ QuicVersion quic_version, |
+ base::StringPiece chlo_hash, |
+ scoped_refptr<ProofSource::Chain>* out_chain, |
+ std::string* out_signature, |
+ std::string* out_leaf_cert_sct) override; |
+ void GetProof(const IPAddress& server_ip, |
+ const std::string& hostname, |
+ const std::string& server_config, |
+ QuicVersion quic_version, |
+ base::StringPiece chlo_hash, |
+ std::unique_ptr<ProofSource::Callback> callback) override; |
+ |
+ // Get the number of callbacks which are pending |
+ int NumPendingCallbacks() const; |
+ |
+ // Invoke a pending callback. The index refers to the position in params_ of |
+ // the callback to be completed. |
+ void InvokePendingCallback(int n); |
+ |
+ private: |
+ std::unique_ptr<ProofSource> delegate_; |
+ bool active_ = false; |
+ |
+ struct Params { |
+ Params(const IPAddress& server_ip, |
+ std::string hostname, |
+ std::string server_config, |
+ QuicVersion quic_version, |
+ std::string chlo_hash, |
+ std::unique_ptr<ProofSource::Callback> callback); |
+ ~Params(); |
+ Params(Params&& other); |
+ Params& operator=(Params&& other); |
+ |
+ IPAddress server_ip; |
+ std::string hostname; |
+ std::string server_config; |
+ QuicVersion quic_version; |
+ std::string chlo_hash; |
+ std::unique_ptr<ProofSource::Callback> callback; |
+ }; |
+ |
+ std::vector<Params> params_; |
+}; |
+ |
+} // namespace test |
+} // namespace net |
+ |
+#endif // NET_QUIC_TEST_TOOLS_FAKE_PROOF_SOURCE_H_ |