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 { "CURRENT", 0, kCurrentFile },
31 { "LOCK", 0, kDBLockFile },
32 { "MANIFEST-2", 2, kDescriptorFile },
33 { "MANIFEST-7", 7, kDescriptorFile },
34 { "LOG", 0, kInfoLogFile },
35 { "LOG.old", 0, kInfoLogFile },
36 { "18446744073709551615.log", 18446744073709551615ull, kLogFile },
38 for (int i = 0; i < sizeof(cases) / sizeof(cases[0]); i++) {
39 std::string f = cases[i].fname;
40 ASSERT_TRUE(ParseFileName(f, &number, &type)) << f;
41 ASSERT_EQ(cases[i].type, type) << f;
42 ASSERT_EQ(cases[i].number, number) << f;
46 static const char* errors[] = {
64 "18446744073709551616.log",
65 "184467440737095516150.log",
70 for (int i = 0; i < sizeof(errors) / sizeof(errors[0]); i++) {
71 std::string f = errors[i];
72 ASSERT_TRUE(!ParseFileName(f, &number, &type)) << f;
76 TEST(FileNameTest, Construction) {
81 fname = CurrentFileName("foo");
82 ASSERT_EQ("foo/", std::string(fname.data(), 4));
83 ASSERT_TRUE(ParseFileName(fname.c_str() + 4, &number, &type));
85 ASSERT_EQ(kCurrentFile, type);
87 fname = LockFileName("foo");
88 ASSERT_EQ("foo/", std::string(fname.data(), 4));
89 ASSERT_TRUE(ParseFileName(fname.c_str() + 4, &number, &type));
91 ASSERT_EQ(kDBLockFile, type);
93 fname = LogFileName("foo", 192);
94 ASSERT_EQ("foo/", std::string(fname.data(), 4));
95 ASSERT_TRUE(ParseFileName(fname.c_str() + 4, &number, &type));
96 ASSERT_EQ(192, number);
97 ASSERT_EQ(kLogFile, type);
99 fname = TableFileName("bar", 200);
100 ASSERT_EQ("bar/", std::string(fname.data(), 4));
101 ASSERT_TRUE(ParseFileName(fname.c_str() + 4, &number, &type));
102 ASSERT_EQ(200, number);
103 ASSERT_EQ(kTableFile, type);
105 fname = DescriptorFileName("bar", 100);
106 ASSERT_EQ("bar/", std::string(fname.data(), 4));
107 ASSERT_TRUE(ParseFileName(fname.c_str() + 4, &number, &type));
108 ASSERT_EQ(100, number);
109 ASSERT_EQ(kDescriptorFile, type);
111 fname = TempFileName("tmp", 999);
112 ASSERT_EQ("tmp/", std::string(fname.data(), 4));
113 ASSERT_TRUE(ParseFileName(fname.c_str() + 4, &number, &type));
114 ASSERT_EQ(999, number);
115 ASSERT_EQ(kTempFile, type);
118 } // namespace leveldb
120 int main(int argc, char** argv) {
121 return leveldb::test::RunAllTests();