Exemplo n.º 1
0
 def test_running_stop_during_wait(self):
     checker = check.DirectioChecker(self.loop, "/path", self.complete)
     self.loop.call_soon_threadsafe(checker.start)
     self.assertTrue(self.completed.wait(1.0))
     self.loop.call_soon_threadsafe(checker.stop)
     self.assertTrue(checker.wait(1.0))
     self.assertFalse(checker.is_running())
Exemplo n.º 2
0
    def test_block_warnings(self, monkeypatch, fake_dd):
        monkeypatch.setattr(check, "_log", FakeLogger(logging.WARNING))

        # Expected events:
        # +0.0 start checker
        # +0.2 fail with timeout
        # +0.4 log warning
        # +0.5 checker stopped
        # +0.6 dd completes, result ignored
        # +0.7 loop stopped

        def complete(result):
            self.results.append(result)
            self.loop.call_later(0.3, checker.stop)
            self.loop.call_later(0.4, self.loop.stop)

        fake_dd.configure(delay=0.6)
        checker = check.DirectioChecker(self.loop,
                                        "/path",
                                        complete,
                                        interval=0.2)
        checker.start()
        self.loop.run_forever()

        assert len(check._log.messages) == 1
        # Matching time value is too fragile
        r = re.compile(r"Checker '/path' is blocked for .+ seconds")
        msg = check._log.messages[0][1]
        assert re.match(r, msg)
Exemplo n.º 3
0
 def test_running_start_raises(self):
     checker = check.DirectioChecker(self.loop, "/path", self.complete)
     checker.start()
     try:
         self.assertRaises(RuntimeError, checker.start)
     finally:
         self.loop.run_forever()
Exemplo n.º 4
0
    def test_block_warnings(self):
        # Expected events:
        # +0.0 start checker
        # +0.2 fail with timeout
        # +0.4 log warning
        # +0.5 checker stopped
        # +0.6 dd completes, result ignored
        # +0.7 loop stopped

        def complete(result):
            self.results.append(result)
            self.loop.call_later(0.3, checker.stop)
            self.loop.call_later(0.4, self.loop.stop)

        with fake_dd(0.6):
            checker = check.DirectioChecker(self.loop,
                                            "/path",
                                            complete,
                                            interval=0.2)
            checker.start()
            self.loop.run_forever()

        self.assertEqual(len(check._log.messages), 1)
        # Matching time value is too fragile
        r = re.compile(r"Checker '/path' is blocked for .+ seconds")
        msg = check._log.messages[0][1]
        self.assertRegexpMatches(msg, r)
Exemplo n.º 5
0
 def test_running_repr(self):
     checker = check.DirectioChecker(self.loop, "/path", self.complete)
     checker.start()
     print(checker)
     self.assertIn("/path", str(checker))
     self.assertIn(check.RUNNING, str(checker))
     self.assertIn("next_check=", str(checker))
Exemplo n.º 6
0
 def test_idle_stop_ignored(self):
     self.checks = 1
     checker = check.DirectioChecker(self.loop, "/path", self.complete)
     checker.stop()  # Will be ignored
     checker.start()
     self.loop.run_forever()
     self.assertTrue(checker.is_running())
Exemplo n.º 7
0
 def test_stopping_timeout(self, fake_dd):
     fake_dd.configure(delay=0.2)
     checker = check.DirectioChecker(self.loop, "/path", self.complete)
     self.loop.call_soon_threadsafe(checker.start)
     self.loop.call_soon_threadsafe(checker.stop)
     assert not checker.wait(0.1)
     assert checker.is_running()
Exemplo n.º 8
0
 def test_stopping_timeout(self):
     with fake_dd(0.2):
         checker = check.DirectioChecker(self.loop, "/path", self.complete)
         self.loop.call_soon_threadsafe(checker.start)
         self.loop.call_soon_threadsafe(checker.stop)
         self.assertFalse(checker.wait(0.1))
         self.assertTrue(checker.is_running())
Exemplo n.º 9
0
 def test_running_stop_during_check(self, fake_dd):
     fake_dd.configure(delay=0.2)
     checker = check.DirectioChecker(self.loop, "/path", self.complete)
     self.loop.call_soon_threadsafe(checker.start)
     self.loop.call_soon_threadsafe(checker.stop)
     assert checker.wait(1.0)
     assert not self.completed.is_set()
     assert not checker.is_running()
Exemplo n.º 10
0
 def test_stopping_repr(self):
     checker = check.DirectioChecker(self.loop, "/path", self.complete)
     checker.start()
     checker.stop()
     print(checker)
     self.assertIn("/path", str(checker))
     self.assertIn(check.STOPPING, str(checker))
     self.assertNotIn("next_check=", str(checker))
