/*
- * test_graph_topo.c
+ * SPDX-License-Identifier: GPL-2.0-only
*
- * Copyright 2017 - Philippe Proulx <pproulx@efficios.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; under version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ * Copyright (C) 2017 Philippe Proulx <pproulx@efficios.com>
*/
#include <babeltrace2/babeltrace.h>
#include "tap/tap.h"
-#define NR_TESTS 33
+#define NR_TESTS 26
enum event_type {
SRC_COMP_OUTPUT_PORT_CONNECTED,
SINK_COMP_INPUT_PORT_CONNECTED,
GRAPH_SRC_OUTPUT_PORT_ADDED,
GRAPH_SINK_INPUT_PORT_ADDED,
- GRAPH_SRC_SINK_PORTS_CONNECTED,
};
enum test {
const bt_component *comp;
const bt_port *port;
} graph_sink_input_port_added;
-
- struct {
- const bt_component *upstream_comp;
- const bt_component *downstream_comp;
- const bt_port *upstream_port;
- const bt_port *downstream_port;
- } graph_src_sink_ports_connected;
} data;
};
static GArray *events;
+static bt_message_iterator_class *msg_iter_class;
static bt_component_class_source *src_comp_class;
static bt_component_class_sink *sink_comp_class;
static enum test current_test;
return false;
}
break;
- case GRAPH_SRC_SINK_PORTS_CONNECTED:
- if (ev_a->data.graph_src_sink_ports_connected.upstream_comp !=
- ev_b->data.graph_src_sink_ports_connected.upstream_comp) {
- return false;
- }
-
- if (ev_a->data.graph_src_sink_ports_connected.downstream_comp !=
- ev_b->data.graph_src_sink_ports_connected.downstream_comp) {
- return false;
- }
-
- if (ev_a->data.graph_src_sink_ports_connected.upstream_port !=
- ev_b->data.graph_src_sink_ports_connected.upstream_port) {
- return false;
- }
-
- if (ev_a->data.graph_src_sink_ports_connected.downstream_port !=
- ev_b->data.graph_src_sink_ports_connected.downstream_port) {
- return false;
- }
- break;
default:
abort();
}
size_t i;
for (i = 0; i < events->len; i++) {
- struct event *ev = &g_array_index(events, struct event, i);
+ struct event *ev = &bt_g_array_index(events, struct event, i);
if (compare_events(event, ev)) {
return true;
size_t i;
for (i = 0; i < events->len; i++) {
- struct event *ev = &g_array_index(events, struct event, i);
+ struct event *ev = &bt_g_array_index(events, struct event, i);
if (compare_events(event, ev)) {
return i;
}
static
-bt_component_class_message_iterator_next_method_status src_iter_next(
+bt_message_iterator_class_next_method_status src_iter_next(
bt_self_message_iterator *self_iterator,
bt_message_array_const msgs, uint64_t capacity,
uint64_t *count)
{
- return BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_ERROR;
+ return BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR;
}
static
}
static
-bt_component_class_init_method_status src_init(
+bt_component_class_initialize_method_status src_init(
bt_self_component_source *self_comp,
+ bt_self_component_source_configuration *config,
const bt_value *params, void *init_method_data)
{
int ret;
ret = bt_self_component_source_add_output_port(
self_comp, "out", NULL, NULL);
BT_ASSERT(ret == 0);
- return BT_COMPONENT_CLASS_INIT_METHOD_STATUS_OK;
+ return BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK;
}
static
-bt_component_class_init_method_status sink_init(
+bt_component_class_initialize_method_status sink_init(
bt_self_component_sink *self_comp,
+ bt_self_component_sink_configuration *config,
const bt_value *params, void *init_method_data)
{
int ret;
ret = bt_self_component_sink_add_input_port(self_comp,
"in", NULL, NULL);
BT_ASSERT(ret == 0);
- return BT_COMPONENT_CLASS_INIT_METHOD_STATUS_OK;
+ return BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK;
}
static
return BT_GRAPH_LISTENER_FUNC_STATUS_OK;
}
-static
-bt_graph_listener_func_status graph_src_sink_ports_connected(
- const bt_component_source *upstream_comp,
- const bt_component_sink *downstream_comp,
- const bt_port_output *upstream_port,
- const bt_port_input *downstream_port, void *data)
-{
- struct event event = {
- .type = GRAPH_SRC_SINK_PORTS_CONNECTED,
- .data.graph_src_sink_ports_connected = {
- .upstream_comp =
- bt_component_source_as_component_const(upstream_comp),
- .downstream_comp =
- bt_component_sink_as_component_const(downstream_comp),
- .upstream_port =
- bt_port_output_as_port_const(upstream_port),
- .downstream_port =
- bt_port_input_as_port_const(downstream_port),
- },
- };
-
- append_event(&event);
-
- return BT_GRAPH_LISTENER_FUNC_STATUS_OK;
-}
-
static
void init_test(void)
{
int ret;
+ msg_iter_class = bt_message_iterator_class_create(src_iter_next);
+ BT_ASSERT(msg_iter_class);
+
src_comp_class = bt_component_class_source_create(
- "src", src_iter_next);
+ "src", msg_iter_class);
BT_ASSERT(src_comp_class);
- ret = bt_component_class_source_set_init_method(
+ ret = bt_component_class_source_set_initialize_method(
src_comp_class, src_init);
BT_ASSERT(ret == 0);
ret = bt_component_class_source_set_output_port_connected_method(
sink_comp_class = bt_component_class_sink_create("sink",
sink_consume);
BT_ASSERT(sink_comp_class);
- ret = bt_component_class_sink_set_init_method(sink_comp_class,
+ ret = bt_component_class_sink_set_initialize_method(sink_comp_class,
sink_init);
BT_ASSERT(ret == 0);
ret = bt_component_class_sink_set_input_port_connected_method(
bt_component_class_source_put_ref(src_comp_class);
bt_component_class_sink_put_ref(sink_comp_class);
g_array_free(events, TRUE);
+ BT_MESSAGE_ITERATOR_CLASS_PUT_REF_AND_RESET(msg_iter_class);
}
static
static
bt_graph *create_graph(void)
{
- bt_graph *graph = bt_graph_create();
+ bt_graph *graph = bt_graph_create(0);
int ret;
BT_ASSERT(graph);
ret = bt_graph_add_source_component_output_port_added_listener(
- graph, graph_src_output_port_added, NULL, NULL, NULL);
+ graph, graph_src_output_port_added, NULL, NULL);
BT_ASSERT(ret >= 0);
ret = bt_graph_add_sink_component_input_port_added_listener(
- graph, graph_sink_input_port_added, NULL, NULL, NULL);
- BT_ASSERT(ret >= 0);
- ret = bt_graph_add_source_sink_component_ports_connected_listener(
- graph, graph_src_sink_ports_connected, NULL, NULL, NULL);
+ graph, graph_sink_input_port_added, NULL, NULL);
BT_ASSERT(ret >= 0);
return graph;
}
struct event event;
bt_graph_connect_ports_status status;
size_t src_port_connected_pos;
- size_t sink_port_connected_pos;
- size_t graph_ports_connected_pos;
size_t graph_port_added_src_pos;
prepare_test(TEST_SRC_ADDS_PORT_IN_PORT_CONNECTED,
gsrc_hello_port = bt_port_output_as_port_const(src_hello_port);
gsink_def_port = bt_port_input_as_port_const(sink_def_port);
- /* We're supposed to have 6 events */
- ok(events->len == 6, "we have the expected number of events");
+ /* We're supposed to have 5 events */
+ ok(events->len == 5, "we have the expected number of events");
/* Source's port added */
event.type = GRAPH_SRC_OUTPUT_PORT_ADDED;
event.data.sink_comp_input_port_connected.self_port = gsink_def_port;
event.data.sink_comp_input_port_connected.other_port = gsrc_def_port;
ok(has_event(&event), "got the expected sink's port connected event");
- sink_port_connected_pos = event_pos(&event);
-
- /* Graph's ports connected */
- event.type = GRAPH_SRC_SINK_PORTS_CONNECTED;
- event.data.graph_src_sink_ports_connected.upstream_comp = gsrc;
- event.data.graph_src_sink_ports_connected.downstream_comp = gsink;
- event.data.graph_src_sink_ports_connected.upstream_port = gsrc_def_port;
- event.data.graph_src_sink_ports_connected.downstream_port = gsink_def_port;
- ok(has_event(&event), "got the expected graph's ports connected event");
- graph_ports_connected_pos = event_pos(&event);
/* Order of events */
- ok(src_port_connected_pos < graph_ports_connected_pos,
- "event order is good (1)");
- ok(sink_port_connected_pos < graph_ports_connected_pos,
- "event order is good (2)");
ok(src_port_connected_pos < graph_port_added_src_pos,
- "event order is good (3)");
- ok(graph_port_added_src_pos < graph_ports_connected_pos,
- "event order is good (4)");
+ "event order is good");
- bt_component_source_put_ref(src);
- bt_component_sink_put_ref(sink);
bt_graph_put_ref(graph);
}
const bt_port *gsink_def_port;
struct event event;
bt_graph_connect_ports_status status;
- size_t src_port_connected_pos;
- size_t sink_port_connected_pos;
- size_t graph_ports_connected_pos;
prepare_test(TEST_SIMPLE, "simple");
graph = create_graph();
gsrc_def_port = bt_port_output_as_port_const(src_def_port);
gsink_def_port = bt_port_input_as_port_const(sink_def_port);
- /* We're supposed to have 5 events */
- ok(events->len == 5, "we have the expected number of events");
+ /* We're supposed to have 4 events */
+ ok(events->len == 4, "we have the expected number of events");
/* Source's port added */
event.type = GRAPH_SRC_OUTPUT_PORT_ADDED;
event.data.src_comp_output_port_connected.self_port = gsrc_def_port;
event.data.src_comp_output_port_connected.other_port = gsink_def_port;
ok(has_event(&event), "got the expected source's port connected event");
- src_port_connected_pos = event_pos(&event);
/* Sink's port connected */
event.type = SINK_COMP_INPUT_PORT_CONNECTED;
event.data.sink_comp_input_port_connected.self_port = gsink_def_port;
event.data.sink_comp_input_port_connected.other_port = gsrc_def_port;
ok(has_event(&event), "got the expected sink's port connected event");
- sink_port_connected_pos = event_pos(&event);
-
- /* Graph's ports connected */
- event.type = GRAPH_SRC_SINK_PORTS_CONNECTED;
- event.data.graph_src_sink_ports_connected.upstream_comp = gsrc;
- event.data.graph_src_sink_ports_connected.downstream_comp = gsink;
- event.data.graph_src_sink_ports_connected.upstream_port = gsrc_def_port;
- event.data.graph_src_sink_ports_connected.downstream_port = gsink_def_port;
- ok(has_event(&event), "got the expected graph's ports connected event");
- graph_ports_connected_pos = event_pos(&event);
-
- /* Order of events */
- ok(src_port_connected_pos < graph_ports_connected_pos,
- "event order is good (1)");
- ok(sink_port_connected_pos < graph_ports_connected_pos,
- "event order is good (2)");
- bt_component_sink_put_ref(sink);
bt_graph_put_ref(graph);
- bt_component_source_put_ref(src);
}
static
sink_def_port, &conn);
ok(status != BT_GRAPH_CONNECT_PORTS_STATUS_OK,
"bt_graph_connect_ports() returns an error");
+ bt_current_thread_clear_error();
ok(!conn, "returned connection is still NULL");
gsrc = bt_component_source_as_component_const(src);
gsink = bt_component_sink_as_component_const(sink);
ok(has_event(&event), "got the expected source's port connected event");
bt_graph_put_ref(graph);
- bt_component_sink_put_ref(sink);
- bt_component_source_put_ref(src);
- bt_connection_put_ref(conn);
}
static
sink_def_port, &conn);
ok(status != BT_GRAPH_CONNECT_PORTS_STATUS_OK,
"bt_graph_connect_ports() returns an error");
+ bt_current_thread_clear_error();
ok(!conn, "returned connection is still NULL");
gsrc = bt_component_source_as_component_const(src);
gsink = bt_component_sink_as_component_const(sink);
event.data.sink_comp_input_port_connected.other_port = gsrc_def_port;
ok(has_event(&event), "got the expected sink's port connected event");
- bt_connection_put_ref(conn);
bt_graph_put_ref(graph);
- bt_component_sink_put_ref(sink);
- bt_component_source_put_ref(src);
}
static