// Project
#include <anna/core/DataBlock.hpp>
-#include <anna/testing/TestCondition.hpp>
+#include <anna/testing/TestDiameterCondition.hpp>
#include <anna/core/util/Millisecond.hpp>
void initialize(TestCase *testCase);
public:
- struct Type { enum _v { Unconfigured, Timeout, Sendxml2e, Sendxml2c, Delay, Wait, Cmd }; };
+ struct Type { enum _v { Unconfigured, Timeout, Sendxml2e, Sendxml2c, Delay, Wait, Cmd, IpLimit }; };
static const char* asText(const Type::_v type) throw();
TestStep(TestCase *testCase) : a_message(true), a_messageCodec(NULL), a_executed(false) { initialize(testCase); }
const Type::_v &getType() const throw() { return a_type; }
const int &getNumber() const throw() { return a_number; }
bool isCompleted() const throw() { return a_completed; }
+ anna::Millisecond getLapseMs() const throw() { return a_endTimestamp - a_beginTimestamp; }
bool execute() throw();
void complete() throw();
bool do_execute() throw();
void do_complete() throw(); // timeout reached, test case failed
void do_reset() throw();
+ void cancelTimer() throw();
anna::xml::Node* asXML(anna::xml::Node* parent) throw();
};
-class TestStepSendxml : public TestStep {
+class TestStepSendDiameterXml : public TestStep {
protected:
// possible end points:
bool a_expired; // a_endTimestamp will be the expiration reception timestamp
public:
- TestStepSendxml(TestCase *testCase) : TestStep(testCase),
+ TestStepSendDiameterXml(TestCase *testCase) : TestStep(testCase),
a_expired(false),
a_originHost(NULL),
a_waitForRequestStepNumber(-1) {;}
- ~TestStepSendxml() {;}
+ ~TestStepSendDiameterXml() {;}
// setter & getters
void setOriginHost(anna::diameter::comm::OriginHost *host) throw() { a_originHost = host; }
anna::xml::Node* asXML(anna::xml::Node* parent) throw();
};
-class TestStepSendxml2e : public TestStepSendxml {
+class TestStepSendDiameterXml2e : public TestStepSendDiameterXml {
public:
- TestStepSendxml2e(TestCase *testCase) : TestStepSendxml(testCase) { a_type = Type::Sendxml2e; }
+ TestStepSendDiameterXml2e(TestCase *testCase) : TestStepSendDiameterXml(testCase) { a_type = Type::Sendxml2e; }
};
-class TestStepSendxml2c : public TestStepSendxml {
+class TestStepSendDiameterXml2c : public TestStepSendDiameterXml {
public:
- TestStepSendxml2c(TestCase *testCase) : TestStepSendxml(testCase) { a_type = Type::Sendxml2c; }
+ TestStepSendDiameterXml2c(TestCase *testCase) : TestStepSendDiameterXml(testCase) { a_type = Type::Sendxml2c; }
};
bool do_execute() throw();
void do_complete() throw(); // delay reached
void do_reset() throw();
+ void cancelTimer() throw();
anna::xml::Node* asXML(anna::xml::Node* parent) throw();
};
-class TestStepWait : public TestStep {
+class TestStepWaitDiameter : public TestStep {
- TestCondition a_condition;
+ TestDiameterCondition a_condition;
anna::diameter::comm::ClientSession *a_clientSession;
anna::diameter::comm::ServerSession *a_serverSession;
public:
- TestStepWait(TestCase *testCase) : TestStep(testCase) {
+ TestStepWaitDiameter(TestCase *testCase) : TestStep(testCase) {
a_type = Type::Wait;
a_clientSession = NULL;
a_serverSession = NULL;
}
- ~TestStepWait() {;}
+ ~TestStepWaitDiameter() {;}
// setter & getters
void setCondition(bool fromEntity,
const std::string &code, const std::string &bitR, const std::string &hopByHop, const std::string &applicationId,
const std::string &sessionId, const std::string &resultCode,
const std::string &msisdn, const std::string &imsi, const std::string &serviceContextId) throw();
- void setCondition(bool fromEntity, const std::string ®exp) throw();
+ void setConditionRegexpXml(bool fromEntity, const std::string ®exp) throw();
+ void setConditionRegexpHex(bool fromEntity, const std::string ®exp) throw();
void setClientSession(anna::diameter::comm::ClientSession *cs) throw() { a_clientSession = cs; }
void setServerSession(anna::diameter::comm::ServerSession *ss) throw() { a_serverSession = ss; }
anna::diameter::comm::ClientSession *getClientSession() const throw() { return a_clientSession; }
anna::diameter::comm::ServerSession *getServerSession() const throw() { return a_serverSession; }
- const TestCondition &getCondition() const throw() { return a_condition; }
+ const TestDiameterCondition &getCondition() const throw() { return a_condition; }
//void setMsgDataBlock(const anna::DataBlock &db) throw() { a_message = db; }
bool fulfilled(const anna::DataBlock &db/*, bool matchSessionId = true*/) throw();
const anna::DataBlock &getMsgDataBlock() const throw() { return a_message; }
anna::xml::Node* asXML(anna::xml::Node* parent) throw();
};
+
+class TestStepIpLimit : public TestStep {
+
+ unsigned int a_ipLimit;
+
+ public:
+ TestStepIpLimit(TestCase *testCase) : TestStep(testCase), a_ipLimit(1) { a_type = Type::IpLimit; }
+
+ // setter & getters
+ void setIpLimit(unsigned int limit) throw() { a_ipLimit = limit; }
+ unsigned int getIpLimit() const throw() { return a_ipLimit; }
+
+ // virtuals
+ bool do_execute() throw();
+ void do_complete() throw();
+ void do_reset() throw() {;}
+ anna::xml::Node* asXML(anna::xml::Node* parent) throw();
+};
+
}
}