Home | History | Annotate | Download | only in base
      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/file_util.h"
      8 #include "base/files/file_path.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 = file_util::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(file_util::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 = file_util::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::Entry entry(NetLog::TYPE_PROXY_SERVICE,
     61                         source,
     62                         NetLog::PHASE_BEGIN,
     63                         base::TimeTicks::Now(),
     64                         NULL,
     65                         NetLog::LOG_BASIC);
     66     logger.OnAddEntry(entry);
     67   }
     68 
     69   std::string input;
     70   ASSERT_TRUE(file_util::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 = file_util::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::Entry entry(NetLog::TYPE_PROXY_SERVICE,
     93                         source,
     94                         NetLog::PHASE_BEGIN,
     95                         base::TimeTicks::Now(),
     96                         NULL,
     97                         NetLog::LOG_BASIC);
     98 
     99     // Add the entry multiple times.
    100     logger.OnAddEntry(entry);
    101     logger.OnAddEntry(entry);
    102   }
    103 
    104   std::string input;
    105   ASSERT_TRUE(file_util::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