#ifndef example_diameter_launcher_EventOperation_hpp
#define example_diameter_launcher_EventOperation_hpp
-// Project
-#include <anna/json/json.hpp>
-
// STL
#include <string>
-using json = nlohmann::json;
+// Project
+#include <anna/json/json.hpp>
+
class EventOperation {
+ bool a_http;
+
public:
- static std::string json2piped(const json &j);
+ /**
+ * EventOperation constructor
+ *
+ * @param http Indicates that HTTP interface is used.
+ *
+ * At signal interface, the response is written directly as output, but HTTP
+ * one answers json.
+ *
+ * TODO: xml2json implementation (i.e., https://github.com/Cheedoong/xml2json).
+ * As only 3 operations are going to answer xml content:
+ * - working node report ('node')
+ * - diameter hex decode ('decode')
+ * - reinterpret json into xml ('loadmsg')
+ * the effort does not compensate having them responding full json representation.
+ *
+ * So, base64 encoding will be used for those xml representations.
+ *
+ * Anna Suite used xml natively for many things, json will be only used for
+ * REST API on requests and will be transformed internally.
+ */
+ EventOperation(bool http) : a_http(http) {;}
+
+ // Node management
+ bool node(std::string &response, const std::string & name);
+ bool node_auto(std::string &response);
+
+ // Parsing operations
+ bool code(std::string &response, const std::string & diameterJson);
+ bool decode(std::string &response, const std::string & diameterHex);
+ bool loadmsg(std::string &response, const std::string & diameterJson);
+
+ // Hot changes
+ bool services(std::string &response, const std::string & servicesJson);
+ bool diameterServerSessions(std::string &response, int sessions);
+ bool change_dir(std::string &response, const std::string & directory = "");
+
+ // Client sessions visibility
+ bool visibility(std::string &response, const std::string & action, const std::string &addressPort = "", int socket = -1);
+
+ // Snapshots
+ bool collect(std::string &response);
+ bool context(std::string &response, const std::string & targetFile = "");
+ bool forceCountersRecord(std::string &response);
+ bool log_statistics_samples(std::string &response, const std::string & list);
+ bool show_oam(std::string &response);
+ bool show_stats(std::string &response);
+
+ // Flow operations
+ bool sendmsg_hex_2e(std::string &response, const std::string & diameterJson_or_Hex, bool msg_or_hex);
+ bool sendmsg_hex_2c(std::string &response, const std::string & diameterJson_or_Hex, bool msg_or_hex);
+ bool answermsg_action_2e(std::string &response, const std::string & diameterJson_or_action, bool msg_or_action);
+ bool answermsg_action_2c(std::string &response, const std::string & diameterJson_or_action, bool msg_or_action);
+
+ // FSM testing
+ // test_id__<command>
+ bool test_id__description(std::string &response, unsigned int id, const std::string & description);
+ bool test_id__ip_limit(std::string &response, unsigned int id, int amount = 1);
+ bool test_id__timeout(std::string &response, unsigned int id, int msecs);
+ bool test_id__sendmsg2e_2c(std::string &response, unsigned int id, bool _2e_or_2c, const std::string & diameterJson, int stepNumber = -1);
+ bool test_id__delay(std::string &response, unsigned int id, int msecs);
+ bool test_id__sh_command(std::string &response, unsigned int id, const std::string & script);
+ bool test_id__waitfefc_hex(std::string &response, unsigned int id, bool fe_or_fc, const std::string & hex, bool strict = false);
+ bool test_id__waitfefc_msg(std::string &response, unsigned int id, bool fe_or_fc, const std::string & diameterJson, bool strict = false);
+ bool test_id__waitfefc(std::string &response, unsigned int id, bool fe_or_fc,
+ 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);
+
+ // Testcases execution
+ // test__<command>
+ bool test__ttps(std::string &response, int amount);
+ bool test__next(std::string &response, int syncAmount = 1);
+ bool test__ip_limit(std::string &response, int amount = -2 /* show current ip-limit and in-progress test cases amount */);
+ bool test__goto(std::string &response, int id);
+ bool test__run(std::string &response, int id);
+ bool test__look(std::string &response, int id = -1 /* current */);
+ bool test__state(std::string &response, int id = -1 /* current */);
+ bool test__interact(std::string &response, int amount, unsigned int id = -1 /* current */);
+ bool test__reset(std::string &response, bool soft_hard = true, int id = -1 /* apply to all the tests */);
+ bool test__repeats(std::string &response, int amount);
+ bool test__auto_reset(std::string &response, bool soft_hard);
+ bool test__initialized(std::string &response);
+ bool test__finished(std::string &response);
+ bool test__clear(std::string &response);
+ bool test__junit(std::string &response, const std::string & targetFile);
+ bool test__summary_counts(std::string &response);
+ bool test__summary_states(std::string &response);
+ bool test__summary(std::string &response);
+ bool test__report(std::string &response,
+ const std::string & state = "all" /* initialized|in-progress|failed|success|[all]|none */, bool enable = true);
+ bool test__report_hex(std::string &response, bool enable = true);
+ bool test__dump_stdout(std::string &response, bool enable = true);
+
+ // Dynamic procedure
+ bool test__dynamic(std::string &response, const nlohmann::json &arguments);
};
#endif