Improvements from anna fork
[anna.git] / include / anna / testing / TestStep.hpp
index 782ce55..4442f66 100644 (file)
@@ -16,7 +16,7 @@
 
 // Project
 #include <anna/core/DataBlock.hpp>
-#include <anna/testing/TestCondition.hpp>
+#include <anna/testing/TestDiameterCondition.hpp>
 #include <anna/core/util/Millisecond.hpp>
 
 
@@ -57,7 +57,7 @@ class TestStep {
     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); }
@@ -67,6 +67,7 @@ class TestStep {
     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();
@@ -110,11 +111,12 @@ class TestStepTimeout : public TestStep {
     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:
@@ -127,11 +129,11 @@ class TestStepSendxml : public TestStep {
     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; }
@@ -148,14 +150,14 @@ class TestStepSendxml : public TestStep {
     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; }
 };
 
 
@@ -174,23 +176,24 @@ class TestStepDelay : public TestStep {
     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,
@@ -205,7 +208,7 @@ class TestStepWait : public TestStep {
     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; }
@@ -256,6 +259,25 @@ class TestStepCmd : public TestStep {
     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();
+};
+
 }
 }