From 11391557f5cd235b3a1afd29b0c1e372274ae753 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=85ke=20Forslund?= Date: Thu, 27 Apr 2017 12:39:12 +0200 Subject: [PATCH] Ensure that signal directory exists when creating signal. Also add test cases for ipc signals --- mycroft/util/__init__.py | 7 +++---- test/util/test_signal.py | 30 ++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 test/util/test_signal.py diff --git a/mycroft/util/__init__.py b/mycroft/util/__init__.py index 004a1ba4f1..44079073fd 100644 --- a/mycroft/util/__init__.py +++ b/mycroft/util/__init__.py @@ -301,9 +301,9 @@ def create_signal(signal_name): valid in filenames. """ try: - with open(os.path.join(get_ipc_directory(), "signal", signal_name), - 'w'): - return True + path = os.path.join(get_ipc_directory(), "signal", signal_name) + create_file(path) + return os.path.isfile(path) except IOError: return False @@ -321,7 +321,6 @@ def check_for_signal(signal_name, sec_lifetime=0): bool: True if the signal is defined, False otherwise """ path = os.path.join(get_ipc_directory(), "signal", signal_name) - if os.path.isfile(path): if sec_lifetime == 0: # consume this single-use signal diff --git a/test/util/test_signal.py b/test/util/test_signal.py new file mode 100644 index 0000000000..674e537831 --- /dev/null +++ b/test/util/test_signal.py @@ -0,0 +1,30 @@ +from os.path import dirname, join, exists, isfile +import unittest +from shutil import rmtree +from mycroft.util import create_signal, check_for_signal + + +class TestSignals(unittest.TestCase): + def setUp(self): + if exists('/tmp/mycroft'): + rmtree('/tmp/mycroft') + + def test_create_signal(self): + create_signal('test_signal') + self.assertTrue(isfile('/tmp/mycroft/ipc/signal/test_signal')) + + def test_check_signal(self): + if exists('/tmp/mycroft'): + rmtree('/tmp/mycroft') + # check that signal is not found if file does not exist + self.assertFalse(check_for_signal('test_signal')) + + # Check that the signal is found when created + create_signal('test_signal') + self.assertTrue(check_for_signal('test_signal')) + # Check that the signal is removed after use + self.assertFalse(isfile('/tmp/mycroft/ipc/signal/test_signal')) + + +if __name__ == "__main__": + unittest.main()