示例#1
0
class TestDreque(unittest.TestCase):
    def setUp(self):
        import logging
        logging.basicConfig(level=logging.DEBUG)
        self.dreque = Dreque("127.0.0.1")
        self.queue = "test"
        self.dreque.remove_queue(self.queue)

    def tearDown(self):
        pass

    def testSimple(self):
        self.dreque.push("test", "foo")
        self.failUnlessEqual(self.dreque.pop("test"), "foo")
        self.failUnlessEqual(self.dreque.pop("test"), None)

    def testFunction(self):
        import tests
        self.dreque.enqueue("test", tests.set_something, "positional")
        self.failUnlessEqual(self.dreque.dequeue(["test"]), dict(queue="test", func="tests.set_something", args=["positional"], kwargs={}))
        self.dreque.enqueue("test", tests.set_something, keyword="argument")
        self.failUnlessEqual(self.dreque.dequeue(["test"]), dict(queue="test", func="tests.set_something", args=[], kwargs={'keyword':"argument"}))

    def testPositionalWorker(self):
        import tests
        self.dreque.enqueue("test", tests.set_something, "worker_test")
        worker = DrequeWorker(["test"], "127.0.0.1", nofork=True)
        worker.work(0)
        self.failUnlessEqual(tests.something, "worker_test")

    def testKeywordWorker(self):
        import tests
        self.dreque.enqueue("test", tests.set_something, val="worker_test")
        worker = DrequeWorker(["test"], "127.0.0.1", nofork=True)
        worker.work(0)
        self.failUnlessEqual(tests.something, "worker_test")

    def testDelayedJob(self):
        import tests
        self.dreque.enqueue("test", tests.set_something, val="worker_test", _delay=1)
        self.failUnlessEqual(self.dreque.dequeue("test"), None)
        time.sleep(1.5)
        self.failUnlessEqual(self.dreque.dequeue(["test"]), dict(queue="test", func="tests.set_something", args=[], kwargs={'val':"worker_test"}))
示例#2
0
文件: tests.py 项目: mrslow/dreque
class TestDreque(unittest.TestCase):

    db = None

    def setUp(self):
        logging.basicConfig(level=logging.DEBUG)
        self.tempfile = tempfile.mkstemp()[1]
        self.dreque = Dreque(db=self.db)
        self.dreque.redis.flushdb()
        self.queue = "test"

    def tearDown(self):
        os.unlink(self.tempfile)

    def _get_output(self):
        with open(self.tempfile, "rb") as fp:
            return fp.read()

    def testSimple(self):
        self.dreque.push("test", "foo")
        self.assertEqual(self.dreque.size("test"), 1)
        self.assertEqual(self.dreque.pop("test"), "foo")
        self.assertEqual(self.dreque.pop("test"), None)
        self.assertEqual(self.dreque.size("test"), 0)

    def testFunction(self):
        self.dreque.enqueue("test", tests.test_func, "positional")
        self.assertEqual(
            self.dreque.dequeue(["test"]),
            dict(queue="test",
                 func="tests.test_func",
                 args=["positional"],
                 kwargs={},
                 retries_left=5))
        self.dreque.enqueue("test", tests.test_func, keyword="argument")
        self.assertEqual(
            self.dreque.dequeue(["test"]),
            dict(queue="test",
                 func="tests.test_func",
                 args=[],
                 kwargs={'keyword': "argument"},
                 retries_left=5))

    def testPositionalWorker(self):
        self.dreque.enqueue("test", tests.test_func, self.tempfile,
                            "worker_test")
        worker = DrequeWorker(["test"], db=self.db)
        worker.work(0)
        self.assertEqual(self._get_output(), b"worker_test")
        self.assertEqual(self.dreque.stats.get("processed"), 1)

    def testKeywordWorker(self):
        import tests
        self.dreque.enqueue("test",
                            tests.test_func,
                            tempfile=self.tempfile,
                            text="worker_test")
        worker = DrequeWorker(["test"], db=self.db)
        worker.work(0)
        self.assertEqual(self._get_output(), b"worker_test")

    def testDelayedJob(self):
        self.dreque.enqueue("test",
                            tests.test_func,
                            val="worker_test",
                            _delay=1)
        self.assertEqual(self.dreque.dequeue("test"), None)
        time.sleep(1.5)
        self.assertEqual(
            self.dreque.dequeue(["test"]),
            dict(queue="test",
                 func="tests.test_func",
                 args=[],
                 kwargs={'val': "worker_test"},
                 retries_left=5))

    def testGracefulShutdown(self):
        def worker():
            w = DrequeWorker(["test"], db=self.db)
            w.work(0)

        self.dreque.enqueue("test",
                            tests.test_func,
                            tempfile=self.tempfile,
                            text="graceful",
                            delay=2)
        worker_child = Process(target=worker, args=())
        worker_child.start()
        time.sleep(0.5)  # Make sure the worker has spawned a child already
        # worker_child.terminate()
        os.kill(worker_child.pid, signal.SIGQUIT)
        worker_child.join()
        self.assertEqual(worker_child.exitcode, 0)
        self.assertEqual(self._get_output(), b"graceful")

    def testForcedShutdown(self):
        def worker():
            logging.getLogger("dreque.worker").setLevel(logging.CRITICAL)
            w = DrequeWorker(["test"], db=self.db)
            w.work(0)

        self.dreque.enqueue("test",
                            tests.test_func,
                            tempfile=self.tempfile,
                            text="graceful",
                            delay=2)
        worker_child = Process(target=worker, args=())
        worker_child.start()
        time.sleep(0.5)  # Make sure the worker has spawned a child already
        worker_child.terminate()
        worker_child.join()
        self.assertEqual(worker_child.exitcode, 0)
        self.assertEqual(self._get_output(), b"")

    def testRetries(self):
        def worker():
            logging.getLogger("dreque.worker").setLevel(logging.CRITICAL)
            w = DrequeWorker(["test"], db=self.db)
            w.work(0.1)

        self.dreque.enqueue("test",
                            tests.test_func,
                            tempfile=self.tempfile,
                            text=".",
                            fail=True)
        worker_child = Process(target=worker, args=())
        worker_child.start()
        time.sleep(
            3)  # Give enough time for worker to grab and execute the job
        os.kill(worker_child.pid, signal.SIGQUIT)
        worker_child.join()
        self.assertEqual(worker_child.exitcode, 0)
        self.assertEqual(self._get_output(), b"..")
