#include "hello_test.h" #include "server/FrameworkServer.h" int getStatCount(const vector> &data) { LOG_CONSOLE_DEBUG << "client stat:" << data.size() << endl; int sum = 0; for_each(data.begin(), data.end(), [&](const map &r){ for(auto e : r) { // LOG_CONSOLE_DEBUG << e.first.writeToJsonString() << ", " << e.second.writeToJsonString() << endl; sum += e.second.count ; } }); return sum; } TEST_F(HelloTest, statReport) { FrameworkServer fs; startServer(fs, FRAMEWORK_CONFIG()); HelloServer hs; startServer(hs, CONFIG()); _clientStatData.clear(); shared_ptr c = getCommunicator(); int totalReport = 0; int totalRealReport = 0; int count = 3; while(count-->0) { int report = rand() % 100; if(report == 0) { continue; } checkStat(c.get(), report); TC_Common::sleep(1); totalReport += report; totalRealReport = getStatCount(_clientStatData); LOG_CONSOLE_DEBUG << "report:" << report << ", totalReport:" << totalReport << ", totalRealReport:" << totalRealReport << ", " << _clientStatData.size()<< endl; ASSERT_TRUE(totalReport >= totalRealReport); ASSERT_TRUE(totalReport - totalRealReport <= 20); } // LOG_CONSOLE_DEBUG << "client stat:" << _clientStatData.size() << endl; // LOG_CONSOLE_DEBUG << "server stat:" << _serverStatData.size() << endl; stopServer(hs); stopServer(fs); } TEST_F(HelloTest, statReportInCoroutine) { FrameworkServer fs; startServer(fs, FRAMEWORK_CONFIG()); HelloServer hs; startServer(hs, CONFIG()); _clientStatData.clear(); shared_ptr c = getCommunicator(); funcInCoroutine([=]() { int totalReport = 0; int totalRealReport = 0; int count = 3; while (count-- > 0) { int report = rand() % 100; if (report == 0) { continue; } checkStat(c.get(), report); TC_Common::sleep(1); totalReport += report; totalRealReport = getStatCount(_clientStatData); LOG_CONSOLE_DEBUG << "report:" << report << ", totalReport:" << totalReport << ", totalRealReport:" << totalRealReport << ", data size:" << _clientStatData.size() << endl; ASSERT_TRUE(totalReport >= totalRealReport); ASSERT_TRUE(totalReport - totalRealReport <= 20); } }, true); stopServer(hs); stopServer(fs); }