+static void test_find(const char *plugin_dir)
+{
+ int ret;
+ struct bt_plugin *plugin;
+ struct bt_component_class *comp_cls_sink;
+ struct bt_component_class *comp_cls_source;
+ char *plugin_path;
+
+ ok(!bt_plugin_find(NULL),
+ "bt_plugin_find() handles NULL");
+ ok(!bt_plugin_find(NON_EXISTING_PATH),
+ "bt_plugin_find() returns NULL with an unknown plugin name");
+ ret = asprintf(&plugin_path, "%s" G_SEARCHPATH_SEPARATOR_S
+ G_DIR_SEPARATOR_S "ec1d09e5-696c-442e-b1c3-f9c6cf7f5958"
+ G_SEARCHPATH_SEPARATOR_S G_SEARCHPATH_SEPARATOR_S
+ G_SEARCHPATH_SEPARATOR_S "%s" G_SEARCHPATH_SEPARATOR_S
+ "8db46494-a398-466a-9649-c765ae077629"
+ G_SEARCHPATH_SEPARATOR_S,
+ NON_EXISTING_PATH, plugin_dir);
+ BT_ASSERT(ret > 0 && plugin_path);
+ g_setenv("BABELTRACE_PLUGIN_PATH", plugin_path, 1);
+ plugin = bt_plugin_find("test_minimal");
+ ok(plugin,
+ "bt_plugin_find() succeeds with a plugin name it can find");
+ ok(strcmp(bt_plugin_get_author(plugin), "Janine Sutto") == 0,
+ "bt_plugin_find() finds the correct plugin for a given name");
+ BT_PUT(plugin);
+ comp_cls_sink = bt_plugin_find_component_class(NULL, "sink",
+ BT_COMPONENT_CLASS_TYPE_SINK);
+ ok(!comp_cls_sink, "bt_plugin_find_component_class() handles NULL (plugin name)");
+ comp_cls_sink = bt_plugin_find_component_class("test_sfs", NULL,
+ BT_COMPONENT_CLASS_TYPE_SINK);
+ ok(!comp_cls_sink, "bt_plugin_find_component_class() handles NULL (component class name)");
+ comp_cls_sink = bt_plugin_find_component_class("test_sfs", "sink2",
+ BT_COMPONENT_CLASS_TYPE_SINK);
+ ok(!comp_cls_sink, "bt_plugin_find_component_class() fails with an unknown component class name");
+ comp_cls_sink = bt_plugin_find_component_class("test_sfs", "sink",
+ BT_COMPONENT_CLASS_TYPE_SINK);
+ ok(comp_cls_sink, "bt_plugin_find_component_class() succeeds with valid parameters");
+ ok(strcmp(bt_component_class_get_name(comp_cls_sink), "sink") == 0,
+ "bt_plugin_find_component_class() returns the appropriate component class (sink)");
+ comp_cls_source = bt_plugin_find_component_class("test_sfs", "source",
+ BT_COMPONENT_CLASS_TYPE_SOURCE);
+ ok(comp_cls_sink, "bt_plugin_find_component_class() succeeds with another component class name (same plugin)");
+ ok(strcmp(bt_component_class_get_name(comp_cls_source), "source") == 0,
+ "bt_plugin_find_component_class() returns the appropriate component class (source)");
+ BT_PUT(comp_cls_sink);
+ BT_PUT(comp_cls_source);
+ free(plugin_path);