Skip to content

Commit 1a3bf15

Browse files
committed
Fix i/o tests using mock (de)compression
Registering (de)compression methods is done with a singleton. But the tests register them multiple times with different definitions, so we need to clear the register before every test.
1 parent c1c9e74 commit 1a3bf15

File tree

3 files changed

+14
-1
lines changed

3 files changed

+14
-1
lines changed

include/osmium/io/compression.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,10 @@ namespace osmium {
207207
return m_callbacks.insert(cc).second;
208208
}
209209

210+
void clear_register() {
211+
m_callbacks.clear();
212+
}
213+
210214
template <typename... TArgs>
211215
std::unique_ptr<osmium::io::Compressor> create_compressor(const osmium::io::file_compression compression, TArgs&&... args) const {
212216
const auto callbacks = find_callbacks(compression);

test/t/io/test_reader_with_mock_decompression.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ TEST_CASE("Test Reader using MockDecompressor") {
8080

8181
std::string fail_in;
8282

83+
osmium::io::CompressionFactory::instance().clear_register();
84+
8385
osmium::io::CompressionFactory::instance().register_compression(osmium::io::file_compression::gzip,
8486
[](int /*unused*/, osmium::io::fsync /*unused*/) { return nullptr; },
8587
[&](int /*unused*/) { return new MockDecompressor(fail_in); },

test/t/io/test_writer_with_mock_compression.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
#include "utils.hpp"
44

5-
#include <osmium/io/compression.hpp>
65
#include <osmium/io/xml_input.hpp>
76
#include <osmium/io/xml_output.hpp>
87

@@ -50,6 +49,14 @@ TEST_CASE("Write with mock compressor") {
5049

5150
std::string fail_in;
5251

52+
osmium::io::CompressionFactory::instance().clear_register();
53+
54+
osmium::io::CompressionFactory::instance().register_compression(osmium::io::file_compression::none,
55+
[](const int /*fd*/, const osmium::io::fsync /*sync*/) { return nullptr; },
56+
[](const int fd) { return new osmium::io::NoDecompressor{fd}; },
57+
[](const char* buffer, std::size_t size) { return new osmium::io::NoDecompressor{buffer, size}; }
58+
);
59+
5360
osmium::io::CompressionFactory::instance().register_compression(osmium::io::file_compression::gzip,
5461
[&](int /*unused*/, osmium::io::fsync /*unused*/) { return new MockCompressor(fail_in); },
5562
[](int /*unused*/) { return nullptr; },

0 commit comments

Comments
 (0)