summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Thursfield <sam@afuera.me.uk>2016-07-13 15:45:55 +0100
committerSam Thursfield <sam@afuera.me.uk>2016-07-13 16:43:34 +0100
commite4493c677f721193c3e6416103731ef52f636490 (patch)
tree67db0355b5d88aba287668cc19284a496e2e571c
parent303f89e64b690d187cd1b2c91fe60851c6c975dc (diff)
downloadtracker-e4493c677f721193c3e6416103731ef52f636490.tar.gz
functional-tests: Add test case for re-extracting known files
This testcase should pass. I did think there was a bug here and opened <https://bugzilla.gnome.org/show_bug.cgi?id=768706>, but that turned out to be invalid.
-rwxr-xr-xtests/functional-tests/400-extractor-metadata.py (renamed from tests/functional-tests/400-extractor.py)0
-rwxr-xr-xtests/functional-tests/410-extractor-decorator.py107
-rw-r--r--tests/functional-tests/Makefile.am3
-rw-r--r--tests/functional-tests/common/utils/helpers.py7
-rw-r--r--tests/functional-tests/common/utils/system.py6
5 files changed, 120 insertions, 3 deletions
diff --git a/tests/functional-tests/400-extractor.py b/tests/functional-tests/400-extractor-metadata.py
index 140b5d527..140b5d527 100755
--- a/tests/functional-tests/400-extractor.py
+++ b/tests/functional-tests/400-extractor-metadata.py
diff --git a/tests/functional-tests/410-extractor-decorator.py b/tests/functional-tests/410-extractor-decorator.py
new file mode 100755
index 000000000..1b8defb38
--- /dev/null
+++ b/tests/functional-tests/410-extractor-decorator.py
@@ -0,0 +1,107 @@
+#!/usr/bin/python
+
+# Copyright (C) 2016, Sam Thursfield (sam@afuera.me.uk)
+#
+# 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; either
+# 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 Street, Fifth Floor,
+# Boston, MA 02110-1301, USA.
+
+"""
+Tests failure cases of tracker-extract.
+"""
+
+import unittest2 as ut
+
+from gi.repository import GLib
+
+import os
+import shutil
+import time
+
+import common.utils.configuration as cfg
+from common.utils.helpers import log
+from common.utils.minertest import MINER_TMP_DIR, path, uri
+from common.utils.system import TrackerSystemAbstraction
+
+
+CONF_OPTIONS = {
+ cfg.DCONF_MINER_SCHEMA: {
+ 'index-recursive-directories': GLib.Variant.new_strv([]),
+ 'index-single-directories': GLib.Variant.new_strv([MINER_TMP_DIR]),
+ 'index-optical-discs': GLib.Variant.new_boolean(False),
+ 'index-removable-devices': GLib.Variant.new_boolean(False),
+ }
+}
+
+
+CORRUPT_FILE = os.path.join(
+ os.path.dirname(__file__), 'test-extraction-data', 'audio',
+ 'audio-corrupt.mp3')
+
+VALID_FILE = os.path.join(
+ os.path.dirname(__file__), 'test-extraction-data', 'audio',
+ 'audio-test-1.mp3')
+VALID_FILE_CLASS = 'nmm:MusicPiece'
+VALID_FILE_TITLE = 'Simply Juvenile'
+
+TRACKER_EXTRACT_FAILURE_DATA_SOURCE = 'tracker:extractor-failure-data-source'
+
+
+class ExtractorDecoratorTest(ut.TestCase):
+ def setUp(self):
+ if not os.path.exists(MINER_TMP_DIR):
+ os.makedirs(MINER_TMP_DIR)
+ assert os.path.isdir(MINER_TMP_DIR)
+
+ self.system = TrackerSystemAbstraction(CONF_OPTIONS)
+ self.system.tracker_miner_fs_testing_start()
+
+ def tearDown(self):
+ self.system.tracker_miner_fs_testing_stop()
+
+ shutil.rmtree(MINER_TMP_DIR)
+
+ def test_reextraction(self):
+ """Tests whether known files are still re-extracted on user request."""
+ miner_fs = self.system.miner_fs
+ store = self.system.store
+
+ # Insert a valid file and wait extraction of its metadata.
+ file_path = os.path.join(MINER_TMP_DIR, os.path.basename(VALID_FILE))
+ shutil.copy(VALID_FILE, file_path)
+ file_id, file_urn = store.await_resource_inserted(
+ VALID_FILE_CLASS, title=VALID_FILE_TITLE)
+
+ # Remove a key piece of metadata.
+ store.update(
+ 'DELETE { <%s> nie:title ?title }'
+ ' WHERE { <%s> nie:title ?title }' % (file_urn, file_urn))
+ store.await_property_changed(file_id, 'nie:title')
+ assert not store.ask('ASK { <%s> nie:title ?title }' % file_urn)
+
+ log("Sending re-index request")
+ # Request re-indexing (same as `tracker index --file ...`)
+ miner_fs.index_file(uri(file_path))
+
+ # The extractor should reindex the file and re-add the metadata that we
+ # deleted, so we should see the nie:title property change.
+ store.await_property_changed(file_id, 'nie:title')
+
+ title_result = store.query('SELECT ?title { <%s> nie:title ?title }' % file_urn)
+ assert len(title_result) == 1
+ self.assertEqual(title_result[0][0], VALID_FILE_TITLE)
+
+
+if __name__ == '__main__':
+ ut.main()
diff --git a/tests/functional-tests/Makefile.am b/tests/functional-tests/Makefile.am
index edd91be63..2359211bf 100644
--- a/tests/functional-tests/Makefile.am
+++ b/tests/functional-tests/Makefile.am
@@ -48,7 +48,8 @@ if HAVE_TRACKER_FTS
standard_tests += 310-fts-indexing.py
endif
standard_tests += \
- 400-extractor.py \
+ 400-extractor-metadata.py \
+ 410-extractor-decorator.py \
500-writeback.py \
501-writeback-details.py \
600-applications-camera.py \
diff --git a/tests/functional-tests/common/utils/helpers.py b/tests/functional-tests/common/utils/helpers.py
index 70099c69b..ee5fc1186 100644
--- a/tests/functional-tests/common/utils/helpers.py
+++ b/tests/functional-tests/common/utils/helpers.py
@@ -555,16 +555,23 @@ class MinerFsHelper (Helper):
self.miner_fs = Gio.DBusProxy.new_sync(
self.bus, Gio.DBusProxyFlags.DO_NOT_AUTO_START, None,
cfg.MINERFS_BUSNAME, cfg.MINERFS_OBJ_PATH, cfg.MINER_IFACE)
+ self.index = Gio.DBusProxy.new_sync(
+ self.bus, Gio.DBusProxyFlags.DO_NOT_AUTO_START, None,
+ cfg.MINERFS_BUSNAME, cfg.MINERFS_INDEX_OBJ_PATH, cfg.MINER_INDEX_IFACE)
def stop (self):
Helper.stop (self)
+ def index_file (self, uri):
+ return self.index.IndexFile('(s)', uri)
+
class ExtractorHelper (Helper):
PROCESS_NAME = 'tracker-extract'
BUS_NAME = cfg.TRACKER_EXTRACT_BUSNAME
+
class WritebackHelper (Helper):
PROCESS_NAME = 'tracker-writeback'
diff --git a/tests/functional-tests/common/utils/system.py b/tests/functional-tests/common/utils/system.py
index 717e65fd0..093b468ec 100644
--- a/tests/functional-tests/common/utils/system.py
+++ b/tests/functional-tests/common/utils/system.py
@@ -33,9 +33,11 @@ class UnableToBootException (Exception):
pass
-class TrackerSystemAbstraction:
+class TrackerSystemAbstraction (object):
+ def __init__(self, settings=None, ontodir=None):
+ self.set_up_environment (settings=settings, ontodir=ontodir)
- def set_up_environment (self, settings, ontodir):
+ def set_up_environment (self, settings=None, ontodir=None):
"""
Sets up the XDG_*_HOME variables and make sure the directories exist