summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Thursfield <sam@afuera.me.uk>2014-12-25 00:32:00 +0000
committerSam Thursfield <sam@afuera.me.uk>2014-12-26 00:51:16 +0000
commitfb5e4a8173bc1eb343638f84175b6b0f3202faa6 (patch)
tree0ba88c5fbaa7f568fcfdc52ef25eaa2b1a23808f
parent12fe0ba6158c0d1adfca76f45911d6836e16b55c (diff)
downloadtracker-fb5e4a8173bc1eb343638f84175b6b0f3202faa6.tar.gz
functional-tests: Isolate 3xx-miner tests from each other
Rather than running all the tests in one environment, create a new environment for each test. Although it's slower this way, it's just too hard to debug test failures when the tests can interfere with each other. I also made them all use the same 'minertest' base class.
-rwxr-xr-xtests/functional-tests/300-miner-basic-ops.py12
-rwxr-xr-xtests/functional-tests/301-miner-resource-removal.py63
-rwxr-xr-xtests/functional-tests/310-fts-indexing.py13
-rw-r--r--tests/functional-tests/common/utils/minertest.py19
-rw-r--r--tests/functional-tests/common/utils/system.py37
5 files changed, 33 insertions, 111 deletions
diff --git a/tests/functional-tests/300-miner-basic-ops.py b/tests/functional-tests/300-miner-basic-ops.py
index 156e47195..cf4fb4747 100755
--- a/tests/functional-tests/300-miner-basic-ops.py
+++ b/tests/functional-tests/300-miner-basic-ops.py
@@ -65,18 +65,6 @@ class MinerCrawlTest (CommonTrackerMinerTest):
self.assertEquals (len (result), 1)
return result[0][0]
- def tearDown (self):
- # Give it a 2 seconds chance
- result = self.__get_text_documents ()
- if (len (result) != 3):
- time.sleep (2)
- else:
- return
-
- result = self.__get_text_documents ()
- if (len (result) != 3):
- print "WARNING: Previous test has modified the test files and didn't restore the origina state."
-
"""
Boot the miner with the correct configuration and check everything is fine
"""
diff --git a/tests/functional-tests/301-miner-resource-removal.py b/tests/functional-tests/301-miner-resource-removal.py
index d49d32b6a..557cadc69 100755
--- a/tests/functional-tests/301-miner-resource-removal.py
+++ b/tests/functional-tests/301-miner-resource-removal.py
@@ -52,42 +52,11 @@ CONF_OPTIONS = {
REASONABLE_TIMEOUT = 30
-class MinerResourceRemovalTest (ut.TestCase):
-
- # Use the same instances of store and miner-fs for the whole test suite,
- # because they take so long to do first-time init.
- @classmethod
- def setUpClass (self):
- log ("Using %s as temp dir\n" % MINER_TMP_DIR)
- if os.path.exists (MINER_TMP_DIR):
- shutil.rmtree (MINER_TMP_DIR)
- os.makedirs (MINER_TMP_DIR)
-
- self.system = TrackerSystemAbstraction ()
- self.system.set_up_environment (CONF_OPTIONS, None)
- self.store = StoreHelper ()
- self.store.start ()
-
- # GraphUpdated seems to not be emitted if the extractor isn't running
- # even though the file resource still gets inserted - maybe because
- # INSERT SILENT is used in the FS miner?
- self.extractor = ExtractorHelper ()
- self.extractor.start ()
-
- self.miner_fs = MinerFsHelper ()
- self.miner_fs.start ()
-
- @classmethod
- def tearDownClass (self):
- self.miner_fs.stop ()
- self.extractor.stop ()
- self.store.stop ()
-
- def setUp (self):
- self.store.reset_graph_updates_tracking ()
-
- def tearDown (self):
- self.system.unset_up_environment ()
+class MinerResourceRemovalTest (CommonTrackerMinerTest):
+
+ def prepare_directories (self):
+ # Override content from the base class
+ pass
def create_test_content (self, file_urn, title):
sparql = "INSERT { \
@@ -96,10 +65,10 @@ class MinerResourceRemovalTest (ut.TestCase):
nie:isStoredAs <%s> \
} " % (title, file_urn)
- self.store.update (sparql)
+ self.tracker.update (sparql)
- return self.store.await_resource_inserted (rdf_class = 'nmm:MusicPiece',
- title = title)
+ return self.tracker.await_resource_inserted (rdf_class = 'nmm:MusicPiece',
+ title = title)
def create_test_file (self, file_name):
file_path = path(file_name)
@@ -108,15 +77,15 @@ class MinerResourceRemovalTest (ut.TestCase):
file.write ("Test")
file.close ()
- return self.store.await_resource_inserted (rdf_class = 'nfo:Document',
- url = uri(file_name))
+ return self.tracker.await_resource_inserted (rdf_class = 'nfo:Document',
+ url = uri(file_name))
def assertResourceExists (self, urn):
- if self.store.ask ("ASK { <%s> a rdfs:Resource }" % urn) == False:
+ if self.tracker.ask ("ASK { <%s> a rdfs:Resource }" % urn) == False:
self.fail ("Resource <%s> does not exist" % urn)
def assertResourceMissing (self, urn):
- if self.store.ask ("ASK { <%s> a rdfs:Resource }" % urn) == True:
+ if self.tracker.ask ("ASK { <%s> a rdfs:Resource }" % urn) == True:
self.fail ("Resource <%s> should not exist" % urn)
@@ -133,10 +102,10 @@ class MinerResourceRemovalTest (ut.TestCase):
os.unlink (path ("test-monitored/test_1.txt"))
- self.store.await_resource_deleted (file_1_id)
- self.store.await_resource_deleted (ie_1_id,
- "Associated logical resource failed to be deleted " \
- "when its containing file was removed.")
+ self.tracker.await_resource_deleted (file_1_id)
+ self.tracker.await_resource_deleted (ie_1_id,
+ "Associated logical resource failed to be deleted " \
+ "when its containing file was removed.")
self.assertResourceMissing (file_1_urn)
self.assertResourceMissing (ie_1_urn)
diff --git a/tests/functional-tests/310-fts-indexing.py b/tests/functional-tests/310-fts-indexing.py
index 872f4958f..4673da604 100755
--- a/tests/functional-tests/310-fts-indexing.py
+++ b/tests/functional-tests/310-fts-indexing.py
@@ -40,19 +40,16 @@ class CommonMinerFTS (CommonTrackerMinerTest):
"""
Superclass to share methods. Shouldn't be run by itself.
"""
+ def prepare_directories (self):
+ # Override content from the base class
+ pass
+
def setUp (self):
- self.tracker.reset_graph_updates_tracking ()
self.testfile = "test-monitored/miner-fts-test.txt"
if os.path.exists (path (self.testfile)):
- id = self._query_id (uri (self.testfile))
os.remove (path (self.testfile))
- self.tracker.await_resource_deleted (id)
- self.tracker.reset_graph_updates_tracking ()
- def tearDown (self):
- #if os.path.exists (path (self.testfile)):
- # os.remove (path (self.testfile))
- pass
+ super(CommonMinerFTS, self).setUp()
def set_text (self, text):
exists = os.path.exists(path(self.testfile))
diff --git a/tests/functional-tests/common/utils/minertest.py b/tests/functional-tests/common/utils/minertest.py
index b2a0a3d7d..c84270e02 100644
--- a/tests/functional-tests/common/utils/minertest.py
+++ b/tests/functional-tests/common/utils/minertest.py
@@ -53,8 +53,7 @@ CONF_OPTIONS = {
class CommonTrackerMinerTest (ut.TestCase):
- @classmethod
- def __prepare_directories (self):
+ def prepare_directories (self):
#
# ~/test-monitored/
# /file1.txt
@@ -92,8 +91,7 @@ class CommonTrackerMinerTest (ut.TestCase):
self.tracker.await_resource_inserted(
'nfo:TextDocument', url=uri(tf))
- @classmethod
- def setUpClass (self):
+ def setUp (self):
for d in ['test-monitored', 'test-no-monitored']:
dirname = path(d)
if os.path.exists (dirname):
@@ -105,11 +103,12 @@ class CommonTrackerMinerTest (ut.TestCase):
self.system.tracker_miner_fs_testing_start (CONF_OPTIONS)
self.tracker = self.system.store
- self.__prepare_directories ()
+ try:
+ self.prepare_directories ()
+ self.tracker.reset_graph_updates_tracking ()
+ except Exception as e:
+ self.tearDown ()
+ raise
- @classmethod
- def tearDownClass (self):
+ def tearDown (self):
self.system.tracker_miner_fs_testing_stop ()
-
- def setUp (self):
- self.tracker.reset_graph_updates_tracking ()
diff --git a/tests/functional-tests/common/utils/system.py b/tests/functional-tests/common/utils/system.py
index eec53cbb6..e305aa57f 100644
--- a/tests/functional-tests/common/utils/system.py
+++ b/tests/functional-tests/common/utils/system.py
@@ -78,28 +78,11 @@ class TrackerSystemAbstraction:
for key, value in contents.iteritems():
dconf.write(key, value)
- def unset_up_environment (self):
- """
- Unset the XDG_*_HOME variables from the environment
- """
- for var, directory in TEST_ENV_VARS.iteritems ():
- if os.environ.has_key (var):
- del os.environ [var]
-
- for var, directory in TEST_ENV_DIRS.iteritems ():
- if os.environ.has_key (var):
- del os.environ [var]
-
- if (os.environ.has_key ("TRACKER_DB_ONTOLOGIES_DIR")):
- del os.environ ["TRACKER_DB_ONTOLOGIES_DIR"]
-
-
def tracker_store_testing_start (self, confdir=None, ontodir=None):
"""
Stops any previous instance of the store, calls set_up_environment,
and starts a new instances of the store
"""
- self.__stop_tracker_processes ()
self.set_up_environment (confdir, ontodir)
self.store = helpers.StoreHelper ()
@@ -153,11 +136,10 @@ class TrackerSystemAbstraction:
def tracker_store_testing_stop (self):
"""
- Stops a running tracker-store and unset all the XDG_*_HOME vars
+ Stops a running tracker-store
"""
assert self.store
self.store.stop ()
- self.unset_up_environment ()
def tracker_miner_fs_testing_start (self, confdir=None):
@@ -165,7 +147,6 @@ class TrackerSystemAbstraction:
Stops any previous instance of the store and miner, calls set_up_environment,
and starts a new instance of the store and miner-fs
"""
- self.__stop_tracker_processes ()
self.set_up_environment (confdir, None)
# Start also the store. DBus autoactivation ignores the env variables.
@@ -180,15 +161,12 @@ class TrackerSystemAbstraction:
def tracker_miner_fs_testing_stop (self):
"""
- Stops the miner-fs and store running and unset all the XDG_*_HOME vars
+ Stops the extractor, miner-fs and store running
"""
+ self.extractor.stop ()
self.miner_fs.stop ()
self.store.stop ()
- self.__stop_tracker_processes ()
- self.unset_up_environment ()
-
-
def tracker_writeback_testing_start (self, confdir=None):
# Start the miner-fs (and store) and then the writeback process
self.tracker_miner_fs_testing_start (confdir)
@@ -208,15 +186,6 @@ class TrackerSystemAbstraction:
# This will stop all miner-fs, store and writeback
self.tracker_writeback_testing_stop ()
- #
- # Private API
- #
- def __stop_tracker_processes (self):
- control_binary = os.path.join (cfg.BINDIR, "tracker")
- FNULL = open('/dev/null', 'w')
- subprocess.call ([control_binary, "daemon", "-t"], stdout=FNULL)
- time.sleep (1)
-
def __recreate_directory (self, directory):
if (os.path.exists (directory)):
shutil.rmtree (directory)