+static
+void test_src_port_connected_error(void)
+{
+ struct bt_component *src;
+ struct bt_component *sink;
+ struct bt_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_graph_connect_ports(graph, src_def_port, sink_def_port,
+ &conn);
+ ok(status != BT_GRAPH_STATUS_OK,
+ "bt_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_put(graph);
+ bt_put(sink);
+ bt_put(src);
+ bt_put(conn);
+ bt_put(src_def_port);
+ bt_put(sink_def_port);
+}
+
+static
+void test_sink_port_connected_error(void)
+{
+ struct bt_component *src;
+ struct bt_component *sink;
+ struct bt_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_graph_connect_ports(graph, src_def_port, sink_def_port,
+ &conn);
+ ok(status != BT_GRAPH_STATUS_OK,
+ "bt_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_put(graph);
+ bt_put(sink);
+ bt_put(src);
+ bt_put(conn);
+ bt_put(src_def_port);
+ bt_put(sink_def_port);
+}
+