[tracker-miners/sam/test-removable-devices] Add initial removable media test



commit 9ac91731a3a93521495c95ee6c5e9040b18bbd45
Author: Sam Thursfield <sam afuera me uk>
Date:   Wed Aug 18 14:18:40 2021 +0200

    Add initial removable media test
    
    Fails - TrackerStorage doesn't pick up our fake mount.

 tests/functional-tests/configuration.json.in |  1 +
 tests/functional-tests/configuration.py      |  1 +
 tests/functional-tests/fixtures.py           | 64 +++++++++++++++++++++++++++-
 tests/functional-tests/meson.build           |  2 +
 4 files changed, 66 insertions(+), 2 deletions(-)
---
diff --git a/tests/functional-tests/configuration.json.in b/tests/functional-tests/configuration.json.in
index 6a45d8eca..0d11fe3fa 100644
--- a/tests/functional-tests/configuration.json.in
+++ b/tests/functional-tests/configuration.json.in
@@ -1,4 +1,5 @@
 {
+    "MOCK_VOLUME_MONITOR_DIR": "@MOCK_VOLUME_MONITOR_DIR@",
     "TEST_CLI_DIR": "@TEST_CLI_DIR@",
     "TEST_CLI_SUBCOMMANDS_DIR": "@TEST_CLI_SUBCOMMANDS_DIR@",
     "TEST_DBUS_DAEMON_CONFIG_FILE": "@TEST_DBUS_DAEMON_CONFIG_FILE@",
diff --git a/tests/functional-tests/configuration.py b/tests/functional-tests/configuration.py
index ec68cc681..983edb371 100644
--- a/tests/functional-tests/configuration.py
+++ b/tests/functional-tests/configuration.py
@@ -45,6 +45,7 @@ TRACKER_EXTRACT_PATH = config['TRACKER_EXTRACT_PATH']
 def test_environment(tmpdir):
     return {
         'DCONF_PROFILE': config['TEST_DCONF_PROFILE'],
+        'GIO_MODULE_DIR': config['MOCK_VOLUME_MONITOR_DIR'],
         'TRACKER_TEST_DOMAIN_ONTOLOGY_RULE': config['TEST_DOMAIN_ONTOLOGY_RULE'],
         'TRACKER_EXTRACTOR_RULES_DIR': config['TEST_EXTRACTOR_RULES_DIR'],
         'TRACKER_EXTRACTORS_DIR': config['TEST_EXTRACTORS_DIR'],
diff --git a/tests/functional-tests/fixtures.py b/tests/functional-tests/fixtures.py
index ab4724d1a..d6d69635e 100644
--- a/tests/functional-tests/fixtures.py
+++ b/tests/functional-tests/fixtures.py
@@ -103,9 +103,13 @@ class TrackerMinerTest(ut.TestCase):
         }
         return settings
 
-    def setUp(self):
+    def environment(self):
         extra_env = cfg.test_environment(self.workdir)
         extra_env['LANG'] = 'en_GB.utf8'
+        return extra_env
+
+    def setUp(self):
+        extra_env = self.environment()
 
         self.sandbox = trackertestutils.helpers.TrackerDBusSandbox(
             session_bus_config_file=cfg.TEST_DBUS_DAEMON_CONFIG_FILE, extra_env=extra_env)
@@ -150,7 +154,10 @@ class TrackerMinerTest(ut.TestCase):
             self.fail("Resource <%s> should not exist" % urn)
 
     def await_document_inserted(self, path, content=None):
-        """Wraps await_insert() context manager."""
+        """Wraps await_insert() context manager.
+
+        Use this if you are triggering insertion inside the context manager"""
+
         if isinstance(path, pathlib.Path):
             url = path.as_uri()
         else:
@@ -167,6 +174,27 @@ class TrackerMinerTest(ut.TestCase):
 
         return self.tracker.await_insert(DOCUMENTS_GRAPH, '; '.join(expected), timeout=cfg.AWAIT_TIMEOUT)
 
+    def ensure_document_inserted(self, path, content=None):
+        """Block until document is inserted.
+
+        Use this if insertion may already have happened."""
+
+        if isinstance(path, pathlib.Path):
+            url = path.as_uri()
+        else:
+            url = self.uri(path)
+
+        expected = [
+            'a nfo:Document',
+            f'nie:isStoredAs <{url}>',
+        ]
+
+        if content:
+            content_escaped = Tracker.sparql_escape_string(content)
+            expected += [f'nie:plainTextContent "{content_escaped}"']
+
+        return self.tracker.ensure_resource(DOCUMENTS_GRAPH, ';'.join(expected), timeout=cfg.AWAIT_TIMEOUT)
+
     def await_insert_dir(self, path):
         if isinstance(path, pathlib.Path):
             url = path.as_uri()
@@ -265,6 +293,38 @@ class TrackerMinerFTSTest (TrackerMinerTest):
         return int(result[0][0])
 
 
+class TrackerMinerRemovableMediaTest(TrackerMinerTest):
+    """
+    Fixture to test removable device handling in tracker-miner-fs.
+    """
+
+    MOCK_VOLUME_MONITOR_DBUS_NAME = 'org.freedesktop.Tracker3.MockVolumeMonitor'
+    MOCK_VOLUME_MONITOR_OBJECT_PATH = '/org/freedesktop/Tracker3/MockVolumeMonitor'
+    MOCK_VOLUME_MONITOR_IFACE = 'org.freedesktop.Tracker3.MockVolumeMonitor'
+
+    def config(self):
+        settings = super(TrackerMinerRemovableMediaTest, self).config()
+        settings['org.freedesktop.Tracker3.Miner.Files']['index-removable-devices'] = 
GLib.Variant.new_boolean(True)
+        return settings
+
+    def environment(self):
+        extra_env = super(TrackerMinerRemovableMediaTest, self).environment()
+        extra_env['GIO_USE_VOLUME_MONITOR'] = 'mockvolumemonitor'
+        return extra_env
+
+    def add_removable_device(self, path):
+        conn = self.sandbox.get_session_bus_connection()
+        timeout = cfg.AWAIT_TIMEOUT * 1000
+        cancellable = None
+        conn.call_sync(self.MOCK_VOLUME_MONITOR_DBUS_NAME,
+                       self.MOCK_VOLUME_MONITOR_OBJECT_PATH,
+                       self.MOCK_VOLUME_MONITOR_IFACE,
+                       'AddMount',
+                       GLib.Variant('(s)', [self.uri(path)]),
+                       None, Gio.DBusCallFlags.NONE,
+                       timeout, cancellable)
+
+
 def get_tracker_extract_output(extra_env, filename, output_format='json-ld', mime_type=None):
     """
     Runs `tracker-extract --file` to extract metadata from a file.
diff --git a/tests/functional-tests/meson.build b/tests/functional-tests/meson.build
index 4838dcdaa..bea19653d 100644
--- a/tests/functional-tests/meson.build
+++ b/tests/functional-tests/meson.build
@@ -9,6 +9,7 @@ config_json_full_path = meson.current_build_dir() / 'configuration.json'
 dconf_profile_full_path = meson.current_source_dir() / 'trackertest'
 tracker_extractors_dir = meson.current_build_dir() / '..' / '..' / 'src' / 'tracker-extract'
 
+testconf.set('MOCK_VOLUME_MONITOR_DIR', meson.current_build_dir() / 'mockvolumemonitor')
 testconf.set('TEST_CLI_DIR', tracker_uninstalled_cli_dir)
 testconf.set('TEST_CLI_SUBCOMMANDS_DIR', tracker_uninstalled_cli_subcommands_dir)
 testconf.set('TEST_DBUS_DAEMON_CONFIG_FILE', build_root / 'tests' / 'test-bus.conf')
@@ -119,6 +120,7 @@ endif
 
 functional_tests = [
   'miner-basic',
+  'miner-removable-media',
   'miner-resource-removal',
   'fts-basic',
   'fts-file-operations',


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]