diff options
Diffstat (limited to 'chromium/net/tools/flip_server/mem_cache_test.cc')
-rw-r--r-- | chromium/net/tools/flip_server/mem_cache_test.cc | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/chromium/net/tools/flip_server/mem_cache_test.cc b/chromium/net/tools/flip_server/mem_cache_test.cc new file mode 100644 index 00000000000..d5601ac14f5 --- /dev/null +++ b/chromium/net/tools/flip_server/mem_cache_test.cc @@ -0,0 +1,98 @@ +// Copyright 2013 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/tools/flip_server/mem_cache.h" + +#include "net/tools/flip_server/balsa_headers.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace net { + +namespace { + +class MemoryCacheWithFakeReadToString : public MemoryCache { + public: + virtual ~MemoryCacheWithFakeReadToString() {} + + virtual void ReadToString(const char* filename, std::string* output) + OVERRIDE { + *output = data_map_[filename]; + } + + std::map<std::string, std::string> data_map_; +}; + +class FlipMemoryCacheTest : public ::testing::Test { + public: + FlipMemoryCacheTest(): mem_cache_(new MemoryCacheWithFakeReadToString) {} + + protected: + scoped_ptr<MemoryCacheWithFakeReadToString> mem_cache_; +}; + +TEST_F(FlipMemoryCacheTest, EmptyCache) { + MemCacheIter mci; + mci.stream_id = 0; + ASSERT_EQ(NULL, mem_cache_->GetFileData("./foo")); + ASSERT_EQ(NULL, mem_cache_->GetFileData("./bar")); + ASSERT_FALSE(mem_cache_->AssignFileData("./hello", &mci)); +} + +TEST_F(FlipMemoryCacheTest, ReadAndStoreFileContents) { + FileData* foo; + FileData* hello; + + mem_cache_->data_map_["./foo"] = "bar"; + mem_cache_->data_map_["./hello"] = "HTTP/1.0 200 OK\r\n" + "key1: value1\r\n" + "key2: value2\r\n\r\n" + "body: body\r\n"; + mem_cache_->ReadAndStoreFileContents("./foo"); + mem_cache_->ReadAndStoreFileContents("./hello"); + + foo = mem_cache_->GetFileData("foo"); + hello = mem_cache_->GetFileData("hello"); + + // "./foo" content is broken. + ASSERT_EQ(NULL, foo); + ASSERT_FALSE(NULL == hello); + ASSERT_EQ(hello, mem_cache_->GetFileData("hello")); + + // "HTTP/1.0" is rewritten to "HTTP/1.1". + ASSERT_EQ("HTTP/1.1", hello->headers()->response_version()); + ASSERT_EQ("200", hello->headers()->response_code()); + ASSERT_EQ("OK", hello->headers()->response_reason_phrase()); + ASSERT_EQ(4, std::distance(hello->headers()->header_lines_begin(), + hello->headers()->header_lines_end())); + ASSERT_TRUE(hello->headers()->HasHeader("key1")); + ASSERT_TRUE(hello->headers()->HasHeader("key2")); + ASSERT_TRUE(hello->headers()->HasHeader("transfer-encoding")); + ASSERT_TRUE(hello->headers()->HasHeader("connection")); + ASSERT_EQ("value1", hello->headers()->GetHeaderPosition("key1")->second); + ASSERT_EQ("value2", hello->headers()->GetHeaderPosition("key2")->second); + ASSERT_EQ("chunked", + hello->headers()->GetHeaderPosition("transfer-encoding")->second); + ASSERT_EQ("keep-alive", + hello->headers()->GetHeaderPosition("connection")->second); + ASSERT_EQ("body: body\r\n", hello->body()); + ASSERT_EQ("hello", hello->filename()); +} + +TEST_F(FlipMemoryCacheTest, GetFileDataForHtmlFile) { + FileData* hello_html; + + mem_cache_->data_map_["./hello.http"] = "HTTP/1.0 200 OK\r\n" + "key1: value1\r\n" + "key2: value2\r\n\r\n" + "body: body\r\n"; + + mem_cache_->ReadAndStoreFileContents("./hello.http"); + hello_html = mem_cache_->GetFileData("hello.html"); + ASSERT_FALSE(NULL == hello_html); + ASSERT_EQ(hello_html, mem_cache_->GetFileData("hello.http")); +} + +} // namespace + +} // namespace net |