StatSummary() { clear(); }
void newTCState(const TestCase::State::_v beginState, const TestCase::State::_v endState) throw();
void clear() throw();
+ unsigned int getInitializedCount() const throw() { return a_initializedTcs; }
unsigned int getInProgressCount() const throw() { return a_inprogressTcs; }
+ unsigned int getFailedCount() const throw() { return a_failedTcs; }
+ unsigned int getSuccessCount() const throw() { return a_sucessTcs; }
+ unsigned int getFinishedCount() const throw() { return a_sucessTcs + a_failedTcs; }
+ unsigned int getTotal() const throw() { return (a_initializedTcs + a_inprogressTcs + a_failedTcs + a_sucessTcs); }
+
anna::xml::Node* asXML(anna::xml::Node* parent) const throw();
};
std::string a_reportsDirectory;
bool a_dumpInitializedReports, a_dumpInProgressReports, a_dumpFailedReports, a_dumpSuccessReports;
bool a_dumpHexMessages;
+ bool a_dumpStdout;
// Pool of test cases
test_pool_t a_testPool;
int a_poolRepeats; // repeat pool N times
int a_poolCycle; // current cycle, from 1 to N
unsigned int a_inProgressLimit; // limit load to have this value
+ bool a_autoResetHard; // automatic reset on next cycle (soft by default, false)
// Test clock
int a_synchronousAmount;
// Test timers
timer_container a_timers;
- // Test case identifiers:
- // Session-Id's
- std::map<std::string /* session id's */, TestCase*> 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.
- // Subscriber's
- std::map<std::string /* subscriber id's */, TestCase*> a_subscriberIdTestCaseMap; // stores used Subscriber-Id values within a test case.
-
+ // Test case identifiers: key1 (strong); key2 (alternative)
+ std::map<std::string /* key */, TestCase*> a_key1TestCaseMap;
+ std::map<std::string /* key */, TestCase*> a_key2TestCaseMap;
+ // Diameter shall use: key1 -> sessionId, key2 -> subscriberId
+ //
StatSummary a_statSummary; // general statistics
public:
- void registerSessionId(const std::string &sessionId, const TestCase *testCase) throw(anna::RuntimeException);
- void registerSubscriberId(const std::string &subscriberId, const TestCase *testCase) throw(anna::RuntimeException);
+ void registerKey1(const std::string &key, const TestCase *testCase) throw(anna::RuntimeException);
+ void registerKey2(const std::string &key, const TestCase *testCase) throw(anna::RuntimeException);
int tests() const throw() { return a_testPool.size(); }
void setTimerController(anna::timex::Engine *engine) throw() { a_timeController = engine; }
void setDumpHex(bool dh) throw() { a_dumpHexMessages = dh; }
bool getDumpHex() const throw() { return a_dumpHexMessages; }
+ void setDumpStdout(bool ds) throw() { a_dumpStdout = ds; }
+ bool getDumpStdout() const throw() { return a_dumpStdout; }
void setDumpInitializedReports(bool enable) throw() { a_dumpInitializedReports = enable; }
void setDumpInProgressReports(bool enable) throw() { a_dumpInProgressReports = enable; }
int getPoolRepeats() const throw() { return a_poolRepeats; }
int getPoolCycle() const throw() { return a_poolCycle; }
+ bool getAutoResetHard() const throw() { return a_autoResetHard; }
+ void setAutoResetHard(bool hard = true) throw() { a_autoResetHard = hard; }
+
+
unsigned int getInProgressCount() const throw() { return a_statSummary.getInProgressCount(); }
+ unsigned int getInitializedCount() const throw() { return a_statSummary.getInitializedCount(); }
+ unsigned int getFinishedCount() const throw() { return a_statSummary.getFinishedCount(); }
unsigned int getInProgressLimit() const throw() { return a_inProgressLimit; }
- void setInProgressLimit(unsigned int limit) throw() { a_inProgressLimit = limit; } // 0 = UINT_MAX (no limit)
+ void setInProgressLimit(unsigned int limit) throw() { a_inProgressLimit = limit; } // -1 = UINT_MAX (no limit)
bool gotoTestCase(unsigned int id) throw();
+ bool runTestCase(unsigned int id) throw();
TestCase *findTestCase(unsigned int id) const throw(); // id = -1 provides current test case triggered
- TestCase *getTestCase(unsigned int id) throw(); // creates/reuses a test case
+ TestCase *getTestCase(unsigned int id, const std::string &description = "") throw(); // creates/reuses a test case
+
+ // Diameter-specific
+ TestCase *getDiameterTestCaseFromSessionId(const anna::DataBlock &message, std::string &sessionId) throw();
+ TestCase *getDiameterTestCaseFromSubscriberId(const anna::DataBlock &message, std::string &subscriberId) throw();
+ void receiveDiameterMessage(const anna::DataBlock &message, const anna::diameter::comm::ClientSession *clientSession) throw(anna::RuntimeException);
+ void receiveDiameterMessage(const anna::DataBlock &message, const anna::diameter::comm::ServerSession *serverSession) throw(anna::RuntimeException);
- // Main logic
- TestCase *getTestCaseFromSessionId(const anna::DataBlock &message, std::string &sessionId) throw();
- TestCase *getTestCaseFromSubscriberId(const anna::DataBlock &message, std::string &subscriberId) 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);
+ // Non-trasactional (kafka)
+ //
+ //
bool execTestCases(int sync_amount) throw();
anna::xml::Node* asXML(anna::xml::Node* parent) const throw();
+ anna::xml::Node* junitAsXML(anna::xml::Node* parent) const throw();
std::string asXMLString() const throw();
+ std::string junitAsXMLString() const throw();
+ std::string summaryCounts() const throw();
+ std::string summaryStates() const throw();
// stats
void tcsStateStats(const TestCase::State::_v beginState, const TestCase::State::_v endState) throw() {