X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=example%2Fdiameter%2Flauncher%2Ftesting%2FTestManager.cpp;h=ea340b9be60a02bea193aa04782dece5fa4c9da9;hb=f92f99bd9a76474ef38c0437a181bfb0a0e14262;hp=40d8286bc047085d51a0c633339a15a268cf69a1;hpb=4c3f0a4d7e4db76996404d80c6f939548fca656f;p=anna.git diff --git a/example/diameter/launcher/testing/TestManager.cpp b/example/diameter/launcher/testing/TestManager.cpp index 40d8286..ea340b9 100644 --- a/example/diameter/launcher/testing/TestManager.cpp +++ b/example/diameter/launcher/testing/TestManager.cpp @@ -7,6 +7,7 @@ // Standard #include +#include // Project #include @@ -33,8 +34,10 @@ TestManager::TestManager() : a_timeController = NULL; a_reportsDirectory = "./"; a_dumpReports = false; + a_dumpHexMessages = false; a_synchronousAmount = 1; - a_poolRepeat = false; + a_poolRepeats = 0; // repeat disabled by default + a_poolCycle = 1; a_inProgressCount = 0; a_inProgressLimit = UINT_MAX; // no limit a_clock = NULL; @@ -133,7 +136,7 @@ bool TestManager::configureTTPS(int testTicksPerSecond) throw() { a_synchronousAmount = 1; if (admlTimeInterval < anna::Millisecond(1)) { - LOGWARNING(anna::Logger::warning("Not allowed to configure more than 1000 events per second for the time trigger testing system", ANNA_FILE_LOCATION)); + LOGWARNING(anna::Logger::warning("Not allowed to configure more than 1000 events per second for for triggering testing system", ANNA_FILE_LOCATION)); return false; } @@ -207,6 +210,7 @@ bool TestManager::clearPool() throw() { a_testPool.clear(); a_sessionIdTestCaseMap.clear(); a_currentTestIt = a_testPool.end(); + a_poolCycle = 1; configureTTPS(0); // stop return true; } @@ -231,6 +235,7 @@ bool TestManager::tick() throw() { return false; } + // Synchronous sendings per tick: int count = a_synchronousAmount; while (count > 0) { if (!nextTestCase()) return false; // stop the clock @@ -258,33 +263,46 @@ bool TestManager::nextTestCase() throw() { // Completed: if (a_currentTestIt == a_testPool.end()) { - if (a_poolRepeat) { - LOGWARNING(anna::Logger::warning("Testing pool cycle completed. Repeat mode on. Restarting", ANNA_FILE_LOCATION)); + if ((a_poolCycle > a_poolRepeats) && (a_poolRepeats != -1)) { + LOGWARNING(anna::Logger::warning("Testing pool cycle completed. No remaining repeat cycles left. Suspending", ANNA_FILE_LOCATION)); + a_poolCycle = 1; + return false; + } + else { + LOGWARNING( + std::string nolimit = (a_poolRepeats != -1) ? "":" [no limit]"; + anna::Logger::warning(anna::functions::asString("Testing pool cycle %d completed (repeats configured: %d%s). Restarting for the %s cycle", a_poolCycle, a_poolRepeats, nolimit.c_str(), (a_poolRepeats == a_poolCycle) ? "last":"next"), ANNA_FILE_LOCATION); + ); + a_poolCycle++; //a_currentTestIt = a_testPool.begin(); return true; // avoids infinite loop: if the cycle takes less time than test cases completion, below reset never will turns state // into Initialized and this while will be infinite. It is preferable to wait one tick when the cycle is completed. } - else { - LOGWARNING(anna::Logger::warning("Testing pool cycle completed. Repeat mode off. Suspending", ANNA_FILE_LOCATION)); - return false; - } } - // Hard reset, because normally a cycle takes more time that a single test case lifetime. We can consider that never - // going to break a in-progress test case due to cycle repeat + // Soft reset to initialize already finished (in previous cycle) test cases: a_currentTestIt->second->reset(false); // Process test case: LOGDEBUG(anna::Logger::debug(anna::functions::asString("Processing test case id = %llu, currently '%s' state", a_currentTestIt->first, TestCase::asText(a_currentTestIt->second->getState())), ANNA_FILE_LOCATION)); if (a_currentTestIt->second->getState() != TestCase::State::InProgress) { a_currentTestIt->second->process(); - return true; + return true; // is not probably to reach still In-Progress test cases from previous cycles due to the whole + // time for complete the test cases pool regarding the single test case lifetime. You shouldn't + // forget to programm a test case timeout with a reasonable value } } } -TestCase *TestManager::getTestCaseFromSessionId(const anna::DataBlock &message, std::string &sessionId) throw(anna::RuntimeException) { - sessionId = anna::diameter::helpers::base::functions::getSessionId(message); +TestCase *TestManager::getTestCaseFromSessionId(const anna::DataBlock &message, std::string &sessionId) throw() { + try { + sessionId = anna::diameter::helpers::base::functions::getSessionId(message); + } + catch (anna::RuntimeException &ex) { + //ex.trace(); + LOGWARNING(anna::Logger::warning("Cannot get the Session-Id from received DataBlock in order to identify the Test Case", ANNA_FILE_LOCATION)); + return NULL; + } std::map::const_iterator sessionIdIt = a_sessionIdTestCaseMap.find(sessionId); if (sessionIdIt != a_sessionIdTestCaseMap.end()) return sessionIdIt->second; @@ -367,13 +385,16 @@ throw() { int poolSize = a_testPool.size(); result->createAttribute("NumberOfTestCases", poolSize); - result->createAttribute("PoolRepeat", (a_poolRepeat ? "yes":"no")); + if (a_poolRepeats) result->createAttribute("PoolRepeats", a_poolRepeats); + else result->createAttribute("PoolRepeats", "disabled"); + result->createAttribute("PoolCycle", a_poolCycle); result->createAttribute("InProgressCount", a_inProgressCount); if (a_inProgressLimit == UINT_MAX) result->createAttribute("InProgressLimit", ""); else result->createAttribute("InProgressLimit", a_inProgressLimit); result->createAttribute("DumpReports", (a_dumpReports ? "yes":"no")); + result->createAttribute("DumpHexMessages", (a_dumpHexMessages ? "yes":"no")); result->createAttribute("ReportsDirectory", a_reportsDirectory); if (a_clock) { result->createAttribute("AsynchronousSendings", a_synchronousAmount);