Commit e80d7b0c authored by thorsten's avatar thorsten
Browse files

* New test for closed relays

parent 96861037
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MODULE ApplicationTests
#include <boost/test/unit_test.hpp>
#include <relaymq.h>
#include <thread>
#include "../include/Relay.h"
#include "../include/Socket.h"
#include "../include/ApplicationContext.h"
#include "../include/Subject.h"
class PingPongSubject: public Subject{
public:
PingPongSubject(int limit):
limit(limit),
curr(0){
}
private:
int limit;
int curr;
RelayRef theOtherGuy;
/**
* Wird 1x pro Sekunde aufgerufen, wenn es keine Nachrichten gibt.
*
*
* @return true, wenn alles OK ist
* false, wenn das Subject beendet werden soll (Selbstzerstörung)
*/
void onTimeout(){
if (curr > limit){
theOtherGuy->Close();
this->Stop();
}
}
/**
* Wird aufgerufen, wenn eine Nachricht auf eines Relays, die diesem Subject gehören, gesendet wird
*
* @param receiver: Das Relay, das die Nachricht empfangen hat
* @param msg: Die Nachricht als String
* @param refs: Ein Vector von Referenzen, die mitgeschickt wurden
* @return: True, falls das Relay weiterhin empfangen soll
*/
virtual void onMessage(RelayRef receiver, std::string msg, std::vector<RelayRef> refs){
if(msg == "INIT"){//Aus der MAIN
theOtherGuy = refs[0];
bool ok = theOtherGuy->Send("INTRODUCE", {receiver});
assert(ok);
}else
if(msg == "INTRODUCE"){//Vom anderen Subject
theOtherGuy = refs[0];
theOtherGuy->Send("PING",{});
} else
if(msg == "PING"){
puts(msg.c_str());
theOtherGuy->Send("PONG", {});
curr++;
}
else
if(msg == "PONG"){
puts(msg.c_str());
theOtherGuy->Send("PING", {});
curr++;
}
if(msg == "PONG"){
puts(msg.c_str());
}
}
void onClose(RelayRef r){
zsys_debug("My limit id %i", limit);
}
};
BOOST_AUTO_TEST_CASE(ping_pong_test ){
puts("=============== ping_pong_test() ==================");
/*Boilerplate-Code, der im Hintergrund alles aufsetzt*/
ApplicationContext::Init(100);
/*Jedes Subject soll 1000 Nachrichten senden*/
int limit = 1000;
/* Erstellt das Subject und setzt limit*/
auto ping = ApplicationContext::Create<PingPongSubject>(limit);
auto pong = ApplicationContext::Create<PingPongSubject>(limit*1000);
/*
* Sendet Nachricht und Referenz an das Subject
*/
pong->Send("INIT", {ping});
/*
* Startet die Application:
* 1) Die main-Methode blockiert hier bis alle Subjects gelöscht sind
* 2) Das Zustellen von Nachrichten beginnt
*/
ApplicationContext::Start();
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment