OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 #include "net/spdy/spdy_test_util_common.h" | 5 #include "net/spdy/spdy_test_util_common.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <cstddef> | 9 #include <cstddef> |
10 #include <utility> | 10 #include <utility> |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
43 | 43 |
44 using net::test::IsOk; | 44 using net::test::IsOk; |
45 | 45 |
46 namespace net { | 46 namespace net { |
47 | 47 |
48 namespace { | 48 namespace { |
49 | 49 |
50 // Parses a URL into the scheme, host, and path components required for a | 50 // Parses a URL into the scheme, host, and path components required for a |
51 // SPDY request. | 51 // SPDY request. |
52 void ParseUrl(SpdyStringPiece url, | 52 void ParseUrl(SpdyStringPiece url, |
53 std::string* scheme, | 53 SpdyString* scheme, |
54 std::string* host, | 54 SpdyString* host, |
55 std::string* path) { | 55 SpdyString* path) { |
56 GURL gurl(url); | 56 GURL gurl(url); |
57 path->assign(gurl.PathForRequest()); | 57 path->assign(gurl.PathForRequest()); |
58 scheme->assign(gurl.scheme()); | 58 scheme->assign(gurl.scheme()); |
59 host->assign(gurl.host()); | 59 host->assign(gurl.host()); |
60 if (gurl.has_port()) { | 60 if (gurl.has_port()) { |
61 host->append(":"); | 61 host->append(":"); |
62 host->append(gurl.port()); | 62 host->append(gurl.port()); |
63 } | 63 } |
64 } | 64 } |
65 | 65 |
(...skipping 16 matching lines...) Expand all Loading... |
82 } | 82 } |
83 | 83 |
84 // Adds headers and values to a map. | 84 // Adds headers and values to a map. |
85 // |extra_headers| is an array of { name, value } pairs, arranged as strings | 85 // |extra_headers| is an array of { name, value } pairs, arranged as strings |
86 // where the even entries are the header names, and the odd entries are the | 86 // where the even entries are the header names, and the odd entries are the |
87 // header values. | 87 // header values. |
88 // |headers| gets filled in from |extra_headers|. | 88 // |headers| gets filled in from |extra_headers|. |
89 void AppendToHeaderBlock(const char* const extra_headers[], | 89 void AppendToHeaderBlock(const char* const extra_headers[], |
90 int extra_header_count, | 90 int extra_header_count, |
91 SpdyHeaderBlock* headers) { | 91 SpdyHeaderBlock* headers) { |
92 std::string this_header; | 92 SpdyString this_header; |
93 std::string this_value; | 93 SpdyString this_value; |
94 | 94 |
95 if (!extra_header_count) | 95 if (!extra_header_count) |
96 return; | 96 return; |
97 | 97 |
98 // Sanity check: Non-NULL header list. | 98 // Sanity check: Non-NULL header list. |
99 DCHECK(NULL != extra_headers) << "NULL header value pair list"; | 99 DCHECK(NULL != extra_headers) << "NULL header value pair list"; |
100 // Sanity check: Non-NULL header map. | 100 // Sanity check: Non-NULL header map. |
101 DCHECK(NULL != headers) << "NULL header map"; | 101 DCHECK(NULL != headers) << "NULL header map"; |
102 // Copy in the headers. | 102 // Copy in the headers. |
103 for (int i = 0; i < extra_header_count; i++) { | 103 for (int i = 0; i < extra_header_count; i++) { |
104 // Sanity check: Non-empty header. | 104 // Sanity check: Non-empty header. |
105 DCHECK_NE('\0', *extra_headers[i * 2]) << "Empty header value pair"; | 105 DCHECK_NE('\0', *extra_headers[i * 2]) << "Empty header value pair"; |
106 this_header = extra_headers[i * 2]; | 106 this_header = extra_headers[i * 2]; |
107 std::string::size_type header_len = this_header.length(); | 107 SpdyString::size_type header_len = this_header.length(); |
108 if (!header_len) | 108 if (!header_len) |
109 continue; | 109 continue; |
110 this_value = extra_headers[1 + (i * 2)]; | 110 this_value = extra_headers[1 + (i * 2)]; |
111 std::string new_value; | 111 SpdyString new_value; |
112 if (headers->find(this_header) != headers->end()) { | 112 if (headers->find(this_header) != headers->end()) { |
113 // More than one entry in the header. | 113 // More than one entry in the header. |
114 // Don't add the header again, just the append to the value, | 114 // Don't add the header again, just the append to the value, |
115 // separated by a NULL character. | 115 // separated by a NULL character. |
116 | 116 |
117 // Adjust the value. | 117 // Adjust the value. |
118 new_value = (*headers)[this_header].as_string(); | 118 new_value = (*headers)[this_header].as_string(); |
119 // Put in a NULL separator. | 119 // Put in a NULL separator. |
120 new_value.append(1, '\0'); | 120 new_value.append(1, '\0'); |
121 // Append the new value. | 121 // Append the new value. |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
186 public: | 186 public: |
187 PriorityGetter() : priority_(0) {} | 187 PriorityGetter() : priority_(0) {} |
188 ~PriorityGetter() override {} | 188 ~PriorityGetter() override {} |
189 | 189 |
190 SpdyPriority priority() const { | 190 SpdyPriority priority() const { |
191 return priority_; | 191 return priority_; |
192 } | 192 } |
193 | 193 |
194 void OnError(SpdyFramer::SpdyFramerError spdy_framer_error) override {} | 194 void OnError(SpdyFramer::SpdyFramerError spdy_framer_error) override {} |
195 void OnStreamError(SpdyStreamId stream_id, | 195 void OnStreamError(SpdyStreamId stream_id, |
196 const std::string& description) override {} | 196 const SpdyString& description) override {} |
197 void OnHeaders(SpdyStreamId stream_id, | 197 void OnHeaders(SpdyStreamId stream_id, |
198 bool has_priority, | 198 bool has_priority, |
199 int weight, | 199 int weight, |
200 SpdyStreamId parent_stream_id, | 200 SpdyStreamId parent_stream_id, |
201 bool exclusive, | 201 bool exclusive, |
202 bool fin, | 202 bool fin, |
203 SpdyHeaderBlock headers) override { | 203 SpdyHeaderBlock headers) override { |
204 if (has_priority) { | 204 if (has_priority) { |
205 priority_ = Http2WeightToSpdy3Priority(weight); | 205 priority_ = Http2WeightToSpdy3Priority(weight); |
206 } | 206 } |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
284 MockECSignatureCreator::MockECSignatureCreator(crypto::ECPrivateKey* key) | 284 MockECSignatureCreator::MockECSignatureCreator(crypto::ECPrivateKey* key) |
285 : key_(key) { | 285 : key_(key) { |
286 } | 286 } |
287 | 287 |
288 bool MockECSignatureCreator::Sign(const uint8_t* data, | 288 bool MockECSignatureCreator::Sign(const uint8_t* data, |
289 int data_len, | 289 int data_len, |
290 std::vector<uint8_t>* signature) { | 290 std::vector<uint8_t>* signature) { |
291 std::vector<uint8_t> private_key; | 291 std::vector<uint8_t> private_key; |
292 if (!key_->ExportPrivateKey(&private_key)) | 292 if (!key_->ExportPrivateKey(&private_key)) |
293 return false; | 293 return false; |
294 std::string head = "fakesignature"; | 294 SpdyString head = "fakesignature"; |
295 std::string tail = "/fakesignature"; | 295 SpdyString tail = "/fakesignature"; |
296 | 296 |
297 signature->clear(); | 297 signature->clear(); |
298 signature->insert(signature->end(), head.begin(), head.end()); | 298 signature->insert(signature->end(), head.begin(), head.end()); |
299 signature->insert(signature->end(), private_key.begin(), private_key.end()); | 299 signature->insert(signature->end(), private_key.begin(), private_key.end()); |
300 signature->insert(signature->end(), '-'); | 300 signature->insert(signature->end(), '-'); |
301 signature->insert(signature->end(), data, data + data_len); | 301 signature->insert(signature->end(), data, data + data_len); |
302 signature->insert(signature->end(), tail.begin(), tail.end()); | 302 signature->insert(signature->end(), tail.begin(), tail.end()); |
303 return true; | 303 return true; |
304 } | 304 } |
305 | 305 |
(...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
696 SpdyTestUtil::SpdyTestUtil() | 696 SpdyTestUtil::SpdyTestUtil() |
697 : headerless_spdy_framer_(SpdyFramer::ENABLE_COMPRESSION), | 697 : headerless_spdy_framer_(SpdyFramer::ENABLE_COMPRESSION), |
698 request_spdy_framer_(SpdyFramer::ENABLE_COMPRESSION), | 698 request_spdy_framer_(SpdyFramer::ENABLE_COMPRESSION), |
699 response_spdy_framer_(SpdyFramer::ENABLE_COMPRESSION), | 699 response_spdy_framer_(SpdyFramer::ENABLE_COMPRESSION), |
700 default_url_(GURL(kDefaultUrl)) {} | 700 default_url_(GURL(kDefaultUrl)) {} |
701 | 701 |
702 SpdyTestUtil::~SpdyTestUtil() {} | 702 SpdyTestUtil::~SpdyTestUtil() {} |
703 | 703 |
704 void SpdyTestUtil::AddUrlToHeaderBlock(SpdyStringPiece url, | 704 void SpdyTestUtil::AddUrlToHeaderBlock(SpdyStringPiece url, |
705 SpdyHeaderBlock* headers) const { | 705 SpdyHeaderBlock* headers) const { |
706 std::string scheme, host, path; | 706 SpdyString scheme, host, path; |
707 ParseUrl(url, &scheme, &host, &path); | 707 ParseUrl(url, &scheme, &host, &path); |
708 (*headers)[GetHostKey()] = host; | 708 (*headers)[GetHostKey()] = host; |
709 (*headers)[GetSchemeKey()] = scheme; | 709 (*headers)[GetSchemeKey()] = scheme; |
710 (*headers)[GetPathKey()] = path; | 710 (*headers)[GetPathKey()] = path; |
711 } | 711 } |
712 | 712 |
713 // static | 713 // static |
714 SpdyHeaderBlock SpdyTestUtil::ConstructGetHeaderBlock(SpdyStringPiece url) { | 714 SpdyHeaderBlock SpdyTestUtil::ConstructGetHeaderBlock(SpdyStringPiece url) { |
715 return ConstructHeaderBlock("GET", url, NULL); | 715 return ConstructHeaderBlock("GET", url, NULL); |
716 } | 716 } |
(...skipping 15 matching lines...) Expand all Loading... |
732 int64_t content_length) { | 732 int64_t content_length) { |
733 return ConstructHeaderBlock("POST", url, &content_length); | 733 return ConstructHeaderBlock("POST", url, &content_length); |
734 } | 734 } |
735 | 735 |
736 // static | 736 // static |
737 SpdyHeaderBlock SpdyTestUtil::ConstructPutHeaderBlock(SpdyStringPiece url, | 737 SpdyHeaderBlock SpdyTestUtil::ConstructPutHeaderBlock(SpdyStringPiece url, |
738 int64_t content_length) { | 738 int64_t content_length) { |
739 return ConstructHeaderBlock("PUT", url, &content_length); | 739 return ConstructHeaderBlock("PUT", url, &content_length); |
740 } | 740 } |
741 | 741 |
742 std::string SpdyTestUtil::ConstructSpdyReplyString( | 742 SpdyString SpdyTestUtil::ConstructSpdyReplyString( |
743 const SpdyHeaderBlock& headers) const { | 743 const SpdyHeaderBlock& headers) const { |
744 std::string reply_string; | 744 SpdyString reply_string; |
745 for (SpdyHeaderBlock::const_iterator it = headers.begin(); | 745 for (SpdyHeaderBlock::const_iterator it = headers.begin(); |
746 it != headers.end(); ++it) { | 746 it != headers.end(); ++it) { |
747 std::string key = it->first.as_string(); | 747 SpdyString key = it->first.as_string(); |
748 // Remove leading colon from pseudo headers. | 748 // Remove leading colon from pseudo headers. |
749 if (key[0] == ':') | 749 if (key[0] == ':') |
750 key = key.substr(1); | 750 key = key.substr(1); |
751 for (const std::string& value : | 751 for (const SpdyString& value : |
752 base::SplitString(it->second, SpdyStringPiece("\0", 1), | 752 base::SplitString(it->second, SpdyStringPiece("\0", 1), |
753 base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL)) { | 753 base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL)) { |
754 reply_string += key + ": " + value + "\n"; | 754 reply_string += key + ": " + value + "\n"; |
755 } | 755 } |
756 } | 756 } |
757 return reply_string; | 757 return reply_string; |
758 } | 758 } |
759 | 759 |
760 // TODO(jgraettinger): Eliminate uses of this method in tests (prefer | 760 // TODO(jgraettinger): Eliminate uses of this method in tests (prefer |
761 // SpdySettingsIR). | 761 // SpdySettingsIR). |
(...skipping 28 matching lines...) Expand all Loading... |
790 | 790 |
791 SpdySerializedFrame SpdyTestUtil::ConstructSpdyGoAway( | 791 SpdySerializedFrame SpdyTestUtil::ConstructSpdyGoAway( |
792 SpdyStreamId last_good_stream_id) { | 792 SpdyStreamId last_good_stream_id) { |
793 SpdyGoAwayIR go_ir(last_good_stream_id, ERROR_CODE_NO_ERROR, "go away"); | 793 SpdyGoAwayIR go_ir(last_good_stream_id, ERROR_CODE_NO_ERROR, "go away"); |
794 return SpdySerializedFrame(headerless_spdy_framer_.SerializeFrame(go_ir)); | 794 return SpdySerializedFrame(headerless_spdy_framer_.SerializeFrame(go_ir)); |
795 } | 795 } |
796 | 796 |
797 SpdySerializedFrame SpdyTestUtil::ConstructSpdyGoAway( | 797 SpdySerializedFrame SpdyTestUtil::ConstructSpdyGoAway( |
798 SpdyStreamId last_good_stream_id, | 798 SpdyStreamId last_good_stream_id, |
799 SpdyErrorCode error_code, | 799 SpdyErrorCode error_code, |
800 const std::string& desc) { | 800 const SpdyString& desc) { |
801 SpdyGoAwayIR go_ir(last_good_stream_id, error_code, desc); | 801 SpdyGoAwayIR go_ir(last_good_stream_id, error_code, desc); |
802 return SpdySerializedFrame(headerless_spdy_framer_.SerializeFrame(go_ir)); | 802 return SpdySerializedFrame(headerless_spdy_framer_.SerializeFrame(go_ir)); |
803 } | 803 } |
804 | 804 |
805 SpdySerializedFrame SpdyTestUtil::ConstructSpdyWindowUpdate( | 805 SpdySerializedFrame SpdyTestUtil::ConstructSpdyWindowUpdate( |
806 const SpdyStreamId stream_id, | 806 const SpdyStreamId stream_id, |
807 uint32_t delta_window_size) { | 807 uint32_t delta_window_size) { |
808 SpdyWindowUpdateIR update_ir(stream_id, delta_window_size); | 808 SpdyWindowUpdateIR update_ir(stream_id, delta_window_size); |
809 return SpdySerializedFrame(headerless_spdy_framer_.SerializeFrame(update_ir)); | 809 return SpdySerializedFrame(headerless_spdy_framer_.SerializeFrame(update_ir)); |
810 } | 810 } |
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1143 | 1143 |
1144 // static | 1144 // static |
1145 const char* SpdyTestUtil::GetPathKey() { | 1145 const char* SpdyTestUtil::GetPathKey() { |
1146 return ":path"; | 1146 return ":path"; |
1147 } | 1147 } |
1148 | 1148 |
1149 // static | 1149 // static |
1150 SpdyHeaderBlock SpdyTestUtil::ConstructHeaderBlock(SpdyStringPiece method, | 1150 SpdyHeaderBlock SpdyTestUtil::ConstructHeaderBlock(SpdyStringPiece method, |
1151 SpdyStringPiece url, | 1151 SpdyStringPiece url, |
1152 int64_t* content_length) { | 1152 int64_t* content_length) { |
1153 std::string scheme, host, path; | 1153 SpdyString scheme, host, path; |
1154 ParseUrl(url, &scheme, &host, &path); | 1154 ParseUrl(url, &scheme, &host, &path); |
1155 SpdyHeaderBlock headers; | 1155 SpdyHeaderBlock headers; |
1156 headers[GetMethodKey()] = method.as_string(); | 1156 headers[GetMethodKey()] = method.as_string(); |
1157 headers[GetHostKey()] = host.c_str(); | 1157 headers[GetHostKey()] = host.c_str(); |
1158 headers[GetSchemeKey()] = scheme.c_str(); | 1158 headers[GetSchemeKey()] = scheme.c_str(); |
1159 headers[GetPathKey()] = path.c_str(); | 1159 headers[GetPathKey()] = path.c_str(); |
1160 if (content_length) { | 1160 if (content_length) { |
1161 std::string length_str = base::Int64ToString(*content_length); | 1161 SpdyString length_str = base::Int64ToString(*content_length); |
1162 headers["content-length"] = length_str; | 1162 headers["content-length"] = length_str; |
1163 } | 1163 } |
1164 return headers; | 1164 return headers; |
1165 } | 1165 } |
1166 | 1166 |
1167 } // namespace net | 1167 } // namespace net |
OLD | NEW |