Added another convenience class to simplify testing

(automates comparisons)
fixed some unit tests caused by copy constructor removal


git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@7302 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
chrisparker126 2014-04-25 22:02:34 +00:00
parent 71a02003be
commit 4cab2aaa65
12 changed files with 160 additions and 72 deletions

View File

@ -21,26 +21,43 @@ public:
RsSharedPtr() : mShared(NULL), mCount(NULL) {} RsSharedPtr() : mShared(NULL), mCount(NULL) {}
RsSharedPtr(T* shared) RsSharedPtr(T* shared)
: mShared(shared), mCount(new int(0)) : mShared(shared), mCount(new int(0)), mSharedPtrMutex(new RsMutex("SharedMutex"))
{ {
mCount++; mCount++;
} }
RsSharedPtr(const RsSharedPtr<T>& rsp) RsSharedPtr(const RsSharedPtr<T>& rsp)
{ {
rsp.lock();
mShared = rsp.mShared; mShared = rsp.mShared;
mCount = rsp.mCount; mCount = rsp.mCount;
mCount++; mCount++;
mSharedPtrMutex = rsp.mSharedPtrMutex;
rsp.unlock();
} }
void operator=(const RsSharedPtr<T>& rsp) void operator=(const RsSharedPtr<T>& rsp)
{ {
rsp.lock();
mSharedPtrMutex = rsp.mSharedPtrMutex;
DecrementAndDeleteIfLast(); DecrementAndDeleteIfLast();
mShared = rsp.mShared; mShared = rsp.mShared;
RepointAndIncrement(rsp.mCount); RepointAndIncrement(rsp.mCount);
mSharedPtrMutex->unlock();
} }
T* release() { mCount--; T* temp = mShared; mShared = NULL; return temp; } T* release() {
lock();
mCount--; T* temp = mShared; mShared = NULL;
unlock();
return temp;
}
T* get() { return mShared; } T* get() { return mShared; }
T& operator*(){ return *mShared; } T& operator*(){ return *mShared; }
@ -72,10 +89,14 @@ private:
} }
void lock() const { mSharedPtrMutex->lock(); }
void unlock() const { mSharedPtrMutex->unlock(); }
private: private:
int* mCount; int* mCount;
T* mShared; T* mShared;
RsMutex* mSharedPtrMutex;
}; };

View File

