Dynamic lib selection and deployment
[anna.git] / example / diameter / launcher / testing / TestStep.hpp
index 9b69579..75cbae3 100644 (file)
@@ -44,13 +44,14 @@ namespace anna {
 
 class TestCase;
 class TestTimer;
-class RealmNode;
+class OriginHost;
 
 class TestStep {
 
     int a_number; // step number used for xml (informational)
     anna::Millisecond a_beginTimestamp; // unix time
     anna::Millisecond a_endTimestamp; // unix time
+    bool a_executed; // used for interactive mode in order to not repeat a execution step if before completing, the user add interactive amount
 
     void setBeginTimestamp(const anna::Millisecond &t) throw() { a_beginTimestamp = t; }
     const anna::Millisecond &getBeginTimestamp() const throw() { return a_beginTimestamp; }
@@ -63,7 +64,7 @@ class TestStep {
     struct Type { enum _v { Unconfigured, Timeout, Sendxml2e, Sendxml2c, Delay, Wait, Cmd }; };
     static const char* asText(const Type::_v type) throw();
 
-    TestStep(TestCase *testCase) : a_message(true), a_messageCodec(NULL) { initialize(testCase); }
+    TestStep(TestCase *testCase) : a_message(true), a_messageCodec(NULL), a_executed(false) { initialize(testCase); }
     virtual ~TestStep() {;}
 
     // setter & getters
@@ -86,7 +87,8 @@ class TestStep {
     // Message (not for all step types)
     anna::DataBlock a_message;
     anna::diameter::codec::Message *a_messageCodec; // used as helper and for traffic logs
-    bool decodeMessage() throw();
+    bool decodeMessage(bool trust = false) throw(); // If trust=true: decoding the previously encoded message (sendxml sentences).
+                                                    // The only error would be validation ones, and we are going to ignore them here.
 
     virtual bool do_execute() throw() = 0; // returns true if next step must be executed
     virtual void do_complete() throw() = 0; // end of transaction (delay/timeout expired, wait condition fulfilled, sending done)
@@ -120,7 +122,7 @@ class TestStepSendxml : public TestStep {
 
   protected:
     // possible end points:
-    RealmNode *a_realmNode;
+    OriginHost *a_originHost;
 
     // Step number reference ('wait for request' step)
     int a_waitForRequestStepNumber;
@@ -131,13 +133,13 @@ class TestStepSendxml : public TestStep {
   public:
     TestStepSendxml(TestCase *testCase) : TestStep(testCase),
       a_expired(false),
-      a_realmNode(NULL),
+      a_originHost(NULL),
       a_waitForRequestStepNumber(-1) {;}
     ~TestStepSendxml() {;}
 
     // setter & getters
-    void setRealmNode(RealmNode *realm) throw() { a_realmNode = realm; }
-    RealmNode *getRealmNode() const throw() { return a_realmNode; }
+    void setOriginHost(OriginHost *host) throw() { a_originHost = host; }
+    OriginHost *getOriginHost() const throw() { return a_originHost; }
     void setWaitForRequestStepNumber(int stepNumber) throw() { a_waitForRequestStepNumber = stepNumber; }
     int getWaitForRequestStepNumber() const throw() { return a_waitForRequestStepNumber; }
     void setMsgDataBlock(const anna::DataBlock &db) throw() { a_message = db; }
@@ -223,7 +225,6 @@ class TestStepWait : public TestStep {
 class TestStepCmd : public TestStep {
 
   std::string a_script;
-  std::string a_parameters;
   std::thread a_thread;
   bool a_threadRunning;
   bool a_threadDeprecated;
@@ -231,14 +232,13 @@ class TestStepCmd : public TestStep {
   std::string a_errorMsg;
   //std::string a_output; // for POPEN
 
+  pid_t a_childPid;
+
   public:
-    TestStepCmd(TestCase *testCase) : TestStep(testCase), a_threadRunning(false), a_threadDeprecated(false), a_resultCode(-2)/*, a_output("")*/, a_errorMsg("") { a_type = Type::Cmd; }
+    TestStepCmd(TestCase *testCase) : TestStep(testCase), a_threadRunning(false), a_threadDeprecated(false), a_resultCode(-2)/*, a_output("")*/, a_errorMsg(""), a_childPid(-1) { a_type = Type::Cmd; }
 
     // setter & getters
     void setThreadRunning(bool running) throw() { a_threadRunning = running; }
-    //bool getThreadRunning() const throw() { return a_threadRunning; }
-    //void setThreadDeprecated(bool deprecated) throw() { a_threadDeprecated = deprecated; }
-    //bool getThreadDeprecated() const throw() { return a_threadDeprecated; }
 
     void setResultCode(int rc) throw() { a_resultCode = rc; }
     int getResultCode() const throw() { return a_resultCode; }
@@ -246,11 +246,11 @@ class TestStepCmd : public TestStep {
     const std::string &getErrorMsg() const throw() { return a_errorMsg; }
     //void appendOutput(const std::string &output) throw() { a_output += output; }
     //const std::string &getOutput() const throw() { return a_output; }
+    void setChildPid(pid_t pid) throw() { a_childPid = pid; }
+    const pid_t &getChildPid() const throw() { return a_childPid; }
 
     void setScript(const std::string &script) throw() { a_script = script; }
     const std::string &getScript() const throw() { return a_script; }
-    void setParameters(const std::string &params) throw() { a_parameters = params; }
-    const std::string &getParameters() const throw() { return a_parameters; }
 
     // virtuals
     bool do_execute() throw();