Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(597)

Unified Diff: net/spdy/spdy_test_util.cc

Issue 9582034: Fork SPDY/2 and SPDY/3 versions of our SPDY tests, in preparation for landing (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Fix merge bug Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/spdy/spdy_test_util.h ('k') | net/spdy/spdy_test_util_spdy2.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/spdy/spdy_test_util.cc
===================================================================
--- net/spdy/spdy_test_util.cc (revision 124866)
+++ net/spdy/spdy_test_util.cc (working copy)
@@ -1,1007 +0,0 @@
-// Copyright (c) 2012 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.
-
-#include "net/spdy/spdy_test_util.h"
-
-#include <string>
-
-#include "base/basictypes.h"
-#include "base/compiler_specific.h"
-#include "base/string_number_conversions.h"
-#include "base/string_util.h"
-#include "net/http/http_network_session.h"
-#include "net/http/http_network_transaction.h"
-#include "net/http/http_server_properties_impl.h"
-#include "net/spdy/spdy_framer.h"
-#include "net/spdy/spdy_http_utils.h"
-
-namespace net {
-
-// Chop a frame into an array of MockWrites.
-// |data| is the frame to chop.
-// |length| is the length of the frame to chop.
-// |num_chunks| is the number of chunks to create.
-MockWrite* ChopWriteFrame(const char* data, int length, int num_chunks) {
- MockWrite* chunks = new MockWrite[num_chunks];
- int chunk_size = length / num_chunks;
- for (int index = 0; index < num_chunks; index++) {
- const char* ptr = data + (index * chunk_size);
- if (index == num_chunks - 1)
- chunk_size += length % chunk_size; // The last chunk takes the remainder.
- chunks[index] = MockWrite(ASYNC, ptr, chunk_size);
- }
- return chunks;
-}
-
-// Chop a SpdyFrame into an array of MockWrites.
-// |frame| is the frame to chop.
-// |num_chunks| is the number of chunks to create.
-MockWrite* ChopWriteFrame(const spdy::SpdyFrame& frame, int num_chunks) {
- return ChopWriteFrame(frame.data(),
- frame.length() + spdy::SpdyFrame::kHeaderSize,
- num_chunks);
-}
-
-// Chop a frame into an array of MockReads.
-// |data| is the frame to chop.
-// |length| is the length of the frame to chop.
-// |num_chunks| is the number of chunks to create.
-MockRead* ChopReadFrame(const char* data, int length, int num_chunks) {
- MockRead* chunks = new MockRead[num_chunks];
- int chunk_size = length / num_chunks;
- for (int index = 0; index < num_chunks; index++) {
- const char* ptr = data + (index * chunk_size);
- if (index == num_chunks - 1)
- chunk_size += length % chunk_size; // The last chunk takes the remainder.
- chunks[index] = MockRead(ASYNC, ptr, chunk_size);
- }
- return chunks;
-}
-
-// Chop a SpdyFrame into an array of MockReads.
-// |frame| is the frame to chop.
-// |num_chunks| is the number of chunks to create.
-MockRead* ChopReadFrame(const spdy::SpdyFrame& frame, int num_chunks) {
- return ChopReadFrame(frame.data(),
- frame.length() + spdy::SpdyFrame::kHeaderSize,
- num_chunks);
-}
-
-// Adds headers and values to a map.
-// |extra_headers| is an array of { name, value } pairs, arranged as strings
-// where the even entries are the header names, and the odd entries are the
-// header values.
-// |headers| gets filled in from |extra_headers|.
-void AppendHeadersToSpdyFrame(const char* const extra_headers[],
- int extra_header_count,
- spdy::SpdyHeaderBlock* headers) {
- std::string this_header;
- std::string this_value;
-
- if (!extra_header_count)
- return;
-
- // Sanity check: Non-NULL header list.
- DCHECK(NULL != extra_headers) << "NULL header value pair list";
- // Sanity check: Non-NULL header map.
- DCHECK(NULL != headers) << "NULL header map";
- // Copy in the headers.
- for (int i = 0; i < extra_header_count; i++) {
- // Sanity check: Non-empty header.
- DCHECK_NE('\0', *extra_headers[i * 2]) << "Empty header value pair";
- this_header = extra_headers[i * 2];
- std::string::size_type header_len = this_header.length();
- if (!header_len)
- continue;
- this_value = extra_headers[1 + (i * 2)];
- std::string new_value;
- if (headers->find(this_header) != headers->end()) {
- // More than one entry in the header.
- // Don't add the header again, just the append to the value,
- // separated by a NULL character.
-
- // Adjust the value.
- new_value = (*headers)[this_header];
- // Put in a NULL separator.
- new_value.append(1, '\0');
- // Append the new value.
- new_value += this_value;
- } else {
- // Not a duplicate, just write the value.
- new_value = this_value;
- }
- (*headers)[this_header] = new_value;
- }
-}
-
-// Writes |val| to a location of size |len|, in big-endian format.
-// in the buffer pointed to by |buffer_handle|.
-// Updates the |*buffer_handle| pointer by |len|
-// Returns the number of bytes written
-int AppendToBuffer(int val,
- int len,
- unsigned char** buffer_handle,
- int* buffer_len_remaining) {
- if (len <= 0)
- return 0;
- DCHECK((size_t) len <= sizeof(len)) << "Data length too long for data type";
- DCHECK(NULL != buffer_handle) << "NULL buffer handle";
- DCHECK(NULL != *buffer_handle) << "NULL pointer";
- DCHECK(NULL != buffer_len_remaining)
- << "NULL buffer remainder length pointer";
- DCHECK_GE(*buffer_len_remaining, len) << "Insufficient buffer size";
- for (int i = 0; i < len; i++) {
- int shift = (8 * (len - (i + 1)));
- unsigned char val_chunk = (val >> shift) & 0x0FF;
- *(*buffer_handle)++ = val_chunk;
- *buffer_len_remaining += 1;
- }
- return len;
-}
-
-// Construct a SPDY packet.
-// |head| is the start of the packet, up to but not including
-// the header value pairs.
-// |extra_headers| are the extra header-value pairs, which typically
-// will vary the most between calls.
-// |tail| is any (relatively constant) header-value pairs to add.
-// |buffer| is the buffer we're filling in.
-// Returns a SpdyFrame.
-spdy::SpdyFrame* ConstructSpdyPacket(const SpdyHeaderInfo& header_info,
- const char* const extra_headers[],
- int extra_header_count,
- const char* const tail[],
- int tail_header_count) {
- spdy::SpdyFramer framer;
- spdy::SpdyHeaderBlock headers;
- // Copy in the extra headers to our map.
- AppendHeadersToSpdyFrame(extra_headers, extra_header_count, &headers);
- // Copy in the tail headers to our map.
- if (tail && tail_header_count)
- AppendHeadersToSpdyFrame(tail, tail_header_count, &headers);
- spdy::SpdyFrame* frame = NULL;
- switch (header_info.kind) {
- case spdy::SYN_STREAM:
- frame = framer.CreateSynStream(header_info.id, header_info.assoc_id,
- header_info.priority,
- header_info.control_flags,
- header_info.compressed, &headers);
- break;
- case spdy::SYN_REPLY:
- frame = framer.CreateSynReply(header_info.id, header_info.control_flags,
- header_info.compressed, &headers);
- break;
- case spdy::RST_STREAM:
- frame = framer.CreateRstStream(header_info.id, header_info.status);
- break;
- case spdy::HEADERS:
- frame = framer.CreateHeaders(header_info.id, header_info.control_flags,
- header_info.compressed, &headers);
- break;
- default:
- frame = framer.CreateDataFrame(header_info.id, header_info.data,
- header_info.data_length,
- header_info.data_flags);
- break;
- }
- return frame;
-}
-
-// Construct an expected SPDY SETTINGS frame.
-// |settings| are the settings to set.
-// Returns the constructed frame. The caller takes ownership of the frame.
-spdy::SpdyFrame* ConstructSpdySettings(
- const spdy::SpdySettings& settings) {
- spdy::SpdyFramer framer;
- return framer.CreateSettings(settings);
-}
-
-// Construct an expected SPDY CREDENTIAL frame.
-// |credential| is the credential to sen.
-// Returns the constructed frame. The caller takes ownership of the frame.
-spdy::SpdyFrame* ConstructSpdyCredential(
- const spdy::SpdyCredential& credential) {
- spdy::SpdyFramer framer;
- return framer.CreateCredentialFrame(credential);
-}
-
-// Construct a SPDY PING frame.
-// Returns the constructed frame. The caller takes ownership of the frame.
-spdy::SpdyFrame* ConstructSpdyPing() {
- spdy::SpdyFramer framer;
- return framer.CreatePingFrame(1);
-}
-
-// Construct a SPDY GOAWAY frame.
-// Returns the constructed frame. The caller takes ownership of the frame.
-spdy::SpdyFrame* ConstructSpdyGoAway() {
- spdy::SpdyFramer framer;
- return framer.CreateGoAway(0);
-}
-
-// Construct a SPDY WINDOW_UPDATE frame.
-// Returns the constructed frame. The caller takes ownership of the frame.
-spdy::SpdyFrame* ConstructSpdyWindowUpdate(
- const spdy::SpdyStreamId stream_id, uint32 delta_window_size) {
- spdy::SpdyFramer framer;
- return framer.CreateWindowUpdate(stream_id, delta_window_size);
-}
-
-// Construct a SPDY RST_STREAM frame.
-// Returns the constructed frame. The caller takes ownership of the frame.
-spdy::SpdyFrame* ConstructSpdyRstStream(spdy::SpdyStreamId stream_id,
- spdy::SpdyStatusCodes status) {
- spdy::SpdyFramer framer;
- return framer.CreateRstStream(stream_id, status);
-}
-
-// Construct a single SPDY header entry, for validation.
-// |extra_headers| are the extra header-value pairs.
-// |buffer| is the buffer we're filling in.
-// |index| is the index of the header we want.
-// Returns the number of bytes written into |buffer|.
-int ConstructSpdyHeader(const char* const extra_headers[],
- int extra_header_count,
- char* buffer,
- int buffer_length,
- int index) {
- const char* this_header = NULL;
- const char* this_value = NULL;
- if (!buffer || !buffer_length)
- return 0;
- *buffer = '\0';
- // Sanity check: Non-empty header list.
- DCHECK(NULL != extra_headers) << "NULL extra headers pointer";
- // Sanity check: Index out of range.
- DCHECK((index >= 0) && (index < extra_header_count))
- << "Index " << index
- << " out of range [0, " << extra_header_count << ")";
- this_header = extra_headers[index * 2];
- // Sanity check: Non-empty header.
- if (!*this_header)
- return 0;
- std::string::size_type header_len = strlen(this_header);
- if (!header_len)
- return 0;
- this_value = extra_headers[1 + (index * 2)];
- // Sanity check: Non-empty value.
- if (!*this_value)
- this_value = "";
- int n = base::snprintf(buffer,
- buffer_length,
- "%s: %s\r\n",
- this_header,
- this_value);
- return n;
-}
-
-spdy::SpdyFrame* ConstructSpdyControlFrame(const char* const extra_headers[],
- int extra_header_count,
- bool compressed,
- int stream_id,
- RequestPriority request_priority,
- spdy::SpdyControlType type,
- spdy::SpdyControlFlags flags,
- const char* const* kHeaders,
- int kHeadersSize) {
- return ConstructSpdyControlFrame(extra_headers,
- extra_header_count,
- compressed,
- stream_id,
- request_priority,
- type,
- flags,
- kHeaders,
- kHeadersSize,
- 0);
-}
-
-spdy::SpdyFrame* ConstructSpdyControlFrame(const char* const extra_headers[],
- int extra_header_count,
- bool compressed,
- int stream_id,
- RequestPriority request_priority,
- spdy::SpdyControlType type,
- spdy::SpdyControlFlags flags,
- const char* const* kHeaders,
- int kHeadersSize,
- int associated_stream_id) {
- const SpdyHeaderInfo kSynStartHeader = {
- type, // Kind = Syn
- stream_id, // Stream ID
- associated_stream_id, // Associated stream ID
- ConvertRequestPriorityToSpdyPriority(request_priority),
- // Priority
- flags, // Control Flags
- compressed, // Compressed
- spdy::INVALID, // Status
- NULL, // Data
- 0, // Length
- spdy::DATA_FLAG_NONE // Data Flags
- };
- return ConstructSpdyPacket(kSynStartHeader,
- extra_headers,
- extra_header_count,
- kHeaders,
- kHeadersSize / 2);
-}
-
-// Constructs a standard SPDY GET SYN packet, optionally compressed
-// for the url |url|.
-// |extra_headers| are the extra header-value pairs, which typically
-// will vary the most between calls.
-// Returns a SpdyFrame.
-spdy::SpdyFrame* ConstructSpdyGet(const char* const url,
- bool compressed,
- int stream_id,
- RequestPriority request_priority) {
- const SpdyHeaderInfo kSynStartHeader = {
- spdy::SYN_STREAM, // Kind = Syn
- stream_id, // Stream ID
- 0, // Associated stream ID
- net::ConvertRequestPriorityToSpdyPriority(request_priority),
- // Priority
- spdy::CONTROL_FLAG_FIN, // Control Flags
- compressed, // Compressed
- spdy::INVALID, // Status
- NULL, // Data
- 0, // Length
- spdy::DATA_FLAG_NONE // Data Flags
- };
-
- GURL gurl(url);
-
- // This is so ugly. Why are we using char* in here again?
- std::string str_path = gurl.PathForRequest();
- std::string str_scheme = gurl.scheme();
- std::string str_host = gurl.host();
- if (gurl.has_port()) {
- str_host += ":";
- str_host += gurl.port();
- }
- scoped_array<char> req(new char[str_path.size() + 1]);
- scoped_array<char> scheme(new char[str_scheme.size() + 1]);
- scoped_array<char> host(new char[str_host.size() + 1]);
- memcpy(req.get(), str_path.c_str(), str_path.size());
- memcpy(scheme.get(), str_scheme.c_str(), str_scheme.size());
- memcpy(host.get(), str_host.c_str(), str_host.size());
- req.get()[str_path.size()] = '\0';
- scheme.get()[str_scheme.size()] = '\0';
- host.get()[str_host.size()] = '\0';
-
- const char* const headers[] = {
- "method",
- "GET",
- "url",
- req.get(),
- "host",
- host.get(),
- "scheme",
- scheme.get(),
- "version",
- "HTTP/1.1"
- };
- return ConstructSpdyPacket(
- kSynStartHeader,
- NULL,
- 0,
- headers,
- arraysize(headers) / 2);
-}
-
-// Constructs a standard SPDY GET SYN packet, optionally compressed.
-// |extra_headers| are the extra header-value pairs, which typically
-// will vary the most between calls.
-// Returns a SpdyFrame.
-spdy::SpdyFrame* ConstructSpdyGet(const char* const extra_headers[],
- int extra_header_count,
- bool compressed,
- int stream_id,
- RequestPriority request_priority) {
- return ConstructSpdyGet(extra_headers, extra_header_count, compressed,
- stream_id, request_priority, true);
-}
-
-// Constructs a standard SPDY GET SYN packet, optionally compressed.
-// |extra_headers| are the extra header-value pairs, which typically
-// will vary the most between calls.
-// Returns a SpdyFrame.
-spdy::SpdyFrame* ConstructSpdyGet(const char* const extra_headers[],
- int extra_header_count,
- bool compressed,
- int stream_id,
- RequestPriority request_priority,
- bool direct) {
- const char* const kStandardGetHeaders[] = {
- "method",
- "GET",
- "url",
- (direct ? "/" : "http://www.google.com/"),
- "host",
- "www.google.com",
- "scheme",
- "http",
- "version",
- "HTTP/1.1"
- };
- return ConstructSpdyControlFrame(extra_headers,
- extra_header_count,
- compressed,
- stream_id,
- request_priority,
- spdy::SYN_STREAM,
- spdy::CONTROL_FLAG_FIN,
- kStandardGetHeaders,
- arraysize(kStandardGetHeaders));
-}
-
-// Constructs a standard SPDY SYN_STREAM frame for a CONNECT request.
-spdy::SpdyFrame* ConstructSpdyConnect(const char* const extra_headers[],
- int extra_header_count,
- int stream_id) {
- const char* const kConnectHeaders[] = {
- "method", "CONNECT",
- "url", "www.google.com:443",
- "host", "www.google.com",
- "version", "HTTP/1.1",
- };
- return ConstructSpdyControlFrame(extra_headers,
- extra_header_count,
- /*compressed*/ false,
- stream_id,
- LOWEST,
- spdy::SYN_STREAM,
- spdy::CONTROL_FLAG_NONE,
- kConnectHeaders,
- arraysize(kConnectHeaders));
-}
-
-// Constructs a standard SPDY push SYN packet.
-// |extra_headers| are the extra header-value pairs, which typically
-// will vary the most between calls.
-// Returns a SpdyFrame.
-spdy::SpdyFrame* ConstructSpdyPush(const char* const extra_headers[],
- int extra_header_count,
- int stream_id,
- int associated_stream_id) {
- const char* const kStandardGetHeaders[] = {
- "hello",
- "bye",
- "status",
- "200",
- "version",
- "HTTP/1.1"
- };
- return ConstructSpdyControlFrame(extra_headers,
- extra_header_count,
- false,
- stream_id,
- LOWEST,
- spdy::SYN_STREAM,
- spdy::CONTROL_FLAG_NONE,
- kStandardGetHeaders,
- arraysize(kStandardGetHeaders),
- associated_stream_id);
-}
-
-spdy::SpdyFrame* ConstructSpdyPush(const char* const extra_headers[],
- int extra_header_count,
- int stream_id,
- int associated_stream_id,
- const char* url) {
- const char* const kStandardGetHeaders[] = {
- "hello",
- "bye",
- "status",
- "200 OK",
- "url",
- url,
- "version",
- "HTTP/1.1"
- };
- return ConstructSpdyControlFrame(extra_headers,
- extra_header_count,
- false,
- stream_id,
- LOWEST,
- spdy::SYN_STREAM,
- spdy::CONTROL_FLAG_NONE,
- kStandardGetHeaders,
- arraysize(kStandardGetHeaders),
- associated_stream_id);
-
-}
-spdy::SpdyFrame* ConstructSpdyPush(const char* const extra_headers[],
- int extra_header_count,
- int stream_id,
- int associated_stream_id,
- const char* url,
- const char* status,
- const char* location) {
- const char* const kStandardGetHeaders[] = {
- "hello",
- "bye",
- "status",
- status,
- "location",
- location,
- "url",
- url,
- "version",
- "HTTP/1.1"
- };
- return ConstructSpdyControlFrame(extra_headers,
- extra_header_count,
- false,
- stream_id,
- LOWEST,
- spdy::SYN_STREAM,
- spdy::CONTROL_FLAG_NONE,
- kStandardGetHeaders,
- arraysize(kStandardGetHeaders),
- associated_stream_id);
-}
-
-spdy::SpdyFrame* ConstructSpdyPush(int stream_id,
- int associated_stream_id,
- const char* url) {
- const char* const kStandardGetHeaders[] = {
- "url",
- url
- };
- return ConstructSpdyControlFrame(0,
- 0,
- false,
- stream_id,
- LOWEST,
- spdy::SYN_STREAM,
- spdy::CONTROL_FLAG_NONE,
- kStandardGetHeaders,
- arraysize(kStandardGetHeaders),
- associated_stream_id);
-}
-
-spdy::SpdyFrame* ConstructSpdyPushHeaders(int stream_id,
- const char* const extra_headers[],
- int extra_header_count) {
- const char* const kStandardGetHeaders[] = {
- "status",
- "200 OK",
- "version",
- "HTTP/1.1"
- };
- return ConstructSpdyControlFrame(extra_headers,
- extra_header_count,
- false,
- stream_id,
- LOWEST,
- spdy::HEADERS,
- spdy::CONTROL_FLAG_NONE,
- kStandardGetHeaders,
- arraysize(kStandardGetHeaders));
-}
-
-// Constructs a standard SPDY SYN_REPLY packet with the specified status code.
-// Returns a SpdyFrame.
-spdy::SpdyFrame* ConstructSpdySynReplyError(
- const char* const status,
- const char* const* const extra_headers,
- int extra_header_count,
- int stream_id) {
- const char* const kStandardGetHeaders[] = {
- "hello",
- "bye",
- "status",
- status,
- "version",
- "HTTP/1.1"
- };
- return ConstructSpdyControlFrame(extra_headers,
- extra_header_count,
- false,
- stream_id,
- LOWEST,
- spdy::SYN_REPLY,
- spdy::CONTROL_FLAG_NONE,
- kStandardGetHeaders,
- arraysize(kStandardGetHeaders));
-}
-
-// Constructs a standard SPDY SYN_REPLY packet to match the SPDY GET.
-// |extra_headers| are the extra header-value pairs, which typically
-// will vary the most between calls.
-// Returns a SpdyFrame.
-spdy::SpdyFrame* ConstructSpdyGetSynReplyRedirect(int stream_id) {
- static const char* const kExtraHeaders[] = {
- "location",
- "http://www.foo.com/index.php",
- };
- return ConstructSpdySynReplyError("301 Moved Permanently", kExtraHeaders,
- arraysize(kExtraHeaders)/2, stream_id);
-}
-
-// Constructs a standard SPDY SYN_REPLY packet with an Internal Server
-// Error status code.
-// Returns a SpdyFrame.
-spdy::SpdyFrame* ConstructSpdySynReplyError(int stream_id) {
- return ConstructSpdySynReplyError("500 Internal Server Error", NULL, 0, 1);
-}
-
-
-
-
-// Constructs a standard SPDY SYN_REPLY packet to match the SPDY GET.
-// |extra_headers| are the extra header-value pairs, which typically
-// will vary the most between calls.
-// Returns a SpdyFrame.
-spdy::SpdyFrame* ConstructSpdyGetSynReply(const char* const extra_headers[],
- int extra_header_count,
- int stream_id) {
- static const char* const kStandardGetHeaders[] = {
- "hello",
- "bye",
- "status",
- "200",
- "version",
- "HTTP/1.1"
- };
- return ConstructSpdyControlFrame(extra_headers,
- extra_header_count,
- false,
- stream_id,
- LOWEST,
- spdy::SYN_REPLY,
- spdy::CONTROL_FLAG_NONE,
- kStandardGetHeaders,
- arraysize(kStandardGetHeaders));
-}
-
-// Constructs a standard SPDY POST SYN packet.
-// |content_length| is the size of post data.
-// |extra_headers| are the extra header-value pairs, which typically
-// will vary the most between calls.
-// Returns a SpdyFrame.
-spdy::SpdyFrame* ConstructSpdyPost(int64 content_length,
- const char* const extra_headers[],
- int extra_header_count) {
- std::string length_str = base::Int64ToString(content_length);
- const char* post_headers[] = {
- "method",
- "POST",
- "url",
- "/",
- "host",
- "www.google.com",
- "scheme",
- "http",
- "version",
- "HTTP/1.1",
- "content-length",
- length_str.c_str()
- };
- return ConstructSpdyControlFrame(extra_headers,
- extra_header_count,
- false,
- 1,
- LOWEST,
- spdy::SYN_STREAM,
- spdy::CONTROL_FLAG_NONE,
- post_headers,
- arraysize(post_headers));
-}
-
-// Constructs a chunked transfer SPDY POST SYN packet.
-// |extra_headers| are the extra header-value pairs, which typically
-// will vary the most between calls.
-// Returns a SpdyFrame.
-spdy::SpdyFrame* ConstructChunkedSpdyPost(const char* const extra_headers[],
- int extra_header_count) {
- const char* post_headers[] = {
- "method",
- "POST",
- "url",
- "/",
- "host",
- "www.google.com",
- "scheme",
- "http",
- "version",
- "HTTP/1.1"
- };
- return ConstructSpdyControlFrame(extra_headers,
- extra_header_count,
- false,
- 1,
- LOWEST,
- spdy::SYN_STREAM,
- spdy::CONTROL_FLAG_NONE,
- post_headers,
- arraysize(post_headers));
-}
-
-// Constructs a standard SPDY SYN_REPLY packet to match the SPDY POST.
-// |extra_headers| are the extra header-value pairs, which typically
-// will vary the most between calls.
-// Returns a SpdyFrame.
-spdy::SpdyFrame* ConstructSpdyPostSynReply(const char* const extra_headers[],
- int extra_header_count) {
- static const char* const kStandardGetHeaders[] = {
- "hello",
- "bye",
- "status",
- "200",
- "url",
- "/index.php",
- "version",
- "HTTP/1.1"
- };
- return ConstructSpdyControlFrame(extra_headers,
- extra_header_count,
- false,
- 1,
- LOWEST,
- spdy::SYN_REPLY,
- spdy::CONTROL_FLAG_NONE,
- kStandardGetHeaders,
- arraysize(kStandardGetHeaders));
-}
-
-// Constructs a single SPDY data frame with the default contents.
-spdy::SpdyFrame* ConstructSpdyBodyFrame(int stream_id, bool fin) {
- spdy::SpdyFramer framer;
- return framer.CreateDataFrame(
- stream_id, kUploadData, kUploadDataSize,
- fin ? spdy::DATA_FLAG_FIN : spdy::DATA_FLAG_NONE);
-}
-
-// Constructs a single SPDY data frame with the given content.
-spdy::SpdyFrame* ConstructSpdyBodyFrame(int stream_id, const char* data,
- uint32 len, bool fin) {
- spdy::SpdyFramer framer;
- return framer.CreateDataFrame(
- stream_id, data, len, fin ? spdy::DATA_FLAG_FIN : spdy::DATA_FLAG_NONE);
-}
-
-// Wraps |frame| in the payload of a data frame in stream |stream_id|.
-spdy::SpdyFrame* ConstructWrappedSpdyFrame(
- const scoped_ptr<spdy::SpdyFrame>& frame,
- int stream_id) {
- return ConstructSpdyBodyFrame(stream_id, frame->data(),
- frame->length() + spdy::SpdyFrame::kHeaderSize,
- false);
-}
-
-// Construct an expected SPDY reply string.
-// |extra_headers| are the extra header-value pairs, which typically
-// will vary the most between calls.
-// |buffer| is the buffer we're filling in.
-// Returns the number of bytes written into |buffer|.
-int ConstructSpdyReplyString(const char* const extra_headers[],
- int extra_header_count,
- char* buffer,
- int buffer_length) {
- int packet_size = 0;
- char* buffer_write = buffer;
- int buffer_left = buffer_length;
- spdy::SpdyHeaderBlock headers;
- if (!buffer || !buffer_length)
- return 0;
- // Copy in the extra headers.
- AppendHeadersToSpdyFrame(extra_headers, extra_header_count, &headers);
- // The iterator gets us the list of header/value pairs in sorted order.
- spdy::SpdyHeaderBlock::iterator next = headers.begin();
- spdy::SpdyHeaderBlock::iterator last = headers.end();
- for ( ; next != last; ++next) {
- // Write the header.
- int value_len, current_len, offset;
- const char* header_string = next->first.c_str();
- packet_size += AppendToBuffer(header_string,
- next->first.length(),
- &buffer_write,
- &buffer_left);
- packet_size += AppendToBuffer(": ",
- strlen(": "),
- &buffer_write,
- &buffer_left);
- // Write the value(s).
- const char* value_string = next->second.c_str();
- // Check if it's split among two or more values.
- value_len = next->second.length();
- current_len = strlen(value_string);
- offset = 0;
- // Handle the first N-1 values.
- while (current_len < value_len) {
- // Finish this line -- write the current value.
- packet_size += AppendToBuffer(value_string + offset,
- current_len - offset,
- &buffer_write,
- &buffer_left);
- packet_size += AppendToBuffer("\n",
- strlen("\n"),
- &buffer_write,
- &buffer_left);
- // Advance to next value.
- offset = current_len + 1;
- current_len += 1 + strlen(value_string + offset);
- // Start another line -- add the header again.
- packet_size += AppendToBuffer(header_string,
- next->first.length(),
- &buffer_write,
- &buffer_left);
- packet_size += AppendToBuffer(": ",
- strlen(": "),
- &buffer_write,
- &buffer_left);
- }
- EXPECT_EQ(value_len, current_len);
- // Copy the last (or only) value.
- packet_size += AppendToBuffer(value_string + offset,
- value_len - offset,
- &buffer_write,
- &buffer_left);
- packet_size += AppendToBuffer("\n",
- strlen("\n"),
- &buffer_write,
- &buffer_left);
- }
- return packet_size;
-}
-
-// Create a MockWrite from the given SpdyFrame.
-MockWrite CreateMockWrite(const spdy::SpdyFrame& req) {
- return MockWrite(
- ASYNC, req.data(), req.length() + spdy::SpdyFrame::kHeaderSize);
-}
-
-// Create a MockWrite from the given SpdyFrame and sequence number.
-MockWrite CreateMockWrite(const spdy::SpdyFrame& req, int seq) {
- return CreateMockWrite(req, seq, ASYNC);
-}
-
-// Create a MockWrite from the given SpdyFrame and sequence number.
-MockWrite CreateMockWrite(const spdy::SpdyFrame& req, int seq, IoMode mode) {
- return MockWrite(
- mode, req.data(), req.length() + spdy::SpdyFrame::kHeaderSize, seq);
-}
-
-// Create a MockRead from the given SpdyFrame.
-MockRead CreateMockRead(const spdy::SpdyFrame& resp) {
- return MockRead(
- ASYNC, resp.data(), resp.length() + spdy::SpdyFrame::kHeaderSize);
-}
-
-// Create a MockRead from the given SpdyFrame and sequence number.
-MockRead CreateMockRead(const spdy::SpdyFrame& resp, int seq) {
- return CreateMockRead(resp, seq, ASYNC);
-}
-
-// Create a MockRead from the given SpdyFrame and sequence number.
-MockRead CreateMockRead(const spdy::SpdyFrame& resp, int seq, IoMode mode) {
- return MockRead(
- mode, resp.data(), resp.length() + spdy::SpdyFrame::kHeaderSize, seq);
-}
-
-// Combines the given SpdyFrames into the given char array and returns
-// the total length.
-int CombineFrames(const spdy::SpdyFrame** frames, int num_frames,
- char* buff, int buff_len) {
- int total_len = 0;
- for (int i = 0; i < num_frames; ++i) {
- total_len += frames[i]->length() + spdy::SpdyFrame::kHeaderSize;
- }
- DCHECK_LE(total_len, buff_len);
- char* ptr = buff;
- for (int i = 0; i < num_frames; ++i) {
- int len = frames[i]->length() + spdy::SpdyFrame::kHeaderSize;
- memcpy(ptr, frames[i]->data(), len);
- ptr += len;
- }
- return total_len;
-}
-
-SpdySessionDependencies::SpdySessionDependencies()
- : host_resolver(new MockCachingHostResolver),
- cert_verifier(new CertVerifier),
- proxy_service(ProxyService::CreateDirect()),
- ssl_config_service(new SSLConfigServiceDefaults),
- socket_factory(new MockClientSocketFactory),
- deterministic_socket_factory(new DeterministicMockClientSocketFactory),
- http_auth_handler_factory(
- HttpAuthHandlerFactory::CreateDefault(host_resolver.get())) {
- // Note: The CancelledTransaction test does cleanup by running all
- // tasks in the message loop (RunAllPending). Unfortunately, that
- // doesn't clean up tasks on the host resolver thread; and
- // TCPConnectJob is currently not cancellable. Using synchronous
- // lookups allows the test to shutdown cleanly. Until we have
- // cancellable TCPConnectJobs, use synchronous lookups.
- host_resolver->set_synchronous_mode(true);
-}
-
-SpdySessionDependencies::SpdySessionDependencies(ProxyService* proxy_service)
- : host_resolver(new MockHostResolver),
- cert_verifier(new CertVerifier),
- proxy_service(proxy_service),
- ssl_config_service(new SSLConfigServiceDefaults),
- socket_factory(new MockClientSocketFactory),
- deterministic_socket_factory(new DeterministicMockClientSocketFactory),
- http_auth_handler_factory(
- HttpAuthHandlerFactory::CreateDefault(host_resolver.get())) {}
-
-SpdySessionDependencies::~SpdySessionDependencies() {}
-
-// static
-HttpNetworkSession* SpdySessionDependencies::SpdyCreateSession(
- SpdySessionDependencies* session_deps) {
- net::HttpNetworkSession::Params params;
- params.client_socket_factory = session_deps->socket_factory.get();
- params.host_resolver = session_deps->host_resolver.get();
- params.cert_verifier = session_deps->cert_verifier.get();
- params.proxy_service = session_deps->proxy_service.get();
- params.ssl_config_service = session_deps->ssl_config_service;
- params.http_auth_handler_factory =
- session_deps->http_auth_handler_factory.get();
- params.http_server_properties = &session_deps->http_server_properties;
- return new HttpNetworkSession(params);
-}
-
-// static
-HttpNetworkSession* SpdySessionDependencies::SpdyCreateSessionDeterministic(
- SpdySessionDependencies* session_deps) {
- net::HttpNetworkSession::Params params;
- params.client_socket_factory =
- session_deps->deterministic_socket_factory.get();
- params.host_resolver = session_deps->host_resolver.get();
- params.cert_verifier = session_deps->cert_verifier.get();
- params.proxy_service = session_deps->proxy_service.get();
- params.ssl_config_service = session_deps->ssl_config_service;
- params.http_auth_handler_factory =
- session_deps->http_auth_handler_factory.get();
- params.http_server_properties = &session_deps->http_server_properties;
- return new HttpNetworkSession(params);
-}
-
-SpdyURLRequestContext::SpdyURLRequestContext()
- : ALLOW_THIS_IN_INITIALIZER_LIST(storage_(this)) {
- storage_.set_host_resolver(new MockHostResolver());
- storage_.set_cert_verifier(new CertVerifier);
- storage_.set_proxy_service(ProxyService::CreateDirect());
- storage_.set_ssl_config_service(new SSLConfigServiceDefaults);
- storage_.set_http_auth_handler_factory(HttpAuthHandlerFactory::CreateDefault(
- host_resolver()));
- storage_.set_http_server_properties(new HttpServerPropertiesImpl);
- net::HttpNetworkSession::Params params;
- params.client_socket_factory = &socket_factory_;
- params.host_resolver = host_resolver();
- params.cert_verifier = cert_verifier();
- params.proxy_service = proxy_service();
- params.ssl_config_service = ssl_config_service();
- params.http_auth_handler_factory = http_auth_handler_factory();
- params.network_delegate = network_delegate();
- params.http_server_properties = http_server_properties();
- scoped_refptr<HttpNetworkSession> network_session(
- new HttpNetworkSession(params));
- storage_.set_http_transaction_factory(new HttpCache(
- network_session,
- HttpCache::DefaultBackend::InMemory(0)));
-}
-
-SpdyURLRequestContext::~SpdyURLRequestContext() {
-}
-
-const SpdyHeaderInfo MakeSpdyHeader(spdy::SpdyControlType type) {
- const SpdyHeaderInfo kHeader = {
- type, // Kind = Syn
- 1, // Stream ID
- 0, // Associated stream ID
- 2, // Priority
- spdy::CONTROL_FLAG_FIN, // Control Flags
- false, // Compressed
- spdy::INVALID, // Status
- NULL, // Data
- 0, // Length
- spdy::DATA_FLAG_NONE // Data Flags
- };
- return kHeader;
-}
-} // namespace net
« no previous file with comments | « net/spdy/spdy_test_util.h ('k') | net/spdy/spdy_test_util_spdy2.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698