diff options
author | Sam Thursfield <sam@afuera.me.uk> | 2016-07-13 15:45:55 +0100 |
---|---|---|
committer | Sam Thursfield <sam@afuera.me.uk> | 2016-07-13 16:43:34 +0100 |
commit | e4493c677f721193c3e6416103731ef52f636490 (patch) | |
tree | 67db0355b5d88aba287668cc19284a496e2e571c | |
parent | 303f89e64b690d187cd1b2c91fe60851c6c975dc (diff) | |
download | tracker-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-x | tests/functional-tests/400-extractor-metadata.py (renamed from tests/functional-tests/400-extractor.py) | 0 | ||||
-rwxr-xr-x | tests/functional-tests/410-extractor-decorator.py | 107 | ||||
-rw-r--r-- | tests/functional-tests/Makefile.am | 3 | ||||
-rw-r--r-- | tests/functional-tests/common/utils/helpers.py | 7 | ||||
-rw-r--r-- | tests/functional-tests/common/utils/system.py | 6 |
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 |