Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/http/http_cache.h" | 5 #include "net/http/http_cache.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
| 9 #include "base/memory/scoped_vector.h" | 9 #include "base/memory/scoped_vector.h" |
| 10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
| (...skipping 2742 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2753 | 2753 |
| 2754 // And the entry should be gone. | 2754 // And the entry should be gone. |
| 2755 RunTransactionTest(cache.http_cache(), kRangeGET_TransactionOK); | 2755 RunTransactionTest(cache.http_cache(), kRangeGET_TransactionOK); |
| 2756 EXPECT_EQ(3, cache.network_layer()->transaction_count()); | 2756 EXPECT_EQ(3, cache.network_layer()->transaction_count()); |
| 2757 EXPECT_EQ(1, cache.disk_cache()->open_count()); | 2757 EXPECT_EQ(1, cache.disk_cache()->open_count()); |
| 2758 EXPECT_EQ(2, cache.disk_cache()->create_count()); | 2758 EXPECT_EQ(2, cache.disk_cache()->create_count()); |
| 2759 | 2759 |
| 2760 RemoveMockTransaction(&kRangeGET_TransactionOK); | 2760 RemoveMockTransaction(&kRangeGET_TransactionOK); |
| 2761 } | 2761 } |
| 2762 | 2762 |
| 2763 // Tests that we cache 301s for range requests. | |
| 2764 TEST(HttpCache, RangeGET_301) { | |
| 2765 MockHttpCache cache; | |
| 2766 ScopedMockTransaction transaction(kRangeGET_TransactionOK); | |
| 2767 transaction.status = "HTTP/1.1 301 Moved Permanently"; | |
| 2768 transaction.response_headers = "Location: http://www.bar.com/\n"; | |
| 2769 transaction.data = ""; | |
| 2770 transaction.handler = NULL; | |
| 2771 AddMockTransaction(&transaction); | |
| 2772 | |
| 2773 // Write to the cache. | |
| 2774 RunTransactionTest(cache.http_cache(), transaction); | |
| 2775 EXPECT_EQ(1, cache.network_layer()->transaction_count()); | |
| 2776 EXPECT_EQ(0, cache.disk_cache()->open_count()); | |
| 2777 EXPECT_EQ(1, cache.disk_cache()->create_count()); | |
| 2778 | |
| 2779 // Read from the cache. | |
| 2780 RunTransactionTest(cache.http_cache(), transaction); | |
| 2781 EXPECT_EQ(1, cache.network_layer()->transaction_count()); | |
| 2782 EXPECT_EQ(1, cache.disk_cache()->open_count()); | |
| 2783 EXPECT_EQ(1, cache.disk_cache()->create_count()); | |
| 2784 | |
| 2785 RemoveMockTransaction(&transaction); | |
|
gavinp
2012/07/30 18:35:07
Nice. This test fails very nicely without the patc
| |
| 2786 } | |
| 2787 | |
| 2763 // Tests that we can cache range requests when the start or end is unknown. | 2788 // Tests that we can cache range requests when the start or end is unknown. |
| 2764 // We start with one suffix request, followed by a request from a given point. | 2789 // We start with one suffix request, followed by a request from a given point. |
| 2765 TEST(HttpCache, UnknownRangeGET_1) { | 2790 TEST(HttpCache, UnknownRangeGET_1) { |
| 2766 MockHttpCache cache; | 2791 MockHttpCache cache; |
| 2767 AddMockTransaction(&kRangeGET_TransactionOK); | 2792 AddMockTransaction(&kRangeGET_TransactionOK); |
| 2768 std::string headers; | 2793 std::string headers; |
| 2769 | 2794 |
| 2770 // Write to the cache (70-79). | 2795 // Write to the cache (70-79). |
| 2771 MockTransaction transaction(kRangeGET_TransactionOK); | 2796 MockTransaction transaction(kRangeGET_TransactionOK); |
| 2772 transaction.request_headers = "Range: bytes = -10\r\n" EXTRA_HEADER; | 2797 transaction.request_headers = "Range: bytes = -10\r\n" EXTRA_HEADER; |
| (...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3132 EXPECT_EQ(2, cache.network_layer()->transaction_count()); | 3157 EXPECT_EQ(2, cache.network_layer()->transaction_count()); |
| 3133 EXPECT_EQ(1, cache.disk_cache()->open_count()); | 3158 EXPECT_EQ(1, cache.disk_cache()->open_count()); |
| 3134 EXPECT_EQ(1, cache.disk_cache()->create_count()); | 3159 EXPECT_EQ(1, cache.disk_cache()->create_count()); |
| 3135 | 3160 |
| 3136 // The last transaction has finished so make sure the entry is deactivated. | 3161 // The last transaction has finished so make sure the entry is deactivated. |
| 3137 MessageLoop::current()->RunAllPending(); | 3162 MessageLoop::current()->RunAllPending(); |
| 3138 | 3163 |
| 3139 // Make a request for an invalid range. | 3164 // Make a request for an invalid range. |
| 3140 MockTransaction transaction3(kRangeGET_TransactionOK); | 3165 MockTransaction transaction3(kRangeGET_TransactionOK); |
| 3141 transaction3.request_headers = "Range: bytes = 80-90\r\n" EXTRA_HEADER; | 3166 transaction3.request_headers = "Range: bytes = 80-90\r\n" EXTRA_HEADER; |
| 3142 transaction3.data = ""; | 3167 transaction3.data = transaction.data; |
| 3143 transaction3.load_flags = net::LOAD_PREFERRING_CACHE; | 3168 transaction3.load_flags = net::LOAD_PREFERRING_CACHE; |
| 3144 RunTransactionTestWithResponse(cache.http_cache(), transaction3, &headers); | 3169 RunTransactionTestWithResponse(cache.http_cache(), transaction3, &headers); |
| 3145 EXPECT_EQ(2, cache.disk_cache()->open_count()); | 3170 EXPECT_EQ(2, cache.disk_cache()->open_count()); |
| 3146 EXPECT_EQ(0U, headers.find("HTTP/1.1 416 ")); | 3171 EXPECT_EQ(0U, headers.find("HTTP/1.1 200 ")); |
| 3147 EXPECT_NE(std::string::npos, headers.find("Content-Range: bytes 0-0/80")); | 3172 EXPECT_EQ(std::string::npos, headers.find("Content-Range:")); |
| 3148 EXPECT_NE(std::string::npos, headers.find("Content-Length: 0")); | 3173 EXPECT_EQ(std::string::npos, headers.find("Content-Length: 80")); |
| 3149 | 3174 |
| 3150 // Make sure the entry is deactivated. | 3175 // Make sure the entry is deactivated. |
| 3151 MessageLoop::current()->RunAllPending(); | 3176 MessageLoop::current()->RunAllPending(); |
| 3152 | 3177 |
| 3153 // Even though the request was invalid, we should have the entry. | 3178 // Even though the request was invalid, we should have the entry. |
| 3154 RunTransactionTest(cache.http_cache(), transaction2); | 3179 RunTransactionTest(cache.http_cache(), transaction2); |
| 3155 EXPECT_EQ(3, cache.disk_cache()->open_count()); | 3180 EXPECT_EQ(3, cache.disk_cache()->open_count()); |
| 3156 | 3181 |
| 3157 // Make sure the entry is deactivated. | 3182 // Make sure the entry is deactivated. |
| 3158 MessageLoop::current()->RunAllPending(); | 3183 MessageLoop::current()->RunAllPending(); |
| 3159 | 3184 |
| 3160 // Now we should receive a range from the server and drop the stored entry. | 3185 // Now we should receive a range from the server and drop the stored entry. |
| 3161 handler.set_not_modified(false); | 3186 handler.set_not_modified(false); |
| 3162 transaction2.request_headers = kRangeGET_TransactionOK.request_headers; | 3187 transaction2.request_headers = kRangeGET_TransactionOK.request_headers; |
| 3163 RunTransactionTestWithResponse(cache.http_cache(), transaction2, &headers); | 3188 RunTransactionTestWithResponse(cache.http_cache(), transaction2, &headers); |
| 3164 Verify206Response(headers, 40, 49); | 3189 Verify206Response(headers, 40, 49); |
| 3165 EXPECT_EQ(5, cache.network_layer()->transaction_count()); | 3190 EXPECT_EQ(4, cache.network_layer()->transaction_count()); |
| 3166 EXPECT_EQ(4, cache.disk_cache()->open_count()); | 3191 EXPECT_EQ(4, cache.disk_cache()->open_count()); |
| 3167 EXPECT_EQ(1, cache.disk_cache()->create_count()); | 3192 EXPECT_EQ(1, cache.disk_cache()->create_count()); |
| 3168 | 3193 |
| 3169 RunTransactionTest(cache.http_cache(), transaction2); | 3194 RunTransactionTest(cache.http_cache(), transaction2); |
| 3170 EXPECT_EQ(2, cache.disk_cache()->create_count()); | 3195 EXPECT_EQ(2, cache.disk_cache()->create_count()); |
| 3171 | 3196 |
| 3172 RemoveMockTransaction(&kRangeGET_TransactionOK); | 3197 RemoveMockTransaction(&kRangeGET_TransactionOK); |
| 3173 } | 3198 } |
| 3174 | 3199 |
| 3175 // Tests that we can handle a 200 response when dealing with sparse entries. | 3200 // Tests that we can handle a 200 response when dealing with sparse entries. |
| (...skipping 1766 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4942 | 4967 |
| 4943 // Verify that the entry is marked as incomplete. | 4968 // Verify that the entry is marked as incomplete. |
| 4944 disk_cache::Entry* entry; | 4969 disk_cache::Entry* entry; |
| 4945 ASSERT_TRUE(cache.OpenBackendEntry(kSimpleGET_Transaction.url, &entry)); | 4970 ASSERT_TRUE(cache.OpenBackendEntry(kSimpleGET_Transaction.url, &entry)); |
| 4946 net::HttpResponseInfo response; | 4971 net::HttpResponseInfo response; |
| 4947 bool truncated = false; | 4972 bool truncated = false; |
| 4948 EXPECT_TRUE(MockHttpCache::ReadResponseInfo(entry, &response, &truncated)); | 4973 EXPECT_TRUE(MockHttpCache::ReadResponseInfo(entry, &response, &truncated)); |
| 4949 EXPECT_TRUE(truncated); | 4974 EXPECT_TRUE(truncated); |
| 4950 entry->Close(); | 4975 entry->Close(); |
| 4951 } | 4976 } |
| OLD | NEW |