[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [ooni-probe/master] Add some basic unittests for the ScheduledTasks
commit 5723658b20d834dfd02b04264bf3f9e4cd8c9f50
Author: Arturo Filastò <arturo@xxxxxxxxxxx>
Date: Tue Sep 6 16:50:03 2016 +0200
Add some basic unittests for the ScheduledTasks
---
ooni/agent/scheduler.py | 6 +++---
ooni/settings.py | 2 --
ooni/tests/test_scheduler.py | 51 ++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 54 insertions(+), 5 deletions(-)
diff --git a/ooni/agent/scheduler.py b/ooni/agent/scheduler.py
index 21dd1cd..98b395b 100644
--- a/ooni/agent/scheduler.py
+++ b/ooni/agent/scheduler.py
@@ -53,7 +53,8 @@ class ScheduledTask(object):
schedule = None
identifier = None
- def __init__(self, schedule=None, identifier=None):
+ def __init__(self, schedule=None, identifier=None,
+ scheduler_directory=config.scheduler_directory):
if schedule is not None:
self.schedule = schedule
if identifier is not None:
@@ -61,7 +62,6 @@ class ScheduledTask(object):
assert self.identifier is not None, "self.identifier must be set"
assert self.schedule is not None, "self.schedule must be set"
- scheduler_directory = config.scheduler_directory
self._last_run = FilePath(scheduler_directory).child(self.identifier)
self._last_run_lock = FileSystemlockAndMutex(
@@ -91,7 +91,7 @@ class ScheduledTask(object):
out_file.write(current_time.strftime(self._time_format))
def task(self):
- raise NotImplemented
+ raise NotImplementedError
def first_run(self):
"""
diff --git a/ooni/settings.py b/ooni/settings.py
index a1c55fc..409e81e 100644
--- a/ooni/settings.py
+++ b/ooni/settings.py
@@ -3,7 +3,6 @@ import sys
import yaml
import errno
import getpass
-from pkg_resources import parse_version
from ConfigParser import SafeConfigParser
from twisted.internet import defer, reactor
@@ -11,7 +10,6 @@ from twisted.internet.endpoints import TCP4ClientEndpoint
from os.path import abspath, expanduser
-from ooni import __version__ as ooniprobe_version
from ooni.utils import Storage, log, get_ooni_root
CONFIG_FILE_TEMPLATE = """\
diff --git a/ooni/tests/test_scheduler.py b/ooni/tests/test_scheduler.py
new file mode 100644
index 0000000..cb90a30
--- /dev/null
+++ b/ooni/tests/test_scheduler.py
@@ -0,0 +1,51 @@
+import os
+import shutil
+import tempfile
+
+from twisted.internet import defer
+from twisted.trial import unittest
+
+from ooni.agent.scheduler import ScheduledTask, DidNotRun
+
+class TestScheduler(unittest.TestCase):
+ def test_scheduled_task(self):
+ schedule = "@daily"
+ identifier = "dummy"
+ scheduler_directory = tempfile.mkdtemp()
+ scheduled_task = ScheduledTask(schedule=schedule,
+ identifier=identifier,
+ scheduler_directory=scheduler_directory
+ )
+ self.assertEqual(scheduled_task.should_run, True)
+ self.assertFailure(scheduled_task.run(), NotImplementedError)
+ self.assertEqual(scheduled_task.should_run, True)
+ shutil.rmtree(scheduler_directory)
+
+ @defer.inlineCallbacks
+ def test_call_twice_scheduled_task(self):
+ """
+ If we call the scheduled task twice in a row the second time it will not run.
+ Tests for possible race conditions.
+ """
+ scheduler_directory = tempfile.mkdtemp()
+ spam_path = os.path.join(scheduler_directory, 'spam.txt')
+ class DummyST(ScheduledTask):
+ def task(self):
+ with open(spam_path, 'w') as out_file:
+ out_file.write("I ran\n")
+
+ schedule = "@daily"
+ identifier = "dummy"
+ dummy_st = DummyST(schedule=schedule,
+ identifier=identifier,
+ scheduler_directory=scheduler_directory
+ )
+
+ dummy_st.run()
+ yield self.assertFailure(dummy_st.run(), DidNotRun)
+
+ with open(spam_path) as in_file:
+ self.assertEqual(len(in_file.readlines()), 1)
+
+ self.assertEqual(dummy_st.should_run, False)
+ shutil.rmtree(scheduler_directory)
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits