* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#include <babeltrace/ref.h>
+#include <babeltrace/object.h>
#include <babeltrace/graph/component-class.h>
#include <babeltrace/graph/component-class-source.h>
#include <babeltrace/graph/component-class-sink.h>
#include <babeltrace/graph/component.h>
#include <babeltrace/graph/component-source.h>
#include <babeltrace/graph/component-sink.h>
+#include <babeltrace/graph/private-graph.h>
#include <babeltrace/graph/graph.h>
#include <babeltrace/graph/connection.h>
#include <babeltrace/graph/port.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
-#include <assert.h>
+#include <babeltrace/assert-internal.h>
#include <glib.h>
#include "tap/tap.h"
-#define NR_TESTS 77
+#define NR_TESTS 99
enum event_type {
COMP_ACCEPT_PORT_CONNECTION,
enum test {
TEST_EMPTY_GRAPH,
TEST_SIMPLE,
+ TEST_SRC_PORT_CONNECTED_ERROR,
+ TEST_SINK_PORT_CONNECTED_ERROR,
TEST_SRC_ADDS_PORT_IN_PORT_CONNECTED,
TEST_SINK_REMOVES_PORT_IN_CONSUME,
TEST_SINK_REMOVES_PORT_IN_CONSUME_THEN_SRC_REMOVES_DISCONNECTED_PORT,
}
static
-struct bt_notification_iterator_next_method_return src_iter_next(
- struct bt_private_connection_private_notification_iterator *priv_iterator)
+enum bt_notification_iterator_status src_iter_next(
+ struct bt_private_connection_private_notification_iterator *priv_iterator,
+ bt_notification_array notifs, uint64_t capacity,
+ uint64_t *count)
{
- struct bt_notification_iterator_next_method_return ret = {
- .status = BT_NOTIFICATION_ITERATOR_STATUS_ERROR,
- };
-
- return ret;
+ return BT_NOTIFICATION_ITERATOR_STATUS_ERROR;
}
static
struct event event = {
.type = COMP_ACCEPT_PORT_CONNECTION,
.data.comp_accept_port_connection = {
- .comp = bt_component_from_private(private_component),
- .self_port = bt_port_from_private(self_private_port),
+ .comp = bt_component_borrow_from_private(private_component),
+ .self_port = bt_port_borrow_from_private(self_private_port),
.other_port = other_port,
},
};
- bt_put(event.data.comp_accept_port_connection.comp);
- bt_put(event.data.comp_accept_port_connection.self_port);
append_event(&event);
return BT_COMPONENT_STATUS_OK;
}
static
-void src_port_connected(struct bt_private_component *private_component,
+enum bt_component_status src_port_connected(
+ struct bt_private_component *private_component,
struct bt_private_port *self_private_port,
struct bt_port *other_port)
{
struct event event = {
.type = COMP_PORT_CONNECTED,
.data.comp_port_connected = {
- .comp = bt_component_from_private(private_component),
- .self_port = bt_port_from_private(self_private_port),
+ .comp = bt_component_borrow_from_private(private_component),
+ .self_port = bt_port_borrow_from_private(self_private_port),
.other_port = other_port,
},
};
- bt_put(event.data.comp_port_connected.comp);
- bt_put(event.data.comp_port_connected.self_port);
append_event(&event);
switch (current_test) {
case TEST_SRC_ADDS_PORT_IN_PORT_CONNECTED:
- ret = bt_private_component_source_add_output_private_port(
+ ret = bt_private_component_source_add_output_port(
private_component, "hello", NULL, NULL);
- assert(ret == 0);
+ BT_ASSERT(ret == 0);
break;
+ case TEST_SRC_PORT_CONNECTED_ERROR:
+ return BT_COMPONENT_STATUS_ERROR;
default:
break;
}
+
+ return BT_COMPONENT_STATUS_OK;
}
static
struct event event = {
.type = COMP_PORT_DISCONNECTED,
.data.comp_port_disconnected = {
- .comp = bt_component_from_private(private_component),
- .port = bt_port_from_private(private_port),
+ .comp = bt_component_borrow_from_private(private_component),
+ .port = bt_port_borrow_from_private(private_port),
},
};
- bt_put(event.data.comp_port_disconnected.comp);
- bt_put(event.data.comp_port_disconnected.port);
append_event(&event);
switch (current_test) {
case TEST_SINK_REMOVES_PORT_IN_CONSUME_THEN_SRC_REMOVES_DISCONNECTED_PORT:
ret = bt_private_port_remove_from_component(private_port);
- assert(ret == 0);
+ BT_ASSERT(ret == 0);
default:
break;
}
{
int ret;
- ret = bt_private_component_source_add_output_private_port(
+ ret = bt_private_component_source_add_output_port(
priv_comp, "out", NULL, NULL);
- assert(ret == 0);
+ BT_ASSERT(ret == 0);
return BT_COMPONENT_STATUS_OK;
}
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_input_private_port_by_name(
+ def_port = bt_private_component_sink_get_input_port_by_name(
priv_component, "in");
- assert(def_port);
+ BT_ASSERT(def_port);
ret = bt_private_port_remove_from_component(def_port);
- assert(ret == 0);
- bt_put(def_port);
+ BT_ASSERT(ret == 0);
+ bt_object_put_ref(def_port);
break;
default:
break;
}
static
-void sink_port_connected(struct bt_private_component *private_component,
+enum bt_component_status sink_port_connected(
+ struct bt_private_component *private_component,
struct bt_private_port *self_private_port,
struct bt_port *other_port)
{
struct event event = {
.type = COMP_PORT_CONNECTED,
.data.comp_port_connected = {
- .comp = bt_component_from_private(private_component),
- .self_port = bt_port_from_private(self_private_port),
+ .comp = bt_component_borrow_from_private(private_component),
+ .self_port = bt_port_borrow_from_private(self_private_port),
.other_port = other_port,
},
};
- bt_put(event.data.comp_port_connected.comp);
- bt_put(event.data.comp_port_connected.self_port);
append_event(&event);
+
+ if (current_test == TEST_SINK_PORT_CONNECTED_ERROR) {
+ return BT_COMPONENT_STATUS_ERROR;
+ } else {
+ return BT_COMPONENT_STATUS_OK;
+ }
}
static
struct event event = {
.type = COMP_PORT_DISCONNECTED,
.data.comp_port_disconnected = {
- .comp = bt_component_from_private(private_component),
- .port = bt_port_from_private(private_port),
+ .comp = bt_component_borrow_from_private(private_component),
+ .port = bt_port_borrow_from_private(private_port),
},
};
- bt_put(event.data.comp_port_disconnected.comp);
- bt_put(event.data.comp_port_disconnected.port);
append_event(&event);
}
{
int ret;
- ret = bt_private_component_sink_add_input_private_port(priv_comp,
+ ret = bt_private_component_sink_add_input_port(priv_comp,
"in", NULL, NULL);
- assert(ret == 0);
+ BT_ASSERT(ret == 0);
return BT_COMPONENT_STATUS_OK;
}
{
struct bt_component *comp = bt_port_get_component(port);
- assert(comp);
- bt_put(comp);
+ BT_ASSERT(comp);
+ bt_object_put_ref(comp);
struct event event = {
.type = GRAPH_PORT_ADDED,
bt_port_get_component(downstream_port);
struct bt_connection *conn = bt_port_get_connection(upstream_port);
- assert(upstream_comp);
- assert(downstream_comp);
- assert(conn);
- bt_put(upstream_comp);
- bt_put(downstream_comp);
- bt_put(conn);
+ BT_ASSERT(upstream_comp);
+ BT_ASSERT(downstream_comp);
+ BT_ASSERT(conn);
+ bt_object_put_ref(upstream_comp);
+ bt_object_put_ref(downstream_comp);
+ bt_object_put_ref(conn);
struct event event = {
.type = GRAPH_PORTS_CONNECTED,
int ret;
src_comp_class = bt_component_class_source_create("src", src_iter_next);
- assert(src_comp_class);
+ BT_ASSERT(src_comp_class);
ret = bt_component_class_set_init_method(src_comp_class, src_init);
- assert(ret == 0);
+ BT_ASSERT(ret == 0);
ret = bt_component_class_set_accept_port_connection_method(
src_comp_class, accept_port_connection);
- assert(ret == 0);
+ BT_ASSERT(ret == 0);
ret = bt_component_class_set_port_connected_method(src_comp_class,
src_port_connected);
- assert(ret == 0);
+ BT_ASSERT(ret == 0);
ret = bt_component_class_set_port_disconnected_method(
src_comp_class, src_port_disconnected);
- assert(ret == 0);
+ BT_ASSERT(ret == 0);
sink_comp_class = bt_component_class_sink_create("sink", sink_consume);
- assert(sink_comp_class);
+ BT_ASSERT(sink_comp_class);
ret = bt_component_class_set_init_method(sink_comp_class, sink_init);
- assert(ret == 0);
+ BT_ASSERT(ret == 0);
ret = bt_component_class_set_accept_port_connection_method(
sink_comp_class, accept_port_connection);
- assert(ret == 0);
+ BT_ASSERT(ret == 0);
ret = bt_component_class_set_port_connected_method(sink_comp_class,
sink_port_connected);
- assert(ret == 0);
+ BT_ASSERT(ret == 0);
ret = bt_component_class_set_port_disconnected_method(sink_comp_class,
sink_port_disconnected);
- assert(ret == 0);
+ BT_ASSERT(ret == 0);
bt_component_class_freeze(src_comp_class);
bt_component_class_freeze(sink_comp_class);
events = g_array_new(FALSE, TRUE, sizeof(struct event));
- assert(events);
+ BT_ASSERT(events);
}
static
void fini_test(void)
{
- bt_put(src_comp_class);
- bt_put(sink_comp_class);
+ bt_object_put_ref(src_comp_class);
+ bt_object_put_ref(sink_comp_class);
g_array_free(events, TRUE);
}
static
-struct bt_component *create_src(struct bt_graph *graph)
+struct bt_component *create_src(struct bt_private_graph *graph)
{
struct bt_component *comp;
int ret;
- ret = bt_graph_add_component(graph, src_comp_class, "src-comp", NULL,
+ ret = bt_private_graph_add_component(graph, src_comp_class, "src-comp", NULL,
&comp);
- assert(ret == 0);
+ BT_ASSERT(ret == 0);
return comp;
}
static
-struct bt_component *create_sink(struct bt_graph *graph)
+struct bt_component *create_sink(struct bt_private_graph *graph)
{
struct bt_component *comp;
int ret;
- ret = bt_graph_add_component(graph, sink_comp_class, "sink-comp",
+ ret = bt_private_graph_add_component(graph, sink_comp_class, "sink-comp",
NULL, &comp);
- assert(ret == 0);
+ BT_ASSERT(ret == 0);
return comp;
}
static
-struct bt_graph *create_graph(void)
+struct bt_private_graph *create_graph(void)
{
- struct bt_graph *graph = bt_graph_create();
+ struct bt_private_graph *graph = bt_private_graph_create();
int ret;
- assert(graph);
- ret = bt_graph_add_port_added_listener(graph, graph_port_added, NULL,
+ BT_ASSERT(graph);
+ ret = bt_private_graph_add_port_added_listener(graph, graph_port_added, NULL,
NULL);
- assert(ret >= 0);
- ret = bt_graph_add_port_removed_listener(graph, graph_port_removed,
+ BT_ASSERT(ret >= 0);
+ ret = bt_private_graph_add_port_removed_listener(graph, graph_port_removed,
NULL, NULL);
- assert(ret >= 0);
- ret = bt_graph_add_ports_connected_listener(graph,
+ BT_ASSERT(ret >= 0);
+ ret = bt_private_graph_add_ports_connected_listener(graph,
graph_ports_connected, NULL, NULL);
- assert(ret >= 0);
- ret = bt_graph_add_ports_disconnected_listener(graph,
+ BT_ASSERT(ret >= 0);
+ ret = bt_private_graph_add_ports_disconnected_listener(graph,
graph_ports_disconnected, NULL, NULL);
- assert(ret >= 0);
+ BT_ASSERT(ret >= 0);
return graph;
}
int ret;
struct bt_component *src;
struct bt_component *sink;
- struct bt_graph *graph;
+ struct bt_private_graph *graph;
struct bt_port *src_def_port;
struct bt_port *sink_def_port;
struct bt_connection *conn;
prepare_test(TEST_SINK_REMOVES_PORT_IN_CONSUME_THEN_SRC_REMOVES_DISCONNECTED_PORT,
"sink removes port in consume, then source removes disconnected port");
graph = create_graph();
- assert(graph);
+ BT_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);
+ BT_ASSERT(src_def_port);
sink_def_port = bt_component_sink_get_input_port_by_name(sink, "in");
- assert(sink_def_port);
- status = bt_graph_connect_ports(graph, src_def_port, sink_def_port,
+ BT_ASSERT(sink_def_port);
+ status = bt_private_graph_connect_ports(graph, src_def_port, sink_def_port,
&conn);
- assert(status == 0);
- assert(conn);
+ BT_ASSERT(status == 0);
+ BT_ASSERT(conn);
/* We're supposed to have 7 events so far */
ok(events->len == 7, "we have the expected number of events (before consume)");
/* Consume sink once */
clear_events();
- ret = bt_graph_consume(graph);
- assert(ret == 0);
+ ret = bt_private_graph_consume(graph);
+ BT_ASSERT(ret == 0);
/* We're supposed to have 5 new events */
ok(events->len == 5, "we have the expected number of events (after consume)");
ok(graph_port_removed_src_pos < graph_port_removed_sink_pos,
"event order is good (13)");
- bt_put(graph);
- bt_put(sink);
- bt_put(src);
- bt_put(conn);
- bt_put(src_def_port);
- bt_put(sink_def_port);
+ bt_object_put_ref(graph);
+ bt_object_put_ref(sink);
+ bt_object_put_ref(src);
+ bt_object_put_ref(conn);
+ bt_object_put_ref(src_def_port);
+ bt_object_put_ref(sink_def_port);
}
static
int ret;
struct bt_component *src;
struct bt_component *sink;
- struct bt_graph *graph;
+ struct bt_private_graph *graph;
struct bt_port *src_def_port;
struct bt_port *sink_def_port;
struct bt_connection *conn;
prepare_test(TEST_SINK_REMOVES_PORT_IN_CONSUME,
"sink removes port in consume");
graph = create_graph();
- assert(graph);
+ BT_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);
+ BT_ASSERT(src_def_port);
sink_def_port = bt_component_sink_get_input_port_by_name(sink, "in");
- assert(sink_def_port);
- status = bt_graph_connect_ports(graph, src_def_port, sink_def_port,
+ BT_ASSERT(sink_def_port);
+ status = bt_private_graph_connect_ports(graph, src_def_port, sink_def_port,
&conn);
- assert(status == 0);
+ BT_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)");
/* Consume sink once */
clear_events();
- ret = bt_graph_consume(graph);
- assert(ret == 0);
+ ret = bt_private_graph_consume(graph);
+ BT_ASSERT(ret == 0);
/* We're supposed to have 4 new events */
ok(events->len == 4, "we have the expected number of events (after consume)");
ok(graph_ports_disconnected_pos < graph_port_removed_sink_pos,
"event order is good (11)");
- bt_put(graph);
- bt_put(sink);
- bt_put(src);
- bt_put(conn);
- bt_put(src_def_port);
- bt_put(sink_def_port);
+ bt_object_put_ref(graph);
+ bt_object_put_ref(sink);
+ bt_object_put_ref(src);
+ bt_object_put_ref(conn);
+ bt_object_put_ref(src_def_port);
+ bt_object_put_ref(sink_def_port);
}
static
{
struct bt_component *src;
struct bt_component *sink;
- struct bt_graph *graph;
+ struct bt_private_graph *graph;
struct bt_port *src_def_port;
struct bt_port *sink_def_port;
struct bt_port *src_hello_port;
prepare_test(TEST_SRC_ADDS_PORT_IN_PORT_CONNECTED,
"source adds port in port connected");
graph = create_graph();
- assert(graph);
+ BT_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);
+ BT_ASSERT(src_def_port);
sink_def_port = bt_component_sink_get_input_port_by_name(sink, "in");
- assert(sink_def_port);
- status = bt_graph_connect_ports(graph, src_def_port, sink_def_port,
+ BT_ASSERT(sink_def_port);
+ status = bt_private_graph_connect_ports(graph, src_def_port, sink_def_port,
&conn);
- assert(status == 0);
+ BT_ASSERT(status == 0);
src_hello_port = bt_component_source_get_output_port_by_name(src,
"hello");
- assert(src_hello_port);
+ BT_ASSERT(src_hello_port);
/* We're supposed to have 8 events */
ok(events->len == 8, "we have the expected number of events");
ok(graph_port_added_src_pos < graph_ports_connected_pos,
"event order is good (6)");
- bt_put(graph);
- bt_put(sink);
- bt_put(src);
- bt_put(conn);
- bt_put(src_def_port);
- bt_put(sink_def_port);
- bt_put(src_hello_port);
+ bt_object_put_ref(graph);
+ bt_object_put_ref(sink);
+ bt_object_put_ref(src);
+ bt_object_put_ref(conn);
+ bt_object_put_ref(src_def_port);
+ bt_object_put_ref(sink_def_port);
+ bt_object_put_ref(src_hello_port);
}
static
{
struct bt_component *src;
struct bt_component *sink;
- struct bt_graph *graph;
+ struct bt_private_graph *graph;
struct bt_port *src_def_port;
struct bt_port *sink_def_port;
struct bt_connection *conn;
prepare_test(TEST_SIMPLE, "simple");
graph = create_graph();
- assert(graph);
+ BT_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);
+ BT_ASSERT(src_def_port);
sink_def_port = bt_component_sink_get_input_port_by_name(sink, "in");
- assert(sink_def_port);
- status = bt_graph_connect_ports(graph, src_def_port, sink_def_port,
+ BT_ASSERT(sink_def_port);
+ status = bt_private_graph_connect_ports(graph, src_def_port, sink_def_port,
&conn);
- assert(status == 0);
+ BT_ASSERT(status == 0);
/* We're supposed to have 7 events */
ok(events->len == 7, "we have the expected number of events");
ok(sink_accept_port_connection_pos < sink_port_connected_pos,
"event order is good (4)");
- bt_put(graph);
- bt_put(sink);
- bt_put(src);
- bt_put(conn);
- bt_put(src_def_port);
- bt_put(sink_def_port);
+ bt_object_put_ref(graph);
+ bt_object_put_ref(sink);
+ bt_object_put_ref(src);
+ bt_object_put_ref(conn);
+ bt_object_put_ref(src_def_port);
+ bt_object_put_ref(sink_def_port);
+}
+
+static
+void test_src_port_connected_error(void)
+{
+ struct bt_component *src;
+ struct bt_component *sink;
+ struct bt_private_graph *graph;
+ struct bt_port *src_def_port;
+ struct bt_port *sink_def_port;
+ struct bt_connection *conn = NULL;
+ struct event event;
+ enum bt_graph_status status;
+ size_t src_accept_port_connection_pos;
+ size_t src_port_connected_pos;
+
+ prepare_test(TEST_SRC_PORT_CONNECTED_ERROR, "port connected error: source");
+ graph = create_graph();
+ BT_ASSERT(graph);
+ src = create_src(graph);
+ sink = create_sink(graph);
+ src_def_port = bt_component_source_get_output_port_by_name(src, "out");
+ BT_ASSERT(src_def_port);
+ sink_def_port = bt_component_sink_get_input_port_by_name(sink, "in");
+ BT_ASSERT(sink_def_port);
+ status = bt_private_graph_connect_ports(graph, src_def_port, sink_def_port,
+ &conn);
+ ok(status != BT_GRAPH_STATUS_OK,
+ "bt_private_graph_connect_ports() returns an error");
+ ok(!conn, "returned connection is NULL");
+
+ /* 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_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;
+ event.data.comp_accept_port_connection.comp = src;
+ event.data.comp_accept_port_connection.self_port = src_def_port;
+ event.data.comp_accept_port_connection.other_port = sink_def_port;
+ ok(has_event(&event), "got the expected source's accept port connection event");
+ src_accept_port_connection_pos = event_pos(&event);
+
+ /* Sink's accept port connection */
+ event.type = COMP_ACCEPT_PORT_CONNECTION;
+ event.data.comp_accept_port_connection.comp = sink;
+ event.data.comp_accept_port_connection.self_port = sink_def_port;
+ event.data.comp_accept_port_connection.other_port = src_def_port;
+ ok(has_event(&event), "got the expected sink's accept port connection event");
+
+ /* Source's port connected */
+ event.type = COMP_PORT_CONNECTED;
+ event.data.comp_port_connected.comp = src;
+ event.data.comp_port_connected.self_port = src_def_port;
+ event.data.comp_port_connected.other_port = sink_def_port;
+ ok(has_event(&event), "got the expected source's port connected event");
+ src_port_connected_pos = event_pos(&event);
+
+ /* Order of events */
+ ok(src_accept_port_connection_pos < src_port_connected_pos,
+ "event order is good (1)");
+
+ bt_object_put_ref(graph);
+ bt_object_put_ref(sink);
+ bt_object_put_ref(src);
+ bt_object_put_ref(conn);
+ bt_object_put_ref(src_def_port);
+ bt_object_put_ref(sink_def_port);
+}
+
+static
+void test_sink_port_connected_error(void)
+{
+ struct bt_component *src;
+ struct bt_component *sink;
+ struct bt_private_graph *graph;
+ struct bt_port *src_def_port;
+ struct bt_port *sink_def_port;
+ struct bt_connection *conn = NULL;
+ 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 src_port_disconnected_pos;
+ size_t sink_port_connected_pos;
+
+ prepare_test(TEST_SINK_PORT_CONNECTED_ERROR, "port connected error: sink");
+ graph = create_graph();
+ BT_ASSERT(graph);
+ src = create_src(graph);
+ sink = create_sink(graph);
+ src_def_port = bt_component_source_get_output_port_by_name(src, "out");
+ BT_ASSERT(src_def_port);
+ sink_def_port = bt_component_sink_get_input_port_by_name(sink, "in");
+ BT_ASSERT(sink_def_port);
+ status = bt_private_graph_connect_ports(graph, src_def_port, sink_def_port,
+ &conn);
+ ok(status != BT_GRAPH_STATUS_OK,
+ "bt_private_graph_connect_ports() returns an error");
+ ok(!conn, "returned connection is NULL");
+
+ /* We're supposed to have 5 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;
+ event.data.comp_accept_port_connection.comp = src;
+ event.data.comp_accept_port_connection.self_port = src_def_port;
+ event.data.comp_accept_port_connection.other_port = sink_def_port;
+ ok(has_event(&event), "got the expected source's accept port connection event");
+ src_accept_port_connection_pos = event_pos(&event);
+
+ /* Sink's accept port connection */
+ event.type = COMP_ACCEPT_PORT_CONNECTION;
+ event.data.comp_accept_port_connection.comp = sink;
+ event.data.comp_accept_port_connection.self_port = sink_def_port;
+ event.data.comp_accept_port_connection.other_port = src_def_port;
+ ok(has_event(&event), "got the expected sink's accept port connection event");
+ sink_accept_port_connection_pos = event_pos(&event);
+
+ /* Source's port connected */
+ event.type = COMP_PORT_CONNECTED;
+ event.data.comp_port_connected.comp = src;
+ event.data.comp_port_connected.self_port = src_def_port;
+ event.data.comp_port_connected.other_port = sink_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 = COMP_PORT_CONNECTED;
+ event.data.comp_port_connected.comp = sink;
+ event.data.comp_port_connected.self_port = sink_def_port;
+ event.data.comp_port_connected.other_port = src_def_port;
+ ok(has_event(&event), "got the expected sink's port connected event");
+ sink_port_connected_pos = event_pos(&event);
+
+ /* Source's port disconnected */
+ event.type = COMP_PORT_DISCONNECTED;
+ event.data.comp_port_disconnected.comp = src;
+ event.data.comp_port_disconnected.port = src_def_port;
+ ok(has_event(&event), "got the expected source's port disconnected event");
+ src_port_disconnected_pos = event_pos(&event);
+
+ /* Order of events */
+ ok(src_accept_port_connection_pos < src_port_connected_pos,
+ "event order is good (1)");
+ ok(sink_accept_port_connection_pos < sink_port_connected_pos,
+ "event order is good (2)");
+ ok(sink_port_connected_pos < src_port_disconnected_pos,
+ "event order is good (3)");
+
+ bt_object_put_ref(graph);
+ bt_object_put_ref(sink);
+ bt_object_put_ref(src);
+ bt_object_put_ref(conn);
+ bt_object_put_ref(src_def_port);
+ bt_object_put_ref(sink_def_port);
}
static
void test_empty_graph(void)
{
- struct bt_graph *graph;
+ struct bt_private_graph *graph;
prepare_test(TEST_EMPTY_GRAPH, "empty graph");
graph = create_graph();
ok(events->len == 0, "empty graph generates no events");
- bt_put(graph);
+ bt_object_put_ref(graph);
}
int main(int argc, char **argv)
init_test();
test_empty_graph();
test_simple();
+ test_src_port_connected_error();
+ test_sink_port_connected_error();
test_src_adds_port_in_port_connected();
test_sink_removes_port_in_port_connected();
test_sink_removes_port_in_port_connected_then_src_removes_disconnected_port();