| | |
| | | #include <stdio.h> |
| | | #include "../src/shm.h" |
| | | #include "../src/bh_util.h" |
| | | #include <string> |
| | | #include <vector> |
| | | #include <thread> |
| | |
| | | #include <boost/date_time/posix_time/posix_time.hpp> |
| | | #include <boost/date_time/microsec_time_clock.hpp> |
| | | #include <boost/uuid/uuid_generators.hpp> |
| | | #include "shm_queue.h" |
| | | #include "bh_util.h" |
| | | |
| | | using namespace std::chrono_literals; |
| | | using namespace bhome_shm; |
| | |
| | | ~ShmRemover() { SharedMemory::Remove(name_); } |
| | | }; |
| | | |
| | | BOOST_AUTO_TEST_CASE(ShmBasic) |
| | | BOOST_AUTO_TEST_CASE(ShmBasicTest) |
| | | { |
| | | const std::string shm_name("basic"); |
| | | ShmRemover auto_remove(shm_name); |
| | |
| | | BOOST_CHECK_EQUAL(init_avail, Avail()); |
| | | } |
| | | |
| | | BOOST_AUTO_TEST_CASE(TimedWait) |
| | | BOOST_AUTO_TEST_CASE(TimedWaitTest) |
| | | { |
| | | const std::string shm_name("shm_wait"); |
| | | ShmRemover auto_remove(shm_name); |
| | |
| | | } |
| | | } |
| | | |
| | | BOOST_AUTO_TEST_CASE(MsgHeader) |
| | | BOOST_AUTO_TEST_CASE(RefCountTest) |
| | | { |
| | | const std::string shm_name("ShmRefCount"); |
| | | ShmRemover auto_remove(shm_name); |
| | | SharedMemory shm(shm_name, 1024*1024); |
| | | |
| | | Msg m0(shm.allocate(1000), shm.New<RefCount>()); |
| | | BOOST_CHECK_EQUAL(m0.AddRef(), 1); |
| | | Msg m1 = m0; |
| | | 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); |
| | | { |
| | | Msg::CountGuard guard(m0); |
| | | BOOST_CHECK_EQUAL(m1.AddRef(), 2); |
| | | { |
| | | Msg::CountGuard guard(m0); |
| | | BOOST_CHECK_EQUAL(m1.RemoveRef(), 2); |
| | | } |
| | | } |
| | | BOOST_CHECK_EQUAL(m1.Count(), 0); |
| | | } |
| | | |
| | | BOOST_AUTO_TEST_CASE(MsgHeaderTest) |
| | | { |
| | | MsgMetaV1 head; |
| | | BOOST_CHECK_EQUAL(head.self_size_, sizeof(head)); |
| | |
| | | BOOST_CHECK_EQUAL(memcmp(&head, &result, sizeof(head)), 0); |
| | | |
| | | } |
| | | BOOST_AUTO_TEST_CASE(RequestReply) |
| | | BOOST_AUTO_TEST_CASE(RequestReplyTest) |
| | | { |
| | | const std::string shm_name("ShmReqRep"); |
| | | ShmRemover auto_remove(shm_name); |
| | |
| | | auto cur = Now(); |
| | | if (last_time.exchange(cur) != cur) { |
| | | std::cout << "time: " << Now(); |
| | | printf(", total msg:%10ld, speed:%8ld, used mem:%8ld\n", count.load(), count - last_count.exchange(count), init_avail - Avail()); |
| | | printf(", total msg:%10ld, speed:%8ld/s, used mem:%8ld\n", count.load(), count - last_count.exchange(count), init_avail - Avail()); |
| | | last_time = cur; |
| | | } |
| | | |