Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / media / blink / cache_util_unittest.cc
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 "media/blink/cache_util.h"
6
7 #include <string>
8
9 #include "base/format_macros.h"
10 #include "base/strings/string_number_conversions.h"
11 #include "base/strings/string_util.h"
12 #include "base/strings/stringprintf.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14 #include "third_party/WebKit/public/platform/WebString.h"
15 #include "third_party/WebKit/public/platform/WebURLResponse.h"
16
17 using blink::WebString;
18 using blink::WebURLResponse;
19
20 namespace media {
21
22 // Inputs & expected output for GetReasonsForUncacheability.
23 struct GRFUTestCase {
24   WebURLResponse::HTTPVersion version;
25   int status_code;
26   const char* headers;
27   uint32 expected_reasons;
28 };
29
30 // Create a new WebURLResponse object.
31 static WebURLResponse CreateResponse(const GRFUTestCase& test) {
32   WebURLResponse response;
33   response.initialize();
34   response.setHTTPVersion(test.version);
35   response.setHTTPStatusCode(test.status_code);
36   std::vector<std::string> lines;
37   Tokenize(test.headers, "\n", &lines);
38   for (size_t i = 0; i < lines.size(); ++i) {
39     size_t colon = lines[i].find(": ");
40     response.addHTTPHeaderField(
41         WebString::fromUTF8(lines[i].substr(0, colon)),
42         WebString::fromUTF8(lines[i].substr(colon + 2)));
43   }
44   return response;
45 }
46
47 TEST(CacheUtilTest, GetReasonsForUncacheability) {
48   enum { kNoReasons = 0 };
49
50   const GRFUTestCase tests[] = {
51     {
52       WebURLResponse::HTTP_1_1, 206, "ETag: 'fooblort'", kNoReasons
53     },
54     {
55       WebURLResponse::HTTP_1_1, 206, "", kNoStrongValidatorOnPartialResponse
56     },
57     {
58       WebURLResponse::HTTP_1_0, 206, "",
59       kPre11PartialResponse | kNoStrongValidatorOnPartialResponse
60     },
61     {
62       WebURLResponse::HTTP_1_1, 200, "cache-control: max-Age=42", kShortMaxAge
63     },
64     {
65       WebURLResponse::HTTP_1_1, 200, "cache-control: max-Age=4200", kNoReasons
66     },
67     {
68       WebURLResponse::HTTP_1_1, 200,
69       "Date: Tue, 22 May 2012 23:46:08 GMT\n"
70       "Expires: Tue, 22 May 2012 23:56:08 GMT", kExpiresTooSoon
71     },
72     {
73       WebURLResponse::HTTP_1_1, 200, "cache-control: must-revalidate",
74       kHasMustRevalidate
75     },
76     {
77       WebURLResponse::HTTP_1_1, 200, "cache-control: no-cache", kNoCache
78     },
79     {
80       WebURLResponse::HTTP_1_1, 200, "cache-control: no-store", kNoStore
81     },
82     {
83       WebURLResponse::HTTP_1_1, 200,
84       "cache-control: no-cache\ncache-control: no-store", kNoCache | kNoStore
85     },
86   };
87   for (size_t i = 0; i < arraysize(tests); ++i) {
88     SCOPED_TRACE(base::StringPrintf("case: %" PRIuS
89                                     ", version: %d, code: %d, headers: %s",
90                                     i, tests[i].version, tests[i].status_code,
91                                     tests[i].headers));
92     EXPECT_EQ(GetReasonsForUncacheability(CreateResponse(tests[i])),
93               tests[i].expected_reasons);
94   }
95 }
96
97 }  // namespace media