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