| 14 | class FileNameTest {}; |
| 15 | |
| 16 | TEST(FileNameTest, Parse) { |
| 17 | Slice db; |
| 18 | FileType type; |
| 19 | uint64_t number; |
| 20 | |
| 21 | // Successful parses |
| 22 | static struct { |
| 23 | const char* fname; |
| 24 | uint64_t number; |
| 25 | FileType type; |
| 26 | } cases[] = { |
| 27 | {"100.log", 100, kLogFile}, |
| 28 | {"0.log", 0, kLogFile}, |
| 29 | {"0.sst", 0, kTableFile}, |
| 30 | {"0.ldb", 0, kTableFile}, |
| 31 | {"CURRENT", 0, kCurrentFile}, |
| 32 | {"LOCK", 0, kDBLockFile}, |
| 33 | {"MANIFEST-2", 2, kDescriptorFile}, |
| 34 | {"MANIFEST-7", 7, kDescriptorFile}, |
| 35 | {"LOG", 0, kInfoLogFile}, |
| 36 | {"LOG.old", 0, kInfoLogFile}, |
| 37 | {"18446744073709551615.log", 18446744073709551615ull, kLogFile}, |
| 38 | }; |
| 39 | for (int i = 0; i < sizeof(cases) / sizeof(cases[0]); i++) { |
| 40 | std::string f = cases[i].fname; |
| 41 | ASSERT_TRUE(ParseFileName(f, &number, &type)) << f; |
| 42 | ASSERT_EQ(cases[i].type, type) << f; |
| 43 | ASSERT_EQ(cases[i].number, number) << f; |
| 44 | } |
| 45 | |
| 46 | // Errors |
| 47 | static const char* errors[] = {"", |
| 48 | "foo", |
| 49 | "foo-dx-100.log", |
| 50 | ".log", |
| 51 | "", |
| 52 | "manifest", |
| 53 | "CURREN", |
| 54 | "CURRENTX", |
| 55 | "MANIFES", |
| 56 | "MANIFEST", |
| 57 | "MANIFEST-", |
| 58 | "XMANIFEST-3", |
| 59 | "MANIFEST-3x", |
| 60 | "LOC", |
| 61 | "LOCKx", |
| 62 | "LO", |
| 63 | "LOGx", |
| 64 | "18446744073709551616.log", |
| 65 | "184467440737095516150.log", |
| 66 | "100", |
| 67 | "100.", |
| 68 | "100.lop"}; |
| 69 | for (int i = 0; i < sizeof(errors) / sizeof(errors[0]); i++) { |
| 70 | std::string f = errors[i]; |
| 71 | ASSERT_TRUE(!ParseFileName(f, &number, &type)) << f; |
| 72 | } |
| 73 | } |
nothing calls this directly
no test coverage detected