System test feature
[anna.git] / example / diameter / launcher / MyLocalServer.cpp
index 4bc8eba..8127d84 100644 (file)
 #include <anna/diameter.comm/Server.hpp>
 
 // Process
-#include "MyLocalServer.hpp"
-#include "MyDiameterEngine.hpp"
-#include "MyDiameterEntity.hpp"
-#include "Launcher.hpp"
-#include "RealmNode.hpp"
+#include <MyLocalServer.hpp>
+#include <MyDiameterEngine.hpp>
+#include <MyDiameterEntity.hpp>
+#include <Launcher.hpp>
+#include <RealmNode.hpp>
+#include <TestManager.hpp>
 
 
 void MyLocalServer::eventRequest(anna::diameter::comm::ServerSession *serverSession, const anna::DataBlock &message)
@@ -30,6 +31,9 @@ throw(anna::RuntimeException) {
   Launcher& my_app = static_cast <Launcher&>(anna::app::functions::getApp());
   RealmNode * my_node = my_app.getRealmNode(getEngine()->getRealm());
 
+  // Testing:
+  TestManager::instantiate().receiveMessage(message, serverSession);
+
   // CommandId:
   anna::diameter::CommandId cid = anna::diameter::codec::functions::getCommandId(message);
   LOGDEBUG
@@ -102,11 +106,11 @@ throw(anna::RuntimeException) {
   if(!analysisOK)
     a_codecEngine->setValidationMode(anna::diameter::codec::Engine::ValidationMode::Never);
 
+  anna::diameter::comm::Message *msg;
   try {
-    anna::diameter::comm::Message *msg = my_node->createCommMessage();
+    msg = my_node->createCommMessage();
     msg->setBody(answer_message->code());
     /* response = NULL =*/serverSession->send(msg);
-    my_node->releaseCommMessage(msg);
 
     if(my_node->logEnabled()) my_node->writeLogFile(*answer_message, "sent2c", serverSession->asString());
   } catch(anna::RuntimeException &ex) {
@@ -114,6 +118,9 @@ throw(anna::RuntimeException) {
     if(my_node->logEnabled()) my_node->writeLogFile(*answer_message, "send2cError", serverSession->asString());
   }
 
+  // release msg
+  my_node->releaseCommMessage(msg);
+
   // Restore validation mode
   a_codecEngine->setValidationMode(backupVM);
 
@@ -136,6 +143,10 @@ throw(anna::RuntimeException) {
   bool contextExpired = (result == anna::diameter::comm::Response::ResultCode::Timeout);
   bool isUnavailable = (result == anna::diameter::comm::Response::ResultCode::DiameterUnavailable);
   bool isOK = (result == anna::diameter::comm::Response::ResultCode::Success);
+
+  // Testing:
+  TestManager::instantiate().receiveMessage(*message, serverSession);
+
   // CommandId:
   anna::diameter::CommandId request_cid = request->getCommandId();
   LOGDEBUG
@@ -183,9 +194,10 @@ throw(anna::RuntimeException) {
       std::string detail;
 
       if(my_node->logEnabled()) detail = usedClientSession ? usedClientSession->asString() : "<null client session>";  // this should not happen
+      anna::diameter::comm::Message *msg;
 
       try {
-        anna::diameter::comm::Message *msg = my_node->createCommMessage();
+        msg = my_node->createCommMessage();
         msg->forwardEndToEnd(); // end-to-end will be kept
         msg->setBody(*message);
 
@@ -196,14 +208,15 @@ throw(anna::RuntimeException) {
         //msg->setRequestClientSessionKey(request->getRequestClientSessionKey());
         //bool success = entity->send(msg);
 
-        my_node->releaseCommMessage(msg);
-        my_node->releaseCommMessage(request);
-
         if(my_node->logEnabled()) my_node->writeLogFile(*message, "fwd2e", detail);  // forwarded
       } catch(anna::RuntimeException &ex) {
         ex.trace();
         if(my_node->logEnabled()) my_node->writeLogFile(*message, "fwd2eError", detail);  // forwarded
       }
+
+      // release msgs
+      my_node->releaseCommMessage(msg);
+      my_node->releaseCommMessage(request);
     }
   }
 }