OLD | NEW |
| (Empty) |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "net/tools/flip_server/mem_cache.h" | |
6 | |
7 #include "net/tools/balsa/balsa_headers.h" | |
8 #include "testing/gtest/include/gtest/gtest.h" | |
9 | |
10 namespace net { | |
11 | |
12 namespace { | |
13 | |
14 class MemoryCacheWithFakeReadToString : public MemoryCache { | |
15 public: | |
16 ~MemoryCacheWithFakeReadToString() override {} | |
17 | |
18 void ReadToString(const char* filename, std::string* output) override { | |
19 *output = data_map_[filename]; | |
20 } | |
21 | |
22 std::map<std::string, std::string> data_map_; | |
23 }; | |
24 | |
25 class FlipMemoryCacheTest : public ::testing::Test { | |
26 public: | |
27 FlipMemoryCacheTest() : mem_cache_(new MemoryCacheWithFakeReadToString) {} | |
28 | |
29 protected: | |
30 std::unique_ptr<MemoryCacheWithFakeReadToString> mem_cache_; | |
31 }; | |
32 | |
33 TEST_F(FlipMemoryCacheTest, EmptyCache) { | |
34 MemCacheIter mci; | |
35 mci.stream_id = 0; | |
36 ASSERT_EQ(NULL, mem_cache_->GetFileData("./foo")); | |
37 ASSERT_EQ(NULL, mem_cache_->GetFileData("./bar")); | |
38 ASSERT_FALSE(mem_cache_->AssignFileData("./hello", &mci)); | |
39 } | |
40 | |
41 TEST_F(FlipMemoryCacheTest, ReadAndStoreFileContents) { | |
42 FileData* foo; | |
43 FileData* hello; | |
44 | |
45 mem_cache_->data_map_["./foo"] = "bar"; | |
46 mem_cache_->data_map_["./hello"] = | |
47 "HTTP/1.0 200 OK\r\n" | |
48 "key1: value1\r\n" | |
49 "key2: value2\r\n\r\n" | |
50 "body: body\r\n"; | |
51 mem_cache_->ReadAndStoreFileContents("./foo"); | |
52 mem_cache_->ReadAndStoreFileContents("./hello"); | |
53 | |
54 foo = mem_cache_->GetFileData("foo"); | |
55 hello = mem_cache_->GetFileData("hello"); | |
56 | |
57 // "./foo" content is broken. | |
58 ASSERT_EQ(NULL, foo); | |
59 ASSERT_FALSE(NULL == hello); | |
60 ASSERT_EQ(hello, mem_cache_->GetFileData("hello")); | |
61 | |
62 // "HTTP/1.0" is rewritten to "HTTP/1.1". | |
63 ASSERT_EQ("HTTP/1.1", hello->headers()->response_version()); | |
64 ASSERT_EQ("200", hello->headers()->response_code()); | |
65 ASSERT_EQ("OK", hello->headers()->response_reason_phrase()); | |
66 ASSERT_EQ(4, | |
67 std::distance(hello->headers()->header_lines_begin(), | |
68 hello->headers()->header_lines_end())); | |
69 ASSERT_TRUE(hello->headers()->HasHeader("key1")); | |
70 ASSERT_TRUE(hello->headers()->HasHeader("key2")); | |
71 ASSERT_TRUE(hello->headers()->HasHeader("transfer-encoding")); | |
72 ASSERT_TRUE(hello->headers()->HasHeader("connection")); | |
73 ASSERT_EQ("value1", hello->headers()->GetHeaderPosition("key1")->second); | |
74 ASSERT_EQ("value2", hello->headers()->GetHeaderPosition("key2")->second); | |
75 ASSERT_EQ("chunked", | |
76 hello->headers()->GetHeaderPosition("transfer-encoding")->second); | |
77 ASSERT_EQ("keep-alive", | |
78 hello->headers()->GetHeaderPosition("connection")->second); | |
79 ASSERT_EQ("body: body\r\n", hello->body()); | |
80 ASSERT_EQ("hello", hello->filename()); | |
81 } | |
82 | |
83 TEST_F(FlipMemoryCacheTest, GetFileDataForHtmlFile) { | |
84 FileData* hello_html; | |
85 | |
86 mem_cache_->data_map_["./hello.http"] = | |
87 "HTTP/1.0 200 OK\r\n" | |
88 "key1: value1\r\n" | |
89 "key2: value2\r\n\r\n" | |
90 "body: body\r\n"; | |
91 | |
92 mem_cache_->ReadAndStoreFileContents("./hello.http"); | |
93 hello_html = mem_cache_->GetFileData("hello.html"); | |
94 ASSERT_FALSE(NULL == hello_html); | |
95 ASSERT_EQ(hello_html, mem_cache_->GetFileData("hello.http")); | |
96 } | |
97 | |
98 } // namespace | |
99 | |
100 } // namespace net | |
OLD | NEW |