| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef NET_QUIC_TEST_TOOLS_CRYPTO_TEST_UTILS_H_ | 5 #ifndef NET_QUIC_TEST_TOOLS_CRYPTO_TEST_UTILS_H_ |
| 6 #define NET_QUIC_TEST_TOOLS_CRYPTO_TEST_UTILS_H_ | 6 #define NET_QUIC_TEST_TOOLS_CRYPTO_TEST_UTILS_H_ |
| 7 | 7 |
| 8 #include <stdarg.h> | 8 #include <stdarg.h> |
| 9 | 9 |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 47 // this source. | 47 // this source. |
| 48 class CallbackSource { | 48 class CallbackSource { |
| 49 public: | 49 public: |
| 50 virtual ~CallbackSource() {} | 50 virtual ~CallbackSource() {} |
| 51 | 51 |
| 52 // Runs pending callbacks from this source. If there is no pending | 52 // Runs pending callbacks from this source. If there is no pending |
| 53 // callback, does nothing. | 53 // callback, does nothing. |
| 54 virtual void RunPendingCallbacks() = 0; | 54 virtual void RunPendingCallbacks() = 0; |
| 55 }; | 55 }; |
| 56 | 56 |
| 57 // FakeServerOptions bundles together a number of options for configuring the |
| 58 // server in HandshakeWithFakeServer. |
| 59 struct FakeServerOptions { |
| 60 FakeServerOptions(); |
| 61 |
| 62 // If token_binding_enabled is true, then the server will attempt to |
| 63 // negotiate Token Binding. |
| 64 bool token_binding_enabled; |
| 65 }; |
| 66 |
| 57 // FakeClientOptions bundles together a number of options for configuring | 67 // FakeClientOptions bundles together a number of options for configuring |
| 58 // HandshakeWithFakeClient. | 68 // HandshakeWithFakeClient. |
| 59 struct FakeClientOptions { | 69 struct FakeClientOptions { |
| 60 FakeClientOptions(); | 70 FakeClientOptions(); |
| 61 | 71 |
| 62 // If channel_id_enabled is true then the client will attempt to send a | 72 // If channel_id_enabled is true then the client will attempt to send a |
| 63 // ChannelID. | 73 // ChannelID. |
| 64 bool channel_id_enabled; | 74 bool channel_id_enabled; |
| 65 | 75 |
| 66 // If channel_id_source_async is true then the client will use an async | 76 // If channel_id_source_async is true then the client will use an async |
| 67 // ChannelIDSource for testing. Ignored if channel_id_enabled is false. | 77 // ChannelIDSource for testing. Ignored if channel_id_enabled is false. |
| 68 bool channel_id_source_async; | 78 bool channel_id_source_async; |
| 79 |
| 80 // If token_binding_enabled is true, then the client will attempt to |
| 81 // negotiate Token Binding. |
| 82 bool token_binding_enabled; |
| 69 }; | 83 }; |
| 70 | 84 |
| 71 // returns: the number of client hellos that the client sent. | 85 // returns: the number of client hellos that the client sent. |
| 72 static int HandshakeWithFakeServer(MockConnectionHelper* helper, | 86 static int HandshakeWithFakeServer(MockConnectionHelper* helper, |
| 73 PacketSavingConnection* client_conn, | 87 PacketSavingConnection* client_conn, |
| 74 QuicCryptoClientStream* client); | 88 QuicCryptoClientStream* client, |
| 89 const FakeServerOptions& options); |
| 75 | 90 |
| 76 // returns: the number of client hellos that the client sent. | 91 // returns: the number of client hellos that the client sent. |
| 77 static int HandshakeWithFakeClient(MockConnectionHelper* helper, | 92 static int HandshakeWithFakeClient(MockConnectionHelper* helper, |
| 78 PacketSavingConnection* server_conn, | 93 PacketSavingConnection* server_conn, |
| 79 QuicCryptoServerStream* server, | 94 QuicCryptoServerStream* server, |
| 80 const QuicServerId& server_id, | 95 const QuicServerId& server_id, |
| 81 const FakeClientOptions& options); | 96 const FakeClientOptions& options); |
| 82 | 97 |
| 83 // SetupCryptoServerConfigForTest configures |config| and |crypto_config| | 98 // SetupCryptoServerConfigForTest configures |config| and |crypto_config| |
| 84 // with sensible defaults for testing. | 99 // with sensible defaults for testing. |
| 85 static void SetupCryptoServerConfigForTest( | 100 static void SetupCryptoServerConfigForTest( |
| 86 const QuicClock* clock, | 101 const QuicClock* clock, |
| 87 QuicRandom* rand, | 102 QuicRandom* rand, |
| 88 QuicConfig* config, | 103 QuicConfig* config, |
| 89 QuicCryptoServerConfig* crypto_config); | 104 QuicCryptoServerConfig* crypto_config, |
| 105 const FakeServerOptions& options); |
| 90 | 106 |
| 91 // CommunicateHandshakeMessages moves messages from |a| to |b| and back until | 107 // CommunicateHandshakeMessages moves messages from |a| to |b| and back until |
| 92 // |a|'s handshake has completed. | 108 // |a|'s handshake has completed. |
| 93 static void CommunicateHandshakeMessages(PacketSavingConnection* a_conn, | 109 static void CommunicateHandshakeMessages(PacketSavingConnection* a_conn, |
| 94 QuicCryptoStream* a, | 110 QuicCryptoStream* a, |
| 95 PacketSavingConnection* b_conn, | 111 PacketSavingConnection* b_conn, |
| 96 QuicCryptoStream* b); | 112 QuicCryptoStream* b); |
| 97 | 113 |
| 98 // CommunicateHandshakeMessagesAndRunCallbacks moves messages from |a| to |b| | 114 // CommunicateHandshakeMessagesAndRunCallbacks moves messages from |a| to |b| |
| 99 // and back until |a|'s handshake has completed. If |callback_source| is not | 115 // and back until |a|'s handshake has completed. If |callback_source| is not |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 158 // "SNI", "www.example.com", | 174 // "SNI", "www.example.com", |
| 159 // nullptr); | 175 // nullptr); |
| 160 static CryptoHandshakeMessage Message(const char* message_tag, ...); | 176 static CryptoHandshakeMessage Message(const char* message_tag, ...); |
| 161 | 177 |
| 162 // ChannelIDSourceForTesting returns a ChannelIDSource that generates keys | 178 // ChannelIDSourceForTesting returns a ChannelIDSource that generates keys |
| 163 // deterministically based on the hostname given in the GetChannelIDKey call. | 179 // deterministically based on the hostname given in the GetChannelIDKey call. |
| 164 // This ChannelIDSource works in synchronous mode, i.e., its GetChannelIDKey | 180 // This ChannelIDSource works in synchronous mode, i.e., its GetChannelIDKey |
| 165 // method never returns QUIC_PENDING. | 181 // method never returns QUIC_PENDING. |
| 166 static ChannelIDSource* ChannelIDSourceForTesting(); | 182 static ChannelIDSource* ChannelIDSourceForTesting(); |
| 167 | 183 |
| 184 // MovePackets parses crypto handshake messages from packet number |
| 185 // |*inout_packet_index| through to the last packet (or until a packet fails |
| 186 // to decrypt) and has |dest_stream| process them. |*inout_packet_index| is |
| 187 // updated with an index one greater than the last packet processed. |
| 188 static void MovePackets(PacketSavingConnection* source_conn, |
| 189 size_t* inout_packet_index, |
| 190 QuicCryptoStream* dest_stream, |
| 191 PacketSavingConnection* dest_conn); |
| 192 |
| 168 private: | 193 private: |
| 169 static void CompareClientAndServerKeys(QuicCryptoClientStream* client, | 194 static void CompareClientAndServerKeys(QuicCryptoClientStream* client, |
| 170 QuicCryptoServerStream* server); | 195 QuicCryptoServerStream* server); |
| 171 | 196 |
| 172 DISALLOW_COPY_AND_ASSIGN(CryptoTestUtils); | 197 DISALLOW_COPY_AND_ASSIGN(CryptoTestUtils); |
| 173 }; | 198 }; |
| 174 | 199 |
| 175 } // namespace test | 200 } // namespace test |
| 176 | 201 |
| 177 } // namespace net | 202 } // namespace net |
| 178 | 203 |
| 179 #endif // NET_QUIC_TEST_TOOLS_CRYPTO_TEST_UTILS_H_ | 204 #endif // NET_QUIC_TEST_TOOLS_CRYPTO_TEST_UTILS_H_ |
| OLD | NEW |