Add fourth work package for REST API implementation
[anna.git] / example / diameter / launcher / EventOperation.cpp
index 7709fb1..8d8a97d 100644 (file)
@@ -20,6 +20,7 @@
 //// Standard
 //#include <sstream>      // std::istringstream
 //#include <iostream>     // std::cout
+#include <fstream>
 //#include <math.h> // ceil
 //#include <climits>
 #include <unistd.h> // chdir
@@ -857,26 +858,59 @@ bool EventOperation::test_id__waitfefc(std::string &response, unsigned int id, b
 bool EventOperation::test__ttps(std::string &response, int amount) {
 
   Launcher& my_app = static_cast <Launcher&>(anna::app::functions::getApp());
+  anna::testing::TestManager &testManager = anna::testing::TestManager::instantiate();
 
+  bool success = testManager.configureTTPS(amount);
+  if (success) {
+    response = "Assigned new test launch rate to ";
+    response += anna::functions::asString(amount);
+    response += " events per second";
+  }
+  else {
+    response += "unable to configure the test rate provided";
+  }
 
-
-  return true; // OK
+  return success; // OK
 }
 
 bool EventOperation::test__next(std::string &response, int syncAmount) {
 
   Launcher& my_app = static_cast <Launcher&>(anna::app::functions::getApp());
+  anna::testing::TestManager &testManager = anna::testing::TestManager::instantiate();
 
+  if (syncAmount < 1) {
+    response += "the parameter 'sync-amount' must be a positive integer value";
+    return false;
+  }
 
+  bool success = testManager.execTestCases(syncAmount);
 
-  return true; // OK
+  response = (success ? "P" : "Not completely p" /* completed cycle and no repeats, rare case */);
+  response += "rocessed ";
+  response += anna::functions::asString(syncAmount);
+  response += ((syncAmount > 1) ? " test cases synchronously" : " test case");
+
+  return success;
 }
 
 bool EventOperation::test__ip_limit(std::string &response, int amount) {
 
   Launcher& my_app = static_cast <Launcher&>(anna::app::functions::getApp());
+  anna::testing::TestManager &testManager = anna::testing::TestManager::instantiate();
 
-
+  if (amount > -2) {
+    testManager.setInProgressLimit(amount);
+    response = "New in-progress limit: ";
+    response += (amount != -1) ? anna::functions::asString(amount) : "<no limit>";
+  }
+  else {
+    response = "In-progress limit amount: ";
+    int limit = testManager.getInProgressLimit();
+    response += (limit != -1) ? anna::functions::asString(limit) : "<no limit>";
+    response += "; currently there are ";
+    response += anna::functions::asString(testManager.getInProgressCount());
+    response += " test cases running";
+  }
 
   return true; // OK
 }
@@ -884,26 +918,64 @@ bool EventOperation::test__ip_limit(std::string &response, int amount) {
 bool EventOperation::test__goto(std::string &response, int id) {
 
   Launcher& my_app = static_cast <Launcher&>(anna::app::functions::getApp());
+  anna::testing::TestManager &testManager = anna::testing::TestManager::instantiate();
 
+  bool success = testManager.gotoTestCase(id);
 
+  if (success) {
+    response = "Position updated for id provided (";
+  }
+  else {
+    response += "cannot found test id (";
+  }
+  response += anna::functions::asString(id);
+  response += ")";
 
-  return true; // OK
+  return success;
 }
 
 bool EventOperation::test__run(std::string &response, int id) {
 
   Launcher& my_app = static_cast <Launcher&>(anna::app::functions::getApp());
+  anna::testing::TestManager &testManager = anna::testing::TestManager::instantiate();
 
+  bool success = testManager.runTestCase(id);
 
+  if (success) {
+    response = "Test executed for id provided (";
+  }
+  else {
+    response += "cannot found test id (";
+  }
+  response += anna::functions::asString(id);
+  response += ")";
 
-  return true; // OK
+  return success;
 }
 
 bool EventOperation::test__look(std::string &response, int id) {
 
   Launcher& my_app = static_cast <Launcher&>(anna::app::functions::getApp());
+  anna::testing::TestManager &testManager = anna::testing::TestManager::instantiate();
 
+  anna::testing::TestCase *testCase = testManager.findTestCase(id);
+  if (!testCase) {
+    if (id == -1) {
+       response += "no current test case detected (testing started ?)";
+    }
+    else {
+      response += "cannot found test id (";
+      response += anna::functions::asString(id);
+      response += ")";
+    }
 
+    return false;
+  }
+
+  if (a_http)
+    response = anna::functions::encodeBase64(testCase->asXMLString());
+  else
+    response = testCase->asXMLString();
 
   return true; // OK
 }
@@ -911,26 +983,89 @@ bool EventOperation::test__look(std::string &response, int id) {
 bool EventOperation::test__state(std::string &response, int id) {
 
   Launcher& my_app = static_cast <Launcher&>(anna::app::functions::getApp());
+  anna::testing::TestManager &testManager = anna::testing::TestManager::instantiate();
 
+  anna::testing::TestCase *testCase = testManager.findTestCase(id);
+  if (!testCase) {
+    if (id == -1) {
+       response += "no current test case detected (testing started ?)";
+    }
+    else {
+      response += "cannot found test id (";
+      response += anna::functions::asString(id);
+      response += ")";
+    }
 
+    return false;
+  }
 
-  return true; // OK
+  response = anna::testing::TestCase::asText(testCase->getState());
+  return testCase->isSuccess();
 }
 
 bool EventOperation::test__interact(std::string &response, int amount, unsigned int id) {
 
   Launcher& my_app = static_cast <Launcher&>(anna::app::functions::getApp());
+  anna::testing::TestManager &testManager = anna::testing::TestManager::instantiate();
 
+  if (amount < -1) {
+    response += "interactive amount must be -1 (to disable interactive mode) or a positive number.";
+    return false;
+  }
 
+  anna::testing::TestCase *testCase = testManager.findTestCase(id);
+  if (testCase) {
+    if (amount == -1) {
+      testCase->makeInteractive(false);
+      response = "Interactive mode disabled";
+    }
+    else {
+      testCase->addInteractiveAmount(amount);
+      response = "Added interactive amount of ";
+      response += anna::functions::asString(amount);
+      response += " units";
+      if (amount == 0) response += " (0: freezing a non-interactive testcase, no effect on already interactive)";
+    }
+    response += " for test case id ";
+    response += anna::functions::asString(id);
+  }
+  else {
+    response += "cannot found test id (";
+    response += anna::functions::asString(id);
+    response += ")";
+    return false;
+  }
 
   return true; // OK
 }
 
-bool EventOperation::test__reset(std::string &response, bool soft_hard, unsigned int id) {
+bool EventOperation::test__reset(std::string &response, bool soft_hard, int id) {
 
   Launcher& my_app = static_cast <Launcher&>(anna::app::functions::getApp());
+  anna::testing::TestManager &testManager = anna::testing::TestManager::instantiate();
 
-
+  anna::testing::TestCase *testCase = ((id != -1) ? testManager.findTestCase(id) : NULL);
+  if (testCase) {
+    bool done = testCase->reset(!soft_hard);
+    response = "Test ";
+    response += (soft_hard ? "soft":"hard");
+    response += " reset for id ";
+    response += anna::functions::asString(id);
+    response += done ? ": done": ": not done";
+  }
+  else {
+    if (id == -1) {
+      bool anyReset = testManager.resetPool(!soft_hard);
+      response = (soft_hard ? "Soft":"Hard");
+      response += " reset have been sent to all programmed tests: "; response += anyReset ? "some/all have been reset" : "nothing was reset";
+    }
+    else {
+      response += "cannot found test id (";
+      response += anna::functions::asString(id);
+      response += ")";
+      return false;
+    }
+  }
 
   return true; // OK
 }
@@ -938,8 +1073,12 @@ bool EventOperation::test__reset(std::string &response, bool soft_hard, unsigned
 bool EventOperation::test__repeats(std::string &response, int amount) {
 
   Launcher& my_app = static_cast <Launcher&>(anna::app::functions::getApp());
+  anna::testing::TestManager &testManager = anna::testing::TestManager::instantiate();
 
-
+  if (amount < 0) amount = -1;
+  testManager.setPoolRepeats(amount);
+  std::string nolimit = (amount != -1) ? "":" [no limit]";
+  response = anna::functions::asString("Pool repeats: %d%s (current cycle: %d)", amount, nolimit.c_str(), testManager.getPoolCycle());
 
   return true; // OK
 }
@@ -947,8 +1086,10 @@ bool EventOperation::test__repeats(std::string &response, int amount) {
 bool EventOperation::test__auto_reset(std::string &response, bool soft_hard) {
 
   Launcher& my_app = static_cast <Launcher&>(anna::app::functions::getApp());
+  anna::testing::TestManager &testManager = anna::testing::TestManager::instantiate();
 
-
+  testManager.setAutoResetHard(!soft_hard);
+  response = anna::functions::asString("Auto-reset configured to '%s'", (soft_hard ? "soft":"hard"));
 
   return true; // OK
 }
@@ -956,8 +1097,9 @@ bool EventOperation::test__auto_reset(std::string &response, bool soft_hard) {
 bool EventOperation::test__initialized(std::string &response) {
 
   Launcher& my_app = static_cast <Launcher&>(anna::app::functions::getApp());
+  anna::testing::TestManager &testManager = anna::testing::TestManager::instantiate();
 
-
+  response = anna::functions::asString("%lu", testManager.getInitializedCount());
 
   return true; // OK
 }
@@ -965,8 +1107,9 @@ bool EventOperation::test__initialized(std::string &response) {
 bool EventOperation::test__finished(std::string &response) {
 
   Launcher& my_app = static_cast <Launcher&>(anna::app::functions::getApp());
+  anna::testing::TestManager &testManager = anna::testing::TestManager::instantiate();
 
-
+  response = anna::functions::asString("%lu", testManager.getFinishedCount());
 
   return true; // OK
 }
@@ -976,28 +1119,30 @@ bool EventOperation::test__clear(std::string &response) {
   Launcher& my_app = static_cast <Launcher&>(anna::app::functions::getApp());
   anna::testing::TestManager &testManager = anna::testing::TestManager::instantiate();
 
-  try {
-    if (testManager.clearPool()) {
-      response = "All the programmed test cases have been dropped";
-    }
-    else {
-      response = "There are not programmed test cases to be removed";
-    }
-  }
-  catch(anna::RuntimeException &ex) {
-    ex.trace();
-    response += "failed";
-    return false;
-  }
-
-  return true; // OK
+  return testManager.clearPool(response);
 }
 
 bool EventOperation::test__junit(std::string &response, const std::string & targetFile) {
 
   Launcher& my_app = static_cast <Launcher&>(anna::app::functions::getApp());
+  anna::testing::TestManager &testManager = anna::testing::TestManager::instantiate();
 
+  std::ofstream out;
+  out.open(targetFile.c_str());
 
+  if(out.is_open() == false) {
+    response += "error opening '";
+    response += targetFile;
+    response += "'";
+    return false;
+  }
+
+  out << testManager.junitAsXMLString() << std::endl;
+  out.close();
+
+  response = "Junit report written on '";
+  response += targetFile;
+  response += "'";
 
   return true; // OK
 }
@@ -1005,8 +1150,9 @@ bool EventOperation::test__junit(std::string &response, const std::string & targ
 bool EventOperation::test__summary_counts(std::string &response) {
 
   Launcher& my_app = static_cast <Launcher&>(anna::app::functions::getApp());
+  anna::testing::TestManager &testManager = anna::testing::TestManager::instantiate();
 
-
+  response = anna::functions::encodeBase64(testManager.summaryCounts());
 
   return true; // OK
 }
@@ -1014,8 +1160,9 @@ bool EventOperation::test__summary_counts(std::string &response) {
 bool EventOperation::test__summary_states(std::string &response) {
 
   Launcher& my_app = static_cast <Launcher&>(anna::app::functions::getApp());
+  anna::testing::TestManager &testManager = anna::testing::TestManager::instantiate();
 
-
+  response = anna::functions::encodeBase64(testManager.summaryStates());
 
   return true; // OK
 }
@@ -1023,8 +1170,9 @@ bool EventOperation::test__summary_states(std::string &response) {
 bool EventOperation::test__summary(std::string &response) {
 
   Launcher& my_app = static_cast <Launcher&>(anna::app::functions::getApp());
+  anna::testing::TestManager &testManager = anna::testing::TestManager::instantiate();
 
-
+  response = anna::functions::encodeBase64(testManager.asXMLString());
 
   return true; // OK
 }
@@ -1032,8 +1180,36 @@ bool EventOperation::test__summary(std::string &response) {
 bool EventOperation::test__report(std::string &response, const std::string & state, bool enable) {
 
   Launcher& my_app = static_cast <Launcher&>(anna::app::functions::getApp());
+  anna::testing::TestManager &testManager = anna::testing::TestManager::instantiate();
 
+  std::string _state = state;
+
+  if(_state == "initialized")
+    testManager.setDumpInitializedReports(enable);
+  else if(_state == "in-progress")
+    testManager.setDumpInProgressReports(enable);
+  else if(_state == "failed")
+    testManager.setDumpFailedReports(enable);
+  else if(_state == "success")
+    testManager.setDumpSuccessReports(enable);
+  else if(_state == "all") {
+    _state = "any";
+    testManager.setDumpAllReports(enable);
+  }
+  else if(_state == "none") {
+    enable = !enable;
+    _state = "any";
+    testManager.setDumpAllReports(enable);
+  }
+  else {
+    response += "invalid state (allowed: initialized|in-progress|failed|success|[all]|none)";
+    return false;
+  }
 
+  response = (enable ? "Report enabled " : "Report disabled ");
+  response += "for tests in '";
+  response += _state;
+  response += "' state";
 
   return true; // OK
 }
@@ -1041,8 +1217,10 @@ bool EventOperation::test__report(std::string &response, const std::string & sta
 bool EventOperation::test__report_hex(std::string &response, bool enable) {
 
   Launcher& my_app = static_cast <Launcher&>(anna::app::functions::getApp());
+  anna::testing::TestManager &testManager = anna::testing::TestManager::instantiate();
 
-
+  testManager.setDumpHex(enable);
+  response = (testManager.getDumpHex() ? "Report includes hexadecimal messages" : "Report excludes hexadecimal messages");
 
   return true; // OK
 }
@@ -1050,10 +1228,11 @@ bool EventOperation::test__report_hex(std::string &response, bool enable) {
 bool EventOperation::test__dump_stdout(std::string &response, bool enable) {
 
   Launcher& my_app = static_cast <Launcher&>(anna::app::functions::getApp());
+  anna::testing::TestManager &testManager = anna::testing::TestManager::instantiate();
 
-
+  testManager.setDumpStdout(enable);
+  response = (testManager.getDumpStdout() ? "Test manager dumps progress into stdout" : "Test manager does not dump progress into stdout");
 
   return true; // OK
 }
 
-