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

Unified Diff: net/quic/spdy_utils_test.cc

Issue 1561383002: relnote: add new unused functions for client side of QUIC server push. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@21_CL_111427940
Patch Set: port spdy_utils_test.cc Created 4 years, 11 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/quic/spdy_utils.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/quic/spdy_utils_test.cc
diff --git a/net/quic/spdy_utils_test.cc b/net/quic/spdy_utils_test.cc
new file mode 100644
index 0000000000000000000000000000000000000000..b727638caa2a6d1eebb47e23b6c666eb9f656425
--- /dev/null
+++ b/net/quic/spdy_utils_test.cc
@@ -0,0 +1,140 @@
+// Copyright 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.
+#include "net/quic/spdy_utils.h"
+
+#include "base/macros.h"
+#include "base/strings/string_number_conversions.h"
+#include "net/test/gtest_util.h"
+
+using std::string;
+
+namespace net {
+namespace test {
+
+TEST(SpdyUtilsTest, SerializeAndParseHeaders) {
+ // Creates a SpdyHeaderBlock with some key->value pairs, serializes it, then
+ // parses the serialized output and verifies that the end result is the same
+ // as the headers that the test started with.
+
+ SpdyHeaderBlock input_headers;
+ input_headers[":pseudo1"] = "pseudo value1";
+ input_headers[":pseudo2"] = "pseudo value2";
+ input_headers["key1"] = "value1";
+ const int kContentLength = 1234;
+ input_headers["content-length"] = base::IntToString(kContentLength);
+ input_headers["key2"] = "value2";
+
+ // Serialize the header block.
+ string serialized_headers =
+ SpdyUtils::SerializeUncompressedHeaders(input_headers);
+
+ // Take the serialized header block, and parse back into SpdyHeaderBlock.
+ SpdyHeaderBlock output_headers;
+ int content_length = -1;
+ ASSERT_TRUE(SpdyUtils::ParseHeaders(serialized_headers.data(),
+ serialized_headers.size(),
+ &content_length, &output_headers));
+
+ // Should be back to the original headers.
+ EXPECT_EQ(content_length, kContentLength);
+ EXPECT_EQ(output_headers, input_headers);
+}
+
+TEST(SpdyUtilsTest, SerializeAndParseValidTrailers) {
+ // Creates a SpdyHeaderBlock with some valid Trailers key->value pairs,
+ // serializes it, then parses the serialized output and verifies that the end
+ // result is the same as the trailers that the test started with.
+ SpdyHeaderBlock input_trailers;
+ const size_t kFinalOffset = 5678;
+ input_trailers[kFinalOffsetHeaderKey] = base::IntToString(kFinalOffset);
+ input_trailers["key1"] = "value1";
+ input_trailers["key2"] = "value2";
+
+ // Serialize the trailers.
+ string serialized_trailers =
+ SpdyUtils::SerializeUncompressedHeaders(input_trailers);
+
+ // Take the serialized trailers, and parse back into a SpdyHeaderBlock.
+ SpdyHeaderBlock output_trailers;
+ size_t final_byte_offset = 0;
+ EXPECT_TRUE(SpdyUtils::ParseTrailers(serialized_trailers.data(),
+ serialized_trailers.size(),
+ &final_byte_offset, &output_trailers));
+
+ // Should be back to the original trailers, without the final offset header.
+ EXPECT_EQ(final_byte_offset, kFinalOffset);
+ input_trailers.erase(kFinalOffsetHeaderKey);
+ EXPECT_EQ(output_trailers, input_trailers);
+}
+
+TEST(SpdyUtilsTest, SerializeAndParseTrailersWithoutFinalOffset) {
+ // Verifies that parsing fails if Trailers are missing a final offset header.
+
+ SpdyHeaderBlock input_trailers;
+ input_trailers["key1"] = "value1";
+ input_trailers["key2"] = "value2";
+
+ // Serialize the trailers.
+ string serialized_trailers =
+ SpdyUtils::SerializeUncompressedHeaders(input_trailers);
+
+ // Parsing the serialized trailers fails because of the missing final offset.
+ SpdyHeaderBlock output_trailers;
+ size_t final_byte_offset = 0;
+ EXPECT_FALSE(SpdyUtils::ParseTrailers(serialized_trailers.data(),
+ serialized_trailers.size(),
+ &final_byte_offset, &output_trailers));
+ EXPECT_EQ(final_byte_offset, 0u);
+}
+
+TEST(SpdyUtilsTest, SerializeAndParseTrailersWithPseudoHeaders) {
+ // Verifies that parsing fails if Trailers include pseudo-headers.
+
+ SpdyHeaderBlock input_trailers;
+ input_trailers[kFinalOffsetHeaderKey] = "12345";
+ input_trailers[":disallowed-pseudo-header"] = "pseudo value";
+ input_trailers["key1"] = "value1";
+ input_trailers["key2"] = "value2";
+
+ // Serialize the trailers.
+ string serialized_trailers =
+ SpdyUtils::SerializeUncompressedHeaders(input_trailers);
+
+ // Parsing the serialized trailers fails because of the extra pseudo header.
+ SpdyHeaderBlock output_trailers;
+ size_t final_byte_offset = 0;
+ EXPECT_FALSE(SpdyUtils::ParseTrailers(serialized_trailers.data(),
+ serialized_trailers.size(),
+ &final_byte_offset, &output_trailers));
+}
+
+TEST(SpdyUtilsTest, GetUrlFromHeaderBlock) {
+ SpdyHeaderBlock headers;
+ EXPECT_EQ(SpdyUtils::GetUrlFromHeaderBlock(headers), "");
+ headers[":scheme"] = "https";
+ EXPECT_EQ(SpdyUtils::GetUrlFromHeaderBlock(headers), "");
+ headers[":authority"] = "www.google.com";
+ EXPECT_EQ(SpdyUtils::GetUrlFromHeaderBlock(headers), "");
+ headers[":path"] = "/index.html";
+ EXPECT_EQ(SpdyUtils::GetUrlFromHeaderBlock(headers),
+ "https://www.google.com/index.html");
+ headers["key1"] = "value1";
+ headers["key2"] = "value2";
+ EXPECT_EQ(SpdyUtils::GetUrlFromHeaderBlock(headers),
+ "https://www.google.com/index.html");
+}
+
+TEST(SpdyUtilsTest, UrlIsValid) {
+ SpdyHeaderBlock headers;
+ EXPECT_FALSE(SpdyUtils::UrlIsValid(headers));
+ headers[":scheme"] = "https";
+ EXPECT_FALSE(SpdyUtils::UrlIsValid(headers));
+ headers[":authority"] = "www.google.com";
+ EXPECT_FALSE(SpdyUtils::UrlIsValid(headers));
+ headers[":path"] = "/index.html";
+ EXPECT_TRUE(SpdyUtils::UrlIsValid(headers));
+}
+
+} // namespace test
+} // namespace net_quic
« no previous file with comments | « net/quic/spdy_utils.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698