LogNameTest.cpp 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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/LogName.h>
  17. #include <folly/portability/GTest.h>
  18. using namespace folly;
  19. TEST(LogName, canonicalize) {
  20. EXPECT_EQ("", LogName::canonicalize("."));
  21. EXPECT_EQ("", LogName::canonicalize("..."));
  22. EXPECT_EQ("", LogName::canonicalize("/"));
  23. EXPECT_EQ("", LogName::canonicalize("\\"));
  24. EXPECT_EQ("", LogName::canonicalize(".//..\\\\./"));
  25. EXPECT_EQ("foo.bar", LogName::canonicalize(".foo..bar."));
  26. EXPECT_EQ("a.b.c", LogName::canonicalize("a.b.c"));
  27. EXPECT_EQ("a.b.c", LogName::canonicalize("a/b/c"));
  28. EXPECT_EQ("a.b.c", LogName::canonicalize("a/b/c/"));
  29. EXPECT_EQ("a.b.c", LogName::canonicalize("a..b.c..."));
  30. EXPECT_EQ("a.b.c", LogName::canonicalize("....a.b.c"));
  31. EXPECT_EQ("a.b.c", LogName::canonicalize("a.b.c...."));
  32. EXPECT_EQ("a.b.c", LogName::canonicalize("////a.b.c"));
  33. EXPECT_EQ("a.b.c", LogName::canonicalize("a.b.c////"));
  34. EXPECT_EQ("a.b.c", LogName::canonicalize("/a.b.//.c/"));
  35. }
  36. TEST(LogName, getParent) {
  37. EXPECT_EQ("", LogName::getParent("foo"));
  38. EXPECT_EQ("", LogName::getParent(".foo"));
  39. EXPECT_EQ("foo", LogName::getParent("foo.bar"));
  40. EXPECT_EQ("foo", LogName::getParent("foo/bar"));
  41. EXPECT_EQ("foo", LogName::getParent("foo\\bar"));
  42. EXPECT_EQ("foo", LogName::getParent("foo\\bar/"));
  43. EXPECT_EQ("foo", LogName::getParent("foo\\bar\\"));
  44. EXPECT_EQ("foo..bar", LogName::getParent("foo..bar..test"));
  45. EXPECT_EQ("..foo..bar", LogName::getParent("..foo..bar..test.."));
  46. }
  47. TEST(LogName, hash) {
  48. EXPECT_EQ(LogName::hash("foo"), LogName::hash("foo."));
  49. EXPECT_EQ(LogName::hash(".foo..bar"), LogName::hash("foo.bar..."));
  50. EXPECT_EQ(LogName::hash("a.b.c..d."), LogName::hash("..a.b.c.d."));
  51. EXPECT_EQ(LogName::hash("a.b.c.d"), LogName::hash("/a/b/c/d/"));
  52. EXPECT_EQ(LogName::hash("a.b.c.d"), LogName::hash("a\\b\\c/d/"));
  53. EXPECT_EQ(LogName::hash(""), LogName::hash("."));
  54. EXPECT_EQ(LogName::hash(""), LogName::hash("//"));
  55. EXPECT_EQ(LogName::hash(""), LogName::hash("\\"));
  56. EXPECT_EQ(LogName::hash(""), LogName::hash("...."));
  57. // Hashes for different category names should generally be different.
  58. // This is not strictly required. This test is mainly to ensure that the
  59. // code does not just hash all inputs to the same value.
  60. EXPECT_NE(LogName::hash("foo"), LogName::hash("bar"));
  61. EXPECT_NE(LogName::hash("a.b.c"), LogName::hash("abc"));
  62. }
  63. TEST(LogName, cmp) {
  64. EXPECT_EQ(0, LogName::cmp("foo", "foo."));
  65. EXPECT_EQ(0, LogName::cmp("foo", "foo/"));
  66. EXPECT_EQ(0, LogName::cmp(".foo..bar", "foo.bar..."));
  67. EXPECT_EQ(0, LogName::cmp(".foo.bar", "foo...bar..."));
  68. EXPECT_EQ(0, LogName::cmp("a.b.c..d.", "..a.b.c.d."));
  69. EXPECT_EQ(0, LogName::cmp("a.b.c..d.", "\\/a.b/c/d."));
  70. EXPECT_EQ(0, LogName::cmp("", "."));
  71. EXPECT_EQ(0, LogName::cmp("", "...."));
  72. EXPECT_GT(LogName::cmp("foo", "bar"), 0);
  73. EXPECT_LT(LogName::cmp("a.b.c", "abc"), 0);
  74. EXPECT_LT(LogName::cmp("a...b.c", "a.bc"), 0);
  75. EXPECT_GT(LogName::cmp("a...b.z", "a.b.c"), 0);
  76. EXPECT_LT(LogName::cmp(".foo.bar", "foobar..."), 0);
  77. EXPECT_GT(LogName::cmp("foobar", ".foo...bar"), 0);
  78. }