static struct stasis_forward *security_topic_forwarder;
#ifdef TEST_FRAMEWORK
-struct stasis_subscription *test_suite_sub;
+/*! \brief The \ref stasis_subscription for forwarding the Test topic to the AMI topic */
+static struct stasis_forward *test_suite_forwarder;
#endif
#define MGR_SHOW_TERMINAL_WIDTH 80
ast_channel_set_manager_vars(args.argc, args.vars);
}
-#ifdef TEST_FRAMEWORK
-
-static void test_suite_event_cb(void *data, struct stasis_subscription *sub,
- struct stasis_message *message)
-{
- struct ast_test_suite_message_payload *payload;
- struct ast_json *blob;
- const char *type;
-
- if (stasis_message_type(message) != ast_test_suite_message_type()) {
- return;
- }
-
- payload = stasis_message_data(message);
- if (!payload) {
- return;
- }
- blob = ast_test_suite_get_blob(payload);
- if (!blob) {
- return;
- }
-
- type = ast_json_string_get(ast_json_object_get(blob, "type"));
- if (ast_strlen_zero(type) || strcmp("testevent", type)) {
- return;
- }
-
- manager_event(EVENT_FLAG_TEST, "TestEvent",
- "Type: StateChange\r\n"
- "State: %s\r\n"
- "AppFile: %s\r\n"
- "AppFunction: %s\r\n"
- "AppLine: %jd\r\n"
- "%s\r\n",
- ast_json_string_get(ast_json_object_get(blob, "state")),
- ast_json_string_get(ast_json_object_get(blob, "appfile")),
- ast_json_string_get(ast_json_object_get(blob, "appfunction")),
- ast_json_integer_get(ast_json_object_get(blob, "line")),
- ast_json_string_get(ast_json_object_get(blob, "data")));
-}
-
-#endif
-
/*!
* \internal
* \brief Free a user record. Should already be removed from the list
#endif
#ifdef TEST_FRAMEWORK
- stasis_unsubscribe(test_suite_sub);
+ stasis_forward_cancel(test_suite_forwarder);
+ test_suite_forwarder = NULL;
#endif
if (stasis_router) {
ast_manager_register_xml_core("BlindTransfer", EVENT_FLAG_CALL, action_blind_transfer);
#ifdef TEST_FRAMEWORK
- test_suite_sub = stasis_subscribe(ast_test_suite_topic(), test_suite_event_cb, NULL);
+ test_suite_forwarder = stasis_forward_all(ast_test_suite_topic(), manager_topic);
#endif
ast_cli_register_multiple(cli_manager, ARRAY_LEN(cli_manager));
*/
struct stasis_topic *test_suite_topic;
-/*! \since 12
- * \brief The message type for test suite messages
- */
-STASIS_MESSAGE_TYPE_DEFN(ast_test_suite_message_type);
-
/*! This array corresponds to the values defined in the ast_test_state enum */
static const char * const test_result2str[] = {
[AST_TEST_NOT_RUN] = "NOT RUN",
return payload->blob;
}
+static struct ast_manager_event_blob *test_suite_event_to_ami(struct stasis_message *msg)
+{
+ RAII_VAR(struct ast_str *, packet_string, ast_str_create(128), ast_free);
+ struct ast_test_suite_message_payload *payload;
+ struct ast_json *blob;
+ const char *type;
+
+ payload = stasis_message_data(msg);
+ if (!payload) {
+ return NULL;
+ }
+ blob = ast_test_suite_get_blob(payload);
+ if (!blob) {
+ return NULL;
+ }
+
+ type = ast_json_string_get(ast_json_object_get(blob, "type"));
+ if (ast_strlen_zero(type) || strcmp("testevent", type)) {
+ return NULL;
+ }
+
+ ast_str_append(&packet_string, 0, "Type: StateChange\r\n");
+ ast_str_append(&packet_string, 0, "State: %s\r\n",
+ ast_json_string_get(ast_json_object_get(blob, "state")));
+ ast_str_append(&packet_string, 0, "AppFile: %s\r\n",
+ ast_json_string_get(ast_json_object_get(blob, "appfile")));
+ ast_str_append(&packet_string, 0, "AppFunction: %s\r\n",
+ ast_json_string_get(ast_json_object_get(blob, "appfunction")));
+ ast_str_append(&packet_string, 0, "AppLine: %ld\r\n",
+ ast_json_integer_get(ast_json_object_get(blob, "line")));
+ ast_str_append(&packet_string, 0, "%s\r\n",
+ ast_json_string_get(ast_json_object_get(blob, "data")));
+
+ return ast_manager_event_blob_create(EVENT_FLAG_REPORTING,
+ "TestEvent",
+ "%s",
+ ast_str_buffer(packet_string));
+}
+
+/*! \since 12
+ * \brief The message type for test suite messages
+ */
+STASIS_MESSAGE_TYPE_DEFN(ast_test_suite_message_type,
+ .to_ami = test_suite_event_to_ami);
+
void __ast_test_suite_event_notify(const char *file, const char *func, int line, const char *state, const char *fmt, ...)
{
RAII_VAR(struct ast_test_suite_message_payload *, payload,