completed addition of get statistic feature of gxs

git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@7461 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
chrisparker126 2014-07-20 11:21:06 +00:00
parent be20086e09
commit 5399618cef
7 changed files with 138 additions and 10 deletions

View File

@ -976,14 +976,14 @@ bool RsGenExchange::subscribeToGroup(uint32_t& token, const RsGxsGroupId& grpId,
return true; return true;
} }
bool RsGenExchange::getGroupStatistic(const uint32_t& /*token*/, GxsGroupStatistic& /*stats*/) bool RsGenExchange::getGroupStatistic(const uint32_t& token, GxsGroupStatistic& stats)
{ {
return false; return mDataAccess->getGroupStatistic(token, stats);
} }
bool RsGenExchange::getServiceStatistic(const uint32_t& /*token*/, GxsServiceStatistic& /*stats*/) bool RsGenExchange::getServiceStatistic(const uint32_t& token, GxsServiceStatistic& stats)
{ {
return false; return mDataAccess->getServiceStatistic(token, stats);
} }
bool RsGenExchange::updated(bool willCallGrpChanged, bool willCallMsgChanged) bool RsGenExchange::updated(bool willCallGrpChanged, bool willCallMsgChanged)

View File

@ -26,6 +26,7 @@
#include <time.h> #include <time.h>
#include "rsgxsdataaccess.h" #include "rsgxsdataaccess.h"
#include "retroshare/rsgxsflags.h"
// This bit will be filled out over time. // This bit will be filled out over time.
#define RS_TOKREQOPT_MSG_VERSIONS 0x0001 // MSGRELATED: Returns All MsgIds with OrigMsgId = MsgId. #define RS_TOKREQOPT_MSG_VERSIONS 0x0001 // MSGRELATED: Returns All MsgIds with OrigMsgId = MsgId.
@ -293,7 +294,9 @@ void RsGxsDataAccess::requestServiceStatistic(uint32_t& token)
generateToken(token); generateToken(token);
setReq(req, token, 0, RsTokReqOptions()); RsTokReqOptions opts;
opts.mReqType = GXS_REQUEST_TYPE_SERVICE_STATS;
setReq(req, token, 0, opts);
storeRequest(req); storeRequest(req);
} }
@ -304,7 +307,9 @@ void RsGxsDataAccess::requestGroupStatistic(uint32_t& token, const RsGxsGroupId&
generateToken(token); generateToken(token);
setReq(req, token, 0, RsTokReqOptions()); RsTokReqOptions opts;
opts.mReqType = GXS_REQUEST_TYPE_GROUP_STATS;
setReq(req, token, 0, opts);
storeRequest(req); storeRequest(req);
} }
@ -860,7 +865,7 @@ bool RsGxsDataAccess::getServiceStatistic(const uint32_t &token, GxsServiceStati
if(req == NULL){ if(req == NULL){
std::cerr << "RsGxsDataAccess::getServiceStatistic() Unable to retrieve grp stats" << std::endl; std::cerr << "RsGxsDataAccess::getServiceStatistic() Unable to retrieve service stats" << std::endl;
return false; return false;
}else if(req->status == GXS_REQUEST_V2_STATUS_COMPLETE){ }else if(req->status == GXS_REQUEST_V2_STATUS_COMPLETE){
@ -1479,6 +1484,7 @@ bool RsGxsDataAccess::getServiceStatistic(ServiceStatisticRequest *req)
req->mServiceStatistic.mNumGrps = grpMeta.size(); req->mServiceStatistic.mNumGrps = grpMeta.size();
req->mServiceStatistic.mSizeOfGrps = 0; req->mServiceStatistic.mSizeOfGrps = 0;
req->mServiceStatistic.mSizeOfMsgs = 0; req->mServiceStatistic.mSizeOfMsgs = 0;
req->mServiceStatistic.mNumGrpsSubscribed = 0;
for(; mit != grpMeta.end(); mit++) for(; mit != grpMeta.end(); mit++)
{ {
@ -1489,6 +1495,8 @@ bool RsGxsDataAccess::getServiceStatistic(ServiceStatisticRequest *req)
getGroupStatistic(&gr); getGroupStatistic(&gr);
req->mServiceStatistic.mNumMsgs += gr.mGroupStatistic.mNumMsgs; req->mServiceStatistic.mNumMsgs += gr.mGroupStatistic.mNumMsgs;
req->mServiceStatistic.mSizeOfMsgs += gr.mGroupStatistic.mTotalSizeOfMsgs; req->mServiceStatistic.mSizeOfMsgs += gr.mGroupStatistic.mTotalSizeOfMsgs;
req->mServiceStatistic.mNumGrpsSubscribed += m->mSubscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_SUBSCRIBED ? 1 : 0;
delete m; delete m;
} }

View File

@ -44,6 +44,8 @@
#define GXS_REQUEST_TYPE_MSG_RELATED_META 0x00800000 #define GXS_REQUEST_TYPE_MSG_RELATED_META 0x00800000
#define GXS_REQUEST_TYPE_MSG_RELATED_IDS 0x01000000 #define GXS_REQUEST_TYPE_MSG_RELATED_IDS 0x01000000
#define GXS_REQUEST_TYPE_GROUP_STATS 0x01600000
#define GXS_REQUEST_TYPE_SERVICE_STATS 0x03200000
// This bit will be filled out over time. // This bit will be filled out over time.

View File

@ -19,12 +19,12 @@ GenExchangeTest::~GenExchangeTest()
bool GenExchangeTest::getServiceStatistic(const uint32_t &token, GxsServiceStatistic &servStatistic) bool GenExchangeTest::getServiceStatistic(const uint32_t &token, GxsServiceStatistic &servStatistic)
{ {
mTestService->getServiceStatisticTS(token, servStatistic); return mTestService->getServiceStatisticTS(token, servStatistic);
} }
bool GenExchangeTest::getGroupStatistic(const uint32_t &token, GxsGroupStatistic &grpStatistic) bool GenExchangeTest::getGroupStatistic(const uint32_t &token, GxsGroupStatistic &grpStatistic)
{ {
mTestService->getGroupStatisticTS(token, grpStatistic); return mTestService->getGroupStatisticTS(token, grpStatistic);
} }

View File

@ -1,4 +1,5 @@
#include "gxsteststats.h" #include "gxsteststats.h"
#include "libretroshare/serialiser/support.h"
#define POLLING_TIME_OUT 5 #define POLLING_TIME_OUT 5
@ -12,14 +13,113 @@ GxsTestStats::~GxsTestStats()
void GxsTestStats::runTests() void GxsTestStats::runTests()
{ {
testGroupStatistics(); //testGroupStatistics();
testServiceStatistics();
} }
void GxsTestStats::testGroupStatistics() void GxsTestStats::testGroupStatistics()
{ {
setUp();
GenExchangeTestService* testService = getTestService();
RsTokenService* tokenService = getTokenService();
// create some random grps to allow msg testing
RsDummyGrp* dgrp1 = new RsDummyGrp();
init(*dgrp1);
RsTokReqOptions opts;
opts.mReqType = 45000;
uint32_t token;
RsGxsGroupId grpId;
testService->publishDummyGrp(token, dgrp1);
pollForGrpAcknowledgement(token, grpId);
RsDummyMsg* msg1 = new RsDummyMsg();
init(*msg1);
RsDummyMsg* msg2 = new RsDummyMsg();
init(*msg2);
msg1->meta.mGroupId = grpId;
getTestService()->publishDummyMsg(token, msg1);
RsGxsGrpMsgIdPair msgId;
pollForMsgAcknowledgement(token, msgId);
msg2->meta.mGroupId = grpId;
getTestService()->publishDummyMsg(token, msg2);
pollForMsgAcknowledgement(token, msgId);
tokenService->requestGroupStatistic(token, grpId);
opts.mReqType = GXS_REQUEST_TYPE_GROUP_STATS;
pollForToken(token, opts);
GxsGroupStatistic stats;
ASSERT_TRUE(getGroupStatistic(token, stats));
ASSERT_TRUE(stats.mNumMsgs == 2);
breakDown();
} }
void GxsTestStats::testServiceStatistics() void GxsTestStats::testServiceStatistics()
{ {
setUp();
GenExchangeTestService* testService = getTestService();
RsTokenService* tokenService = getTokenService();
// create some random grps to allow msg testing
RsDummyGrp* dgrp1 = new RsDummyGrp();
RsDummyGrp* dgrp2 = new RsDummyGrp();
init(*dgrp1);
RsTokReqOptions opts;
opts.mReqType = 45000;
uint32_t token;
RsGxsGroupId grpId;
testService->publishDummyGrp(token, dgrp1);
pollForGrpAcknowledgement(token, grpId);
testService->publishDummyGrp(token, dgrp2);
pollForGrpAcknowledgement(token, grpId);
RsDummyMsg* msg1 = new RsDummyMsg();
init(*msg1);
RsDummyMsg* msg2 = new RsDummyMsg();
init(*msg2);
msg1->meta.mGroupId = grpId;
getTestService()->publishDummyMsg(token, msg1);
RsGxsGrpMsgIdPair msgId;
pollForMsgAcknowledgement(token, msgId);
msg2->meta.mGroupId = grpId;
getTestService()->publishDummyMsg(token, msg2);
pollForMsgAcknowledgement(token, msgId);
tokenService->requestServiceStatistic(token);
opts.mReqType = GXS_REQUEST_TYPE_SERVICE_STATS;
pollForToken(token, opts);
GxsServiceStatistic stats;
ASSERT_TRUE(getServiceStatistic(token, stats));
ASSERT_TRUE(stats.mNumMsgs == 2);
ASSERT_TRUE(stats.mNumGrps == 2);
ASSERT_TRUE(stats.mNumGrpsSubscribed == 2);
breakDown();
} }

View File

@ -6,6 +6,7 @@
#include "gxspublishmsgtest.h" #include "gxspublishmsgtest.h"
#include "gxs/rsdataservice.h" #include "gxs/rsdataservice.h"
#include "rsdummyservices.h" #include "rsdummyservices.h"
#include "gxsteststats.h"
/*! /*!
@ -39,3 +40,18 @@ TEST(libretroshare_gxs, RsGenExchange)
//GxsPublishMsgTest testMsgPublishing(&testService, dataStore); //GxsPublishMsgTest testMsgPublishing(&testService, dataStore);
//testMsgPublishing.runTests(); //testMsgPublishing.runTests();
} }
TEST(libretroshare_gxs, GetStats)
{
RsGeneralDataService* dataStore = new RsDataService("./", "testServiceDb", RS_SERVICE_TYPE_DUMMY, NULL, "");
// we want to use default authentication which is NO authentication :)
GenExchangeTestService testService(dataStore, NULL, NULL);
GxsTestStats testStats(&testService, dataStore);
testStats.runTests();
//GxsPublishMsgTest testMsgPublishing(&testService, dataStore);
//testMsgPublishing.runTests();
}

View File

@ -286,10 +286,12 @@ HEADERS += libretroshare/gxs/gen_exchange/genexchangetester.h \
libretroshare/gxs/gen_exchange/genexchangetestservice.h \ libretroshare/gxs/gen_exchange/genexchangetestservice.h \
libretroshare/gxs/gen_exchange/gxspublishgrouptest.h \ libretroshare/gxs/gen_exchange/gxspublishgrouptest.h \
libretroshare/gxs/gen_exchange/rsdummyservices.h \ libretroshare/gxs/gen_exchange/rsdummyservices.h \
libretroshare/gxs/gen_exchange/gxsteststats.cpp
# libretroshare/gxs/gen_exchange/gxsmsgrelatedtest.h \ # libretroshare/gxs/gen_exchange/gxsmsgrelatedtest.h \
SOURCES += libretroshare/gxs/gen_exchange/gxspublishgrouptest.cc \ SOURCES += libretroshare/gxs/gen_exchange/gxspublishgrouptest.cc \
libretroshare/gxs/gen_exchange/gxsteststats.cpp \
libretroshare/gxs/gen_exchange/gxspublishmsgtest.cc \ libretroshare/gxs/gen_exchange/gxspublishmsgtest.cc \
libretroshare/gxs/gen_exchange/rsdummyservices.cc \ libretroshare/gxs/gen_exchange/rsdummyservices.cc \
libretroshare/gxs/gen_exchange/rsgenexchange_test.cc \ libretroshare/gxs/gen_exchange/rsgenexchange_test.cc \