LogLevelTest.cpp 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. /*
  2. * Copyright 2017-present Facebook, Inc.
  3. *
  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
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  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.
  15. */
  16. #include <folly/logging/LogLevel.h>
  17. #include <folly/Conv.h>
  18. #include <folly/Random.h>
  19. #include <folly/portability/GTest.h>
  20. using namespace folly;
  21. TEST(LogLevel, fromString) {
  22. EXPECT_EQ(LogLevel::UNINITIALIZED, stringToLogLevel("uninitialized"));
  23. EXPECT_EQ(LogLevel::UNINITIALIZED, stringToLogLevel("UnInitialized"));
  24. EXPECT_EQ(
  25. LogLevel::UNINITIALIZED, stringToLogLevel("LogLevel::UNINITIALIZED"));
  26. EXPECT_EQ(LogLevel::NONE, stringToLogLevel("none"));
  27. EXPECT_EQ(LogLevel::NONE, stringToLogLevel("NONE"));
  28. EXPECT_EQ(LogLevel::NONE, stringToLogLevel("NoNe"));
  29. EXPECT_EQ(LogLevel::NONE, stringToLogLevel("LogLevel::none"));
  30. EXPECT_EQ(LogLevel::DBG, stringToLogLevel("debug"));
  31. EXPECT_EQ(LogLevel::DBG, stringToLogLevel("dEBug"));
  32. EXPECT_EQ(LogLevel::DBG, stringToLogLevel("Dbg"));
  33. EXPECT_EQ(LogLevel::DBG, stringToLogLevel("loglevel::dEBug"));
  34. EXPECT_EQ(LogLevel::DBG, stringToLogLevel("loglevel::DBG"));
  35. EXPECT_EQ(LogLevel::INFO, stringToLogLevel("info"));
  36. EXPECT_EQ(LogLevel::INFO, stringToLogLevel("INFO"));
  37. EXPECT_EQ(LogLevel::INFO, stringToLogLevel("loglevel(INFO)"));
  38. EXPECT_EQ(LogLevel::WARN, stringToLogLevel("warn"));
  39. EXPECT_EQ(LogLevel::WARN, stringToLogLevel("WARN"));
  40. EXPECT_EQ(LogLevel::WARN, stringToLogLevel("warning"));
  41. EXPECT_EQ(LogLevel::ERR, stringToLogLevel("err"));
  42. EXPECT_EQ(LogLevel::ERR, stringToLogLevel("eRr"));
  43. EXPECT_EQ(LogLevel::ERR, stringToLogLevel("error"));
  44. EXPECT_EQ(LogLevel::ERR, stringToLogLevel("ERR"));
  45. EXPECT_EQ(LogLevel::ERR, stringToLogLevel("ERROR"));
  46. EXPECT_EQ(LogLevel::CRITICAL, stringToLogLevel("critical"));
  47. EXPECT_EQ(LogLevel::CRITICAL, stringToLogLevel("CRITICAL"));
  48. EXPECT_EQ(LogLevel::DFATAL, stringToLogLevel("dfatal"));
  49. EXPECT_EQ(LogLevel::DFATAL, stringToLogLevel("DFatal"));
  50. EXPECT_EQ(LogLevel::DFATAL, stringToLogLevel("DFATAL"));
  51. EXPECT_EQ(LogLevel::FATAL, stringToLogLevel("fatal"));
  52. EXPECT_EQ(LogLevel::FATAL, stringToLogLevel("FaTaL"));
  53. EXPECT_EQ(LogLevel::FATAL, stringToLogLevel("FATAL"));
  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"));
  58. EXPECT_EQ(LogLevel::DBG0, stringToLogLevel("dbg0"));
  59. EXPECT_EQ(LogLevel::DBG5, stringToLogLevel("dbg5"));
  60. EXPECT_EQ(LogLevel::DBG5, stringToLogLevel("DBG5"));
  61. EXPECT_EQ(LogLevel::DBG9, stringToLogLevel("DBG9"));
  62. EXPECT_EQ(LogLevel::DBG + 1, stringToLogLevel("DBG998"));
  63. EXPECT_EQ(LogLevel::DBG, stringToLogLevel("DBG999"));
  64. EXPECT_EQ(LogLevel::DBG, stringToLogLevel("1000"));
  65. EXPECT_EQ(LogLevel::DBG, stringToLogLevel("LogLevel(1000)"));
  66. EXPECT_EQ(LogLevel::INFO0, stringToLogLevel("info0"));
  67. EXPECT_EQ(LogLevel::INFO5, stringToLogLevel("INFO5"));
  68. EXPECT_EQ(LogLevel::INFO5, stringToLogLevel("INFO5"));
  69. EXPECT_EQ(LogLevel::INFO9, stringToLogLevel("info9"));
  70. EXPECT_EQ(LogLevel::INFO + 1, stringToLogLevel("Info998"));
  71. EXPECT_EQ(LogLevel::INFO, stringToLogLevel("INFO999"));
  72. EXPECT_EQ(LogLevel::INFO, stringToLogLevel("2000"));
  73. EXPECT_EQ(LogLevel::INFO6, stringToLogLevel("LogLevel(2993)"));
  74. EXPECT_THROW(stringToLogLevel("foobar"), std::range_error);
  75. EXPECT_THROW(stringToLogLevel("dbgx"), std::range_error);
  76. EXPECT_THROW(stringToLogLevel("dbgxyz"), std::range_error);
  77. EXPECT_THROW(stringToLogLevel("dbg-1"), std::range_error);
  78. EXPECT_THROW(stringToLogLevel("dbg12345"), std::range_error);
  79. EXPECT_THROW(stringToLogLevel("900z"), std::range_error);
  80. }
  81. TEST(LogLevel, toString) {
  82. EXPECT_EQ("UNINITIALIZED", logLevelToString(LogLevel::UNINITIALIZED));
  83. EXPECT_EQ("NONE", logLevelToString(LogLevel::NONE));
  84. EXPECT_EQ("INFO", logLevelToString(LogLevel::INFO));
  85. EXPECT_EQ("WARN", logLevelToString(LogLevel::WARN));
  86. EXPECT_EQ("WARN", logLevelToString(LogLevel::WARNING));
  87. EXPECT_EQ("DEBUG", logLevelToString(LogLevel::DBG));
  88. EXPECT_EQ("ERR", logLevelToString(LogLevel::ERR));
  89. EXPECT_EQ("CRITICAL", logLevelToString(LogLevel::CRITICAL));
  90. EXPECT_EQ("DFATAL", logLevelToString(LogLevel::DFATAL));
  91. EXPECT_EQ("FATAL", logLevelToString(LogLevel::FATAL));
  92. EXPECT_EQ("FATAL", logLevelToString(LogLevel::MAX_LEVEL));
  93. EXPECT_EQ("DBG0", logLevelToString(LogLevel::DBG0));
  94. EXPECT_EQ("DBG2", logLevelToString(LogLevel::DBG2));
  95. EXPECT_EQ("DBG5", logLevelToString(LogLevel::DBG5));
  96. EXPECT_EQ("DBG9", logLevelToString(LogLevel::DBG9));
  97. EXPECT_EQ("DBG96", logLevelToString(static_cast<LogLevel>(1903)));
  98. EXPECT_EQ("DBG64", logLevelToString(LogLevel::DBG4 - 60));
  99. EXPECT_EQ("INFO0", logLevelToString(LogLevel::INFO0));
  100. EXPECT_EQ("INFO2", logLevelToString(LogLevel::INFO2));
  101. EXPECT_EQ("INFO5", logLevelToString(LogLevel::INFO5));
  102. EXPECT_EQ("INFO9", logLevelToString(LogLevel::INFO9));
  103. EXPECT_EQ("INFO86", logLevelToString(static_cast<LogLevel>(2913)));
  104. EXPECT_EQ("INFO57", logLevelToString(LogLevel::INFO7 - 50));
  105. EXPECT_EQ("LogLevel(123)", logLevelToString(static_cast<LogLevel>(123)));
  106. }
  107. TEST(LogLevel, toStringAndBack) {
  108. // Check that stringToLogLevel(logLevelToString()) is the identity function
  109. auto checkLevel = [](LogLevel level) {
  110. auto stringForm = logLevelToString(level);
  111. auto outputLevel = stringToLogLevel(stringForm);
  112. EXPECT_EQ(level, outputLevel)
  113. << "error converting " << level << " (" << static_cast<uint32_t>(level)
  114. << ") to string and back. String is " << stringForm;
  115. };
  116. // Check all of the named levels
  117. checkLevel(LogLevel::UNINITIALIZED);
  118. checkLevel(LogLevel::NONE);
  119. checkLevel(LogLevel::DBG);
  120. checkLevel(LogLevel::DBG0);
  121. checkLevel(LogLevel::DBG1);
  122. checkLevel(LogLevel::DBG2);
  123. checkLevel(LogLevel::DBG3);
  124. checkLevel(LogLevel::DBG4);
  125. checkLevel(LogLevel::DBG5);
  126. checkLevel(LogLevel::DBG6);
  127. checkLevel(LogLevel::DBG7);
  128. checkLevel(LogLevel::DBG8);
  129. checkLevel(LogLevel::DBG9);
  130. checkLevel(LogLevel::INFO);
  131. checkLevel(LogLevel::WARN);
  132. checkLevel(LogLevel::WARNING);
  133. checkLevel(LogLevel::ERR);
  134. checkLevel(LogLevel::CRITICAL);
  135. checkLevel(LogLevel::DFATAL);
  136. checkLevel(LogLevel::FATAL);
  137. // Try with some random integer values
  138. for (uint32_t numIters = 0; numIters < 10000; ++numIters) {
  139. auto levelValue =
  140. folly::Random::rand32(static_cast<uint32_t>(LogLevel::MAX_LEVEL));
  141. checkLevel(static_cast<LogLevel>(levelValue));
  142. }
  143. }