@ -29,8 +29,6 @@ NxsGrpSync::NxsGrpSync()
for(int i =0; i < numPeers; i++) for(int i =0; i < numPeers; i++)
{ {
RsPeerId id = RsPeerId::random(); RsPeerId id = RsPeerId::random();
mPeerIds.push_back(id); mPeerIds.push_back(id);
} }
@ -68,8 +66,8 @@ NxsGrpSync::NxsGrpSync()
init_item(meta); init_item(meta);
grp->metaData = meta; grp->metaData = meta;
meta->mSubscribeFlags = GXS_SERV::GROUP_SUBSCRIBE_SUBSCRIBED; meta->mSubscribeFlags = GXS_SERV::GROUP_SUBSCRIBE_SUBSCRIBED;
RsNxsGrp* grp_copy = grp->clone();
RsGxsGroupId grpId = grp->grpId;
RsGeneralDataService::GrpStoreMap gsp; RsGeneralDataService::GrpStoreMap gsp;
gsp.insert(std::make_pair(grp, meta)); gsp.insert(std::make_pair(grp, meta));
@ -79,8 +77,7 @@ NxsGrpSync::NxsGrpSync()
it = mPeerIds.begin(); it = mPeerIds.begin();
for(; it != mPeerIds.end(); it++) for(; it != mPeerIds.end(); it++)
{ {
if(mit->first != *it) mExpectedResult[*it].push_back(grpId);
mExpectedResult[*it].push_back(grp_copy);
} }
} }
@ -99,31 +96,6 @@ RsGeneralDataService* NxsGrpSync::getDataService(const RsPeerId& peerId)
return mDataServices[peerId]; return mDataServices[peerId];
} }
bool NxsGrpSync::checkTestPassed()
{
// look at data store, as all peers should have same
// number of groups
DataMap::iterator mit = mDataServices.begin();
std::list<int> vals;
for(; mit != mDataServices.end(); mit++)
{
RsGxsGroupId::std_vector grpIds;
mit->second->retrieveGroupIds(grpIds);
vals.push_back(grpIds.size());
}
std::list<int>::iterator lit = vals.begin();
int prev = *lit;
bool passed = true;
for(; lit != vals.end(); lit++)
{
passed &= *lit == prev;
prev = *lit;
}
return passed;
}
RsNxsNetMgr* NxsGrpSync::getDummyNetManager(const RsPeerId& peerId) RsNxsNetMgr* NxsGrpSync::getDummyNetManager(const RsPeerId& peerId)
{ {
return mNxsNetMgrs[peerId]; return mNxsNetMgrs[peerId];
@ -161,3 +133,8 @@ RsServiceInfo rs_nxs_test::NxsGrpSync::getServiceInfo() {
return mServInfo; return mServInfo;
} }
const NxsGrpTestScenario::ExpectedMap& rs_nxs_test::NxsGrpSync::getExpectedMap() {
return mExpectedResult;
}

View File

@ -8,13 +8,12 @@
#ifndef NXSGRPSYNC_TEST_H_ #ifndef NXSGRPSYNC_TEST_H_
#define NXSGRPSYNC_TEST_H_ #define NXSGRPSYNC_TEST_H_
#include "nxsgrptestscenario.h"
#include "nxstestscenario.h"
namespace rs_nxs_test namespace rs_nxs_test
{ {
class NxsGrpSync : public NxsTestScenario class NxsGrpSync : public NxsGrpTestScenario
{ {
public: public:
@ -23,18 +22,20 @@ namespace rs_nxs_test
void getPeers(std::list<RsPeerId>& peerIds); void getPeers(std::list<RsPeerId>& peerIds);
RsGeneralDataService* getDataService(const RsPeerId& peerId); RsGeneralDataService* getDataService(const RsPeerId& peerId);
bool checkTestPassed();
RsNxsNetMgr* getDummyNetManager(const RsPeerId& peerId); RsNxsNetMgr* getDummyNetManager(const RsPeerId& peerId);
RsGcxs* getDummyCircles(const RsPeerId& peerId); RsGcxs* getDummyCircles(const RsPeerId& peerId);
RsGixsReputation* getDummyReputations(const RsPeerId& peerId); RsGixsReputation* getDummyReputations(const RsPeerId& peerId);
uint16_t getServiceType(); uint16_t getServiceType();
RsServiceInfo getServiceInfo(); RsServiceInfo getServiceInfo();
protected:
const ExpectedMap& getExpectedMap();
private: private:
std::list<RsPeerId> mPeerIds; std::list<RsPeerId> mPeerIds;
typedef std::map<RsPeerId, RsGeneralDataService*> DataMap; typedef std::map<RsPeerId, RsGeneralDataService*> DataMap;
typedef std::map<RsPeerId, std::list<RsNxsGrp*> > ExpectedMap;
DataMap mDataServices; DataMap mDataServices;
std::map<RsPeerId, RsNxsNetMgr*> mNxsNetMgrs; std::map<RsPeerId, RsNxsNetMgr*> mNxsNetMgrs;

View File

@ -0,0 +1,56 @@
/*
* nxsgrptestscenario.cpp
*
* Created on: 23 Apr 2014
* Author: crispy
*/
#include "nxsgrptestscenario.h"
#include <algorithm>
namespace rs_nxs_test {
NxsGrpTestScenario::NxsGrpTestScenario() {
}
NxsGrpTestScenario::~NxsGrpTestScenario() {
}
bool NxsGrpTestScenario::checkTestPassed()
{
const ExpectedMap& exMap = getExpectedMap();
ExpectedMap::const_iterator mit = exMap.begin();
bool passed = true;
for(; mit != exMap.end(); mit++)
{
const RsPeerId& pid = mit->first;
RsGxsGroupId::std_vector expGrpIds = mit->second;
RsGeneralDataService* ds = getDataService(pid);
RsGxsGroupId::std_vector grpIds;
ds->retrieveGroupIds(grpIds);
RsGxsGroupId::std_vector result(expGrpIds.size()+grpIds.size());
std::sort(grpIds.begin(), grpIds.end());
std::sort(expGrpIds.begin(), expGrpIds.end());
RsGxsGroupId::std_vector::iterator it = std::set_difference(grpIds.begin(), grpIds.end(),
expGrpIds.begin(), expGrpIds.end(), result.begin());
result.resize(it - result.begin());
passed &= result.size() == 0;
}
return passed;
}
bool NxsGrpTestScenario::checkDeepTestPassed()
{
return false;
}
}
/* namespace rs_nxs_test */

View File

@ -0,0 +1,33 @@
/*
* nxsgrptestscenario.h
*
* Created on: 23 Apr 2014
* Author: crispy
*/
#ifndef NXSGRPTESTSCENARIO_H_
#define NXSGRPTESTSCENARIO_H_
#include "nxstestscenario.h"
namespace rs_nxs_test {
class NxsGrpTestScenario : public NxsTestScenario {
public:
typedef std::map<RsPeerId, RsGxsGroupId::std_vector > ExpectedMap;
NxsGrpTestScenario();
virtual ~NxsGrpTestScenario();
bool checkTestPassed();
bool checkDeepTestPassed();
protected:
RsDataService* createDataStore(const RsPeerId& peerId);
virtual const ExpectedMap& getExpectedMap() = 0;
};
} /* namespace rs_nxs_test */
#endif /* NXSGRPTESTSCENARIO_H_ */

View File

@ -8,41 +8,39 @@
#ifndef NXSMSGSYNC_TEST_H_ #ifndef NXSMSGSYNC_TEST_H_
#define NXSMSGSYNC_TEST_H_ #define NXSMSGSYNC_TEST_H_
#include "nxstestscenario.h"
class NxsMessageTest : public rs_nxs_test::NxsTestScenario
class NxsMessageTest : public NxsTestScenario
{ {
public: public:
NxsMessageTest(uint16_t servtype); NxsMessageTest();
virtual ~NxsMessageTest(); void getPeers(std::list<RsPeerId>& peerIds);
std::string getTestName(); RsGeneralDataService* getDataService(const RsPeerId& peerId);
bool checkTestPassed();
RsNxsNetMgr* getDummyNetManager(const RsPeerId& peerId);
RsGcxs* getDummyCircles(const RsPeerId& peerId);
RsGixsReputation* getDummyReputations(const RsPeerId& peerId);
uint16_t getServiceType(); uint16_t getServiceType();
RsGeneralDataService* getDataService(const RsPeerId& peer); RsServiceInfo getServiceInfo();
/*!
* Call to remove files created
* in the test directory
*/
void cleanUp();
bool testPassed();
private:
void setUpDataBases();
void populateStore(RsGeneralDataService* dStore);
private: private:
std::string mTestName; std::list<RsPeerId> mPeerIds;
std::map<RsPeerId, RsGeneralDataService*> mPeerStoreMap; typedef std::map<RsPeerId, RsGeneralDataService*> DataMap;
std::set<std::string> mStoreNames; typedef std::map<RsPeerId, std::list<RsNxsGrp*> > ExpectedMap;
DataMap mDataServices;
std::map<RsPeerId, RsNxsNetMgr*> mNxsNetMgrs;
RsGixsReputation* mRep;
RsGcxs* mCircles;
RsServiceInfo mServInfo;
ExpectedMap mExpectedResult;
uint16_t mServType; uint16_t mServType;
RsMutex mMsgTestMtx;
}; };

View File

@ -31,12 +31,14 @@ namespace rs_nxs_test
virtual void getPeers(std::list<RsPeerId>& peerIds) = 0; virtual void getPeers(std::list<RsPeerId>& peerIds) = 0;
virtual RsGeneralDataService* getDataService(const RsPeerId& peerId) = 0; virtual RsGeneralDataService* getDataService(const RsPeerId& peerId) = 0;
virtual bool checkTestPassed() = 0; virtual bool checkTestPassed() = 0;
virtual bool checkDeepTestPassed() = 0;
virtual RsNxsNetMgr* getDummyNetManager(const RsPeerId& peerId) = 0; virtual RsNxsNetMgr* getDummyNetManager(const RsPeerId& peerId) = 0;
virtual RsGcxs* getDummyCircles(const RsPeerId& peerId) = 0; virtual RsGcxs* getDummyCircles(const RsPeerId& peerId) = 0;
virtual RsGixsReputation* getDummyReputations(const RsPeerId& peerId) = 0; virtual RsGixsReputation* getDummyReputations(const RsPeerId& peerId) = 0;
virtual uint16_t getServiceType() = 0; virtual uint16_t getServiceType() = 0;
virtual RsServiceInfo getServiceInfo() = 0; virtual RsServiceInfo getServiceInfo() = 0;
}; };
} }

View File

@ -18,7 +18,7 @@ TEST(libretroshare_gxs, gxs_grp_sync)
tHub.StartTest(); tHub.StartTest();
// wait for ten seconds // wait for ten seconds
rs_nxs_test::NxsTestHub::Wait(10); rs_nxs_test::NxsTestHub::Wait(15);
tHub.EndTest(); tHub.EndTest();

View File

@ -45,7 +45,7 @@ TEST(libretroshare_serialiser, RsTlvFileItem)
/* initialise */ /* initialise */
i1.filesize = 101010; i1.filesize = 101010;
i1.hash = "ABCDEFEGHE"; i1.hash = RsFileHash("ABCDEFEGHE");
i1.name = "TestFile.txt"; i1.name = "TestFile.txt";
i1.pop = 12; i1.pop = 12;
i1.age = 456; i1.age = 456;
@ -103,7 +103,7 @@ TEST(libretroshare_serialiser, RsTlvFileSet)
{ {
RsTlvFileItem fi; RsTlvFileItem fi;
fi.filesize = 16 + i * i; fi.filesize = 16 + i * i;
fi.hash = "ABCDEF"; fi.hash = RsFileHash("ABCDEF");
std::ostringstream out; std::ostringstream out;
out << "File" << i << "_inSet.txt"; out << "File" << i << "_inSet.txt";
fi.name = out.str(); fi.name = out.str();
@ -130,7 +130,7 @@ TEST(libretroshare_serialiser, RsTlvFileData)
/* initialise */ /* initialise */
d1.file.filesize = 101010; d1.file.filesize = 101010;
d1.file.hash = "ABCDEFEGHE"; d1.file.hash = RsFileHash("ABCDEFEGHE");
d1.file.name = ""; d1.file.name = "";
d1.file.age = 0; d1.file.age = 0;
d1.file.pop = 0; d1.file.pop = 0;

View File

@ -136,7 +136,7 @@ RsSerialType* init_item(RsTurtleOpenTunnelItem& item)
item.depth = rand() ; item.depth = rand() ;
item.request_id = rand() ; item.request_id = rand() ;
item.partial_tunnel_id = rand() ; item.partial_tunnel_id = rand() ;
item.file_hash = std::string("c0edcfecc0844ef175d61dd589ab288d262b6bc8") ; item.file_hash = RsFileHash("c0edcfecc0844ef175d61dd589ab288d262b6bc8") ;
return new RsTurtleSerialiser(); return new RsTurtleSerialiser();
} }
bool operator==(const RsTurtleOpenTunnelItem& it1,const RsTurtleOpenTunnelItem& it2) bool operator==(const RsTurtleOpenTunnelItem& it1,const RsTurtleOpenTunnelItem& it2)
@ -189,7 +189,7 @@ bool operator==(const RsTurtleStringSearchRequestItem& it1,const RsTurtleStringS
} }
RsSerialType* init_item(TurtleFileInfo& info) RsSerialType* init_item(TurtleFileInfo& info)
{ {
info.hash = "3f753e8ac3b94ab9fddfad94480f747bf4418370"; info.hash = RsFileHash("3f753e8ac3b94ab9fddfad94480f747bf4418370");
info.name = "toto.png"; info.name = "toto.png";
info.size = 0x3392085443897ull ; info.size = 0x3392085443897ull ;
return new RsTurtleSerialiser(); return new RsTurtleSerialiser();

View File

@ -63,13 +63,13 @@ TEST(libretroshare_serialiser, test_RsTlvStack)
/* initialise */ /* initialise */
fi1->filesize = 101010; fi1->filesize = 101010;
fi1->hash = "ABCDEFEGHE"; fi1->hash = RsFileHash("ABCDEFEGHE");
fi1->name = "TestFile.txt"; fi1->name = "TestFile.txt";
fi1->pop = 12; fi1->pop = 12;
fi1->age = 456; fi1->age = 456;
fi2->filesize = 101010; fi2->filesize = 101010;
fi2->hash = "ABCDEFEGHE"; fi2->hash = RsFileHash("ABCDEFEGHE");
fi2->name = "TestFile.txt"; fi2->name = "TestFile.txt";
fi2->pop = 0; fi2->pop = 0;
fi2->age = 0;; fi2->age = 0;;

View File

@ -47,7 +47,7 @@ TEST(libretroshare_serialiser, test_RsTlvFileItem)
/* initialise */ /* initialise */
i1.filesize = 101010; i1.filesize = 101010;
i1.hash = "ABCDEFEGHE"; i1.hash = RsFileHash("ABCDEFEGHE");
i1.name = "TestFile.txt"; i1.name = "TestFile.txt";
i1.pop = 12; i1.pop = 12;
i1.age = 456; i1.age = 456;
@ -105,7 +105,7 @@ TEST(libretroshare_serialiser, test_RsTlvFileSet)
{ {
RsTlvFileItem fi; RsTlvFileItem fi;
fi.filesize = 16 + i * i; fi.filesize = 16 + i * i;
fi.hash = "ABCDEF"; fi.hash = RsFileHash("ABCDEF");
std::ostringstream out; std::ostringstream out;
out << "File" << i << "_inSet.txt"; out << "File" << i << "_inSet.txt";
fi.name = out.str(); fi.name = out.str();