def test_warns(self): out = StringIO() seq = st.seqtimer(iter(range(10)), output=out, summary=False, length=1) with patch_object(st.warnings, 'warn') as warn: for (idx, item) in enumerate(seq): pass self.assertTrue(warn.called)
def test_handler_enters_debugger(self): mgr = dbg.debug_on_signal(signal.SIGHUP) debugger = Mock() with patch_object(mgr, 'get_debugger') as pdb: pdb.return_value = debugger fake_frame = Mock() mgr._handler(signal.SIGHUP, fake_frame) self.assertTrue(debugger.set_trace.called)
def test_enters_debugger(self): def raises_(): return {}['x'] deco = dbg.debug_on_exception(KeyError) debugger = Mock() with patch_object(deco, 'get_debugger') as pdb: pdb.return_value = debugger self.assertRaises(KeyError, deco(raises_)) self.assertTrue(debugger.reset.called) self.assertTrue(debugger.interaction.called)
def test_min_sleep(self): calls = [] def fails(): time.sleep(.1) raise ValueError("Whoops.") f = bo.backoff(min_sleep=1)(fails) with patch_object(bo.time, 'sleep') as sleep: self.assertRaises(ValueError, f) self.assertTrue(sleep.called) self.assertTrue(sleep.call_args[0][0] >= 1)
def test_backs_off_once_decorator(self): calls = [] def fails_once(): if not calls: calls.append(1) raise ValueError("whoops") return 42 with patch_object(bo.time, 'sleep') as sleep: self.assertRaises(ValueError, bo.backoff()(fails_once)) self.assertTrue(sleep.called)
def test_raises_exceptions_over_thresh(self): ts = time.time() times = 0 ex_type = random.choice(self.exceptions) try: with patch_object(suppress.time, 'time') as time_: time_.return_value = ts for x in range(self.threshold): with self.manager(): raise ex_type("Whops.") times += 1 self.fail( "Should have passed %s through after exceeding thresh %d" % ( ex_type, self.threshold)) except ex_type: pass
def test_raises_exceptions_over_thresh(self): ts = time.time() times = 0 ex_type = random.choice(self.exceptions) try: with patch_object(suppress.time, 'time') as time_: time_.return_value = ts for x in range(self.threshold): with self.manager(): raise ex_type("Whops.") times += 1 self.fail( "Should have passed %s through after exceeding thresh %d" % (ex_type, self.threshold)) except ex_type: pass
def test_delay_increases(self): calls = [] def fails(): for x in xrange(10000000): pass raise ValueError("Whoops.") last_delay = -1 limit = 60 f = bo.backoff(limit=limit)(fails) for x in range(15): with patch_object(bo.time, 'sleep') as sleep: self.assertRaises(ValueError, f) self.assertTrue(sleep.call_args[0][0] > last_delay or sleep.call_args[0][0] == limit, "Expected sleep of %.4f to exceed last (%.4f) " "or meet max %.4f" % (sleep.call_args[0][0], last_delay, limit)) last_delay = sleep.call_args[0][0]
def test_saves_handler(self): handler = lambda signum, frame: None with patch_object(dbg.signal, 'signal') as sig: mgr = dbg._let_signal(signal.SIGALRM, handler) mgr.__enter__() self.assertTrue(sig.call_args[0] == (signal.SIGALRM, handler))