@@ -28,8 +28,31 @@ import config;
28
28
29
29
using namespace infinity ;
30
30
31
- class BufferParallelTest : public BaseTest {
31
+ class BufferManagerTest : public BaseTest {
32
+ private:
33
+ LocalFileSystem fs;
34
+
35
+ Vector<SharedPtr<DirEntry>> ListAllFile (const String &path) {
36
+ Vector<SharedPtr<DirEntry>> res;
37
+ std::function<void (const String &)> f = [&](const String &path) {
38
+ auto entries = fs.ListDirectory (path);
39
+ for (auto &entry : entries) {
40
+ if (entry->is_directory ()) {
41
+ f (entry->path ());
42
+ } else {
43
+ res.push_back (entry);
44
+ }
45
+ }
46
+ };
47
+ f (path);
48
+ return res;
49
+ }
50
+
32
51
protected:
52
+ Vector<SharedPtr<DirEntry>> ListAllData () { return ListAllFile (*data_dir_); }
53
+
54
+ Vector<SharedPtr<DirEntry>> ListAllTemp () { return ListAllFile (*temp_dir_); }
55
+
33
56
SharedPtr<String> data_dir_;
34
57
SharedPtr<String> temp_dir_;
35
58
@@ -40,13 +63,13 @@ class BufferParallelTest : public BaseTest {
40
63
41
64
data_dir_ = MakeShared<String>(std::string (tmp_data_path ()) + " /buffer/data" );
42
65
temp_dir_ = MakeShared<String>(std::string (tmp_data_path ()) + " /buffer/temp" );
43
- LocalFileSystem fs;
66
+ fs.DeleteDirectory (*data_dir_);
67
+ fs.DeleteDirectory (*temp_dir_);
44
68
fs.CreateDirectory (*data_dir_);
45
69
fs.CreateDirectory (*temp_dir_);
46
70
}
47
71
48
72
void TearDown () override {
49
- LocalFileSystem fs;
50
73
fs.DeleteDirectory (*data_dir_);
51
74
fs.DeleteDirectory (*temp_dir_);
52
75
@@ -61,7 +84,90 @@ class BufferParallelTest : public BaseTest {
61
84
};
62
85
};
63
86
64
- TEST_F (BufferParallelTest, test1) {
87
+ TEST_F (BufferManagerTest, cleanup_test) {
88
+
89
+ const SizeT k = 2 ;
90
+ const SizeT file_size = 100 ;
91
+ const SizeT buffer_size = k * file_size;
92
+ const SizeT file_num = 100 ;
93
+ EXPECT_GT (file_num, k);
94
+
95
+ {
96
+ BufferManager buffer_mgr (buffer_size, data_dir_, temp_dir_);
97
+ Vector<BufferObj *> buffer_objs;
98
+
99
+ for (SizeT i = 0 ; i < file_num; ++i) {
100
+ auto file_name = MakeShared<String>(fmt::format (" file_{}" , i));
101
+ auto file_worker = MakeUnique<DataFileWorker>(data_dir_, file_name, file_size);
102
+ auto *buffer_obj = buffer_mgr.AllocateBufferObject (std::move (file_worker));
103
+ buffer_objs.push_back (buffer_obj);
104
+ {
105
+ auto buffer_handle = buffer_obj->Load ();
106
+ auto *data = reinterpret_cast <char *>(buffer_handle.GetDataMut ());
107
+ for (SizeT j = 0 ; j < file_size; ++j) {
108
+ data[j] = ' a' + i % 26 ;
109
+ }
110
+ }
111
+ }
112
+
113
+ {
114
+ auto datas = ListAllData ();
115
+ auto temps = ListAllTemp ();
116
+ EXPECT_EQ (datas.size (), 0ull );
117
+ EXPECT_EQ (temps.size (), file_num - k);
118
+ }
119
+
120
+ {
121
+ SizeT write_n = 0 ;
122
+ for (auto *buffer_obj : buffer_objs) {
123
+ if (buffer_obj->Save ()) {
124
+ ++write_n;
125
+ }
126
+ }
127
+ EXPECT_EQ (write_n, k);
128
+ }
129
+ {
130
+ auto datas = ListAllData ();
131
+ auto temps = ListAllTemp ();
132
+ EXPECT_EQ (datas.size (), file_num);
133
+ EXPECT_EQ (temps.size (), 0ull );
134
+ }
135
+
136
+ for (SizeT i = 0 ; i < file_num; ++i) {
137
+ auto *buffer_obj = buffer_objs[i];
138
+ auto buffer_handle = buffer_obj->Load ();
139
+ const auto *data = reinterpret_cast <const char *>(buffer_handle.GetData ());
140
+ for (SizeT j = 0 ; j < file_size; ++j) {
141
+ EXPECT_EQ (data[j], char (' a' + i % 26 ));
142
+ }
143
+ }
144
+ {
145
+ auto datas = ListAllData ();
146
+ auto temps = ListAllTemp ();
147
+ EXPECT_EQ (datas.size (), file_num);
148
+ EXPECT_EQ (temps.size (), 0ull );
149
+ }
150
+
151
+ for (SizeT i = 0 ; i < file_num; ++i) {
152
+ auto *buffer_obj = buffer_objs[i];
153
+ auto buffer_handle = buffer_obj->Load ();
154
+ auto *data = reinterpret_cast <char *>(buffer_handle.GetDataMut ());
155
+ for (SizeT j = 0 ; j < file_size; ++j) {
156
+ data[j] = ' a' + (i + i) % 26 ;
157
+ }
158
+ }
159
+ {
160
+ auto datas = ListAllData ();
161
+ auto temps = ListAllTemp ();
162
+ EXPECT_EQ (datas.size (), file_num);
163
+ EXPECT_EQ (temps.size (), file_num - k);
164
+ }
165
+ }
166
+ }
167
+
168
+ TEST_F (BufferManagerTest, parallel_test) {
169
+ LocalFileSystem fs;
170
+
65
171
const SizeT thread_n = 4 ;
66
172
const SizeT file_n = 100 ;
67
173
const SizeT avg_file_size = 100 ;
@@ -145,4 +251,5 @@ TEST_F(BufferParallelTest, test1) {
145
251
thread.join ();
146
252
}
147
253
}
254
+ LOG_INFO (" Finished parallel test." );
148
255
}
0 commit comments