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 "net/base/net_log_logger.h" 6 7 #include "base/files/file_path.h" 8 #include "base/files/file_util.h" 9 #include "base/files/scoped_temp_dir.h" 10 #include "base/json/json_reader.h" 11 #include "base/values.h" 12 #include "testing/gtest/include/gtest/gtest.h" 13 14 namespace net { 15 16 class NetLogLoggerTest : public testing::Test { 17 public: 18 virtual void SetUp() { 19 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 20 log_path_ = temp_dir_.path().AppendASCII("NetLogFile"); 21 } 22 23 protected: 24 base::ScopedTempDir temp_dir_; 25 base::FilePath log_path_; 26 }; 27 28 TEST_F(NetLogLoggerTest, GeneratesValidJSONForNoEvents) { 29 { 30 // Create and destroy a logger. 31 FILE* file = base::OpenFile(log_path_, "w"); 32 ASSERT_TRUE(file); 33 scoped_ptr<base::Value> constants(NetLogLogger::GetConstants()); 34 NetLogLogger logger(file, *constants); 35 } 36 37 std::string input; 38 ASSERT_TRUE(base::ReadFileToString(log_path_, &input)); 39 40 base::JSONReader reader; 41 scoped_ptr<base::Value> root(reader.ReadToValue(input)); 42 ASSERT_TRUE(root) << reader.GetErrorMessage(); 43 44 base::DictionaryValue* dict; 45 ASSERT_TRUE(root->GetAsDictionary(&dict)); 46 base::ListValue* events; 47 ASSERT_TRUE(dict->GetList("events", &events)); 48 ASSERT_EQ(0u, events->GetSize()); 49 } 50 51 TEST_F(NetLogLoggerTest, GeneratesValidJSONWithOneEvent) { 52 { 53 FILE* file = base::OpenFile(log_path_, "w"); 54 ASSERT_TRUE(file); 55 scoped_ptr<base::Value> constants(NetLogLogger::GetConstants()); 56 NetLogLogger logger(file, *constants); 57 58 const int kDummyId = 1; 59 NetLog::Source source(NetLog::SOURCE_SPDY_SESSION, kDummyId); 60 NetLog::EntryData entry_data(NetLog::TYPE_PROXY_SERVICE, 61 source, 62 NetLog::PHASE_BEGIN, 63 base::TimeTicks::Now(), 64 NULL); 65 NetLog::Entry entry(&entry_data, NetLog::LOG_ALL); 66 logger.OnAddEntry(entry); 67 } 68 69 std::string input; 70 ASSERT_TRUE(base::ReadFileToString(log_path_, &input)); 71 72 base::JSONReader reader; 73 scoped_ptr<base::Value> root(reader.ReadToValue(input)); 74 ASSERT_TRUE(root) << reader.GetErrorMessage(); 75 76 base::DictionaryValue* dict; 77 ASSERT_TRUE(root->GetAsDictionary(&dict)); 78 base::ListValue* events; 79 ASSERT_TRUE(dict->GetList("events", &events)); 80 ASSERT_EQ(1u, events->GetSize()); 81 } 82 83 TEST_F(NetLogLoggerTest, GeneratesValidJSONWithMultipleEvents) { 84 { 85 FILE* file = base::OpenFile(log_path_, "w"); 86 ASSERT_TRUE(file); 87 scoped_ptr<base::Value> constants(NetLogLogger::GetConstants()); 88 NetLogLogger logger(file, *constants); 89 90 const int kDummyId = 1; 91 NetLog::Source source(NetLog::SOURCE_SPDY_SESSION, kDummyId); 92 NetLog::EntryData entry_data(NetLog::TYPE_PROXY_SERVICE, 93 source, 94 NetLog::PHASE_BEGIN, 95 base::TimeTicks::Now(), 96 NULL); 97 NetLog::Entry entry(&entry_data, NetLog::LOG_ALL); 98 99 // Add the entry multiple times. 100 logger.OnAddEntry(entry); 101 logger.OnAddEntry(entry); 102 } 103 104 std::string input; 105 ASSERT_TRUE(base::ReadFileToString(log_path_, &input)); 106 107 base::JSONReader reader; 108 scoped_ptr<base::Value> root(reader.ReadToValue(input)); 109 ASSERT_TRUE(root) << reader.GetErrorMessage(); 110 111 base::DictionaryValue* dict; 112 ASSERT_TRUE(root->GetAsDictionary(&dict)); 113 base::ListValue* events; 114 ASSERT_TRUE(dict->GetList("events", &events)); 115 ASSERT_EQ(2u, events->GetSize()); 116 } 117 118 } // namespace net 119