12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "net/base/net_log_logger.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/scoped_temp_dir.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/json/json_reader.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/values.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace net { 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class NetLogLoggerTest : public testing::Test { 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUp() { 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) log_path_ = temp_dir_.path().AppendASCII("NetLogFile"); 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ScopedTempDir temp_dir_; 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath log_path_; 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(NetLogLoggerTest, GeneratesValidJSONForNoEvents) { 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Create and destroy a logger. 31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) FILE* file = base::OpenFile(log_path_, "w"); 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(file); 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::Value> constants(NetLogLogger::GetConstants()); 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch NetLogLogger logger(file, *constants); 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string input; 3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(base::ReadFileToString(log_path_, &input)); 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::JSONReader reader; 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value> root(reader.ReadToValue(input)); 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(root) << reader.GetErrorMessage(); 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue* dict; 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(root->GetAsDictionary(&dict)); 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::ListValue* events; 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(dict->GetList("events", &events)); 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(0u, events->GetSize()); 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(NetLogLoggerTest, GeneratesValidJSONWithOneEvent) { 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 53a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) FILE* file = base::OpenFile(log_path_, "w"); 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(file); 55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::Value> constants(NetLogLogger::GetConstants()); 56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch NetLogLogger logger(file, *constants); 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const int kDummyId = 1; 59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch NetLog::Source source(NetLog::SOURCE_SPDY_SESSION, kDummyId); 60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NetLog::EntryData entry_data(NetLog::TYPE_PROXY_SERVICE, 61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) source, 62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NetLog::PHASE_BEGIN, 63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::TimeTicks::Now(), 64a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NULL); 65a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NetLog::Entry entry(&entry_data, NetLog::LOG_ALL); 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) logger.OnAddEntry(entry); 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string input; 7058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(base::ReadFileToString(log_path_, &input)); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::JSONReader reader; 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value> root(reader.ReadToValue(input)); 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(root) << reader.GetErrorMessage(); 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue* dict; 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(root->GetAsDictionary(&dict)); 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::ListValue* events; 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(dict->GetList("events", &events)); 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(1u, events->GetSize()); 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(NetLogLoggerTest, GeneratesValidJSONWithMultipleEvents) { 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 85a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) FILE* file = base::OpenFile(log_path_, "w"); 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(file); 87eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::Value> constants(NetLogLogger::GetConstants()); 88eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch NetLogLogger logger(file, *constants); 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const int kDummyId = 1; 91eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch NetLog::Source source(NetLog::SOURCE_SPDY_SESSION, kDummyId); 92a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NetLog::EntryData entry_data(NetLog::TYPE_PROXY_SERVICE, 93a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) source, 94a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NetLog::PHASE_BEGIN, 95a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::TimeTicks::Now(), 96a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NULL); 97a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NetLog::Entry entry(&entry_data, NetLog::LOG_ALL); 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Add the entry multiple times. 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) logger.OnAddEntry(entry); 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) logger.OnAddEntry(entry); 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string input; 10558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(base::ReadFileToString(log_path_, &input)); 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::JSONReader reader; 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value> root(reader.ReadToValue(input)); 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(root) << reader.GetErrorMessage(); 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue* dict; 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(root->GetAsDictionary(&dict)); 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::ListValue* events; 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(dict->GetList("events", &events)); 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(2u, events->GetSize()); 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 117eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 118eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} // namespace net 119