diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2020-06-28 17:19:35 +0200 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2020-08-23 20:46:07 +0200 |
commit | 184b709c7f747b79f3545872b3274aee19ba38e5 (patch) | |
tree | d5e55f4eb31125d22c1ed5bb7cde19d976f98885 /tests | |
parent | 692ceecbe8d66565f1a9bcd9e7c09ed8a64a1501 (diff) | |
download | grilo-plugins-184b709c7f747b79f3545872b3274aee19ba38e5.tar.gz |
tests: Add tests for the tracker3 plugin
Use the tracker 3.0 testutils helpers to run a tracker sandbox, and put
some sample files on it (borrowed from chromaprint and tracker-miners
tests) so we can test features in the grilo plugin.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/meson.build | 4 | ||||
-rw-r--r-- | tests/tracker3/data/sample.flac | bin | 0 -> 196902 bytes | |||
-rw-r--r-- | tests/tracker3/data/sample.mp3 | bin | 0 -> 61547 bytes | |||
-rw-r--r-- | tests/tracker3/data/sample.ogg | bin | 0 -> 10622 bytes | |||
-rw-r--r-- | tests/tracker3/data/sample.ogv | bin | 0 -> 320525 bytes | |||
-rw-r--r-- | tests/tracker3/data/sample.png | bin | 0 -> 2374 bytes | |||
-rw-r--r-- | tests/tracker3/meson.build | 24 | ||||
-rw-r--r-- | tests/tracker3/test_tracker3.c | 500 |
8 files changed, 528 insertions, 0 deletions
diff --git a/tests/meson.build b/tests/meson.build index bdd96c5..434d951 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -39,3 +39,7 @@ endif if local_metadata_enabled and lua_factory_enabled subdir('local-metadata') endif + +if tracker3_dep.found() and tracker3_testutils_dep.found() + subdir('tracker3') +endif diff --git a/tests/tracker3/data/sample.flac b/tests/tracker3/data/sample.flac Binary files differnew file mode 100644 index 0000000..38ce954 --- /dev/null +++ b/tests/tracker3/data/sample.flac diff --git a/tests/tracker3/data/sample.mp3 b/tests/tracker3/data/sample.mp3 Binary files differnew file mode 100644 index 0000000..69e848a --- /dev/null +++ b/tests/tracker3/data/sample.mp3 diff --git a/tests/tracker3/data/sample.ogg b/tests/tracker3/data/sample.ogg Binary files differnew file mode 100644 index 0000000..d0c7ad5 --- /dev/null +++ b/tests/tracker3/data/sample.ogg diff --git a/tests/tracker3/data/sample.ogv b/tests/tracker3/data/sample.ogv Binary files differnew file mode 100644 index 0000000..bc1da46 --- /dev/null +++ b/tests/tracker3/data/sample.ogv diff --git a/tests/tracker3/data/sample.png b/tests/tracker3/data/sample.png Binary files differnew file mode 100644 index 0000000..7ff9788 --- /dev/null +++ b/tests/tracker3/data/sample.png diff --git a/tests/tracker3/meson.build b/tests/tracker3/meson.build new file mode 100644 index 0000000..4dc1f61 --- /dev/null +++ b/tests/tracker3/meson.build @@ -0,0 +1,24 @@ +source_tests = [ + 'test_tracker3', +] + +tracker_sandbox = find_program(tracker3_testutils_dep.get_pkgconfig_variable('command')) +datadir = join_paths(meson.current_source_dir(), 'data') + +foreach t: source_tests + exe = executable(t, t + '.c', + install: false, + dependencies: must_deps, + c_args: [ + '-DTRACKER3_PLUGIN_PATH="@0@/src/tracker3/"'.format(meson.build_root()), + '-DTRACKER3_DATA_PATH="@0@"'.format(datadir), + ]) + test(t, tracker_sandbox, + args: [ + '--index-recursive-directories', datadir, + '--store-tmpdir', + '--wait-for-miner=Files', + '--wait-for-miner=Extract', + exe + ]) +endforeach diff --git a/tests/tracker3/test_tracker3.c b/tests/tracker3/test_tracker3.c new file mode 100644 index 0000000..a14eddb --- /dev/null +++ b/tests/tracker3/test_tracker3.c @@ -0,0 +1,500 @@ +/* + * Copyright (C) 2020 Red Hat Inc. + * + * Author: Carlos Garnacho <carlosg@gnome.org> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA + * + */ + +#include <locale.h> +#include <grilo.h> + +#define TRACKER3_ID "grl-tracker3" +#define TRACKER3_SOURCE_ID "grl-tracker3-source" + +static void +on_source_added (GrlRegistry *registry, + GrlSource *source, + GMainLoop *main_loop) +{ + g_assert_cmpstr (grl_source_get_id (source), ==, TRACKER3_SOURCE_ID); + g_main_loop_quit (main_loop); +} + +static void +test_setup (void) +{ + GError *error = NULL; + GrlRegistry *registry; + GMainLoop *main_loop; + + registry = grl_registry_get_default (); + grl_registry_load_all_plugins (registry, TRUE, &error); + g_assert_no_error (error); + + main_loop = g_main_loop_new (NULL, FALSE); + + g_signal_connect (registry, "source-added", + G_CALLBACK (on_source_added), main_loop); + + g_main_loop_run (main_loop); + + g_main_loop_unref (main_loop); + + sleep (1); +} + +static gint +compare_by_url (gconstpointer a, + gconstpointer b) +{ + return g_strcmp0 (grl_media_get_url (GRL_MEDIA (a)), + grl_media_get_url (GRL_MEDIA (b))); +} + +static void +test_browse (void) +{ + GrlRegistry *registry; + GrlSource *source; + GList *subelements, *elements, *l; + GError *error = NULL; + GrlOperationOptions *options; + GList *keys; + + registry = grl_registry_get_default (); + source = grl_registry_lookup_source (registry, TRACKER3_SOURCE_ID); + g_assert (source); + + keys = grl_metadata_key_list_new (GRL_METADATA_KEY_URL, + GRL_METADATA_KEY_TITLE, + GRL_METADATA_KEY_INVALID); + + options = grl_operation_options_new (NULL); + elements = grl_source_browse_sync (source, NULL, NULL, options, &error); + g_assert_no_error (error); + + g_assert_cmpint (g_list_length (elements), ==, 3); + + for (l = elements; l; l = l->next) { + GrlMedia *media = l->data; + + if (g_strcmp0 (grl_media_get_title (media), "Music") == 0) { + subelements = grl_source_browse_sync (source, media, keys, options, &error); + g_assert_cmpint (g_list_length (subelements), ==, 3); + subelements = g_list_sort (subelements, compare_by_url); + + g_assert_cmpstr (grl_media_get_url (g_list_nth_data (subelements, 0)), + ==, + "file://" TRACKER3_DATA_PATH "/sample.flac"); + g_assert_cmpstr (grl_media_get_url (g_list_nth_data (subelements, 1)), + ==, + "file://" TRACKER3_DATA_PATH "/sample.mp3"); + g_assert_cmpstr (grl_media_get_url (g_list_nth_data (subelements, 2)), + ==, + "file://" TRACKER3_DATA_PATH "/sample.ogg"); + g_list_free_full (subelements, g_object_unref); + } else if (g_strcmp0 (grl_media_get_title (media), "Videos") == 0) { + subelements = grl_source_browse_sync (source, media, keys, options, &error); + g_assert_cmpint (g_list_length (subelements), ==, 1); + g_assert_cmpstr (grl_media_get_url (g_list_nth_data (subelements, 0)), + ==, + "file://" TRACKER3_DATA_PATH "/sample.ogv"); + g_list_free_full (subelements, g_object_unref); + } else if (g_strcmp0 (grl_media_get_title (media), "Photos") == 0) { + subelements = grl_source_browse_sync (source, media, keys, options, &error); + g_assert_cmpint (g_list_length (subelements), ==, 1); + g_assert_cmpstr (grl_media_get_url (g_list_nth_data (subelements, 0)), + ==, + "file://" TRACKER3_DATA_PATH "/sample.png"); + g_list_free_full (subelements, g_object_unref); + } else { + g_assert_cmpstr (grl_media_get_title (media), ==, "b0rk"); + } + } + + g_list_free_full (elements, g_object_unref); + g_object_unref (options); + g_list_free (keys); +} + +static void +test_browse_type_filter (void) +{ + GrlRegistry *registry; + GrlSource *source; + GList *elements; + GError *error = NULL; + GrlOperationOptions *options; + GList *keys; + + registry = grl_registry_get_default (); + source = grl_registry_lookup_source (registry, TRACKER3_SOURCE_ID); + g_assert (source); + + keys = grl_metadata_key_list_new (GRL_METADATA_KEY_URL, + GRL_METADATA_KEY_TITLE, + GRL_METADATA_KEY_INVALID); + + options = grl_operation_options_new (NULL); + grl_operation_options_set_type_filter (options, GRL_TYPE_FILTER_VIDEO); + elements = grl_source_browse_sync (source, NULL, keys, options, &error); + g_assert_no_error (error); + + g_assert_cmpint (g_list_length (elements), ==, 1); + + elements = g_list_sort (elements, compare_by_url); + + g_assert_cmpstr (grl_media_get_url (g_list_nth_data (elements, 0)), + ==, + "file://" TRACKER3_DATA_PATH "/sample.ogv"); + + g_list_free_full (elements, g_object_unref); + g_object_unref (options); + g_list_free (keys); +} + +static void +test_media_from_uri (void) +{ + GrlRegistry *registry; + GrlSource *source; + GrlMedia *media; + GError *error = NULL; + GrlOperationOptions *options; + GList *keys; + + registry = grl_registry_get_default (); + source = grl_registry_lookup_source (registry, TRACKER3_SOURCE_ID); + g_assert (source); + + keys = grl_metadata_key_list_new (GRL_METADATA_KEY_URL, + GRL_METADATA_KEY_TITLE, + GRL_METADATA_KEY_INVALID); + + options = grl_operation_options_new (NULL); + media = grl_source_get_media_from_uri_sync (source, + "file://" TRACKER3_DATA_PATH "/sample.ogv", + keys, + options, &error); + g_assert_no_error (error); + + g_assert_cmpstr (grl_media_get_url (media), + ==, + "file://" TRACKER3_DATA_PATH "/sample.ogv"); + g_assert_cmpstr (grl_media_get_title (media), + ==, + "sample"); + + g_object_unref (options); + g_object_unref (media); + g_list_free (keys); +} + +static void +test_media_from_uri_nonexistent (void) +{ + GrlRegistry *registry; + GrlSource *source; + GrlMedia *media; + GError *error = NULL; + GrlOperationOptions *options; + GList *keys; + + registry = grl_registry_get_default (); + source = grl_registry_lookup_source (registry, TRACKER3_SOURCE_ID); + g_assert (source); + + keys = grl_metadata_key_list_new (GRL_METADATA_KEY_URL, + GRL_METADATA_KEY_TITLE, + GRL_METADATA_KEY_INVALID); + + options = grl_operation_options_new (NULL); + media = grl_source_get_media_from_uri_sync (source, + "file://" TRACKER3_DATA_PATH "/IDoNotExist", + keys, + options, &error); + g_assert_no_error (error); + g_assert_null (media); + + g_object_unref (options); + g_list_free (keys); +} + +static void +test_resolve (void) +{ + GrlRegistry *registry; + GrlSource *source; + GrlMedia *media, *resolved; + GError *error = NULL; + GrlOperationOptions *options; + GList *keys; + + registry = grl_registry_get_default (); + source = grl_registry_lookup_source (registry, TRACKER3_SOURCE_ID); + g_assert (source); + + keys = grl_metadata_key_list_new (GRL_METADATA_KEY_URL, + GRL_METADATA_KEY_TITLE, + GRL_METADATA_KEY_INVALID); + + options = grl_operation_options_new (NULL); + media = grl_media_audio_new (); + grl_media_set_url (media, "file://" TRACKER3_DATA_PATH "/sample.mp3"); + + resolved = grl_source_resolve_sync (source, + media, + keys, + options, &error); + g_assert_no_error (error); + g_assert_nonnull (resolved); + g_assert_true (resolved == media); + + g_assert_cmpstr (grl_media_get_url (media), + ==, + "file://" TRACKER3_DATA_PATH "/sample.mp3"); + g_assert_cmpstr (grl_media_get_title (media), + ==, + "Simply Juvenile"); + + g_object_unref (options); + g_object_unref (media); + g_list_free (keys); +} + +static void +test_resolve_non_existent (void) +{ + GrlRegistry *registry; + GrlSource *source; + GrlMedia *media, *resolved; + GError *error = NULL; + GrlOperationOptions *options; + GList *keys; + + registry = grl_registry_get_default (); + source = grl_registry_lookup_source (registry, TRACKER3_SOURCE_ID); + g_assert (source); + + keys = grl_metadata_key_list_new (GRL_METADATA_KEY_URL, + GRL_METADATA_KEY_TITLE, + GRL_METADATA_KEY_INVALID); + + options = grl_operation_options_new (NULL); + media = grl_media_audio_new (); + grl_media_set_url (media, "file://" TRACKER3_DATA_PATH "/IDoNotExist"); + + resolved = grl_source_resolve_sync (source, + media, + keys, + options, &error); + g_assert_no_error (error); + g_assert_nonnull (resolved); + + g_assert_cmpstr (grl_media_get_title (media), + ==, + NULL); + + g_object_unref (options); + g_object_unref (media); + g_list_free (keys); +} + +static void +test_search (void) +{ + GrlRegistry *registry; + GrlSource *source; + GError *error = NULL; + GList *elements; + GrlOperationOptions *options; + GList *keys; + + registry = grl_registry_get_default (); + source = grl_registry_lookup_source (registry, TRACKER3_SOURCE_ID); + g_assert (source); + + keys = grl_metadata_key_list_new (GRL_METADATA_KEY_URL, + GRL_METADATA_KEY_TITLE, + GRL_METADATA_KEY_INVALID); + + options = grl_operation_options_new (NULL); + + elements = grl_source_search_sync (source, + "Simply", + keys, + options, &error); + g_assert_no_error (error); + g_assert_cmpint (g_list_length (elements), ==, 1); + + g_assert_cmpstr (grl_media_get_url (g_list_nth_data (elements, 0)), + ==, + "file://" TRACKER3_DATA_PATH "/sample.mp3"); + g_assert_cmpstr (grl_media_get_title (g_list_nth_data (elements, 0)), + ==, + "Simply Juvenile"); + + g_object_unref (options); + g_list_free (keys); +} + +static void +test_search_non_existent (void) +{ + GrlRegistry *registry; + GrlSource *source; + GError *error = NULL; + GList *elements; + GrlOperationOptions *options; + GList *keys; + + registry = grl_registry_get_default (); + source = grl_registry_lookup_source (registry, TRACKER3_SOURCE_ID); + g_assert (source); + + keys = grl_metadata_key_list_new (GRL_METADATA_KEY_URL, + GRL_METADATA_KEY_TITLE, + GRL_METADATA_KEY_INVALID); + + options = grl_operation_options_new (NULL); + + elements = grl_source_search_sync (source, + "I do not exist", + keys, + options, &error); + g_assert_no_error (error); + g_assert_cmpint (g_list_length (elements), ==, 0); + + g_object_unref (options); + g_list_free (keys); +} + +static void +test_search_range_filter (void) +{ + GrlRegistry *registry; + GrlSource *source; + GError *error = NULL; + GList *elements; + GrlOperationOptions *options; + GList *keys; + + registry = grl_registry_get_default (); + source = grl_registry_lookup_source (registry, TRACKER3_SOURCE_ID); + g_assert (source); + + keys = grl_metadata_key_list_new (GRL_METADATA_KEY_URL, + GRL_METADATA_KEY_TITLE, + GRL_METADATA_KEY_INVALID); + + options = grl_operation_options_new (NULL); + grl_operation_options_set_key_range_filter (options, + GRL_METADATA_KEY_DURATION, + 5, 12, NULL); + + elements = grl_source_search_sync (source, + NULL, + keys, + options, &error); + g_assert_no_error (error); + g_assert_cmpint (g_list_length (elements), ==, 2); + + elements = g_list_sort (elements, compare_by_url); + + g_assert_cmpstr (grl_media_get_url (g_list_nth_data (elements, 0)), + ==, + "file://" TRACKER3_DATA_PATH "/sample.flac"); + + g_assert_cmpstr (grl_media_get_url (g_list_nth_data (elements, 1)), + ==, + "file://" TRACKER3_DATA_PATH "/sample.ogv"); + + g_object_unref (options); + g_list_free (keys); +} + +static void +test_query (void) +{ + GrlRegistry *registry; + GrlSource *source; + GError *error = NULL; + GList *elements; + GrlOperationOptions *options; + GList *keys; + + registry = grl_registry_get_default (); + source = grl_registry_lookup_source (registry, TRACKER3_SOURCE_ID); + g_assert (source); + + keys = grl_metadata_key_list_new (GRL_METADATA_KEY_URL, + GRL_METADATA_KEY_TITLE, + GRL_METADATA_KEY_INVALID); + + options = grl_operation_options_new (NULL); + + elements = grl_source_query_sync (source, + "SELECT ('a' AS ?urn) ('file:///a' AS ?url) ('title' AS ?title) {}", + keys, + options, &error); + g_assert_no_error (error); + g_assert_cmpint (g_list_length (elements), ==, 1); + + g_assert_cmpstr (grl_media_get_url (g_list_nth_data (elements, 0)), + ==, + "file:///a"); + g_assert_cmpstr (grl_media_get_title (g_list_nth_data (elements, 0)), + ==, + "title"); + + g_object_unref (options); + g_list_free (keys); +} + +int +main(int argc, char **argv) +{ + gint result; + + setlocale (LC_ALL, ""); + + g_setenv ("GRL_PLUGIN_PATH", TRACKER3_PLUGIN_PATH, TRUE); + g_setenv ("GRL_PLUGIN_LIST", TRACKER3_ID, TRUE); + + grl_init (&argc, &argv); + g_test_init (&argc, &argv, NULL); + + test_setup (); + + g_test_add_func ("/tracker3/browse", test_browse); + g_test_add_func ("/tracker3/browse/type-filter", test_browse_type_filter); + g_test_add_func ("/tracker3/media-from-uri", test_media_from_uri); + g_test_add_func ("/tracker3/media-from-uri/non-existent", test_media_from_uri_nonexistent); + g_test_add_func ("/tracker3/resolve", test_resolve); + g_test_add_func ("/tracker3/resolve/non-existent", test_resolve_non_existent); + g_test_add_func ("/tracker3/search", test_search); + g_test_add_func ("/tracker3/search/non-existent", test_search_non_existent); + g_test_add_func ("/tracker3/search/range-filter", test_search_range_filter); + g_test_add_func ("/tracker3/query", test_query); + + result = g_test_run (); + + grl_deinit (); + + return result; +} |