added tests
This commit is contained in:
@@ -576,4 +576,162 @@ TEST_F(ring_buffer_open_file_test,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(ring_buffer_open_file_test, forward_center_noop_when_within_half) {
|
||||
auto source_path = test::generate_test_file_name("ring_buffer_open_file");
|
||||
EXPECT_CALL(provider, is_read_only()).WillRepeatedly(Return(false));
|
||||
|
||||
filesystem_item fsi;
|
||||
fsi.directory = false;
|
||||
fsi.api_path = "/test.txt";
|
||||
fsi.size = test_chunk_size * 16U;
|
||||
fsi.source_path = source_path;
|
||||
|
||||
{
|
||||
ring_buffer_open_file file(ring_buffer_dir, test_chunk_size, 30U, fsi,
|
||||
provider, 8U);
|
||||
|
||||
file.set(0U, 3U);
|
||||
file.forward(1U);
|
||||
|
||||
EXPECT_EQ(std::size_t(4U), file.get_current_chunk());
|
||||
EXPECT_EQ(std::size_t(0U), file.get_first_chunk());
|
||||
EXPECT_EQ(std::size_t(7U), file.get_last_chunk());
|
||||
|
||||
for (std::size_t chunk = 0U; chunk <= 7U; ++chunk) {
|
||||
EXPECT_TRUE(file.get_read_state(chunk)) << "chunk " << chunk;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(ring_buffer_open_file_test, forward_center_caps_at_file_end) {
|
||||
auto source_path = test::generate_test_file_name("ring_buffer_open_file");
|
||||
EXPECT_CALL(provider, is_read_only()).WillRepeatedly(Return(false));
|
||||
|
||||
filesystem_item fsi;
|
||||
fsi.directory = false;
|
||||
fsi.api_path = "/test.txt";
|
||||
fsi.size = test_chunk_size * 16U;
|
||||
fsi.source_path = source_path;
|
||||
|
||||
{
|
||||
ring_buffer_open_file file(ring_buffer_dir, test_chunk_size, 30U, fsi,
|
||||
provider, 8U);
|
||||
|
||||
file.set(6U, 9U);
|
||||
file.forward(100U);
|
||||
|
||||
EXPECT_EQ(std::size_t(15U), file.get_current_chunk());
|
||||
EXPECT_EQ(std::size_t(8U), file.get_first_chunk());
|
||||
EXPECT_EQ(std::size_t(15U), file.get_last_chunk());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(ring_buffer_open_file_test,
|
||||
forward_delta_ge_ring_triggers_full_invalidation_path) {
|
||||
auto source_path = test::generate_test_file_name("ring_buffer_open_file");
|
||||
EXPECT_CALL(provider, is_read_only()).WillRepeatedly(Return(false));
|
||||
|
||||
filesystem_item fsi;
|
||||
fsi.directory = false;
|
||||
fsi.api_path = "/test.txt";
|
||||
fsi.size = test_chunk_size * 16U;
|
||||
fsi.source_path = source_path;
|
||||
|
||||
{
|
||||
ring_buffer_open_file file(ring_buffer_dir, test_chunk_size, 30U, fsi,
|
||||
provider, 8U);
|
||||
|
||||
file.set(0U, 0U);
|
||||
file.forward(100U);
|
||||
|
||||
EXPECT_EQ(std::size_t(15U), file.get_current_chunk());
|
||||
EXPECT_EQ(std::size_t(8U), file.get_first_chunk());
|
||||
EXPECT_EQ(std::size_t(15U), file.get_last_chunk());
|
||||
|
||||
for (std::size_t chunk = 8U; chunk <= 15U; ++chunk) {
|
||||
EXPECT_FALSE(file.get_read_state(chunk)) << "chunk " << chunk;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(ring_buffer_open_file_test,
|
||||
forward_center_marks_only_tail_entrants_unread) {
|
||||
auto source_path = test::generate_test_file_name("ring_buffer_open_file");
|
||||
EXPECT_CALL(provider, is_read_only()).WillRepeatedly(Return(false));
|
||||
|
||||
filesystem_item fsi;
|
||||
fsi.directory = false;
|
||||
fsi.api_path = "/test.txt";
|
||||
fsi.size = test_chunk_size * 16U;
|
||||
fsi.source_path = source_path;
|
||||
|
||||
{
|
||||
ring_buffer_open_file file(ring_buffer_dir, test_chunk_size, 30U, fsi,
|
||||
provider, 8U);
|
||||
|
||||
file.set(0U, 3U);
|
||||
file.forward(2U);
|
||||
|
||||
EXPECT_EQ(std::size_t(5U), file.get_current_chunk());
|
||||
EXPECT_EQ(std::size_t(1U), file.get_first_chunk());
|
||||
EXPECT_EQ(std::size_t(8U), file.get_last_chunk());
|
||||
|
||||
for (std::size_t chunk = 1U; chunk <= 7U; ++chunk) {
|
||||
EXPECT_TRUE(file.get_read_state(chunk)) << "chunk " << chunk;
|
||||
}
|
||||
EXPECT_FALSE(file.get_read_state(8U));
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(ring_buffer_open_file_test, reverse_does_not_trigger_forward_centering) {
|
||||
auto source_path = test::generate_test_file_name("ring_buffer_open_file");
|
||||
EXPECT_CALL(provider, is_read_only()).WillRepeatedly(Return(false));
|
||||
|
||||
filesystem_item fsi;
|
||||
fsi.directory = false;
|
||||
fsi.api_path = "/test.txt";
|
||||
fsi.size = test_chunk_size * 16U;
|
||||
fsi.source_path = source_path;
|
||||
|
||||
{
|
||||
ring_buffer_open_file file(ring_buffer_dir, test_chunk_size, 30U, fsi,
|
||||
provider, 8U);
|
||||
|
||||
file.set(8U, 12U);
|
||||
file.reverse(1U);
|
||||
|
||||
EXPECT_EQ(std::size_t(11U), file.get_current_chunk());
|
||||
EXPECT_EQ(std::size_t(8U), file.get_first_chunk());
|
||||
EXPECT_EQ(std::size_t(15U), file.get_last_chunk());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(ring_buffer_open_file_test,
|
||||
forward_minimal_slide_then_center_multi_step) {
|
||||
auto source_path = test::generate_test_file_name("ring_buffer_open_file");
|
||||
EXPECT_CALL(provider, is_read_only()).WillRepeatedly(Return(false));
|
||||
|
||||
filesystem_item fsi;
|
||||
fsi.directory = false;
|
||||
fsi.api_path = "/test.txt";
|
||||
fsi.size = test_chunk_size * 32U;
|
||||
fsi.source_path = source_path;
|
||||
|
||||
{
|
||||
ring_buffer_open_file file(ring_buffer_dir, test_chunk_size, 30U, fsi,
|
||||
provider, 8U);
|
||||
|
||||
file.set(0U, 3U);
|
||||
file.forward(7U);
|
||||
|
||||
EXPECT_EQ(std::size_t(10U), file.get_current_chunk());
|
||||
EXPECT_EQ(std::size_t(6U), file.get_first_chunk());
|
||||
EXPECT_EQ(std::size_t(13U), file.get_last_chunk());
|
||||
|
||||
EXPECT_FALSE(file.get_read_state(11U));
|
||||
EXPECT_FALSE(file.get_read_state(12U));
|
||||
EXPECT_FALSE(file.get_read_state(13U));
|
||||
}
|
||||
}
|
||||
} // namespace repertory
|
||||
|
Reference in New Issue
Block a user