Skip to content

Commit c10fb1b

Browse files
Add test for DiskScheduler. (#607)
1 parent 29cfa2a commit c10fb1b

File tree

2 files changed

+54
-2
lines changed

2 files changed

+54
-2
lines changed

src/include/buffer/buffer_pool_manager.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ class BufferPoolManager {
7272
auto NewPage(page_id_t *page_id) -> Page *;
7373

7474
/**
75-
* TODO(P1): Add implementation
75+
* TODO(P2): Add implementation
7676
*
7777
* @brief PageGuard wrapper for NewPage
7878
*
@@ -105,7 +105,7 @@ class BufferPoolManager {
105105
auto FetchPage(page_id_t page_id, AccessType access_type = AccessType::Unknown) -> Page *;
106106

107107
/**
108-
* TODO(P1): Add implementation
108+
* TODO(P2): Add implementation
109109
*
110110
* @brief PageGuard wrappers for FetchPage
111111
*

test/storage/disk_scheduler_test.cpp

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
//===----------------------------------------------------------------------===//
2+
//
3+
// BusTub
4+
//
5+
// disk_manager_test.cpp
6+
//
7+
// Identification: test/storage/disk/disk_scheduler_test.cpp
8+
//
9+
// Copyright (c) 2015-2023, Carnegie Mellon University Database Group
10+
//
11+
//===----------------------------------------------------------------------===//
12+
13+
#include <cstring>
14+
#include <future> // NOLINT
15+
#include <memory>
16+
17+
#include "common/exception.h"
18+
#include "gtest/gtest.h"
19+
#include "storage/disk/disk_manager_memory.h"
20+
#include "storage/disk/disk_scheduler.h"
21+
22+
namespace bustub {
23+
24+
using bustub::DiskManagerUnlimitedMemory;
25+
26+
// NOLINTNEXTLINE
27+
TEST(DiskSchedulerTest, DISABLED_ScheduleWriteReadPageTest) {
28+
char buf[BUSTUB_PAGE_SIZE] = {0};
29+
char data[BUSTUB_PAGE_SIZE] = {0};
30+
31+
auto dm = std::make_unique<DiskManagerUnlimitedMemory>();
32+
auto disk_scheduler = std::make_unique<DiskScheduler>(dm.get());
33+
34+
std::strncpy(data, "A test string.", sizeof(data));
35+
36+
std::promise<bool> promise1;
37+
auto future1 = promise1.get_future();
38+
std::promise<bool> promise2;
39+
auto future2 = promise2.get_future();
40+
41+
disk_scheduler->Schedule({/*is_write=*/true, reinterpret_cast<char *>(&data), /*page_id=*/0, promise1});
42+
disk_scheduler->Schedule({/*is_write=*/false, reinterpret_cast<char *>(&buf), /*page_id=*/0, promise2});
43+
44+
ASSERT_TRUE(future1.get());
45+
ASSERT_TRUE(future2.get());
46+
ASSERT_EQ(std::memcmp(buf, data, sizeof(buf)), 0);
47+
48+
disk_scheduler = nullptr; // Call the DiskScheduler destructor to finish all scheduled jobs.
49+
dm->ShutDown();
50+
}
51+
52+
} // namespace bustub

0 commit comments

Comments
 (0)