From a22dd242713636fad33ee5965fe0900a425ce50d Mon Sep 17 00:00:00 2001
From: lichao <lichao@aiotlink.com>
Date: 星期四, 25 三月 2021 11:19:15 +0800
Subject: [PATCH] test msg ref count, refactor.

---
 utest/utest.cpp |   39 ++++++++++++++++++++++++++++++++-------
 1 files changed, 32 insertions(+), 7 deletions(-)

diff --git a/utest/utest.cpp b/utest/utest.cpp
index 38d924f..57b0e9c 100644
--- a/utest/utest.cpp
+++ b/utest/utest.cpp
@@ -1,6 +1,4 @@
 #include <stdio.h>
-#include "../src/shm.h"
-#include "../src/bh_util.h"
 #include <string>
 #include <vector>
 #include <thread>
@@ -12,6 +10,8 @@
 #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;
@@ -48,7 +48,7 @@
     ~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);
@@ -105,7 +105,7 @@
     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);
@@ -123,7 +123,32 @@
     }
 }
 
-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));
@@ -146,7 +171,7 @@
     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);
@@ -191,7 +216,7 @@
                 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;
                 }
 

--
Gitblit v1.8.0