| | |
| | | #include <boost/date_time/posix_time/posix_time.hpp> |
| | | #include <boost/date_time/microsec_time_clock.hpp> |
| | | #include <boost/uuid/uuid_generators.hpp> |
| | | #include <boost/uuid/uuid_io.hpp> |
| | | #include "shm_queue.h" |
| | | #include "bh_util.h" |
| | | |
| | |
| | | BOOST_CHECK(m1.IsCounted()); |
| | | BOOST_CHECK_EQUAL(m1.AddRef(), 2); |
| | | BOOST_CHECK_EQUAL(m0.AddRef(), 3); |
| | | BOOST_CHECK_EQUAL(m0.RemoveRef(), 2); |
| | | BOOST_CHECK_EQUAL(m0.RemoveRef(), 1); |
| | | BOOST_CHECK_EQUAL(m1.RemoveRef(), 0); |
| | | BOOST_CHECK_EQUAL(m1.Count(), 0); |
| | | BOOST_CHECK_EQUAL(m0.Release(shm), 2); |
| | | BOOST_CHECK_EQUAL(m0.Release(shm), 1); |
| | | BOOST_CHECK_EQUAL(m1.Release(shm), 0); |
| | | BOOST_CHECK_THROW(m1.Count(), std::exception); |
| | | } |
| | | |
| | | BOOST_AUTO_TEST_CASE(MsgHeaderTest) |
| | |
| | | auto Client = [&](int tid, int nmsg){ |
| | | for (int i = 0; i < nmsg; ++i) { |
| | | auto Send = [&]() { return cli.Send(srv.Id(), msg_content.data(), msg_content.size(), 1000); }; |
| | | auto SendRefCounted = [&]() { return cli.Send(srv.Id(), request, 1000); }; |
| | | // auto SendRefCounted = [&]() { return cli.Send(srv.Id(), request, 1000); }; |
| | | |
| | | if (!Send()) { |
| | | printf("********** client send error.\n"); |
| | |
| | | if (srv.Recv(src_id, data, size, 100)) { |
| | | DEFER1(free(data)); |
| | | auto Send = [&](){ return srv.Send(src_id, data, size, 100); }; |
| | | auto SendRefCounted = [&](){ return srv.Send(src_id, reply, 100); }; |
| | | // auto SendRefCounted = [&](){ return srv.Send(src_id, reply, 100); }; |
| | | |
| | | if (SendRefCounted()) { |
| | | if (Send()) { |
| | | if (size != msg_content.size()) { |
| | | BOOST_TEST(false, "server msg size error"); |
| | | } |
| | |
| | | ThreadManager clients, servers; |
| | | for (int i = 0; i < qlen; ++i) { servers.Launch(Server); } |
| | | int ncli = 100*1; |
| | | uint64_t nmsg = 100*100; |
| | | uint64_t nmsg = 100*100*10; |
| | | printf("client threads: %d, msgs : %ld, total msg: %ld\n", ncli, nmsg, ncli * nmsg); |
| | | for (int i = 0; i < ncli; ++i) { clients.Launch(Client, i, nmsg); } |
| | | clients.WaitAll(); |
| | |
| | | BOOST_CHECK_EQUAL(request.Count(), 1); |
| | | BOOST_CHECK(reply.IsCounted()); |
| | | BOOST_CHECK_EQUAL(reply.Count(), 1); |
| | | if (request.RemoveRef() == 0) { |
| | | BOOST_CHECK_EQUAL(reply.Count(), 0); |
| | | request.FreeFrom(shm); |
| | | } |
| | | request.Release(shm); |
| | | BOOST_CHECK_THROW(request.Count(), std::exception); |
| | | BOOST_CHECK_THROW(reply.Count(), std::exception); |
| | | // BOOST_CHECK_THROW(reply.Count(), int); |
| | | } |
| | | |
| | | inline int MyMin(int a, int b) { |
| | | printf("MyMin\n"); |
| | | return a < b ? a : b; |
| | | } |
| | | int test_main(int argc, char *argv[]) |
| | | { |
| | | printf("test main\n"); |
| | | int a = 0; |
| | | int b = 0; |
| | | BOOST_CHECK_EQUAL(a, b); |
| | | int n = MyMin(4,6); |
| | | for (int i = 0; i < n; ++i) { |
| | | printf("i = %d\n", i); |
| | | } |
| | | |
| | | return 0; |
| | | } |
| | | |