Exemplo n.º 11
0
 def test_path_missing(self):
     self.checks = 1
     checker = check.DirectioChecker(self.loop, "/no/such/path",
                                     self.complete)
     checker.start()
     self.loop.run_forever()
     pprint.pprint(self.results)
     result = self.results[0]
     self.assertRaises(exception.MiscFileReadException, result.delay)
Exemplo n.º 12
0
 def test_taskset_missing(self):
     self.checks = 1
     with temporaryPath(data=b"blah") as path:
         checker = check.DirectioChecker(self.loop, path, self.complete)
         checker.start()
         self.loop.run_forever()
         pprint.pprint(self.results)
         result = self.results[0]
         self.assertRaises(exception.MiscFileReadException, result.delay)
Exemplo n.º 13
0
 def test_stopping_start_raises(self):
     checker = check.DirectioChecker(self.loop, "/path", self.complete)
     checker.start()
     try:
         checker.stop()
         self.assertRaises(RuntimeError, checker.start)
     finally:
         start_thread(self.wait_for_checker, checker)
         self.loop.run_forever()
Exemplo n.º 14
0
 def test_stopping_stop_ignored(self):
     checker = check.DirectioChecker(self.loop, "/path", self.complete)
     checker.start()
     try:
         checker.stop()
         checker.stop()  # Will be ignored
         self.assertTrue(checker.is_running())
     finally:
         start_thread(self.wait_for_checker, checker)
         self.loop.run_forever()
Exemplo n.º 15
0
 def test_running_repr(self):
     checker = check.DirectioChecker(self.loop, "/path", self.complete)
     checker.start()
     try:
         print(checker)
         assert "/path" in str(checker)
         assert check.RUNNING in str(checker)
         assert "next_check=" in str(checker)
     finally:
         self.loop.run_forever()
Exemplo n.º 16
0
 def test_path_ok(self):
     self.checks = 1
     with temporaryPath(data=b"blah") as path:
         checker = check.DirectioChecker(self.loop, path, self.complete)
         checker.start()
         self.loop.run_forever()
         pprint.pprint(self.results)
         result = self.results[0]
         delay = result.delay()
         print("delay:", delay)
         self.assertEqual(type(delay), float)
Exemplo n.º 17
0
 def test_taskset_missing(self, monkeypatch):
     monkeypatch.setattr(constants, "EXT_TASKSET", "/no/such/executable")
     self.checks = 1
     with temporaryPath(data=b"blah") as path:
         checker = check.DirectioChecker(self.loop, path, self.complete)
         checker.start()
         self.loop.run_forever()
         pprint.pprint(self.results)
         result = self.results[0]
         with pytest.raises(exception.MiscFileReadException):
             result.delay()
Exemplo n.º 18
0
 def test_path_missing_leak(self):
     fds_before = set(os.listdir("/proc/self/fd"))
     self.checks = 10
     checker = check.DirectioChecker(self.loop,
                                     "/no/such/path",
                                     self.complete,
                                     interval=0.1)
     checker.start()
     self.loop.run_forever()
     pprint.pprint(self.results)
     fds_after = set(os.listdir("/proc/self/fd"))
     assert fds_before == fds_after
Exemplo n.º 19
0
 def test_stopping_repr(self):
     checker = check.DirectioChecker(self.loop, "/path", self.complete)
     checker.start()
     try:
         checker.stop()
         print(checker)
         self.assertIn("/path", str(checker))
         self.assertIn(check.STOPPING, str(checker))
         self.assertNotIn("next_check=", str(checker))
     finally:
         start_thread(self.wait_for_checker, checker)
         self.loop.run_forever()
Exemplo n.º 20
0
 def test_path_ok_leak(self):
     fds_before = set(os.listdir("/proc/self/fd"))
     self.checks = 10
     with temporaryPath(data=b"blah") as path:
         checker = check.DirectioChecker(self.loop,
                                         path,
                                         self.complete,
                                         interval=0.1)
         checker.start()
         self.loop.run_forever()
         pprint.pprint(self.results)
     fds_after = set(os.listdir("/proc/self/fd"))
     assert fds_before == fds_after
Exemplo n.º 21
0
 def test_block_warnings(self):
     self.checks = 1
     with fake_dd(0.3):
         checker = check.DirectioChecker(self.loop,
                                         "/path",
                                         self.complete,
                                         interval=0.2)
         checker.start()
         self.loop.run_forever()
     msg = check._log.messages[0][1]
     # Matching time value is too fragile
     r = re.compile(r"Checker '/path' is blocked for .+ seconds")
     self.assertRegexpMatches(msg, r)
