Boost logo

Boost :

Subject: [boost] [asio] Any interest in a boost::asio::mockup_serial_port ?
From: Damien Buhl (damien.buhl_at_[hidden])
Date: 2015-12-05 22:38:40

Dear Boost.Asio developers,

I wanted to know if there was any interest for a
mockup_serial_port_service, so that one might write cross platform
unit-tests of code based on serial_port.

I implemented this mockup this summer for a project where the best way
to unit test some modules was to act as another peer on a serial port
and needed to be doable on any platform supported by asio::serial_port.

I find it quite useful, because there

  - is no need to use separate tools like socat on linux or install
virtual COM ports applications on windows. Which ease the setup of the
test environment
  - the fake serial port doesn't pollute the system where the test is run
  - many test cases can be run in parallel, as there is no native
ressources involved.

One might use it as this :

> using namespace boost::asio;
> boost::thread simulate_writing_device([](){
> io_service ios;
> basic_serial_port<mockup_serial_port_service> port{ios, "my_fake_serial_port"};
> const std::string message = "Hello";
> for (;;) {
> boost::asio::write(port, buffer(, message.size()));
> boost::this_thread::sleep_for(boost::chrono::seconds(1));
> }
> });
> boost::thread simulate_reading_device([](){
> io_service ios;
> basic_serial_port<mockup_serial_port_service> port{ios, "my_fake_serial_port"};
> for (;;) {
> char message[5];
> boost::asio::read(port, buffer(message, 5));
> std::cout << "received : " << std::string(message, 5) << std::endl;
> }
> });

A short documentation is available here :

And the implementation is on github in a holdall library for the moment

It's a library whose goal is to shrink over the time as they get merged
in upstreams project.

Hopefully there is interest for this mockup_serial_port, and if so I'll
cleanup the code some more and make a pull-request to Boost.Asio.

Cheers from Berlin where meetingcpp already ended :'-(

Damien Buhl

Boost list run by bdawes at, gregod at, cpdaniel at, john at