client-test: added interrupted sync tests with split items
The tests are expected to run with a maximum message size of 20000 used by both client *and* server - server must be configured accordingly. Then the Add and Update operations in the interrupted sync with client B are done with an item that is larger than the message size and thus depends on <MoreData> support. On resume, only the second half is sent and the recipient must assemble the complete item.
This commit is contained in:
parent
ecc76a4fef
commit
446b5bfbd1
|
@ -1519,6 +1519,10 @@ void SyncTests::addTests() {
|
|||
ADD_TEST_TO_SUITE(retryTests, SyncTests, testInterruptResumeServerAdd);
|
||||
ADD_TEST_TO_SUITE(retryTests, SyncTests, testInterruptResumeServerRemove);
|
||||
ADD_TEST_TO_SUITE(retryTests, SyncTests, testInterruptResumeServerUpdate);
|
||||
ADD_TEST_TO_SUITE(retryTests, SyncTests, testInterruptResumeClientAddBig);
|
||||
ADD_TEST_TO_SUITE(retryTests, SyncTests, testInterruptResumeClientUpdateBig);
|
||||
ADD_TEST_TO_SUITE(retryTests, SyncTests, testInterruptResumeServerAddBig);
|
||||
ADD_TEST_TO_SUITE(retryTests, SyncTests, testInterruptResumeServerUpdateBig);
|
||||
ADD_TEST_TO_SUITE(retryTests, SyncTests, testInterruptResumeFull);
|
||||
addTest(FilterTest(retryTests));
|
||||
}
|
||||
|
@ -2829,6 +2833,13 @@ void SyncTests::doInterruptResume(int changes,
|
|||
bool equal = true;
|
||||
bool resend = dynamic_cast <TransportResendInjector *> (wrapper.get()) != NULL;
|
||||
|
||||
// better be large enough for complete DevInf, 20000 is already a
|
||||
// bit small when running with many stores
|
||||
size_t maxMsgSize = 20000;
|
||||
size_t changedItemSize = (changes & BIG) ?
|
||||
3 * maxMsgSize / 2 :
|
||||
0;
|
||||
|
||||
while (true) {
|
||||
char buffer[80];
|
||||
sprintf(buffer, "%d", interruptAtMessage);
|
||||
|
@ -2866,7 +2877,7 @@ void SyncTests::doInterruptResume(int changes,
|
|||
for (i = 0; i < sources.size(); i++) {
|
||||
if (changes & SERVER_ADD) {
|
||||
sources[i].second->insertManyItems(sources[i].second->createSourceA,
|
||||
4, 1, 0);
|
||||
4, 1, changedItemSize);
|
||||
}
|
||||
if (changes & SERVER_REMOVE) {
|
||||
// remove second item
|
||||
|
@ -2877,19 +2888,21 @@ void SyncTests::doInterruptResume(int changes,
|
|||
// update third item
|
||||
updateItem(sources[i].second->createSourceA,
|
||||
*(++ ++clientAluids[i].begin()),
|
||||
sources[i].second->createItem(3, "updated", 0).c_str());
|
||||
sources[i].second->createItem(3, "updated", changedItemSize).c_str());
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// send using the same mode as in the interrupted sync with client B
|
||||
if (changes & (SERVER_ADD|SERVER_REMOVE|SERVER_UPDATE)) {
|
||||
doSync("changesFromA", SyncOptions(SYNC_TWO_WAY));
|
||||
doSync("changesFromA", SyncOptions(SYNC_TWO_WAY).setMaxMsgSize(maxMsgSize));
|
||||
}
|
||||
|
||||
// make changes as requested on client B
|
||||
for (i = 0; i < sources.size(); i++) {
|
||||
if (changes & CLIENT_ADD) {
|
||||
accessClientB->sources[i].second->insertManyItems(accessClientB->sources[i].second->createSourceA,
|
||||
14, 1, 0);
|
||||
14, 1, changedItemSize);
|
||||
}
|
||||
if (changes & CLIENT_REMOVE) {
|
||||
// remove second item
|
||||
|
@ -2900,7 +2913,7 @@ void SyncTests::doInterruptResume(int changes,
|
|||
// update third item
|
||||
updateItem(accessClientB->sources[i].second->createSourceA,
|
||||
*(++ ++clientBluids[i].begin()),
|
||||
accessClientB->sources[i].second->createItem(13, "updated", 0).c_str());
|
||||
accessClientB->sources[i].second->createItem(13, "updated", changedItemSize).c_str());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2913,7 +2926,8 @@ void SyncTests::doInterruptResume(int changes,
|
|||
accessClientB->doSync("changesFromB",
|
||||
SyncOptions(SYNC_TWO_WAY,
|
||||
CheckSyncReport(-1, -1, -1, -1,
|
||||
-1, -1, resend)).setTransportAgent(wrapper));
|
||||
-1, -1, resend)).setTransportAgent(wrapper)
|
||||
.setMaxMsgSize(maxMsgSize));
|
||||
wasInterrupted = interruptAtMessage != -1 &&
|
||||
wrapper->getMessageCount() <= interruptAtMessage;
|
||||
wrapper->rewind();
|
||||
|
@ -3019,6 +3033,26 @@ void SyncTests::testInterruptResumeServerUpdate()
|
|||
doInterruptResume(SERVER_UPDATE, boost::shared_ptr<TransportWrapper> (new TransportFaultInjector()));
|
||||
}
|
||||
|
||||
void SyncTests::testInterruptResumeClientAddBig()
|
||||
{
|
||||
doInterruptResume(CLIENT_ADD|BIG, boost::shared_ptr<TransportWrapper> (new TransportFaultInjector()));
|
||||
}
|
||||
|
||||
void SyncTests::testInterruptResumeClientUpdateBig()
|
||||
{
|
||||
doInterruptResume(CLIENT_UPDATE|BIG, boost::shared_ptr<TransportWrapper> (new TransportFaultInjector()));
|
||||
}
|
||||
|
||||
void SyncTests::testInterruptResumeServerAddBig()
|
||||
{
|
||||
doInterruptResume(SERVER_ADD|BIG, boost::shared_ptr<TransportWrapper> (new TransportFaultInjector()));
|
||||
}
|
||||
|
||||
void SyncTests::testInterruptResumeServerUpdateBig()
|
||||
{
|
||||
doInterruptResume(SERVER_UPDATE|BIG, boost::shared_ptr<TransportWrapper> (new TransportFaultInjector()));
|
||||
}
|
||||
|
||||
void SyncTests::testInterruptResumeFull()
|
||||
{
|
||||
doInterruptResume(CLIENT_ADD|CLIENT_REMOVE|CLIENT_UPDATE|
|
||||
|
|
|
@ -680,13 +680,25 @@ protected:
|
|||
|
||||
virtual void doInterruptResume(int changes,
|
||||
boost::shared_ptr<TransportWrapper> wrapper);
|
||||
|
||||
/**
|
||||
* CLIENT_ = change made on client B before interrupting
|
||||
* SERVER_ = change made on client A and applied to server before interrupting
|
||||
* while sending to B
|
||||
* _ADD = new item added
|
||||
* _REMOVE = existing item deleted
|
||||
* _UPDATE = existing item replaced
|
||||
* BIG = when adding or updating, make the new item so large that it does
|
||||
* not fit into a single message
|
||||
*/
|
||||
enum {
|
||||
CLIENT_ADD = (1<<0),
|
||||
CLIENT_REMOVE = (1<<1),
|
||||
CLIENT_UPDATE = (1<<2),
|
||||
SERVER_ADD = (1<<3),
|
||||
SERVER_REMOVE = (1<<4),
|
||||
SERVER_UPDATE = (1<<5)
|
||||
SERVER_UPDATE = (1<<5),
|
||||
BIG = (1<<6)
|
||||
};
|
||||
virtual void testInterruptResumeClientAdd();
|
||||
virtual void testInterruptResumeClientRemove();
|
||||
|
@ -694,6 +706,10 @@ protected:
|
|||
virtual void testInterruptResumeServerAdd();
|
||||
virtual void testInterruptResumeServerRemove();
|
||||
virtual void testInterruptResumeServerUpdate();
|
||||
virtual void testInterruptResumeClientAddBig();
|
||||
virtual void testInterruptResumeClientUpdateBig();
|
||||
virtual void testInterruptResumeServerAddBig();
|
||||
virtual void testInterruptResumeServerUpdateBig();
|
||||
virtual void testInterruptResumeFull();
|
||||
|
||||
virtual void testUserSuspendClientAdd();
|
||||
|
|
Loading…
Reference in New Issue