2018-09-23 18:14:25 +02:00
|
|
|
#include <catch.hpp>
|
2018-04-03 12:02:08 +02:00
|
|
|
#include <zmq.hpp>
|
2019-03-30 12:04:24 +01:00
|
|
|
#ifdef ZMQ_CPP11
|
|
|
|
#include <future>
|
|
|
|
#endif
|
2018-04-03 12:02:08 +02:00
|
|
|
|
2018-09-23 18:14:25 +02:00
|
|
|
TEST_CASE("socket create destroy", "[socket]")
|
2018-04-03 12:02:08 +02:00
|
|
|
{
|
|
|
|
zmq::context_t context;
|
2018-05-12 18:28:28 +02:00
|
|
|
zmq::socket_t socket(context, ZMQ_ROUTER);
|
2018-04-03 12:02:08 +02:00
|
|
|
}
|
|
|
|
|
2018-04-03 12:04:23 +02:00
|
|
|
#ifdef ZMQ_CPP11
|
2018-09-23 18:14:25 +02:00
|
|
|
TEST_CASE("socket create by enum and destroy", "[socket]")
|
2018-04-03 12:04:23 +02:00
|
|
|
{
|
|
|
|
zmq::context_t context;
|
2018-05-12 18:28:28 +02:00
|
|
|
zmq::socket_t socket(context, zmq::socket_type::router);
|
2018-04-03 12:04:23 +02:00
|
|
|
}
|
|
|
|
#endif
|
2018-08-21 13:36:01 +02:00
|
|
|
|
2018-09-23 18:14:25 +02:00
|
|
|
TEST_CASE("socket sends and receives const buffer", "[socket]")
|
2018-08-21 13:36:01 +02:00
|
|
|
{
|
|
|
|
zmq::context_t context;
|
|
|
|
zmq::socket_t sender(context, ZMQ_PAIR);
|
|
|
|
zmq::socket_t receiver(context, ZMQ_PAIR);
|
|
|
|
receiver.bind("inproc://test");
|
|
|
|
sender.connect("inproc://test");
|
2018-09-23 18:14:25 +02:00
|
|
|
CHECK(2 == sender.send("Hi", 2));
|
2018-08-21 13:36:01 +02:00
|
|
|
char buf[2];
|
2018-09-23 18:14:25 +02:00
|
|
|
CHECK(2 == receiver.recv(buf, 2));
|
|
|
|
CHECK(0 == memcmp(buf, "Hi", 2));
|
2018-08-21 13:36:01 +02:00
|
|
|
}
|
2019-03-30 12:04:24 +01:00
|
|
|
|
|
|
|
#ifdef ZMQ_CPP11
|
|
|
|
TEST_CASE("socket proxy", "[socket]")
|
|
|
|
{
|
|
|
|
zmq::context_t context;
|
|
|
|
zmq::socket_t front(context, ZMQ_ROUTER);
|
|
|
|
zmq::socket_t back(context, ZMQ_ROUTER);
|
|
|
|
zmq::socket_t capture(context, ZMQ_DEALER);
|
|
|
|
front.bind("inproc://test1");
|
|
|
|
back.bind("inproc://test2");
|
|
|
|
capture.bind("inproc://test3");
|
|
|
|
auto f = std::async(std::launch::async, [&]() {
|
|
|
|
auto s1 = std::move(front);
|
|
|
|
auto s2 = std::move(back);
|
|
|
|
auto s3 = std::move(capture);
|
|
|
|
try
|
|
|
|
{
|
|
|
|
zmq::proxy(s1, s2, &s3);
|
|
|
|
}
|
|
|
|
catch (const zmq::error_t& e)
|
|
|
|
{
|
|
|
|
return e.num() == ETERM;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
});
|
|
|
|
context.close();
|
|
|
|
CHECK(f.get());
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST_CASE("socket proxy steerable", "[socket]")
|
|
|
|
{
|
|
|
|
zmq::context_t context;
|
|
|
|
zmq::socket_t front(context, ZMQ_ROUTER);
|
|
|
|
zmq::socket_t back(context, ZMQ_ROUTER);
|
|
|
|
zmq::socket_t control(context, ZMQ_SUB);
|
|
|
|
front.bind("inproc://test1");
|
|
|
|
back.bind("inproc://test2");
|
|
|
|
control.connect("inproc://test3");
|
|
|
|
auto f = std::async(std::launch::async, [&]() {
|
|
|
|
auto s1 = std::move(front);
|
|
|
|
auto s2 = std::move(back);
|
|
|
|
auto s3 = std::move(control);
|
|
|
|
try
|
|
|
|
{
|
|
|
|
zmq::proxy_steerable(s1, s2, ZMQ_NULLPTR, &s3);
|
|
|
|
}
|
|
|
|
catch (const zmq::error_t& e)
|
|
|
|
{
|
|
|
|
return e.num() == ETERM;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
});
|
|
|
|
context.close();
|
|
|
|
CHECK(f.get());
|
|
|
|
}
|
|
|
|
#endif
|