spdy_log_util_unittest.cc 4.0 KB

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