diff --git a/src/utils/bettersleep.py b/src/utils/bettersleep.py index 03096bc0..e8f5b053 100644 --- a/src/utils/bettersleep.py +++ b/src/utils/bettersleep.py @@ -1,10 +1,30 @@ -from time import sleep +"""Onionr - Private P2P Communication. + +greenlet safe sleep, ignoring ctrl-c +""" +from gevent import sleep +from onionrutils.epoch import get_epoch +""" + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +""" def better_sleep(wait: int): """Sleep catching ctrl c for wait seconds.""" + start = get_epoch() try: sleep(wait) except KeyboardInterrupt: - pass + better_sleep(wait - (get_epoch() - start)) diff --git a/tests/test_bettersleep.py b/tests/test_bettersleep.py new file mode 100644 index 00000000..76c2f2a2 --- /dev/null +++ b/tests/test_bettersleep.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python3 +import sys, os +sys.path.append(".") +sys.path.append("src/") +import uuid +TEST_DIR = 'testdata/%s-%s' % (uuid.uuid4(), os.path.basename(__file__)) + '/' +print("Test directory:", TEST_DIR) +os.environ["ONIONR_HOME"] = TEST_DIR +import unittest, json + +import time, math + +from utils import bettersleep + + +class TestBetterSleep(unittest.TestCase): + def test_better_sleep(self): + s = math.floor(time.time()) + t = 1 + bettersleep.sleep(t) + self.assertEqual(math.floor(time.time()) - s, t) + + def test_no_ctrl_c(self): + # TODO: figure out how to automate ctrl-c test + return + + +unittest.main() diff --git a/tests/test_template.py b/tests/test_template.py index 7ab6cf6b..f184f4b6 100644 --- a/tests/test_template.py +++ b/tests/test_template.py @@ -2,11 +2,11 @@ import sys, os sys.path.append(".") sys.path.append("src/") -import unittest, uuid -import json +import uuid TEST_DIR = 'testdata/%s-%s' % (uuid.uuid4(), os.path.basename(__file__)) + '/' print("Test directory:", TEST_DIR) os.environ["ONIONR_HOME"] = TEST_DIR +import unittest, json from utils import identifyhome, createdirs from onionrsetup import setup_config @@ -18,5 +18,4 @@ class TestTemplate(unittest.TestCase): self.assertTrue(True) - unittest.main()