/* * File: TestApplication.cc * Author: jgaebler * * Created on April 20, 2011, 11:33 AM */ #include "TestApplication.h" #include "Dispatcher.h" #include "Moversight.h" #include "ms/PeerResources.h" #include "common/transport/TransportAddress.h" #include "mt/msg/GroupData.h" #include "ms/Invitation.h" #include "simutils/OmnetppIniUtils.h" #include "StreamMessage.h" #include "ms/events/GroupCreatedEvent.h" #include "ms/events/PeerJoinedEvent.h" #include "ms/events/GroupClosedEvent.h" #include "ms/events/JoinRequestEvent.h" #include "ms/events/JoinConfirmEvent.h" #include "ms/events/JoinRejectedEvent.h" #include "ms/events/JoinAbortedEvent.h" #include "ms/events/PeerLeftEvent.h" #include "fd/events/PeerReconnectedEvent.h" #include "simutils/events/StartMeasuringEvent.h" #include "simutils/events/StopMeasuringEvent.h" #include "mt/events/PendingPeersEvent.h" #undef DEBUG #define DEBUG(msg) if (module.isPrintDebugAPP()) \ MOV_DEBUG << "APP@"<<(dis->getLocalState()==DISJOINED?"TA_":"");\ if(dis->getLocalState()==DISJOINED){MOV_DEBUG << module.getLocalAddress();}\ else{MOV_DEBUG<< dis->getMembershipService().getLocalID();}MOV_DEBUG<<" "<subscribe(this); dis->subscribe(this); dis->subscribe(this); dis->subscribe(this); dis->subscribe(this); dis->subscribe(this); dis->subscribe(this); dis->subscribe(this); dis->subscribe(this); dis->subscribe(this); dis->subscribe(this); dis->subscribe(this); } void TestApplication::finalise() { dis->unsubscribeAll(this); } /** * @brief Invites a peer to a the moversight group. * @param ta The transport address of the peer to invite. */ void TestApplication::invitePeer(TransportAddress & ta) { std::stringstream buf; buf << "invitePeer - invite peer at address " << ta; DEBUG(buf.str().c_str()); PeerDescription pDesc; joinDelayStat.startRecord(); dis->invitePeer(ta, pDesc); dis->signal(new StartMeasuringEvent("REJOIN")); } /** * @brief Leaves the current group. The peer leafs the current group be * emitting a LeaveAnnounce within the current group. */ void TestApplication::leaveGroup() { DEBUG("leaveGroup - peer leave the group"); leaveDelayStat.startRecord(); dis->leaveGroup(); dis->signal(new StartMeasuringEvent("TG")); } /** * @brief Sends dummy data to the group to simulate application traffic. */ void TestApplication::sendData() { DEBUG("sendData - send 24 byte dummy data to the group"); GroupData data; dtDelayStat.startRecord(); VectorStatistic vs("sendGroupData"); vs.record(GenericTime::currentTime()); dis->sendMessage(data); }//End /** * @brief Starts the given test case. * @param i The number of the test case to start. */ void TestApplication::startTestCase(unsigned int i) { switch (i) { case 0: testCase00(); break; case 1: testCase01(); break; case 2: testCase02(); break; case 3: testCase03(); break; case 4: testCase04(); break; case 5: testCase05(); break; case 6: testCase06(); break; case 7: testCase07(); break; case 8: testCase08(); break; case 9: testCase09(); break; case 10: testCase10(); break; case 11: testCase11(); break; case 12: testCase12(); break; case 13: testCase13(); break; case 14: testCase14(); break; case 15: testCase15(); break; case 16: testCase16(); break; case 17: testCase17(); break; case 18: testCase18(); break; case 19: testCase19(); break; case 20: testCase20(); break; case 21: testCase21(); break; case 22: testCase22(); break; default: break; }//End switch }//End startTestCase /** * @brief Executes test case 00 */ void TestApplication::testCase00() { int moduleIndex = module.getLocalAddress().getHostAddress().get4().getDByte(3); if (initApp) { candidates = OmnetppIniUtils::getDestinationAddressesFromOmnetppIni(module); waitCounter = 5; initApp = false; if (moduleIndex == 1) { module.scheduleTestCase(45); }//End if }//End if //------------------------------------------------------------------ //run the app //------------------------------------------------------------------ if (moduleIndex == 1) { // starts counting at 1 //we have more candidates? if (candidates.size() > 0) { if (waitCounter > 0) { waitCounter--; module.scheduleTestCase(45); } if (candidatesIndex < candidates.size()) { invitePeer(candidates.get(candidatesIndex++)); module.scheduleTestCase(45); } module.scheduleTestCase(45); }//End if }//End if } /** * @brief Execute testcase01: every tc 1, 1 peer leaving + rejoining */ void TestApplication::testCase01() { DEBUG("TC 1 "); int moduleIndex = module.getLocalAddress().getHostAddress().get4().getDByte(3); if (initApp) { candidates = OmnetppIniUtils::getDestinationAddressesFromOmnetppIni(module); createRoster(); initApp = false; if (moduleIndex == 1) { module.scheduleTestCase(82); }//End if if (moduleIndex == 2) { module.scheduleTestCase(88); } }//End if else { // leave at 92 if (moduleIndex == 1) { leaveGroup(); } //invite at 98 if (moduleIndex == 2) { // //we have more candidates? if (candidates.size() > 0) { if (candidatesIndex < candidates.size()) { invitePeer(candidates.get(candidatesIndex++)); } }//End if } } } /** * @brief Execute testcase02: 6 peers, 2 peer leaving + rejoining */ void TestApplication::testCase02() { int moduleIndex = module.getLocalAddress().getHostAddress().get4().getDByte(3); if (initApp) { candidates = OmnetppIniUtils::getDestinationAddressesFromOmnetppIni(module); createRoster(); initApp = false; if (moduleIndex == 1 || moduleIndex == 2) { module.scheduleTestCase(82); }//End if if (moduleIndex == 3) { module.scheduleTestCase(88); } }//End if else { // leave at 92 if (moduleIndex == 1 || moduleIndex == 2) { leaveGroup(); } //invite at 98 if (moduleIndex == 3) { // //we have more candidates? if (candidates.size() > 0) { if (candidatesIndex < candidates.size()) { invitePeer(candidates.get(candidatesIndex++)); module.scheduleTestCase(0.00000000000001); } }//End if } } } /**s * @brief Execute testcase03: 6 peers, 3 peers leaving + rejoining */ void TestApplication::testCase03() { int moduleIndex = module.getLocalAddress().getHostAddress().get4().getDByte(3); if (initApp) { candidates = OmnetppIniUtils::getDestinationAddressesFromOmnetppIni(module); createRoster(); initApp = false; if (moduleIndex > 3) { module.scheduleTestCase(82); }//End if if (moduleIndex == 1) { module.scheduleTestCase(88); } }//End if else { // leave at 92 if (moduleIndex > 3) { leaveGroup(); } //invite at 98 if (moduleIndex == 1) { // //we have more candidates? if (candidates.size() > 0) { if (candidatesIndex < candidates.size()) { invitePeer(candidates.get(candidatesIndex++)); module.scheduleTestCase(0.001); } }//End if } } } /** * @brief Execute testcase04: every tc 21, 2 peers leaving + rejoining */ void TestApplication::testCase04() { int moduleIndex = module.getLocalAddress().getHostAddress().get4().getDByte(3); if (initApp) { candidates = OmnetppIniUtils::getDestinationAddressesFromOmnetppIni(module); createRoster(); initApp = false; if (moduleIndex == 10 || moduleIndex == 20) { module.scheduleTestCase(82); }//End if if (moduleIndex == 1) { module.scheduleTestCase(88); } }//End if else { // leave at 92 if (moduleIndex == 10 || moduleIndex == 20) { leaveGroup(); } //invite at 98 if (moduleIndex == 1) { // //we have more candidates? if (candidates.size() > 0) { if (candidatesIndex < candidates.size()) { invitePeer(candidates.get(candidatesIndex++)); module.scheduleTestCase(0.01); } }//End if } } } /** * @brief Execute testcase05: 12 peers, tc 22 (3 peers leaving + rejoining) */ void TestApplication::testCase05() { int moduleIndex = module.getLocalAddress().getHostAddress().get4().getDByte(3); if (initApp) { candidates = OmnetppIniUtils::getDestinationAddressesFromOmnetppIni(module); createRoster(); initApp = false; if (moduleIndex > 7 && moduleIndex < 11) { module.scheduleTestCase(82); }//End if if (moduleIndex == 1) { module.scheduleTestCase(88); } }//End if else { // leave at 92 if (moduleIndex > 7 && moduleIndex < 11) { leaveGroup(); } //invite at 98 if (moduleIndex == 1) { // //we have more candidates? if (candidates.size() > 0) { if (candidatesIndex < candidates.size()) { invitePeer(candidates.get(candidatesIndex++)); module.scheduleTestCase(0.001); } }//End if } } } /** * @brief Execute testcase06: 12 peers, tc 23 */ void TestApplication::testCase06() { int moduleIndex = module.getLocalAddress().getHostAddress().get4().getDByte(3); if (initApp) { candidates = OmnetppIniUtils::getDestinationAddressesFromOmnetppIni(module); createRoster(); initApp = false; if (moduleIndex > 5 && moduleIndex < 11) { module.scheduleTestCase(82 + moduleIndex * 0.01); }//End if if (moduleIndex == 1) { module.scheduleTestCase(88); } }//End if else { // leave at 92 if (moduleIndex > 5 && moduleIndex < 11) { leaveGroup(); } //invite at 98 if (moduleIndex == 1) { // //we have more candidates? if (candidates.size() > 0) { if (candidatesIndex < candidates.size()) { invitePeer(candidates.get(candidatesIndex++)); module.scheduleTestCase(0.01); } }//End if } } } /** * @brief Execute testcase07: 12 peers, tc 3 */ void TestApplication::testCase07() { int moduleIndex = module.getLocalAddress().getHostAddress().get4().getDByte(3); if (initApp) { candidates = OmnetppIniUtils::getDestinationAddressesFromOmnetppIni(module); createRoster(); initApp = false; if (moduleIndex > 4 && moduleIndex < 11) { module.scheduleTestCase(82 + moduleIndex * 0.01); }//End if if (moduleIndex == 1) { module.scheduleTestCase(88); } }//End if else { // leave at 92 if (moduleIndex > 4 && moduleIndex < 11) { leaveGroup(); } //invite at 98 if (moduleIndex == 1) { // //we have more candidates? if (candidates.size() > 0) { if (candidatesIndex < candidates.size()) { invitePeer(candidates.get(candidatesIndex++)); module.scheduleTestCase(0.01); } }//End if } } } /** * @brief Execute testcase08: 24 tc 22 */ void TestApplication::testCase08() { int moduleIndex = module.getLocalAddress().getHostAddress().get4().getDByte(3); if (initApp) { candidates = OmnetppIniUtils::getDestinationAddressesFromOmnetppIni(module); createRoster(); initApp = false; if (moduleIndex < 3 || (moduleIndex > 10 && moduleIndex < 13) || (moduleIndex > 20 && moduleIndex < 23)) { module.scheduleTestCase(82 + (candidatesIndex++)*0.01); }//End if if (moduleIndex == 3) { module.scheduleTestCase(88); } }//End if else { // leave at 92 if (moduleIndex != 3) { leaveGroup(); } else { // //we have more candidates? if (candidates.size() > 0) { if (candidatesIndex < candidates.size()) { invitePeer(candidates.get(candidatesIndex++)); module.scheduleTestCase(0.01); } }//End if } } } /** * @brief Execute testcase09: 24, tc23 */ void TestApplication::testCase09() { int moduleIndex = module.getLocalAddress().getHostAddress().get4().getDByte(3); if (initApp) { candidates = OmnetppIniUtils::getDestinationAddressesFromOmnetppIni(module); createRoster(); initApp = false; if (moduleIndex < 4 || moduleIndex == 5 || (moduleIndex > 10 && moduleIndex < 14) || moduleIndex == 15 || (moduleIndex > 20 && moduleIndex < 24)) { module.scheduleTestCase(82 + (candidatesIndex++)*0.01); }//End if if (moduleIndex == 4) { module.scheduleTestCase(88); } }//End if else { // leave at 92 if (moduleIndex != 4) { leaveGroup(); } else { // //we have more candidates? if (candidates.size() > 0) { if (candidatesIndex < candidates.size()) { invitePeer(candidates.get(candidatesIndex++)); module.scheduleTestCase(0.01); } }//End if } } } /** * @brief Execute testcase10: 24 tc3 */ void TestApplication::testCase10() { int moduleIndex = module.getLocalAddress().getHostAddress().get4().getDByte(3); if (initApp) { candidates = OmnetppIniUtils::getDestinationAddressesFromOmnetppIni(module); createRoster(); initApp = false; if ((moduleIndex > 2 && moduleIndex < 8) || (moduleIndex > 12 && moduleIndex < 18) || (moduleIndex > 22)) { module.scheduleTestCase(82 + (candidatesIndex++)*0.01); }//End if if (moduleIndex == 1) { module.scheduleTestCase(88); } }//End if else { // leave at 92 if (moduleIndex != 1) { leaveGroup(); } else { // //we have more candidates? if (candidates.size() > 0) { if (candidatesIndex < candidates.size()) { invitePeer(candidates.get(candidatesIndex++)); module.scheduleTestCase(0.01); } }//End if } } } /** * @brief Execute testcase11: 48 tc22 */ void TestApplication::testCase11() { int moduleIndex = module.getLocalAddress().getHostAddress().get4().getDByte(3); if (initApp) { candidates = OmnetppIniUtils::getDestinationAddressesFromOmnetppIni(module); createRoster(); initApp = false; if ((moduleIndex > 6 && moduleIndex < 9) || moduleIndex == 10 || (moduleIndex > 16 && moduleIndex < 19) || moduleIndex == 20 || (moduleIndex > 26 && moduleIndex < 29) || (moduleIndex > 36 && moduleIndex < 39) || moduleIndex > 46) { module.scheduleTestCase(82 + (candidatesIndex++)*0.01); }//End if if (moduleIndex == 1) { module.scheduleTestCase(88); } }//End if else { // leave at 92 if (moduleIndex != 1) { leaveGroup(); } else { // //we have more candidates? if (candidates.size() > 0) { if (candidatesIndex < candidates.size()) { invitePeer(candidates.get(candidatesIndex++)); module.scheduleTestCase(0.01); } }//End if } } } /** * @brief Execute testcase12: 48 tc23 */ void TestApplication::testCase12() { int moduleIndex = module.getLocalAddress().getHostAddress().get4().getDByte(3); if (initApp) { candidates = OmnetppIniUtils::getDestinationAddressesFromOmnetppIni(module); createRoster(); initApp = false; if ((moduleIndex > 5 && moduleIndex < 11) || (moduleIndex > 15 && moduleIndex < 21) || moduleIndex == 20 || (moduleIndex > 25 && moduleIndex < 31) || (moduleIndex > 35 && moduleIndex < 41) || moduleIndex > 45) { module.scheduleTestCase(82 + (moduleIndex * 0.01)); }//End if if (moduleIndex == 1) { module.scheduleTestCase(88); } }//End if else { // leave at 92 if (moduleIndex != 1) { leaveGroup(); } else { // //we have more candidates? if (candidates.size() > 0) { if (candidatesIndex < candidates.size()) { invitePeer(candidates.get(candidatesIndex++)); module.scheduleTestCase(0.01); } }//End if } } } /** * @brief Execute testcase13: 48 tc 3 */ void TestApplication::testCase13() { int moduleIndex = module.getLocalAddress().getHostAddress().get4().getDByte(3); if (initApp) { candidates = OmnetppIniUtils::getDestinationAddressesFromOmnetppIni(module); createRoster(); initApp = false; if ((moduleIndex > 4 && moduleIndex < 10) || (moduleIndex > 14 && moduleIndex < 20) || (moduleIndex > 24 && moduleIndex < 30) || (moduleIndex > 34 && moduleIndex < 40) || moduleIndex > 44) { module.scheduleTestCase(82 + (moduleIndex * 0.01)); }//End if if (moduleIndex == 1) { module.scheduleTestCase(88); } }//End if else { // leave at 92 if (moduleIndex != 1) { leaveGroup(); } else { // //we have more candidates? if (candidates.size() > 0) { if (candidatesIndex < candidates.size()) { invitePeer(candidates.get(candidatesIndex++)); module.scheduleTestCase(0.01); } }//End if } } } /** * @brief Execute testcase14: 72 tc 22 */ void TestApplication::testCase14() { int moduleIndex = module.getLocalAddress().getHostAddress().get4().getDByte(3); if (initApp) { candidates = OmnetppIniUtils::getDestinationAddressesFromOmnetppIni(module); createRoster(); initApp = false; if (moduleIndex < 3 || (moduleIndex > 9 && moduleIndex < 13) || (moduleIndex > 19 && moduleIndex < 23) || (moduleIndex > 30 && moduleIndex < 33) || (moduleIndex > 40 && moduleIndex < 43) || (moduleIndex > 50 && moduleIndex < 53) || (moduleIndex > 60 && moduleIndex < 63) || moduleIndex > 70) { module.scheduleTestCase(82 + (moduleIndex * 0.01)); }//End if if (moduleIndex == 3) { module.scheduleTestCase(88); } }//End if else { // leave at 92 if (moduleIndex != 3) { leaveGroup(); } else { // //we have more candidates? if (candidates.size() > 0) { if (candidatesIndex < candidates.size()) { invitePeer(candidates.get(candidatesIndex++)); module.scheduleTestCase(0.01); } }//End if } } } /** * @brief Execute testcase15: 72 tc 23 */ void TestApplication::testCase15() { int moduleIndex = module.getLocalAddress().getHostAddress().get4().getDByte(3); if (initApp) { candidates = OmnetppIniUtils::getDestinationAddressesFromOmnetppIni(module); createRoster(); initApp = false; if ((moduleIndex > 5 && moduleIndex < 11) || (moduleIndex > 15 && moduleIndex < 21) || (moduleIndex > 25 && moduleIndex < 31) || (moduleIndex > 35 && moduleIndex < 41) || (moduleIndex > 45 && moduleIndex < 51) || (moduleIndex > 55 && moduleIndex < 61) || (moduleIndex > 65 && moduleIndex < 71)) { module.scheduleTestCase(82 + (moduleIndex * 0.01)); }//End if if (moduleIndex == 1) { module.scheduleTestCase(88); } }//End if else { // leave at 92 if (moduleIndex != 1) { leaveGroup(); } else { // //we have more candidates? if (candidates.size() > 0) { if (candidatesIndex < candidates.size()) { invitePeer(candidates.get(candidatesIndex++)); module.scheduleTestCase(0.01); } }//End if } } } /** * @brief Execute testcase16: 72 tc 3 */ void TestApplication::testCase16() { int moduleIndex = module.getLocalAddress().getHostAddress().get4().getDByte(3); if (initApp) { candidates = OmnetppIniUtils::getDestinationAddressesFromOmnetppIni(module); createRoster(); initApp = false; if (moduleIndex == 1 || (moduleIndex > 6 && moduleIndex < 12) || (moduleIndex > 16 && moduleIndex < 22) || (moduleIndex > 26 && moduleIndex < 32) || (moduleIndex > 36 && moduleIndex < 42) || (moduleIndex > 46 && moduleIndex < 52) || (moduleIndex > 56 && moduleIndex < 62) || (moduleIndex > 66 && moduleIndex < 72)) { module.scheduleTestCase(82 + (moduleIndex * 0.015)); }//End if if (moduleIndex == 2) { module.scheduleTestCase(88); } }//End if else { // leave at 92 if (moduleIndex != 2) { leaveGroup(); } else { // //we have more candidates? if (candidates.size() > 0) { if (candidatesIndex < candidates.size()) { invitePeer(candidates.get(candidatesIndex++)); module.scheduleTestCase(0.01); } }//End if } } } /** * @brief Execute testcase17: 96 tc22 */ void TestApplication::testCase17() { int moduleIndex = module.getLocalAddress().getHostAddress().get4().getDByte(3); if (initApp) { candidates = OmnetppIniUtils::getDestinationAddressesFromOmnetppIni(module); createRoster(); initApp = false; if ((moduleIndex > 2 && moduleIndex < 5) || moduleIndex == 10 || (moduleIndex > 12 && moduleIndex < 15) || moduleIndex == 20 || (moduleIndex > 22 && moduleIndex < 25) || moduleIndex == 30 || (moduleIndex > 32 && moduleIndex < 35) || moduleIndex == 40 || (moduleIndex > 42 && moduleIndex < 45) || (moduleIndex > 52 && moduleIndex < 55) || (moduleIndex > 62 && moduleIndex < 65) || (moduleIndex > 72 && moduleIndex < 75) || (moduleIndex > 82 && moduleIndex < 85) || (moduleIndex > 92 && moduleIndex < 95)) { module.scheduleTestCase(82 + (moduleIndex * 0.03)); }//End if if (moduleIndex == 1) { module.scheduleTestCase(88); } }//End if else { // leave at 92 if (moduleIndex != 1) { leaveGroup(); } else { // //we have more candidates? if (candidates.size() > 0) { if (candidatesIndex < candidates.size()) { invitePeer(candidates.get(candidatesIndex++)); module.scheduleTestCase(0.03); } }//End if } } } /** * @brief Execute testcase18: 96 tc 23 */ void TestApplication::testCase18() { int moduleIndex = module.getLocalAddress().getHostAddress().get4().getDByte(3); if (initApp) { candidates = OmnetppIniUtils::getDestinationAddressesFromOmnetppIni(module); createRoster(); initApp = false; if (moduleIndex < 5 || (moduleIndex > 9 && moduleIndex < 15) || (moduleIndex > 19 && moduleIndex < 25) || (moduleIndex > 29 && moduleIndex < 35) || (moduleIndex > 39 && moduleIndex < 45) || (moduleIndex > 49 && moduleIndex < 55) || (moduleIndex > 59 && moduleIndex < 65) || (moduleIndex > 69 && moduleIndex < 75) || (moduleIndex > 79 && moduleIndex < 85) || (moduleIndex > 89 && moduleIndex < 95)) { module.scheduleTestCase(82 + (moduleIndex * 0.015)); }//End if if (moduleIndex == 5) { module.scheduleTestCase(88); } }//End if else { // leave at 92 if (moduleIndex != 5) { leaveGroup(); } else { // //we have more candidates? if (candidates.size() > 0) { if (candidatesIndex < candidates.size()) { invitePeer(candidates.get(candidatesIndex++)); module.scheduleTestCase(0.015); } }//End if } } } /** * @brief Execute testcase19: 96 tc3 */ void TestApplication::testCase19() { int moduleIndex = module.getLocalAddress().getHostAddress().get4().getDByte(3); if (initApp) { candidates = OmnetppIniUtils::getDestinationAddressesFromOmnetppIni(module); createRoster(); initApp = false; if ((moduleIndex > 3 && moduleIndex < 9) || (moduleIndex > 13 && moduleIndex < 19) || (moduleIndex > 23 && moduleIndex < 29) || (moduleIndex > 33 && moduleIndex < 39) || (moduleIndex > 43 && moduleIndex < 49) || (moduleIndex > 53 && moduleIndex < 59) || (moduleIndex > 63 && moduleIndex < 69) || (moduleIndex > 73 && moduleIndex < 79) || (moduleIndex > 83 && moduleIndex < 89) || (moduleIndex > 93)) { module.scheduleTestCase(82 + (moduleIndex * 0.015)); }//End if if (moduleIndex == 1) { module.scheduleTestCase(88); } }//End if else { // leave at 92 if (moduleIndex != 1) { leaveGroup(); } else { // //we have more candidates? if (candidates.size() > 0) { if (candidatesIndex < candidates.size()) { invitePeer(candidates.get(candidatesIndex++)); module.scheduleTestCase(0.02); } }//End if } } } /** * @brief: Micha's testcase: all 96 peer alone in their "partition" */ void TestApplication::testCase20() { int moduleIndex = module.getLocalAddress().getHostAddress().get4().getDByte(3); if (initApp) { candidates = OmnetppIniUtils::getDestinationAddressesFromOmnetppIni(module); waitCounter = 5; initApp = false; }//End if //------------------------------------------------------------------ //run the app //------------------------------------------------------------------ if (moduleIndex == 1) { // starts counting at 1 //we have more candidates? if (candidates.size() > 0) { if (candidatesIndex < candidates.size()) { invitePeer(candidates.get(candidatesIndex++)); module.scheduleTestCase(0.02); } }//End if }//End if } void TestApplication::testCase21() { int moduleIndex = module.getLocalAddress().getHostAddress().get4().getDByte(3); //------------------------------------------------------------------ //run the app //------------------------------------------------------------------ if (moduleIndex == 1) { // starts counting at 1 Roster roster; roster.setNextPeerID(5); //roster.setNumberOfClusters(3); roster.setViewID(10); PeerDescription dummyPDesc; PeerResources dummyPRes; TransportAddress ta = getNewTransportAddress(1); ta.setPort(module.getLocalAddress().getPort()); MemberDescription mDesc1(1, ta, JOINED, 0, dummyPDesc, dummyPRes); roster.addMemberDescription(mDesc1); ta.setPort(module.getLocalAddress().getPort()); MemberDescription mDesc2(2, ta, JOINED, 1, dummyPDesc, dummyPRes); roster.addMemberDescription(mDesc2); ta.setPort(module.getLocalAddress().getPort()); MemberDescription mDesc3(3, ta, JOINED, 2, dummyPDesc, dummyPRes); roster.addMemberDescription(mDesc3); dis->setupGroupFromRoster(roster, module.getLocalAddress().getHostAddress().get4().getDByte(3)); TransportAddress ta2(IPvXAddress("192.168.0.3"), module.getLocalAddress().getPort()); invitePeer(ta2); }//End if } /** * @brief Method to create a roster from which the group is set up. */ void TestApplication::createRoster() { int numberOfAllPeers = numberOfPeers + numberOfMobilePeers; Roster roster; roster.setNextPeerID(numberOfAllPeers + 1); // roster.setNumberOfClusters(clusterSize); roster.setViewID(numberOfAllPeers + 1); PeerDescription dummyPDesc; PeerResources dummyPRes; ClusterID cID = 0; if (clusterSize <= 1) { // necessary to make sure if the numberOfPeers is equal or smaller than // the maxPeerCount that only one cluster is created! // roster.setNumberOfClusters(1); roster.setViewID(numberOfAllPeers + 1); roster.setNextPeerID(numberOfAllPeers + 1); } for (int i = 1; i <= numberOfAllPeers; i++) { TransportAddress ta = getNewTransportAddress(i); ta.setPort(module.getLocalAddress().getPort()); MemberDescription mDesc(i, ta, JOINED, cID, dummyPDesc, dummyPRes); roster.addMemberDescription(mDesc); if ((i % module.getMaxPeerCount()) == 0) { cID++; }//End if } dis->setupGroupFromRoster(roster, module.getLocalAddress().getHostAddress().get4().getDByte(3)); } /** * @brief Getting a transportAddress for a given index. * @param i The index of the peer a TA is searched for. * @return The created TA. */ TransportAddress TestApplication::getNewTransportAddress(int i) { std::stringstream taStream; taStream << "192.168.0." << i; std::string s(taStream.str()); return TransportAddress(IPvXAddress(s.c_str())); } /** * @brief Callback method. This method is called by moversight to signal that the local peer have receive a group data message. * @param dat The received group data. * @param sender The sending peer ID. */ void TestApplication::receiveGroupData(const GroupData & dat, const PeerID sender) { std::stringstream buf; buf << "receiveGroupData - receive group data from peer ID " << sender; DEBUG(buf.str().c_str()); dtDelayStat.stopRecord(); VectorStatistic vs("receiveGroupData"); vs.record(GenericTime::currentTime()); } void TestApplication::testCase22() { int moduleIndex = module.getLocalAddress().getHostAddress().get4().getDByte(3); if (initApp) { candidates = OmnetppIniUtils::getDestinationAddressesFromOmnetppIni(module); waitCounter = 5; initApp = false; }//End if //------------------------------------------------------------------ //run the app //------------------------------------------------------------------ if (moduleIndex == 1) { // starts counting at 1 //we have more candidates? if (candidates.size() > 0) { if (candidatesIndex < candidates.size()) { std::cerr << "peer " << moduleIndex << " invitePeer " << candidates.get(candidatesIndex) << "\n"; invitePeer(candidates.get(candidatesIndex++)); module.scheduleTestCase(10); } }//End if }//End if if (moduleIndex == 2) { // starts counting at 1 if (groupSize >= 2) { //we have more candidates? if (candidates.size() > 0) { if (candidatesIndex < candidates.size()) { std::cerr << "peer " << moduleIndex << " invitePeer " << candidates.get(candidatesIndex) << "\n"; invitePeer(candidates.get(candidatesIndex++)); } } }//End if module.scheduleTestCase(10); }//End if } /** * @brief Callback method. This method is called by moversight to signal * that a the local instance have received an invitation. * @param invitation The received invitation. */ void TestApplication::handleEvent(const JoinRequestEvent & e) { DEBUG("invitationReceived - invitation received"); std::stringstream buf; buf << "invitationReceived - invitationID: " << e.getInvitation().getInvitationID() << " inviterID: " << e.getInvitation().getInviterID(); DEBUG(buf.str().c_str()); // if(module.localAddress() == 1 || module.localAddress() == 3 ){ // // MOV_DEBUG << "APP_invitationReceived@TA_" << module.localAddress() << " reject invitation" << endl; // gc->rejectInvitaion(invitation, "peer placing strategy not supported"); // // }//End if // else{ DEBUG("invitationReceived - accept invitation"); PeerDescription pDesc; PeerResources resources; dis->acceptInvitation(e.getInvitation(), "accept invitation", pDesc, resources); // }//End else } /** * @brief Callback method. This method is called by moversight to signal that the remote peer have accepted the invitation from the local peer. * @param inv The corresponding invitation. * @param pDesc The provided peer description of the remote peer. * @param message A short application message from the remote peer, used to introduce itself within the group. */ void TestApplication::handleEvent(const JoinConfirmEvent & e) { std::stringstream buf; buf << "receiveInvitationResponse - peer at TA: " << e.getInvitation().getInviteeAddress() << " accept invitation " << e.getInvitation().getInvitationID(); buf << " message: " << e.getMessage() << ", peer description: " << e.getDescription().getDescription(); DEBUG(buf.str().c_str()); } /** * @brief Callback method. This method is called by moversight to signal that the invitation process is aborted. * @param inv The corresponding invitation. * @param reason The abort reason. */ void TestApplication::handleEvent(const JoinRejectedEvent & e) { std::stringstream buf; buf << "invitationAborted - invitation ID " << e.getInvitation().getInvitationID() << " aborted"; buf << " reason: " << e.getReason(); DEBUG(buf.str().c_str()); } /** * @brief Callback method. This method is called by moversight to signal that the invitation process is aborted. * @param ta The transport address of the peer to invite. * @param reason The abort reason. */ void TestApplication::handleEvent(const JoinAbortedEvent & e) { std::stringstream buf; buf << "invitationAborted - invitation to peer " << e.getTransportAddress() << " aborted"; buf << " reason: " << e.getReason(); DEBUG(buf.str().c_str()); } void TestApplication::handleEvent(const GroupCreatedEvent & e) { groupSize = 1; groupSizeStat.record(groupSize); PeerResources myResources(100); dis->setLocalPeerResources(myResources); } /** * @brief Called, if the group closed. */ void TestApplication::handleEvent(const GroupClosedEvent & e) { DEBUG("group closed"); leaveDelayStat.stopRecord(); } void TestApplication::handleEvent(const PeerJoinedEvent & e) { std::stringstream buf; buf << "peerJoined - peer " << e.getPeerID() << "@TA_" << e.getTransportAddress() << " joined group successfully (" << e.getDescription().getDescription() << ")"; DEBUG(buf.str().c_str()); dis->signal(new StopMeasuringEvent("REJOIN")); joinDelayStat.stopRecord(); groupSizeStat.record(++groupSize); } /** * @brief Signals, that a dedicated peer is pending. * @param pId The id of the pending peer. * @param ta The transport address of the pending peer. - TODO not needed!! */ void TestApplication::handleEvent(const PendingPeersEvent & e) { std::stringstream buf; buf << "peerIsPending - peer " << e.getPeerIDList() << " is pending"; DEBUG(buf.str().c_str()); } /** * @brief Signal the reconnection of the pending peer. * @param pId The peer ID of the reconnected peer. * @param ta Its transport address. - TODO not needed either */ void TestApplication::handleEvent(const PeerReconnectedEvent & e) { std::stringstream buf; buf << "peerReconnected - peer " << e.getPeerID() << " is reconnected"; DEBUG(buf.str().c_str()); } /** * @brief Signals, that a dedicated peer has left the group. * @param peer The left peer. */ void TestApplication::handleEvent(const PeerLeftEvent & e) { std::stringstream buf; buf << "peerLeft - peer " << e.getPeer().getPeerID() << "@TA_" << e.getPeer().getLocalAddress() << " left the group"; DEBUG(buf.str().c_str()); groupSizeStat.record(--groupSize); dis->signal(new StartMeasuringEvent("TG")); } /** * @brief Starts the measuring of the given parameter. * @param s The measurement to start measuring. */ void TestApplication::handleEvent(const StartMeasuringEvent & e) { std::string startS = "start" + e.getMeasurement(); VectorStatistic vs(startS.c_str()); if (e.getMeasurement() == "REJOIN") { vs.record(GenericTime::currentTime()); rejoinSuccessDuration.startRecord(); } if (e.getMeasurement() == "TG") { vs.record(GenericTime::currentTime()); leaveDelayStat.startRecord(); } } /** * @brief Starts the measuring of the given parameter. * @param s The measurement to start measuring. */ void TestApplication::handleEvent(const StopMeasuringEvent & e) { std::string startS = "stop" + e.getMeasurement(); VectorStatistic vs(startS.c_str()); if (e.getMeasurement() == "REJOIN") { vs.record(GenericTime::currentTime()); rejoinSuccessDuration.startRecord(); } if (e.getMeasurement() == "TG") { vs.record(GenericTime::currentTime()); leaveDelayStat.stopRecord(); } } }//End namespace moversight }//End namespace ubeeme