Exemplo n.º 22
0
 def test_path_missing(self, checkers):
     self.checkers = checkers
     start = time.time()
     for i in range(checkers):
         checker = check.DirectioChecker(self.loop, "/no/such/path",
                                         self.complete)
         checker.start()
     self.loop.run_forever()
     elapsed = time.time() - start
     self.assertEqual(len(self.results), self.checkers)
     print("%d checkers: %f seconds" % (checkers, elapsed))
     # Make sure all failed
     for res in self.results:
         self.assertRaises(exception.MiscFileReadException, res.delay)
Exemplo n.º 23
0
 def test_path_ok(self, checkers):
     self.checkers = checkers
     with temporaryPath(data=b"blah") as path:
         start = time.time()
         for i in range(checkers):
             checker = check.DirectioChecker(self.loop, path, self.complete)
             checker.start()
         self.loop.run_forever()
         elapsed = time.time() - start
         self.assertEqual(len(self.results), self.checkers)
         print("%d checkers: %f seconds" % (checkers, elapsed))
         # Make sure all succeeded
         for res in self.results:
             res.delay()
Exemplo n.º 24
0
 def test_interval(self, interval, delay, expected):
     self.checks = 5
     clock_res = 0.01
     with fake_dd(delay):
         checker = check.DirectioChecker(self.loop,
                                         "/path",
                                         self.complete,
                                         interval=interval)
         checker.start()
         self.loop.run_forever()
         pprint.pprint(self.results)
         for i in range(self.checks - 1):
             r1 = self.results[i]
             r2 = self.results[i + 1]
             actual = r2.time - r1.time
             self.assertAlmostEqual(actual, expected, delta=clock_res)
Exemplo n.º 25
0
    def test_interval(self, fake_dd, interval, delay, expected):
        self.checks = 5
        clock_res = 0.01
        fake_dd.configure(delay=delay)
        checker = check.DirectioChecker(self.loop,
                                        "/path",
                                        self.complete,
                                        interval=interval)

        checker.start()
        self.loop.run_forever()
        pprint.pprint(self.results)
        for i in range(self.checks - 1):
            r1 = self.results[i]
            r2 = self.results[i + 1]
            actual = r2.time - r1.time
            assert actual == pytest.approx(expected, abs=clock_res)
Exemplo n.º 26
0
    def test_timeout(self, fake_dd):
        # Expected events:
        # +0.0 start checker
        # +0.3 fail with timeout
        # +0.4 dd commpletes, result ignored
        # +0.5 loop stopped

        def complete(result):
            self.results.append(result)
            self.loop.call_later(0.2, self.loop.stop)

        fake_dd.configure(delay=0.4)
        checker = check.DirectioChecker(self.loop,
                                        "/path",
                                        complete,
                                        interval=0.3)
        checker.start()
        self.loop.run_forever()

        assert len(self.results) == 1
        with pytest.raises(exception.MiscFileReadException) as e:
            self.results[0].delay()
        assert "Read timeout" in str(e.value)
Exemplo n.º 27
0
    def test_timeout(self):
        # Expected events:
        # +0.0 start checker
        # +0.3 fail with timeout
        # +0.4 dd commpletes, result ignored
        # +0.5 loop stopped

        def complete(result):
            self.results.append(result)
            self.loop.call_later(0.2, self.loop.stop)

        with fake_dd(0.4):
            checker = check.DirectioChecker(self.loop,
                                            "/path",
                                            complete,
                                            interval=0.3)
            checker.start()
            self.loop.run_forever()

        self.assertEqual(len(self.results), 1)
        with self.assertRaises(exception.MiscFileReadException) as e:
            self.results[0].delay()
        self.assertIn("Read timeout", str(e.exception))
Exemplo n.º 28
0
 def test_idle_repr(self):
     checker = check.DirectioChecker(self.loop, "/path", self.complete)
     print(checker)
     assert "/path" in str(checker)
     assert check.IDLE in str(checker)
     assert "next_check=" not in str(checker)
Exemplo n.º 29
0
 def test_idle_stop_ignored(self):
     checker = check.DirectioChecker(self.loop, "/path", self.complete)
     checker.stop()  # Will be ignored
     self.assertFalse(checker.is_running())
Exemplo n.º 30
0
 def test_idle_repr(self):
     checker = check.DirectioChecker(self.loop, "/path", self.complete)
     print(checker)
     self.assertIn("/path", str(checker))
     self.assertIn(check.IDLE, str(checker))
     self.assertNotIn("next_check=", str(checker))