diff options
author | kinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-10 07:28:58 +0000 |
---|---|---|
committer | kinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-10 07:28:58 +0000 |
commit | 3d47dac962de7dd8ec9224d9c11a969259f3e0c7 (patch) | |
tree | a5aeeb8b42e24bea2e14cb67adf68e25c9e0d857 /net/http/http_response_headers_unittest.cc | |
parent | df157d9d2ef8720c6cdb54cf98634e84915eec9d (diff) | |
download | chromium_src-3d47dac962de7dd8ec9224d9c11a969259f3e0c7.zip chromium_src-3d47dac962de7dd8ec9224d9c11a969259f3e0c7.tar.gz chromium_src-3d47dac962de7dd8ec9224d9c11a969259f3e0c7.tar.bz2 |
Cleanup: have common HttpResponseHeaders routine to update with range
Currently we do this header-fixup in two places: PartialData and AppCache,
and I'm planning to do the very same header-fixup in yet another module,
ServiceWorker. I want to have a common utility in net/http/http_util
to do this so that all 3 modules can share it.
BUG=349319
TEST=HttpResponseHeadersTest.UpdateWithNewRange
Review URL: https://codereview.chromium.org/187583002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@255905 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/http/http_response_headers_unittest.cc')
-rw-r--r-- | net/http/http_response_headers_unittest.cc | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/net/http/http_response_headers_unittest.cc b/net/http/http_response_headers_unittest.cc index c433e1d..0b17b8f 100644 --- a/net/http/http_response_headers_unittest.cc +++ b/net/http/http_response_headers_unittest.cc @@ -9,6 +9,7 @@ #include "base/pickle.h" #include "base/time/time.h" #include "base/values.h" +#include "net/http/http_byte_range.h" #include "net/http/http_response_headers.h" #include "testing/gtest/include/gtest/gtest.h" @@ -1851,6 +1852,58 @@ TEST(HttpResponseHeadersTest, ReplaceStatus) { } } +TEST(HttpResponseHeadersTest, UpdateWithNewRange) { + const struct { + const char* orig_headers; + const char* expected_headers; + const char* expected_headers_with_replaced_status; + } tests[] = { + { "HTTP/1.1 200 OK\n" + "Content-Length: 450\n", + + "HTTP/1.1 200 OK\n" + "Content-Range: bytes 3-5/450\n" + "Content-Length: 3\n", + + "HTTP/1.1 206 Partial Content\n" + "Content-Range: bytes 3-5/450\n" + "Content-Length: 3\n", + }, + { "HTTP/1.1 200 OK\n" + "Content-Length: 5\n", + + "HTTP/1.1 200 OK\n" + "Content-Range: bytes 3-5/5\n" + "Content-Length: 3\n", + + "HTTP/1.1 206 Partial Content\n" + "Content-Range: bytes 3-5/5\n" + "Content-Length: 3\n", + }, + }; + const net::HttpByteRange range = net::HttpByteRange::Bounded(3, 5); + + for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { + std::string orig_headers(tests[i].orig_headers); + std::replace(orig_headers.begin(), orig_headers.end(), '\n', '\0'); + scoped_refptr<net::HttpResponseHeaders> parsed( + new net::HttpResponseHeaders(orig_headers + '\0')); + int64 content_size = parsed->GetContentLength(); + std::string resulting_headers; + + // Update headers without replacing status line. + parsed->UpdateWithNewRange(range, content_size, false); + parsed->GetNormalizedHeaders(&resulting_headers); + EXPECT_EQ(std::string(tests[i].expected_headers), resulting_headers); + + // Replace status line too. + parsed->UpdateWithNewRange(range, content_size, true); + parsed->GetNormalizedHeaders(&resulting_headers); + EXPECT_EQ(std::string(tests[i].expected_headers_with_replaced_status), + resulting_headers); + } +} + TEST(HttpResponseHeadersTest, ToNetLogParamAndBackAgain) { std::string headers("HTTP/1.1 404\n" "Content-Length: 450\n" |