* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+#include <babeltrace/ref.h>
#include <babeltrace/graph/component-class.h>
#include <babeltrace/graph/component-class-source.h>
#include <babeltrace/graph/component-class-sink.h>
#include "tap/tap.h"
-#define NR_TESTS 69
+#define NR_TESTS 77
enum event_type {
COMP_ACCEPT_PORT_CONNECTION,
}
break;
default:
- assert(false);
+ abort();
}
return true;
}
}
- return -1ULL;
+ return SIZE_MAX;
}
static
-struct bt_notification_iterator_next_return src_iter_next(
- struct bt_private_notification_iterator *priv_iterator)
+struct bt_notification_iterator_next_method_return src_iter_next(
+ struct bt_private_connection_private_notification_iterator *priv_iterator)
{
- struct bt_notification_iterator_next_return ret = {
+ struct bt_notification_iterator_next_method_return ret = {
.status = BT_NOTIFICATION_ITERATOR_STATUS_ERROR,
};
struct event event = {
.type = COMP_ACCEPT_PORT_CONNECTION,
.data.comp_accept_port_connection = {
- .comp = bt_component_from_private_component(private_component),
- .self_port = bt_port_from_private_port(self_private_port),
+ .comp = bt_component_from_private(private_component),
+ .self_port = bt_port_from_private(self_private_port),
.other_port = other_port,
},
};
struct bt_private_port *self_private_port,
struct bt_port *other_port)
{
- struct bt_private_port *port;
+ int ret;
struct event event = {
.type = COMP_PORT_CONNECTED,
.data.comp_port_connected = {
- .comp = bt_component_from_private_component(private_component),
- .self_port = bt_port_from_private_port(self_private_port),
+ .comp = bt_component_from_private(private_component),
+ .self_port = bt_port_from_private(self_private_port),
.other_port = other_port,
},
};
switch (current_test) {
case TEST_SRC_ADDS_PORT_IN_PORT_CONNECTED:
- port = bt_private_component_source_add_output_private_port(
- private_component, "hello", NULL);
- assert(port);
- bt_put(port);
+ ret = bt_private_component_source_add_output_private_port(
+ private_component, "hello", NULL, NULL);
+ assert(ret == 0);
break;
default:
break;
struct event event = {
.type = COMP_PORT_DISCONNECTED,
.data.comp_port_disconnected = {
- .comp = bt_component_from_private_component(private_component),
- .port = bt_port_from_private_port(private_port),
+ .comp = bt_component_from_private(private_component),
+ .port = bt_port_from_private(private_port),
},
};
}
}
+static
+enum bt_component_status src_init(struct bt_private_component *priv_comp,
+ struct bt_value *params, void *init_method_data)
+{
+ int ret;
+
+ ret = bt_private_component_source_add_output_private_port(
+ priv_comp, "out", NULL, NULL);
+ assert(ret == 0);
+ return BT_COMPONENT_STATUS_OK;
+}
+
static
enum bt_component_status sink_consume(
struct bt_private_component *priv_component)
switch (current_test) {
case TEST_SINK_REMOVES_PORT_IN_CONSUME:
case TEST_SINK_REMOVES_PORT_IN_CONSUME_THEN_SRC_REMOVES_DISCONNECTED_PORT:
- def_port = bt_private_component_sink_get_default_input_private_port(
- priv_component);
+ def_port = bt_private_component_sink_get_input_private_port_by_name(
+ priv_component, "in");
assert(def_port);
ret = bt_private_port_remove_from_component(def_port);
assert(ret == 0);
struct event event = {
.type = COMP_PORT_CONNECTED,
.data.comp_port_connected = {
- .comp = bt_component_from_private_component(private_component),
- .self_port = bt_port_from_private_port(self_private_port),
+ .comp = bt_component_from_private(private_component),
+ .self_port = bt_port_from_private(self_private_port),
.other_port = other_port,
},
};
struct event event = {
.type = COMP_PORT_DISCONNECTED,
.data.comp_port_disconnected = {
- .comp = bt_component_from_private_component(private_component),
- .port = bt_port_from_private_port(private_port),
+ .comp = bt_component_from_private(private_component),
+ .port = bt_port_from_private(private_port),
},
};
append_event(&event);
}
+static
+enum bt_component_status sink_init(struct bt_private_component *priv_comp,
+ struct bt_value *params, void *init_method_data)
+{
+ int ret;
+
+ ret = bt_private_component_sink_add_input_private_port(priv_comp,
+ "in", NULL, NULL);
+ assert(ret == 0);
+ return BT_COMPONENT_STATUS_OK;
+}
+
static
void graph_port_added(struct bt_port *port,
void *data)
src_comp_class = bt_component_class_source_create("src", src_iter_next);
assert(src_comp_class);
+ ret = bt_component_class_set_init_method(src_comp_class, src_init);
+ assert(ret == 0);
ret = bt_component_class_set_accept_port_connection_method(
src_comp_class, accept_port_connection);
assert(ret == 0);
assert(ret == 0);
sink_comp_class = bt_component_class_sink_create("sink", sink_consume);
assert(sink_comp_class);
+ ret = bt_component_class_set_init_method(sink_comp_class, sink_init);
+ assert(ret == 0);
ret = bt_component_class_set_accept_port_connection_method(
sink_comp_class, accept_port_connection);
assert(ret == 0);
}
static
-struct bt_component *create_src(void)
+struct bt_component *create_src(struct bt_graph *graph)
{
- struct bt_component *comp =
- bt_component_create(src_comp_class, "src-comp", NULL);
+ struct bt_component *comp;
+ int ret;
- assert(comp);
+ ret = bt_graph_add_component(graph, src_comp_class, "src-comp", NULL,
+ &comp);
+ assert(ret == 0);
return comp;
}
static
-struct bt_component *create_sink(void)
+struct bt_component *create_sink(struct bt_graph *graph)
{
- struct bt_component *comp =
- bt_component_create(sink_comp_class, "sink-comp", NULL);
+ struct bt_component *comp;
+ int ret;
- assert(comp);
+ ret = bt_graph_add_component(graph, sink_comp_class, "sink-comp",
+ NULL, &comp);
+ assert(ret == 0);
return comp;
}
int ret;
assert(graph);
- ret = bt_graph_add_port_added_listener(graph, graph_port_added, NULL);
- assert(ret == 0);
- ret = bt_graph_add_port_removed_listener(graph, graph_port_removed,
- NULL);
- assert(ret == 0);
- ret = bt_graph_add_ports_connected_listener(graph, graph_ports_connected,
+ ret = bt_graph_add_port_added_listener(graph, graph_port_added, NULL,
NULL);
- assert(ret == 0);
+ assert(ret >= 0);
+ ret = bt_graph_add_port_removed_listener(graph, graph_port_removed,
+ NULL, NULL);
+ assert(ret >= 0);
+ ret = bt_graph_add_ports_connected_listener(graph,
+ graph_ports_connected, NULL, NULL);
+ assert(ret >= 0);
ret = bt_graph_add_ports_disconnected_listener(graph,
- graph_ports_disconnected, NULL);
- assert(ret == 0);
+ graph_ports_disconnected, NULL, NULL);
+ assert(ret >= 0);
return graph;
}
struct bt_port *sink_def_port;
struct bt_connection *conn;
struct event event;
+ enum bt_graph_status status;
size_t src_accept_port_connection_pos;
size_t sink_accept_port_connection_pos;
size_t src_port_connected_pos;
prepare_test(TEST_SINK_REMOVES_PORT_IN_CONSUME_THEN_SRC_REMOVES_DISCONNECTED_PORT,
"sink removes port in consume, then source removes disconnected port");
- src = create_src();
- sink = create_sink();
graph = create_graph();
- src_def_port = bt_component_source_get_default_output_port(src);
+ assert(graph);
+ src = create_src(graph);
+ sink = create_sink(graph);
+ src_def_port = bt_component_source_get_output_port_by_name(src, "out");
assert(src_def_port);
- sink_def_port = bt_component_sink_get_default_input_port(sink);
+ sink_def_port = bt_component_sink_get_input_port_by_name(sink, "in");
assert(sink_def_port);
- conn = bt_graph_connect_ports(graph, src_def_port, sink_def_port);
+ status = bt_graph_connect_ports(graph, src_def_port, sink_def_port,
+ &conn);
+ assert(status == 0);
assert(conn);
- /* We're supposed to have 5 events so far */
- ok(events->len == 5, "we have the expected number of events (before consume)");
+ /* We're supposed to have 7 events so far */
+ ok(events->len == 7, "we have the expected number of events (before consume)");
+
+ /* Source's port added */
+ event.type = GRAPH_PORT_ADDED;
+ event.data.graph_port_added.comp = src;
+ event.data.graph_port_added.port = src_def_port;
+ ok(has_event(&event), "got the expected graph's port added event (for source, initial)");
+
+ /* Sink's port added */
+ event.type = GRAPH_PORT_ADDED;
+ event.data.graph_port_added.comp = sink;
+ event.data.graph_port_added.port = sink_def_port;
+ ok(has_event(&event), "got the expected graph's port added event (for sink, initial)");
/* Source's accept port connection */
event.type = COMP_ACCEPT_PORT_CONNECTION;
struct bt_port *sink_def_port;
struct bt_connection *conn;
struct event event;
+ enum bt_graph_status status;
size_t src_accept_port_connection_pos;
size_t sink_accept_port_connection_pos;
size_t src_port_connected_pos;
prepare_test(TEST_SINK_REMOVES_PORT_IN_CONSUME,
"sink removes port in consume");
- src = create_src();
- sink = create_sink();
graph = create_graph();
- src_def_port = bt_component_source_get_default_output_port(src);
+ assert(graph);
+ src = create_src(graph);
+ sink = create_sink(graph);
+ src_def_port = bt_component_source_get_output_port_by_name(src, "out");
assert(src_def_port);
- sink_def_port = bt_component_sink_get_default_input_port(sink);
+ sink_def_port = bt_component_sink_get_input_port_by_name(sink, "in");
assert(sink_def_port);
- conn = bt_graph_connect_ports(graph, src_def_port, sink_def_port);
- assert(conn);
+ status = bt_graph_connect_ports(graph, src_def_port, sink_def_port,
+ &conn);
+ assert(status == 0);
+
+ /* We're supposed to have 7 events so far */
+ ok(events->len == 7, "we have the expected number of events (before consume)");
+
+ /* Source's port added */
+ event.type = GRAPH_PORT_ADDED;
+ event.data.graph_port_added.comp = src;
+ event.data.graph_port_added.port = src_def_port;
+ ok(has_event(&event), "got the expected graph's port added event (for source, initial)");
- /* We're supposed to have 5 events so far */
- ok(events->len == 5, "we have the expected number of events (before consume)");
+ /* Sink's port added */
+ event.type = GRAPH_PORT_ADDED;
+ event.data.graph_port_added.comp = sink;
+ event.data.graph_port_added.port = sink_def_port;
+ ok(has_event(&event), "got the expected graph's port added event (for sink, initial)");
/* Source's accept port connection */
event.type = COMP_ACCEPT_PORT_CONNECTION;
struct bt_port *src_hello_port;
struct bt_connection *conn;
struct event event;
+ enum bt_graph_status status;
size_t src_accept_port_connection_pos;
size_t sink_accept_port_connection_pos;
size_t src_port_connected_pos;
prepare_test(TEST_SRC_ADDS_PORT_IN_PORT_CONNECTED,
"source adds port in port connected");
- src = create_src();
- sink = create_sink();
graph = create_graph();
- src_def_port = bt_component_source_get_default_output_port(src);
+ assert(graph);
+ src = create_src(graph);
+ sink = create_sink(graph);
+ src_def_port = bt_component_source_get_output_port_by_name(src, "out");
assert(src_def_port);
- sink_def_port = bt_component_sink_get_default_input_port(sink);
+ sink_def_port = bt_component_sink_get_input_port_by_name(sink, "in");
assert(sink_def_port);
- conn = bt_graph_connect_ports(graph, src_def_port, sink_def_port);
- assert(conn);
+ status = bt_graph_connect_ports(graph, src_def_port, sink_def_port,
+ &conn);
+ assert(status == 0);
src_hello_port = bt_component_source_get_output_port_by_name(src,
"hello");
assert(src_hello_port);
- /* We're supposed to have 6 events */
- ok(events->len == 6, "we have the expected number of events");
+ /* We're supposed to have 8 events */
+ ok(events->len == 8, "we have the expected number of events");
+
+ /* Source's port added */
+ event.type = GRAPH_PORT_ADDED;
+ event.data.graph_port_added.comp = src;
+ event.data.graph_port_added.port = src_def_port;
+ ok(has_event(&event), "got the expected graph's port added event (for source, initial)");
+
+ /* Sink's port added */
+ event.type = GRAPH_PORT_ADDED;
+ event.data.graph_port_added.comp = sink;
+ event.data.graph_port_added.port = sink_def_port;
+ ok(has_event(&event), "got the expected graph's port added event (for sink, initial)");
/* Source's accept port connection */
event.type = COMP_ACCEPT_PORT_CONNECTION;
struct bt_port *sink_def_port;
struct bt_connection *conn;
struct event event;
+ enum bt_graph_status status;
size_t src_accept_port_connection_pos;
size_t sink_accept_port_connection_pos;
size_t src_port_connected_pos;
size_t graph_ports_connected_pos;
prepare_test(TEST_SIMPLE, "simple");
- src = create_src();
- sink = create_sink();
graph = create_graph();
- src_def_port = bt_component_source_get_default_output_port(src);
+ assert(graph);
+ src = create_src(graph);
+ sink = create_sink(graph);
+ src_def_port = bt_component_source_get_output_port_by_name(src, "out");
assert(src_def_port);
- sink_def_port = bt_component_sink_get_default_input_port(sink);
+ sink_def_port = bt_component_sink_get_input_port_by_name(sink, "in");
assert(sink_def_port);
- conn = bt_graph_connect_ports(graph, src_def_port, sink_def_port);
- assert(conn);
+ status = bt_graph_connect_ports(graph, src_def_port, sink_def_port,
+ &conn);
+ assert(status == 0);
- /* We're supposed to have 5 events */
- ok(events->len == 5, "we have the expected number of events");
+ /* We're supposed to have 7 events */
+ ok(events->len == 7, "we have the expected number of events");
+
+ /* Source's port added */
+ event.type = GRAPH_PORT_ADDED;
+ event.data.graph_port_added.comp = src;
+ event.data.graph_port_added.port = src_def_port;
+ ok(has_event(&event), "got the expected graph's port added event (for source, initial)");
+
+ /* Sink's port added */
+ event.type = GRAPH_PORT_ADDED;
+ event.data.graph_port_added.comp = sink;
+ event.data.graph_port_added.port = sink_def_port;
+ ok(has_event(&event), "got the expected graph's port added event (for sink, initial)");
/* Source's accept port connection */
event.type = COMP_ACCEPT_PORT_CONNECTION;