#include <babeltrace/graph/private-component-sink.h>
#include <babeltrace/graph/private-component.h>
#include <babeltrace/graph/private-connection.h>
+#include <babeltrace/graph/private-connection-notification-iterator.h>
#include <babeltrace/graph/private-connection-private-notification-iterator.h>
#include <babeltrace/graph/private-port.h>
#include <babeltrace/plugin/plugin.h>
#include "tap/tap.h"
-#define NR_TESTS 6
+#define NR_TESTS 5
enum test {
TEST_NO_AUTO_NOTIFS,
static
enum bt_notification_iterator_status common_consume(
- struct bt_notification_iterator *notif_iter)
+ struct bt_notification_iterator *notif_iter,
+ bool is_output_port_notif_iter)
{
enum bt_notification_iterator_status ret;
struct bt_notification *notification = NULL;
bool do_append_test_event = true;
BT_ASSERT(notif_iter);
- ret = bt_notification_iterator_next(notif_iter);
+ if (is_output_port_notif_iter) {
+ ret = bt_output_port_notification_iterator_next(notif_iter,
+ ¬ification);
+ } else {
+ ret = bt_private_connection_notification_iterator_next(
+ notif_iter, ¬ification);
+ }
+
if (ret < 0) {
do_append_test_event = false;
goto end;
break;
}
- notification = bt_notification_iterator_get_notification(
- notif_iter);
BT_ASSERT(notification);
switch (bt_notification_get_type(notification)) {
enum bt_notification_iterator_status it_ret;
BT_ASSERT(user_data && user_data->notif_iter);
- it_ret = common_consume(user_data->notif_iter);
+ it_ret = common_consume(user_data->notif_iter, false);
if (it_ret < 0) {
ret = BT_COMPONENT_STATUS_ERROR;
/* Consume the notification iterator */
while (iter_status == BT_NOTIFICATION_ITERATOR_STATUS_OK) {
- iter_status = common_consume(notif_iter);
+ iter_status = common_consume(notif_iter, true);
}
ok(iter_status == BT_NOTIFICATION_ITERATOR_STATUS_END,
bt_put(notif_iter);
}
-static
-void test_output_port_notification_iterator_cannot_consume(void)
-{
- struct bt_component *src_comp;
- struct bt_notification_iterator *notif_iter;
- struct bt_port *upstream_port;
-
- clear_test_events();
- current_test = TEST_OUTPUT_PORT_NOTIFICATION_ITERATOR;
- diag("test: cannot consume graph with existing output port notification iterator");
- BT_ASSERT(!graph);
- graph = bt_graph_create();
- BT_ASSERT(graph);
- create_source_sink(graph, &src_comp, NULL);
-
- /* Create notification iterator on source's output port */
- upstream_port = bt_component_source_get_output_port_by_name(src_comp, "out");
- notif_iter = bt_output_port_notification_iterator_create(upstream_port,
- NULL);
- BT_ASSERT(notif_iter);
- bt_put(upstream_port);
-
- /*
- * This should fail because the graph is now managed by the
- * notification iterator.
- */
- ok(bt_graph_run(graph) == BT_GRAPH_STATUS_CANNOT_CONSUME,
- "bt_graph_run() returns BT_GRAPH_STATUS_CANNOT_CONSUME when there's an output port notification iterator");
-
- bt_put(src_comp);
- BT_PUT(graph);
- bt_put(notif_iter);
-}
-
#define DEBUG_ENV_VAR "TEST_BT_NOTIFICATION_ITERATOR_DEBUG"
int main(int argc, char **argv)
init_static_data();
test_no_auto_notifs();
test_output_port_notification_iterator();
- test_output_port_notification_iterator_cannot_consume();
fini_static_data();
return exit_status();
}