xref: /aosp_15_r20/external/leveldb/db/filename_test.cc (revision 9507f98c5f32dee4b5f9e4a38cd499f3ff5c4490)
1*9507f98cSAndroid Build Coastguard Worker // Copyright (c) 2011 The LevelDB Authors. All rights reserved.
2*9507f98cSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*9507f98cSAndroid Build Coastguard Worker // found in the LICENSE file. See the AUTHORS file for names of contributors.
4*9507f98cSAndroid Build Coastguard Worker 
5*9507f98cSAndroid Build Coastguard Worker #include "db/filename.h"
6*9507f98cSAndroid Build Coastguard Worker 
7*9507f98cSAndroid Build Coastguard Worker #include "gtest/gtest.h"
8*9507f98cSAndroid Build Coastguard Worker #include "db/dbformat.h"
9*9507f98cSAndroid Build Coastguard Worker #include "port/port.h"
10*9507f98cSAndroid Build Coastguard Worker #include "util/logging.h"
11*9507f98cSAndroid Build Coastguard Worker 
12*9507f98cSAndroid Build Coastguard Worker namespace leveldb {
13*9507f98cSAndroid Build Coastguard Worker 
TEST(FileNameTest,Parse)14*9507f98cSAndroid Build Coastguard Worker TEST(FileNameTest, Parse) {
15*9507f98cSAndroid Build Coastguard Worker   Slice db;
16*9507f98cSAndroid Build Coastguard Worker   FileType type;
17*9507f98cSAndroid Build Coastguard Worker   uint64_t number;
18*9507f98cSAndroid Build Coastguard Worker 
19*9507f98cSAndroid Build Coastguard Worker   // Successful parses
20*9507f98cSAndroid Build Coastguard Worker   static struct {
21*9507f98cSAndroid Build Coastguard Worker     const char* fname;
22*9507f98cSAndroid Build Coastguard Worker     uint64_t number;
23*9507f98cSAndroid Build Coastguard Worker     FileType type;
24*9507f98cSAndroid Build Coastguard Worker   } cases[] = {
25*9507f98cSAndroid Build Coastguard Worker       {"100.log", 100, kLogFile},
26*9507f98cSAndroid Build Coastguard Worker       {"0.log", 0, kLogFile},
27*9507f98cSAndroid Build Coastguard Worker       {"0.sst", 0, kTableFile},
28*9507f98cSAndroid Build Coastguard Worker       {"0.ldb", 0, kTableFile},
29*9507f98cSAndroid Build Coastguard Worker       {"CURRENT", 0, kCurrentFile},
30*9507f98cSAndroid Build Coastguard Worker       {"LOCK", 0, kDBLockFile},
31*9507f98cSAndroid Build Coastguard Worker       {"MANIFEST-2", 2, kDescriptorFile},
32*9507f98cSAndroid Build Coastguard Worker       {"MANIFEST-7", 7, kDescriptorFile},
33*9507f98cSAndroid Build Coastguard Worker       {"LOG", 0, kInfoLogFile},
34*9507f98cSAndroid Build Coastguard Worker       {"LOG.old", 0, kInfoLogFile},
35*9507f98cSAndroid Build Coastguard Worker       {"18446744073709551615.log", 18446744073709551615ull, kLogFile},
36*9507f98cSAndroid Build Coastguard Worker   };
37*9507f98cSAndroid Build Coastguard Worker   for (int i = 0; i < sizeof(cases) / sizeof(cases[0]); i++) {
38*9507f98cSAndroid Build Coastguard Worker     std::string f = cases[i].fname;
39*9507f98cSAndroid Build Coastguard Worker     ASSERT_TRUE(ParseFileName(f, &number, &type)) << f;
40*9507f98cSAndroid Build Coastguard Worker     ASSERT_EQ(cases[i].type, type) << f;
41*9507f98cSAndroid Build Coastguard Worker     ASSERT_EQ(cases[i].number, number) << f;
42*9507f98cSAndroid Build Coastguard Worker   }
43*9507f98cSAndroid Build Coastguard Worker 
44*9507f98cSAndroid Build Coastguard Worker   // Errors
45*9507f98cSAndroid Build Coastguard Worker   static const char* errors[] = {"",
46*9507f98cSAndroid Build Coastguard Worker                                  "foo",
47*9507f98cSAndroid Build Coastguard Worker                                  "foo-dx-100.log",
48*9507f98cSAndroid Build Coastguard Worker                                  ".log",
49*9507f98cSAndroid Build Coastguard Worker                                  "",
50*9507f98cSAndroid Build Coastguard Worker                                  "manifest",
51*9507f98cSAndroid Build Coastguard Worker                                  "CURREN",
52*9507f98cSAndroid Build Coastguard Worker                                  "CURRENTX",
53*9507f98cSAndroid Build Coastguard Worker                                  "MANIFES",
54*9507f98cSAndroid Build Coastguard Worker                                  "MANIFEST",
55*9507f98cSAndroid Build Coastguard Worker                                  "MANIFEST-",
56*9507f98cSAndroid Build Coastguard Worker                                  "XMANIFEST-3",
57*9507f98cSAndroid Build Coastguard Worker                                  "MANIFEST-3x",
58*9507f98cSAndroid Build Coastguard Worker                                  "LOC",
59*9507f98cSAndroid Build Coastguard Worker                                  "LOCKx",
60*9507f98cSAndroid Build Coastguard Worker                                  "LO",
61*9507f98cSAndroid Build Coastguard Worker                                  "LOGx",
62*9507f98cSAndroid Build Coastguard Worker                                  "18446744073709551616.log",
63*9507f98cSAndroid Build Coastguard Worker                                  "184467440737095516150.log",
64*9507f98cSAndroid Build Coastguard Worker                                  "100",
65*9507f98cSAndroid Build Coastguard Worker                                  "100.",
66*9507f98cSAndroid Build Coastguard Worker                                  "100.lop"};
67*9507f98cSAndroid Build Coastguard Worker   for (int i = 0; i < sizeof(errors) / sizeof(errors[0]); i++) {
68*9507f98cSAndroid Build Coastguard Worker     std::string f = errors[i];
69*9507f98cSAndroid Build Coastguard Worker     ASSERT_TRUE(!ParseFileName(f, &number, &type)) << f;
70*9507f98cSAndroid Build Coastguard Worker   }
71*9507f98cSAndroid Build Coastguard Worker }
72*9507f98cSAndroid Build Coastguard Worker 
TEST(FileNameTest,Construction)73*9507f98cSAndroid Build Coastguard Worker TEST(FileNameTest, Construction) {
74*9507f98cSAndroid Build Coastguard Worker   uint64_t number;
75*9507f98cSAndroid Build Coastguard Worker   FileType type;
76*9507f98cSAndroid Build Coastguard Worker   std::string fname;
77*9507f98cSAndroid Build Coastguard Worker 
78*9507f98cSAndroid Build Coastguard Worker   fname = CurrentFileName("foo");
79*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ("foo/", std::string(fname.data(), 4));
80*9507f98cSAndroid Build Coastguard Worker   ASSERT_TRUE(ParseFileName(fname.c_str() + 4, &number, &type));
81*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ(0, number);
82*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ(kCurrentFile, type);
83*9507f98cSAndroid Build Coastguard Worker 
84*9507f98cSAndroid Build Coastguard Worker   fname = LockFileName("foo");
85*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ("foo/", std::string(fname.data(), 4));
86*9507f98cSAndroid Build Coastguard Worker   ASSERT_TRUE(ParseFileName(fname.c_str() + 4, &number, &type));
87*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ(0, number);
88*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ(kDBLockFile, type);
89*9507f98cSAndroid Build Coastguard Worker 
90*9507f98cSAndroid Build Coastguard Worker   fname = LogFileName("foo", 192);
91*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ("foo/", std::string(fname.data(), 4));
92*9507f98cSAndroid Build Coastguard Worker   ASSERT_TRUE(ParseFileName(fname.c_str() + 4, &number, &type));
93*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ(192, number);
94*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ(kLogFile, type);
95*9507f98cSAndroid Build Coastguard Worker 
96*9507f98cSAndroid Build Coastguard Worker   fname = TableFileName("bar", 200);
97*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ("bar/", std::string(fname.data(), 4));
98*9507f98cSAndroid Build Coastguard Worker   ASSERT_TRUE(ParseFileName(fname.c_str() + 4, &number, &type));
99*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ(200, number);
100*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ(kTableFile, type);
101*9507f98cSAndroid Build Coastguard Worker 
102*9507f98cSAndroid Build Coastguard Worker   fname = DescriptorFileName("bar", 100);
103*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ("bar/", std::string(fname.data(), 4));
104*9507f98cSAndroid Build Coastguard Worker   ASSERT_TRUE(ParseFileName(fname.c_str() + 4, &number, &type));
105*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ(100, number);
106*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ(kDescriptorFile, type);
107*9507f98cSAndroid Build Coastguard Worker 
108*9507f98cSAndroid Build Coastguard Worker   fname = TempFileName("tmp", 999);
109*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ("tmp/", std::string(fname.data(), 4));
110*9507f98cSAndroid Build Coastguard Worker   ASSERT_TRUE(ParseFileName(fname.c_str() + 4, &number, &type));
111*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ(999, number);
112*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ(kTempFile, type);
113*9507f98cSAndroid Build Coastguard Worker 
114*9507f98cSAndroid Build Coastguard Worker   fname = InfoLogFileName("foo");
115*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ("foo/", std::string(fname.data(), 4));
116*9507f98cSAndroid Build Coastguard Worker   ASSERT_TRUE(ParseFileName(fname.c_str() + 4, &number, &type));
117*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ(0, number);
118*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ(kInfoLogFile, type);
119*9507f98cSAndroid Build Coastguard Worker 
120*9507f98cSAndroid Build Coastguard Worker   fname = OldInfoLogFileName("foo");
121*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ("foo/", std::string(fname.data(), 4));
122*9507f98cSAndroid Build Coastguard Worker   ASSERT_TRUE(ParseFileName(fname.c_str() + 4, &number, &type));
123*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ(0, number);
124*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ(kInfoLogFile, type);
125*9507f98cSAndroid Build Coastguard Worker }
126*9507f98cSAndroid Build Coastguard Worker 
127*9507f98cSAndroid Build Coastguard Worker }  // namespace leveldb
128*9507f98cSAndroid Build Coastguard Worker 
129