2 * Copyright 2004-present Facebook, Inc.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 #include <folly/Conv.h>
17 #include <folly/Random.h>
18 #include <folly/experimental/logging/LogLevel.h>
19 #include <folly/portability/GTest.h>
21 using namespace folly;
23 TEST(LogLevel, fromString) {
24 EXPECT_EQ(LogLevel::UNINITIALIZED, stringToLogLevel("uninitialized"));
25 EXPECT_EQ(LogLevel::UNINITIALIZED, stringToLogLevel("UnInitialized"));
27 LogLevel::UNINITIALIZED, stringToLogLevel("LogLevel::UNINITIALIZED"));
29 EXPECT_EQ(LogLevel::NONE, stringToLogLevel("none"));
30 EXPECT_EQ(LogLevel::NONE, stringToLogLevel("NONE"));
31 EXPECT_EQ(LogLevel::NONE, stringToLogLevel("NoNe"));
32 EXPECT_EQ(LogLevel::NONE, stringToLogLevel("LogLevel::none"));
34 EXPECT_EQ(LogLevel::DEBUG, stringToLogLevel("debug"));
35 EXPECT_EQ(LogLevel::DEBUG, stringToLogLevel("dEBug"));
36 EXPECT_EQ(LogLevel::DEBUG, stringToLogLevel("loglevel::dEBug"));
38 EXPECT_EQ(LogLevel::INFO, stringToLogLevel("info"));
39 EXPECT_EQ(LogLevel::INFO, stringToLogLevel("INFO"));
40 EXPECT_EQ(LogLevel::INFO, stringToLogLevel("loglevel(INFO)"));
42 EXPECT_EQ(LogLevel::WARN, stringToLogLevel("warn"));
43 EXPECT_EQ(LogLevel::WARN, stringToLogLevel("WARN"));
44 EXPECT_EQ(LogLevel::WARN, stringToLogLevel("warning"));
46 EXPECT_EQ(LogLevel::ERR, stringToLogLevel("err"));
47 EXPECT_EQ(LogLevel::ERR, stringToLogLevel("eRr"));
48 EXPECT_EQ(LogLevel::ERR, stringToLogLevel("error"));
49 EXPECT_EQ(LogLevel::ERR, stringToLogLevel("ERROR"));
51 EXPECT_EQ(LogLevel::CRITICAL, stringToLogLevel("critical"));
52 EXPECT_EQ(LogLevel::CRITICAL, stringToLogLevel("CRITICAL"));
54 EXPECT_EQ(LogLevel::MAX_LEVEL, stringToLogLevel("max"));
55 EXPECT_EQ(LogLevel::MAX_LEVEL, stringToLogLevel("Max_Level"));
56 EXPECT_EQ(LogLevel::MAX_LEVEL, stringToLogLevel("LogLevel::MAX"));
57 EXPECT_EQ(LogLevel::MAX_LEVEL, stringToLogLevel("LogLevel::MAX_LEVEL"));
59 EXPECT_EQ(LogLevel::DBG0, stringToLogLevel("dbg0"));
60 EXPECT_EQ(LogLevel::DBG5, stringToLogLevel("dbg5"));
61 EXPECT_EQ(LogLevel::DBG5, stringToLogLevel("DBG5"));
62 EXPECT_EQ(LogLevel::DBG9, stringToLogLevel("DBG9"));
63 EXPECT_EQ(LogLevel::DEBUG + 1, stringToLogLevel("DBG99"));
64 EXPECT_EQ(LogLevel::DEBUG, stringToLogLevel("900"));
65 EXPECT_EQ(LogLevel::DEBUG, stringToLogLevel("LogLevel(900)"));
67 EXPECT_THROW(stringToLogLevel("foobar"), std::range_error);
68 EXPECT_THROW(stringToLogLevel("dbg"), std::range_error);
69 EXPECT_THROW(stringToLogLevel("dbgxyz"), std::range_error);
70 EXPECT_THROW(stringToLogLevel("dbg-1"), std::range_error);
71 EXPECT_THROW(stringToLogLevel("dbg12345"), std::range_error);
72 EXPECT_THROW(stringToLogLevel("900z"), std::range_error);
75 TEST(LogLevel, toString) {
77 "LogLevel::UNINITIALIZED", logLevelToString(LogLevel::UNINITIALIZED));
78 EXPECT_EQ("LogLevel::NONE", logLevelToString(LogLevel::NONE));
79 EXPECT_EQ("LogLevel::INFO", logLevelToString(LogLevel::INFO));
80 EXPECT_EQ("LogLevel::WARN", logLevelToString(LogLevel::WARN));
81 EXPECT_EQ("LogLevel::WARN", logLevelToString(LogLevel::WARNING));
82 EXPECT_EQ("LogLevel::DEBUG", logLevelToString(LogLevel::DEBUG));
83 EXPECT_EQ("LogLevel::ERR", logLevelToString(LogLevel::ERR));
84 EXPECT_EQ("LogLevel::CRITICAL", logLevelToString(LogLevel::CRITICAL));
85 EXPECT_EQ("LogLevel::MAX_LEVEL", logLevelToString(LogLevel::MAX_LEVEL));
87 EXPECT_EQ("LogLevel::DBG0", logLevelToString(LogLevel::DBG0));
88 EXPECT_EQ("LogLevel::DBG2", logLevelToString(LogLevel::DBG2));
89 EXPECT_EQ("LogLevel::DBG5", logLevelToString(LogLevel::DBG5));
90 EXPECT_EQ("LogLevel::DBG9", logLevelToString(LogLevel::DBG9));
91 EXPECT_EQ("LogLevel::DBG97", logLevelToString(static_cast<LogLevel>(903)));
92 EXPECT_EQ("LogLevel::DBG64", logLevelToString(LogLevel::DBG4 - 60));
94 EXPECT_EQ("LogLevel(1234)", logLevelToString(static_cast<LogLevel>(1234)));
97 TEST(LogLevel, toStringAndBack) {
98 // Check that stringToLogLevel(logLevelToString()) is the identity function
99 auto checkLevel = [](LogLevel level) {
100 auto stringForm = logLevelToString(level);
101 auto outputLevel = stringToLogLevel(stringForm);
102 EXPECT_EQ(level, outputLevel)
103 << "error converting " << level << " (" << static_cast<uint32_t>(level)
104 << ") to string and back. String is " << stringForm;
107 // Check all of the named levels
108 checkLevel(LogLevel::UNINITIALIZED);
109 checkLevel(LogLevel::NONE);
110 checkLevel(LogLevel::DEBUG);
111 checkLevel(LogLevel::DBG0);
112 checkLevel(LogLevel::DBG1);
113 checkLevel(LogLevel::DBG2);
114 checkLevel(LogLevel::DBG3);
115 checkLevel(LogLevel::DBG4);
116 checkLevel(LogLevel::DBG5);
117 checkLevel(LogLevel::DBG6);
118 checkLevel(LogLevel::DBG7);
119 checkLevel(LogLevel::DBG8);
120 checkLevel(LogLevel::DBG9);
121 checkLevel(LogLevel::INFO);
122 checkLevel(LogLevel::WARN);
123 checkLevel(LogLevel::WARNING);
124 checkLevel(LogLevel::ERR);
125 checkLevel(LogLevel::CRITICAL);
126 checkLevel(LogLevel::MAX_LEVEL);
128 // Try with some random integer values
129 for (uint32_t numIters = 0; numIters < 10000; ++numIters) {
131 folly::Random::rand32(static_cast<uint32_t>(LogLevel::MAX_LEVEL));
132 checkLevel(static_cast<LogLevel>(levelValue));