1 // Copyright (c) 2011 The LevelDB 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. See the AUTHORS file for names of contributors.
5 #include "db/filename.h"
7 #include "db/dbformat.h"
9 #include "util/logging.h"
10 #include "util/testharness.h"
14 class FileNameTest { };
16 TEST(FileNameTest, Parse) {
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 },
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;
47 static const char* errors[] = {
65 "18446744073709551616.log",
66 "184467440737095516150.log",
71 for (int i = 0; i < sizeof(errors) / sizeof(errors[0]); i++) {
72 std::string f = errors[i];
73 ASSERT_TRUE(!ParseFileName(f, &number, &type)) << f;
77 TEST(FileNameTest, Construction) {
82 fname = CurrentFileName("foo");
83 ASSERT_EQ("foo/", std::string(fname.data(), 4));
84 ASSERT_TRUE(ParseFileName(fname.c_str() + 4, &number, &type));
86 ASSERT_EQ(kCurrentFile, type);
88 fname = LockFileName("foo");
89 ASSERT_EQ("foo/", std::string(fname.data(), 4));
90 ASSERT_TRUE(ParseFileName(fname.c_str() + 4, &number, &type));
92 ASSERT_EQ(kDBLockFile, type);
94 fname = LogFileName("foo", 192);
95 ASSERT_EQ("foo/", std::string(fname.data(), 4));
96 ASSERT_TRUE(ParseFileName(fname.c_str() + 4, &number, &type));
97 ASSERT_EQ(192, number);
98 ASSERT_EQ(kLogFile, type);
100 fname = TableFileName("bar", 200);
101 ASSERT_EQ("bar/", std::string(fname.data(), 4));
102 ASSERT_TRUE(ParseFileName(fname.c_str() + 4, &number, &type));
103 ASSERT_EQ(200, number);
104 ASSERT_EQ(kTableFile, type);
106 fname = DescriptorFileName("bar", 100);
107 ASSERT_EQ("bar/", std::string(fname.data(), 4));
108 ASSERT_TRUE(ParseFileName(fname.c_str() + 4, &number, &type));
109 ASSERT_EQ(100, number);
110 ASSERT_EQ(kDescriptorFile, type);
112 fname = TempFileName("tmp", 999);
113 ASSERT_EQ("tmp/", std::string(fname.data(), 4));
114 ASSERT_TRUE(ParseFileName(fname.c_str() + 4, &number, &type));
115 ASSERT_EQ(999, number);
116 ASSERT_EQ(kTempFile, type);
119 } // namespace leveldb
121 int main(int argc, char** argv) {
122 return leveldb::test::RunAllTests();