Home | History | Annotate | Download | only in chromedriver
      1 // Copyright (c) 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 "chrome/test/chromedriver/logging.h"
      6 
      7 #include "base/values.h"
      8 #include "chrome/test/chromedriver/capabilities.h"
      9 #include "chrome/test/chromedriver/chrome/devtools_event_listener.h"
     10 #include "chrome/test/chromedriver/chrome/status.h"
     11 #include "testing/gtest/include/gtest/gtest.h"
     12 
     13 namespace {
     14 
     15 const char* const kAllWdLevels[] = {
     16   "ALL", "DEBUG", "INFO", "WARNING", "SEVERE", "OFF"
     17 };
     18 
     19 }
     20 
     21 TEST(Logging, NameLevelConversionHappy) {
     22   // All names map to a valid enum value.
     23   for (int i = 0; static_cast<size_t>(i) < arraysize(kAllWdLevels); ++i) {
     24     WebDriverLog::WebDriverLevel level =
     25         static_cast<WebDriverLog::WebDriverLevel>(-1);
     26     EXPECT_TRUE(WebDriverLog::NameToLevel(kAllWdLevels[i], &level));
     27     EXPECT_LE(WebDriverLog::kWdAll, level);
     28     EXPECT_GE(WebDriverLog::kWdOff, level);
     29   }
     30 }
     31 
     32 TEST(Logging, NameToLevelErrors) {
     33   WebDriverLog::WebDriverLevel level =
     34       static_cast<WebDriverLog::WebDriverLevel>(-1);
     35   EXPECT_FALSE(WebDriverLog::NameToLevel("A", &level));
     36   EXPECT_FALSE(WebDriverLog::NameToLevel("B", &level));
     37   EXPECT_FALSE(WebDriverLog::NameToLevel("H", &level));
     38   EXPECT_FALSE(WebDriverLog::NameToLevel("R", &level));
     39   EXPECT_FALSE(WebDriverLog::NameToLevel("T", &level));
     40   EXPECT_FALSE(WebDriverLog::NameToLevel("Z", &level));
     41   // The level variable was never modified.
     42   EXPECT_EQ(static_cast<WebDriverLog::WebDriverLevel>(-1), level);
     43 }
     44 
     45 namespace {
     46 
     47 void ValidateLogEntry(base::ListValue *entries,
     48                       int index,
     49                       const std::string& expected_level,
     50                       const std::string& expected_message) {
     51   const base::DictionaryValue *entry;
     52   ASSERT_TRUE(entries->GetDictionary(index, &entry));
     53   std::string level;
     54   EXPECT_TRUE(entry->GetString("level", &level));
     55   EXPECT_EQ(expected_level, level);
     56   std::string message;
     57   ASSERT_TRUE(entry->GetString("message", &message));
     58   EXPECT_EQ(expected_message, message);
     59   double timestamp = 0;
     60   EXPECT_TRUE(entry->GetDouble("timestamp", &timestamp));
     61   EXPECT_LT(0, timestamp);
     62 }
     63 
     64 }
     65 
     66 TEST(WebDriverLog, Levels) {
     67   WebDriverLog log("type", WebDriverLog::kWdInfo);
     68   log.AddEntry(Log::kLog, std::string("info message"));
     69   log.AddEntry(Log::kError, "severe message");
     70   log.AddEntry(Log::kDebug, "debug message");  // Must not log
     71 
     72   scoped_ptr<base::ListValue> entries(log.GetAndClearEntries());
     73 
     74   ASSERT_EQ(2u, entries->GetSize());
     75   ValidateLogEntry(entries.get(), 0, "INFO", "info message");
     76   ValidateLogEntry(entries.get(), 1, "SEVERE", "severe message");
     77 }
     78 
     79 TEST(WebDriverLog, Off) {
     80   WebDriverLog log("type", WebDriverLog::kWdOff);
     81   log.AddEntry(Log::kError, "severe message");  // Must not log
     82   log.AddEntry(Log::kDebug, "debug message");  // Must not log
     83 
     84   scoped_ptr<base::ListValue> entries(log.GetAndClearEntries());
     85 
     86   ASSERT_EQ(0u, entries->GetSize());
     87 }
     88 
     89 TEST(WebDriverLog, All) {
     90   WebDriverLog log("type", WebDriverLog::kWdAll);
     91   log.AddEntry(Log::kError, "severe message");
     92   log.AddEntry(Log::kDebug, "debug message");
     93 
     94   scoped_ptr<base::ListValue> entries(log.GetAndClearEntries());
     95 
     96   ASSERT_EQ(2u, entries->GetSize());
     97   ValidateLogEntry(entries.get(), 0, "SEVERE", "severe message");
     98   ValidateLogEntry(entries.get(), 1, "DEBUG", "debug message");
     99 }
    100 
    101 TEST(Logging, CreatePerformanceLog) {
    102   Capabilities capabilities;
    103   capabilities.logging_prefs.reset(new base::DictionaryValue());
    104   capabilities.logging_prefs->SetString("performance", "INFO");
    105 
    106   ScopedVector<DevToolsEventListener> listeners;
    107   ScopedVector<WebDriverLog> logs;
    108   Status status = CreateLogs(capabilities, &logs, &listeners);
    109   ASSERT_TRUE(status.IsOk());
    110   ASSERT_EQ(2u, logs.size());
    111   ASSERT_EQ(2u, listeners.size());
    112   ASSERT_EQ("performance", logs[0]->GetType());
    113   ASSERT_EQ("browser", logs[1]->GetType());  // Always created.
    114 }
    115 
    116 TEST(Logging, CreateBrowserLogOff) {
    117   Capabilities capabilities;
    118   capabilities.logging_prefs.reset(new base::DictionaryValue());
    119   capabilities.logging_prefs->SetString("browser", "OFF");
    120 
    121   ScopedVector<DevToolsEventListener> listeners;
    122   ScopedVector<WebDriverLog> logs;
    123   Status status = CreateLogs(capabilities, &logs, &listeners);
    124   ASSERT_TRUE(status.IsOk());
    125   ASSERT_EQ(1u, logs.size());
    126   ASSERT_EQ(0u, listeners.size());
    127   ASSERT_EQ("browser", logs[0]->GetType());
    128 
    129   // Verify the created log is "OFF" -- drops all messages.
    130   logs[0]->AddEntry(Log::kError, "drop even errors");
    131   scoped_ptr<base::ListValue> entries(logs[0]->GetAndClearEntries());
    132   ASSERT_EQ(0u, entries->GetSize());
    133 }
    134 
    135 TEST(Logging, IgnoreUnknownLogType) {
    136   Capabilities capabilities;
    137   capabilities.logging_prefs.reset(new base::DictionaryValue());
    138   capabilities.logging_prefs->SetString("gaga", "INFO");
    139 
    140   ScopedVector<DevToolsEventListener> listeners;
    141   ScopedVector<WebDriverLog> logs;
    142   Status status = CreateLogs(capabilities, &logs, &listeners);
    143   EXPECT_TRUE(status.IsOk());
    144   ASSERT_EQ(1u, logs.size());
    145   ASSERT_EQ(1u, listeners.size());
    146   ASSERT_EQ("browser", logs[0]->GetType());
    147 }
    148 
    149 TEST(Logging, BrowserLogCreatedWithoutLoggingPrefs) {
    150   Capabilities capabilities;
    151 
    152   ScopedVector<DevToolsEventListener> listeners;
    153   ScopedVector<WebDriverLog> logs;
    154   Status status = CreateLogs(capabilities, &logs, &listeners);
    155   EXPECT_TRUE(status.IsOk());
    156   ASSERT_EQ(1u, logs.size());
    157   ASSERT_EQ(1u, listeners.size());
    158   ASSERT_EQ("browser", logs[0]->GetType());
    159 
    160   // Verify the created "browser" log is "INFO" level.
    161   logs[0]->AddEntry(Log::kLog, "info message");
    162   logs[0]->AddEntry(Log::kDebug, "drop debug message");
    163   scoped_ptr<base::ListValue> entries(logs[0]->GetAndClearEntries());
    164   ASSERT_EQ(1u, entries->GetSize());
    165   ValidateLogEntry(entries.get(), 0, "INFO", "info message");
    166 }
    167