示例#3
0
文件: tests.py 项目: kgaughan/dreque
class TestDreque(unittest.TestCase):

    db = None

    def setUp(self):
        logging.basicConfig(level=logging.DEBUG)
        self.tempfile = tempfile.mkstemp()[1]
        self.dreque = Dreque(db=self.db)
        self.dreque.redis.flushdb()
        self.queue = "test"

    def tearDown(self):
        os.unlink(self.tempfile)

    def _get_output(self):
        with open(self.tempfile, "rb") as fp:
            return fp.read()

    def testSimple(self):
        self.dreque.push("test", "foo")
        self.failUnlessEqual(self.dreque.size("test"), 1)
        self.failUnlessEqual(self.dreque.pop("test"), "foo")
        self.failUnlessEqual(self.dreque.pop("test"), None)
        self.failUnlessEqual(self.dreque.size("test"), 0)

    def testFunction(self):
        self.dreque.enqueue("test", tests.test_func, "positional")
        self.failUnlessEqual(self.dreque.dequeue(["test"]),
                             dict(queue="test", func="tests.test_func",
                                  args=["positional"], kwargs={}, retries_left=5))
        self.dreque.enqueue("test", tests.test_func, keyword="argument")
        self.failUnlessEqual(self.dreque.dequeue(["test"]),
                             dict(queue="test", func="tests.test_func",
                                  args=[], kwargs={'keyword':"argument"},
                                  retries_left=5))

    def testPositionalWorker(self):
        self.dreque.enqueue("test", tests.test_func, self.tempfile, "worker_test")
        worker = DrequeWorker(["test"], db=self.db)
        worker.work(0)
        self.failUnlessEqual(self._get_output(), "worker_test")
        self.failUnlessEqual(self.dreque.stats.get("processed"), 1)

    def testKeywordWorker(self):
        import tests
        self.dreque.enqueue("test", tests.test_func, tempfile=self.tempfile,
                            text="worker_test")
        worker = DrequeWorker(["test"], db=self.db)
        worker.work(0)
        self.failUnlessEqual(self._get_output(), "worker_test")

    def testDelayedJob(self):
        self.dreque.enqueue("test", tests.test_func, val="worker_test", _delay=1)
        self.failUnlessEqual(self.dreque.dequeue("test"), None)
        time.sleep(1.5)
        self.failUnlessEqual(self.dreque.dequeue(["test"]),
                             dict(queue="test", func="tests.test_func",
                                  args=[], kwargs={'val':"worker_test"},
                                  retries_left=5))

    def testGracefulShutdown(self):
        def worker():
            w = DrequeWorker(["test"], db=self.db)
            w.work(0)

        self.dreque.enqueue("test", tests.test_func,
                            tempfile=self.tempfile, text="graceful", delay=2)
        worker_child = Process(target=worker, args=())
        worker_child.start()
        time.sleep(0.5)  # Make sure the worker has spawned a child already
        # worker_child.terminate()
        os.kill(worker_child.pid, signal.SIGQUIT)
        worker_child.join()
        self.failUnlessEqual(worker_child.exitcode, 0)
        self.failUnlessEqual(self._get_output(), "graceful")

    def testForcedShutdown(self):
        def worker():
            logging.getLogger("dreque.worker").setLevel(logging.CRITICAL)
            w = DrequeWorker(["test"], db=self.db)
            w.work(0)

        self.dreque.enqueue("test", tests.test_func,
                            tempfile=self.tempfile, text="graceful", delay=2)
        worker_child = Process(target=worker, args=())
        worker_child.start()
        time.sleep(0.5)  # Make sure the worker has spawned a child already
        worker_child.terminate()
        worker_child.join()
        self.failUnlessEqual(worker_child.exitcode, 0)
        self.failUnlessEqual(self._get_output(), "")

    def testRetries(self):
        def worker():
            logging.getLogger("dreque.worker").setLevel(logging.CRITICAL)
            w = DrequeWorker(["test"], db=self.db)
            w.work(0.1)

        self.dreque.enqueue("test", tests.test_func,
                            tempfile=self.tempfile, text=".", fail=True)
        worker_child = Process(target=worker, args=())
        worker_child.start()
        time.sleep(3)  # Give enough time for worker to grab and execute the job
        os.kill(worker_child.pid, signal.SIGQUIT)
        worker_child.join()
        self.failUnlessEqual(worker_child.exitcode, 0)
        self.failUnlessEqual(self._get_output(), "..")