added tests

This commit is contained in:
2025-09-28 16:28:57 -05:00
parent ef4afe5ca0
commit 0f6ca91faa

View File

@@ -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