• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2017 The Chromium Authors
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/spdy/spdy_log_util.h"
6 
7 #include "base/values.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9 
10 namespace net {
11 
ElideGoAwayDebugDataForNetLogAsString(NetLogCaptureMode capture_mode,base::StringPiece debug_data)12 std::string ElideGoAwayDebugDataForNetLogAsString(
13     NetLogCaptureMode capture_mode,
14     base::StringPiece debug_data) {
15   auto value = ElideGoAwayDebugDataForNetLog(capture_mode, debug_data);
16   if (!value.is_string()) {
17     ADD_FAILURE() << "'value' should be string.";
18     return std::string();
19   }
20   return value.GetString();
21 }
22 
TEST(SpdyLogUtilTest,ElideGoAwayDebugDataForNetLog)23 TEST(SpdyLogUtilTest, ElideGoAwayDebugDataForNetLog) {
24   // Only elide for appropriate log level.
25   EXPECT_EQ("[6 bytes were stripped]",
26             ElideGoAwayDebugDataForNetLogAsString(NetLogCaptureMode::kDefault,
27                                                   "foobar"));
28   EXPECT_EQ("foobar", ElideGoAwayDebugDataForNetLogAsString(
29                           NetLogCaptureMode::kIncludeSensitive, "foobar"));
30   EXPECT_EQ("%ESCAPED:\xE2\x80\x8B %FE%FF",
31             ElideGoAwayDebugDataForNetLogAsString(
32                 NetLogCaptureMode::kIncludeSensitive, "\xfe\xff\x00"));
33 }
34 
TEST(SpdyLogUtilTest,ElideHttp2HeaderBlockForNetLog)35 TEST(SpdyLogUtilTest, ElideHttp2HeaderBlockForNetLog) {
36   spdy::Http2HeaderBlock headers;
37   headers["foo"] = "bar";
38   headers["cookie"] = "name=value";
39 
40   base::Value::List list =
41       ElideHttp2HeaderBlockForNetLog(headers, NetLogCaptureMode::kDefault);
42 
43   ASSERT_EQ(2u, list.size());
44 
45   ASSERT_TRUE(list[0].is_string());
46   EXPECT_EQ("foo: bar", list[0].GetString());
47 
48   ASSERT_TRUE(list[1].is_string());
49   EXPECT_EQ("cookie: [10 bytes were stripped]", list[1].GetString());
50 
51   list = ElideHttp2HeaderBlockForNetLog(headers,
52                                         NetLogCaptureMode::kIncludeSensitive);
53 
54   ASSERT_EQ(2u, list.size());
55 
56   ASSERT_TRUE(list[0].is_string());
57   EXPECT_EQ("foo: bar", list[0].GetString());
58 
59   ASSERT_TRUE(list[1].is_string());
60   EXPECT_EQ("cookie: name=value", list[1].GetString());
61 }
62 
TEST(SpdyLogUtilTest,Http2HeaderBlockNetLogParams)63 TEST(SpdyLogUtilTest, Http2HeaderBlockNetLogParams) {
64   spdy::Http2HeaderBlock headers;
65   headers["foo"] = "bar";
66   headers["cookie"] = "name=value";
67 
68   base::Value::Dict dict =
69       Http2HeaderBlockNetLogParams(&headers, NetLogCaptureMode::kDefault);
70 
71   ASSERT_EQ(1u, dict.size());
72 
73   auto* header_list = dict.FindList("headers");
74   ASSERT_TRUE(header_list);
75   ASSERT_EQ(2u, header_list->size());
76 
77   ASSERT_TRUE((*header_list)[0].is_string());
78   EXPECT_EQ("foo: bar", (*header_list)[0].GetString());
79 
80   ASSERT_TRUE((*header_list)[1].is_string());
81   EXPECT_EQ("cookie: [10 bytes were stripped]", (*header_list)[1].GetString());
82 
83   dict = Http2HeaderBlockNetLogParams(&headers,
84                                       NetLogCaptureMode::kIncludeSensitive);
85 
86   ASSERT_EQ(1u, dict.size());
87 
88   header_list = dict.FindList("headers");
89   ASSERT_TRUE(header_list);
90   ASSERT_EQ(2u, header_list->size());
91 
92   ASSERT_TRUE((*header_list)[0].is_string());
93   EXPECT_EQ("foo: bar", (*header_list)[0].GetString());
94 
95   ASSERT_TRUE((*header_list)[1].is_string());
96   EXPECT_EQ("cookie: name=value", (*header_list)[1].GetString());
97 }
98 
99 // Regression test for https://crbug.com/800282.
TEST(SpdyLogUtilTest,ElideHttp2HeaderBlockForNetLogWithNonUTF8Characters)100 TEST(SpdyLogUtilTest, ElideHttp2HeaderBlockForNetLogWithNonUTF8Characters) {
101   spdy::Http2HeaderBlock headers;
102   headers["foo"] = "bar\x81";
103   headers["O\xe2"] = "bar";
104   headers["\xde\xad"] = "\xbe\xef";
105 
106   base::Value::List list =
107       ElideHttp2HeaderBlockForNetLog(headers, NetLogCaptureMode::kDefault);
108 
109   ASSERT_EQ(3u, list.size());
110   ASSERT_TRUE(list[0].is_string());
111   EXPECT_EQ("%ESCAPED:\xE2\x80\x8B foo: bar%81", list[0].GetString());
112   ASSERT_TRUE(list[1].is_string());
113   EXPECT_EQ("%ESCAPED:\xE2\x80\x8B O%E2: bar", list[1].GetString());
114   ASSERT_TRUE(list[2].is_string());
115   EXPECT_EQ("%ESCAPED:\xE2\x80\x8B %DE%AD: %BE%EF", list[2].GetString());
116 }
117 
118 }  // namespace net
119