void run() final {
        osmium::thread::set_thread_name("_osmium_mock_in");

        if (m_fail_in == "header") {
            throw std::runtime_error("error in header");
        }

        set_header_value(osmium::io::Header{});

        send_to_output_queue(create_testdata());

        if (m_fail_in == "read") {
            throw std::runtime_error("error in read");
        }
    }
    void run() final {
        osmium::thread::set_thread_name("_osmium_mock_in");

        if (m_fail_in == "header") {
            throw std::runtime_error("error in header");
        }

        set_header_value(osmium::io::Header{});

        osmium::memory::Buffer buffer(1000);
        osmium::builder::add_node(buffer, osmium::builder::attr::_user("foo"));
        send_to_output_queue(std::move(buffer));

        if (m_fail_in == "read") {
            throw std::runtime_error("error in read");
        }
    }
 void write_buffer(osmium::memory::Buffer&&) final {
     if (m_fail_in == "write") {
         throw std::logic_error{"write"};
     }
     send_to_output_queue(std::string{"write"});
 }
 void write_end() final {
     if (m_fail_in == "write_end") {
         throw std::logic_error{"write_end"};
     }
     send_to_output_queue(std::string{"end"});
 }
 void write_header(const osmium::io::Header&) final {
     if (m_fail_in == "header") {
         throw std::logic_error{"header"};
     }
     send_to_output_queue(std::string{"header"});
 }