X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=example%2Fdiameter%2Flauncher%2Ftesting%2FTestManager.hpp;h=9e007dffc79350420138049c567ed402ecbc9db0;hb=5bf5055ab79aaf464e2491cfbab173ba37ba3419;hp=1719faffd3f04cd3cb020c46f148c3fc5851607f;hpb=f9534159f3b43cbf74eccf88723ee740c69eb204;p=anna.git diff --git a/example/diameter/launcher/testing/TestManager.hpp b/example/diameter/launcher/testing/TestManager.hpp index 1719faf..9e007df 100644 --- a/example/diameter/launcher/testing/TestManager.hpp +++ b/example/diameter/launcher/testing/TestManager.hpp @@ -19,6 +19,7 @@ // Process #include +#include namespace anna { @@ -39,6 +40,8 @@ namespace anna { class TestClock; class TestCase; class TestCaseStep; +class OriginHost; + typedef std::map test_pool_t; typedef std::map::const_iterator test_pool_it; @@ -49,13 +52,31 @@ typedef std::map::iterator test_pool Timer Manager for testing system */ class TestManager : public anna::timex::TimeEventObserver, public anna::Singleton { + + // Statistics summary: + class StatSummary { + + unsigned int a_initializedTcs; + unsigned int a_inprogressTcs; + unsigned int a_failedTcs; + unsigned int a_sucessTcs; + + public: + void newTCState(const TestCase::State::_v beginState, const TestCase::State::_v endState) throw(); + void clear() throw(); + unsigned int getInProgressCount() const throw() { return a_inprogressTcs; } + anna::xml::Node* asXML(anna::xml::Node* parent) const throw(); + }; + + + typedef anna::Recycler timer_container; anna::timex::Engine* a_timeController; // reports std::string a_reportsDirectory; - bool a_dumpReports; + bool a_dumpInitializedReports, a_dumpInProgressReports, a_dumpFailedReports, a_dumpSuccessReports; bool a_dumpHexMessages; // Pool of test cases @@ -63,13 +84,13 @@ class TestManager : public anna::timex::TimeEventObserver, public anna::Singleto test_pool_it a_currentTestIt; int a_poolRepeats; // repeat pool N times int a_poolCycle; // current cycle, from 1 to N - unsigned int a_inProgressCount; unsigned int a_inProgressLimit; // limit load to have this value // Test clock int a_synchronousAmount; TestClock *a_clock; bool tick() throw(); + bool execTestCases(int sync_amount) throw(); bool nextTestCase() throw(); // Test timers @@ -79,6 +100,8 @@ class TestManager : public anna::timex::TimeEventObserver, public anna::Singleto std::map a_sessionIdTestCaseMap; // stores used Session-Id values within a test case. // No other can use them, but a test case could use more than one. + StatSummary a_statSummary; // general statistics + TestManager(); TestManager(const TestManager&); @@ -87,6 +110,7 @@ class TestManager : public anna::timex::TimeEventObserver, public anna::Singleto void cancelTimer(TestTimer*) throw(); void release(anna::timex::TimeEvent*) throw(); + public: void registerSessionId(const std::string &sessionId, const TestCase *testCase) throw(anna::RuntimeException); @@ -99,8 +123,23 @@ class TestManager : public anna::timex::TimeEventObserver, public anna::Singleto void setDumpHex(bool dh) throw() { a_dumpHexMessages = dh; } bool getDumpHex() const throw() { return a_dumpHexMessages; } - void setDumpReports(bool dr) throw() { a_dumpReports = dr; } - bool getDumpReports() const throw() { return a_dumpReports; } + + + void setDumpInitializedReports(bool enable) throw() { a_dumpInitializedReports = enable; } + void setDumpInProgressReports(bool enable) throw() { a_dumpInProgressReports = enable; } + void setDumpFailedReports(bool enable) throw() { a_dumpFailedReports = enable; } + void setDumpSuccessReports(bool enable) throw() { a_dumpSuccessReports = enable; } + void setDumpAllReports(bool enable) throw() { + setDumpInitializedReports(enable); + setDumpInProgressReports(enable); + setDumpFailedReports(enable); + setDumpSuccessReports(enable); + } + + bool getDumpInitializedReports() const throw() { return a_dumpInitializedReports; } + bool getDumpInProgressReports() const throw() { return a_dumpInProgressReports; } + bool getDumpFailedReports() const throw() { return a_dumpFailedReports; } + bool getDumpSuccessReports() const throw() { return a_dumpSuccessReports; } // Helper to calculate time interval and synchronous amount of execution tests to guarantee the input rate (tests per second) // through the time manager which has a minimum resolution of ADML minimum resolution. The first call to this method will @@ -113,8 +152,7 @@ class TestManager : public anna::timex::TimeEventObserver, public anna::Singleto int getPoolRepeats() const throw() { return a_poolRepeats; } int getPoolCycle() const throw() { return a_poolCycle; } - unsigned int getInProgressCount() const throw() { return a_inProgressCount; } - void setInProgressCountDelta(unsigned int delta) throw() { a_inProgressCount += delta; } + unsigned int getInProgressCount() const throw() { return a_statSummary.getInProgressCount(); } unsigned int getInProgressLimit() const throw() { return a_inProgressLimit; } void setInProgressLimit(unsigned int limit) throw() { a_inProgressLimit = limit; } // 0 = UINT_MAX (no limit) @@ -124,17 +162,23 @@ class TestManager : public anna::timex::TimeEventObserver, public anna::Singleto // Main logic TestCase *getTestCaseFromSessionId(const anna::DataBlock &message, std::string &sessionId) throw(); - void receiveMessage(const anna::DataBlock &message, const anna::diameter::comm::ClientSession *clientSession) throw(anna::RuntimeException); - void receiveMessage(const anna::DataBlock &message, const anna::diameter::comm::ServerSession *serverSession) throw(anna::RuntimeException); + void receiveMessage(const anna::DataBlock &message, OriginHost *host, const anna::diameter::comm::ClientSession *clientSession) throw(anna::RuntimeException); + void receiveMessage(const anna::DataBlock &message, OriginHost *host, const anna::diameter::comm::ServerSession *serverSession) throw(anna::RuntimeException); anna::xml::Node* asXML(anna::xml::Node* parent) const throw(); std::string asXMLString() const throw(); + // stats + void tcsStateStats(const TestCase::State::_v beginState, const TestCase::State::_v endState) throw() { + a_statSummary.newTCState(beginState, endState); + } + friend class anna::Singleton ; friend class TestStepTimeout; // createTimer friend class TestStepDelay; // createTimer friend class TestClock; // tick + friend class Launcher; // tick }; #endif