def test_slow_task(self): thread_pool = ThreadPoolExecutor(1) future = thread_pool.submit(self._fake_slow_task) self.assertFalse(future.done()) run_until_complete(future) self.assertTrue(future.done()) self.assertEqual(future.result(), 3)
def test_sleep(self): ts = time.time() future = self._task_for_sleep(1) self.assertFalse(future.done()) run_until_complete(future) self.assertTrue(future.done()) self.assertGreaterEqual(time.time() - ts, 1)
def test_cookies(self): with self.get_http_patch() as m: f = self.client.fetch("abc", cookies={"cc": "ccc"}) self.assertEqual("cc=ccc", m.call_args[1]["headers"]["Cookie"]) run_until_complete(f) resp = f.result() self.assertDictEqual({"c": "3"}, resp.cookies)
def test_cookies(self): with self.get_http_patch() as m: f = self.client.fetch('abc', cookies={'cc': 'ccc'}) self.assertEqual('cc=ccc', m.call_args[1]['headers']['Cookie']) run_until_complete(f) resp = f.result() self.assertDictEqual({'c': '3'}, resp.cookies)
def test_json(self): with self.get_http_patch() as m: f = self.client.post("abc", json={"request": "json"}) run_until_complete(f) resp = f.result() self.assertEqual(json_encode({"request": "json"}), m.call_args[1]["body"]) self.assertDictEqual({"body": "json-body"}, resp.json())
def test_wrapper(self): @coroutine @wrapper def _test(): raise IOError future = _test() run_until_complete(future) self.assertRaises(IOError, future.result)
def test_json(self): with self.get_http_patch() as m: f = self.client.post('abc', json={'request': 'json'}) run_until_complete(f) resp = f.result() self.assertEqual(json_encode({'request': 'json'}), m.call_args[1]['body']) self.assertDictEqual({'body': 'json-body'}, resp.json())
def test_init_sqlhelper(self): @coroutine @wrapper def _test(): sqlhelper = SqlHelper('movoto') return_in_coroutine('ok') future = _test() run_until_complete(future) self.assertEqual(future.result(), 'ok')
def test_wait_specified_tasks(self): thread_pool = ThreadPoolExecutor(1) future_slow = thread_pool.submit(self._fake_slow_task) future_very_slow = thread_pool.submit(self._fake_very_slow_task) start_time = time.time() run_until_complete(future_slow) end_time = time.time() self.assertLess(end_time - start_time, 2) self.assertTrue(future_slow.done()) self.assertFalse(future_very_slow.done()) self.assertEqual(future_slow.result(), 3)
def test_getOneBySql(self): @coroutine @wrapper def _test(): sqlhelper = SqlHelper("movoto") r = yield sqlhelper.get_one_by_sql("show databases;") return_in_coroutine(r) future = _test() run_until_complete(future) self.assertIsNone(future.exception()) self.assertEqual(future.result()[0], "information_schema")
def test_rest(self): for method in ("get", "post", "patch", "head", "delete"): with self.get_http_patch() as m: f = getattr(self.client, method)("abc") self.assertEqual(m.call_args[0], ("abc", )) self.assertPartInDict({"headers": { "Connection": "keep-alive" }}, m.call_args[1]) run_until_complete(f) self.assertEqual(f.result().response, self._resp)
def test_rest(self): for method in ('get', 'post', 'patch', 'head', 'delete'): with self.get_http_patch() as m: f = getattr(self.client, method)('abc') self.assertEqual(m.call_args[0], ('abc', )) self.assertPartInDict({'headers': { 'Connection': 'keep-alive' }}, m.call_args[1]) run_until_complete(f) self.assertEqual(f.result().response, self._resp)
def test_getAllBySql(self): @coroutine @wrapper def _test(): sqlhelper = SqlHelper('movoto') r = yield sqlhelper.get_all_by_sql('show databases;') return_in_coroutine(r) future = _test() run_until_complete(future) self.assertIsNone(future.exception()) self.assertEqual(future.result()[0][0], 'information_schema')
def test_run_on_executor(self): thread_pool = ThreadPoolExecutor(1) @thread_pool.coroutine def _fake_slow_task(): time.sleep(1) return 3.5 future = _fake_slow_task() self.assertFalse(future.done()) run_until_complete(future) self.assertTrue(future.done()) self.assertEqual(future.result(), 3.5)
def test_run_on_executor_for_class(self): thread_pool = ThreadPoolExecutor(1) class Demo(object): @thread_pool.coroutine def _fake_slow_task(self): time.sleep(1) return 3.1 demo = Demo() future = demo._fake_slow_task() self.assertFalse(future.done()) run_until_complete(future) self.assertTrue(future.done()) self.assertEqual(future.result(), 3.1)
def wait_process_done(process, timeout): evt = Event() f_p = _process_runner(process, evt) try: futu = evt.wait(timeout=opt.timeout) run_until_complete(futu) futu.result() except KippAIOTimeoutError: try: kill_process(process) except OSError: return f_p.result() else: raise KippRunnerTimeoutException( "process exceeds timeout {}s".format(timeout)) else: return f_p.result() finally: opt.executor.shutdown()
def test_shutdown_task(self): class obj: is_done = False thread_pool = ThreadPoolExecutor(1) future = thread_pool.submit(self._fake_infinite_task, obj) self.assertFalse(future.done()) obj.is_done = True thread_pool.shutdown(wait=False) # shutdown without wait self.assertFalse(future.done()) run_until_complete(future) self.assertTrue(future.done()) thread_pool = ThreadPoolExecutor(1) obj.is_done = False future = thread_pool.submit(self._fake_infinite_task, obj) self.assertFalse(future.done()) obj.is_done = True thread_pool.shutdown() # wait to finish self.assertTrue(future.done())
def test_aio_get_runtime_stats(self): aio_movotodb = MovotoDB(is_aio=True) f = aio_movotodb.get_runtime_stats(name='test_get') self.assertIsInstance(f, Future) run_until_complete(f) r = f.result() _sql_expect = 'select created_at, updated_at, stats from runtime_stats where name=%s;' _sql = self.replace_sql( self.sqlhelper.getOneBySql.call_args_list[-1][0][0]) self.assertEqual(r.stats, 'fake_stats') self.assertEqual(_sql, _sql_expect) self.assertEqual(self.sqlhelper.getOneBySql.call_args_list[-1][0][1], 'test_get') self.assertRaises(DBValidateError, self.movotodb.get_runtime_stats, name='xxx' * 51) self.assertRaises(DBValidateError, self.movotodb.get_runtime_stats, name=None)
def test_future_thread_safe(self): def demo(): pass def _callback(f): pass @coroutine2 def coro(): executor = ThreadPoolExecutor(100) fs = [] for _ in range(5000): f = executor.submit(demo) f.add_done_callback(_callback) fs.append(f) yield wait(fs) f = wait([coro() for _ in range(5)]) run_until_complete(f) f.result()
def test_add_multi_tasks(self): thread_pool = ThreadPoolExecutor(5) futures = [thread_pool.submit(self._fake_task) for _ in range(5)] run_until_complete(wait(futures)) for f in futures: self.assertEqual(f.result(), 2)
def test_wait(self): futures = [self._simple_task() for _ in range(5)] self.assertFalse(any([f.done() for f in futures])) gathered = wait(futures) run_until_complete(gathered) self.assertTrue([r == 'ok' for r in gathered.result()])
def test_return(self): future = self._simple_task() self.assertFalse(future.done()) run_until_complete(future) self.assertTrue(future.done()) self.assertEqual(future.result(), 'ok')
def test_task_exception(self): thread_pool = ThreadPoolExecutor(1) future = thread_pool.submit(self._fake_task_with_exception) run_until_complete(future) self.assertRaises(AttributeError, future.result)