def readPassWord(self, wifissid): # 读取密码字典,进行匹配 print("开始破解: %s" % wifissid) # 将结果写入文本文件记录 res = "开始破解:: %s \n" % wifissid open(self.resfile, "a").write(res) pwdfilehander = open(self.pwdfile, "r", errors="ignore") while True: try: myStr = pwdfilehander.readline() if not myStr: break bool1 = self.test_connect(myStr, wifissid) if bool1: # print("密码正确:"+myStr) # res = "密码:%s 正确 \n"%myStr; res = "===正确=== ^_^ wifi名:%s 匹配密码:%s " % (wifissid, myStr) print(res) # 将结果写入文本文件记录 open(self.resfile, "a").write(res) break else: # print("密码:"+myStr+"错误") res = "---错误--- wifi名:%s匹配密码:%s" % (wifissid, myStr) print(res) # 将结果写入文本文件记录 open(self.resfile, "a").write(res) sleep(3) except: continue
def test_wait(self): def gen(): when = yield self.assertAlmostEqual(0.1, when) when = yield 0 self.assertAlmostEqual(0.15, when) yield 0.15 loop = test_utils.TestLoop(gen) self.addCleanup(loop.close) a = tasks.Task(tasks.sleep(0.1, loop=loop), loop=loop) b = tasks.Task(tasks.sleep(0.15, loop=loop), loop=loop) @tasks.coroutine def foo(): done, pending = yield from tasks.wait([b, a], loop=loop) self.assertEqual(done, set([a, b])) self.assertEqual(pending, set()) return 42 res = loop.run_until_complete(tasks.Task(foo(), loop=loop)) self.assertEqual(res, 42) self.assertAlmostEqual(0.15, loop.time()) # Doing it again should take no time and exercise a different path. res = loop.run_until_complete(tasks.Task(foo(), loop=loop)) self.assertAlmostEqual(0.15, loop.time()) self.assertEqual(res, 42)
def _find_form_with_special_parameters(self, page, login_data, interactive_search=True): keys = list(login_data.keys()) data1 = keys[0] data2 = keys[1] for form in page.forms: if form.toString().find(data1) > -1 and form.toString().find( data2) > -1: return form, None if interactive_search: for clickable in page.clickables: tmp_page = deepcopy(page) event_state, delta_page = self._event_executor.execute( tmp_page, element_to_click=clickable) if delta_page is None: sleep(2000) event_state, delta_page = self._event_executor.execute( tmp_page, element_to_click=clickable) if delta_page is None: continue delta_page = self.domain_handler.complete_urls_in_page( delta_page) delta_page = self.domain_handler.analyze_urls(delta_page) if event_state == EventResult.Ok: for form in delta_page.forms: if form.toString().find(data1) > -1 and form.toString( ).find(data2) > -1: return form, clickable return None, None
def displayNumbers(self): i = 0 print(current_thread().getName()) sleep(0.05) while (i < 10): print(i) i += 1
def test_wait_concurrent_complete(self): def gen(): when = yield self.assertAlmostEqual(0.1, when) when = yield 0 self.assertAlmostEqual(0.15, when) when = yield 0 self.assertAlmostEqual(0.1, when) yield 0.1 loop = test_utils.TestLoop(gen) self.addCleanup(loop.close) a = tasks.Task(tasks.sleep(0.1, loop=loop), loop=loop) b = tasks.Task(tasks.sleep(0.15, loop=loop), loop=loop) done, pending = loop.run_until_complete( tasks.wait([b, a], timeout=0.1, loop=loop)) self.assertEqual(done, set([a])) self.assertEqual(pending, set([b])) self.assertAlmostEqual(0.1, loop.time()) # move forward to close generator loop.advance_time(10) loop.run_until_complete(tasks.wait([a, b], loop=loop))
def test_wait_with_global_loop(self): def gen(): when = yield self.assertAlmostEqual(0.01, when) when = yield 0 self.assertAlmostEqual(0.015, when) yield 0.015 loop = test_utils.TestLoop(gen) self.addCleanup(loop.close) a = tasks.Task(tasks.sleep(0.01, loop=loop), loop=loop) b = tasks.Task(tasks.sleep(0.015, loop=loop), loop=loop) @tasks.coroutine def foo(): done, pending = yield from tasks.wait([b, a]) self.assertEqual(done, set([a, b])) self.assertEqual(pending, set()) return 42 events.set_event_loop(loop) try: res = loop.run_until_complete(tasks.Task(foo(), loop=loop)) finally: events.set_event_loop(None) self.assertEqual(res, 42)
def test_wait_first_completed(self): def gen(): when = yield self.assertAlmostEqual(10.0, when) when = yield 0 self.assertAlmostEqual(0.1, when) yield 0.1 loop = test_utils.TestLoop(gen) self.addCleanup(loop.close) a = tasks.Task(tasks.sleep(10.0, loop=loop), loop=loop) b = tasks.Task(tasks.sleep(0.1, loop=loop), loop=loop) task = tasks.Task( tasks.wait([b, a], return_when=tasks.FIRST_COMPLETED, loop=loop), loop=loop) done, pending = loop.run_until_complete(task) self.assertEqual({b}, done) self.assertEqual({a}, pending) self.assertFalse(a.done()) self.assertTrue(b.done()) self.assertIsNone(b.result()) self.assertAlmostEqual(0.1, loop.time()) # move forward to close generator loop.advance_time(10) loop.run_until_complete(tasks.wait([a, b], loop=loop))
def readPassWord(self,i): flag =int(i) # self.PassWord() for file00 in self.objevg[flag]: while True: try: myStr =file00.readline() if not myStr: break name,bool1=self.test_connect(myStr) if bool1: self.Lbox.insert(END,name+str(i)+"-密码正确:"+myStr) print(myStr) # ret =tkinter.messagebox.showinfo(title ="破解成功",message=name+str(i)+"-密码:"+myStr) self.root.update() self.btn["text"]="开始破解" break else: self.Lbox.insert(END,name+str(i)+"-密码错误:"+myStr) self.root.update() print((END,name+str(i)+"-密码错误:"+myStr)) sleep(3) except: continue self.btn["text"]="-开始破解"
def test_wait_first_completed(self): def gen(): when = yield self.assertAlmostEqual(10.0, when) when = yield 0 self.assertAlmostEqual(0.1, when) yield 0.1 loop = test_utils.TestLoop(gen) self.addCleanup(loop.close) a = tasks.Task(tasks.sleep(10.0, loop=loop), loop=loop) b = tasks.Task(tasks.sleep(0.1, loop=loop), loop=loop) task = tasks.Task(tasks.wait([b, a], return_when=tasks.FIRST_COMPLETED, loop=loop), loop=loop) done, pending = loop.run_until_complete(task) self.assertEqual({b}, done) self.assertEqual({a}, pending) self.assertFalse(a.done()) self.assertTrue(b.done()) self.assertIsNone(b.result()) self.assertAlmostEqual(0.1, loop.time()) # move forward to close generator loop.advance_time(10) loop.run_until_complete(tasks.wait([a, b], loop=loop))
def test_wait_with_global_loop(self): def gen(): when = yield self.assertAlmostEqual(0.01, when) when = yield 0 self.assertAlmostEqual(0.015, when) yield 0.015 loop = test_utils.TestLoop(gen) self.addCleanup(loop.close) a = tasks.Task(tasks.sleep(0.01, loop=loop), loop=loop) b = tasks.Task(tasks.sleep(0.015, loop=loop), loop=loop) @tasks.coroutine def foo(): done, pending = yield from tasks.wait([b, a]) self.assertEqual(done, set([a, b])) self.assertEqual(pending, set()) return 42 events.set_event_loop(loop) try: res = loop.run_until_complete( tasks.Task(foo(), loop=loop)) finally: events.set_event_loop(None) self.assertEqual(res, 42)
def attack_all_get_forms(self): if self.process_with_login: self._handle_possible_logout() logging.debug("Attacking with get forms") all_forms = self.database_manager.get_one_form_per_destination() for form in all_forms: logging.debug(form.toString()) if "javascript" in form.action.complete_url: continue for param_to_attack in form.parameter: if param_to_attack.input_type == "submit" or param_to_attack.name is None: continue logging.debug("Now at paramerter {}".format( param_to_attack.toString())) empty_counter = 0 for vector in self._xss_vector.attack_vectors: attack_url = form.action.complete_url + "?" random_val = self._xss_vector.random_number_generator(12) for other_parameter in form.parameter: if param_to_attack == other_parameter: if other_parameter is None or other_parameter.name is None: continue attack_url += other_parameter.name + "=" + vector.replace( "XSS", random_val) + "&" else: if other_parameter.input_type == "submit" or other_parameter.name is None: continue elif other_parameter.values is None: attack_url += other_parameter.name + "=&" elif other_parameter.values[0] is not None: attack_url += other_parameter.name + "=" + other_parameter.values[ 0] + "&" else: attack_url += other_parameter.name + "=" + self._xss_vector.random_string_generator( 6) + "&" attack_url = attack_url[:-1] logging.debug("Attack with: {}".format(attack_url)) result, response_code = self._xss.attack( attack_url, random_val) if not self._check_login_status_with_cookies(): sleep(2000) self._initial_login() result, response_code = self._xss.attack( attack_url, random_val) if response_code is None: continue if response_code >= 400 or result == AttackResult.JSON: empty_counter = 42 logging.debug("Result: {} - Response Code: {}".format( result, response_code)) if result in (AttackResult.AttackSuccessfull, AttackResult.AttackFailed): self.database_manager.insert_attack_result( result, attack_url) empty_counter = 0 else: empty_counter += 1 if empty_counter > EMPTY_LIMIT: break
def click_register_button(self): self.driver.find_element(*RegisterPageDemoWebShop.GENDER).click() self.driver.find_element(*RegisterPageDemoWebShop.FIRST_NAME).send_keys('aswani') self.driver.find_element(*RegisterPageDemoWebShop.LAST_NAME).send_keys('kumar') self.driver.find_element(*RegisterPageDemoWebShop.EMAIL_ID).send_keys('*****@*****.**') self.driver.find_element(*RegisterPageDemoWebShop.PASSWORD).send_keys('abc123') self.driver.find_element(*RegisterPageDemoWebShop.CNF_PASSWORD).send_keys('abc123') sleep(5) self.driver.find_element(*RegisterPageDemoWebShop.REGISTER).click()
def test_expinfo(self): r = requests.get(self.url4, headers=con_login.common_header(self)) print('打卡及经验显示') try: self.assertEqual(r.json()['msg'], 'success', 'fail') print('查询成功') except: print('查询失败', r.json()) sleep(3)
def attack_all_urls_with_additions(self): domain = urlparse(self.config.start_page_url) domain = domain.netloc all_urls = self.database_manager.get_all_urls_to_domain(domain) for url in all_urls: if len(url.parameters) > 0: logging.debug("Now testing with url: {}".format( url.toString())) if self.process_with_login: self._handle_possible_logout() for parameter_to_attack in url.parameters: empty_counter = 0 for vector in self._xss_vector.attack_vectors: attack_url = url.scheme + "://" + url.domain + url.path + "?" random_val = self._xss_vector.random_number_generator( 12) for other_parameters in url.parameters: if parameter_to_attack == other_parameters: attack_url += other_parameters + "=" + str( url.parameters[other_parameters] [0]) if url.parameters[other_parameters][ 0] is not None else "" attack_url += vector.replace( "XSS", str(random_val)) + "&" else: attack_url += other_parameters + "=" attack_url += url.parameters[other_parameters][ 0] if url.parameters[other_parameters][ 0] is not None else "" attack_url += "&" attack_url = attack_url[:-1] # Removing the last "& logging.debug("Attack with: {}".format(attack_url)) result, response_code = self._xss.attack( attack_url, random_val) if not self._check_login_status_with_cookies(): sleep(2000) self._initial_login() result, response_code = self._xss.attack( attack_url, random_val) if response_code is None: continue if response_code >= 400 or result == AttackResult.JSON: empty_counter = 42 logging.debug("Result: {} - Response Code: {}".format( result, response_code)) if result in (AttackResult.AttackSuccessfull, AttackResult.AttackFailed): self.database_manager.insert_attack_result( result, attack_url) empty_counter = 0 else: empty_counter += 1 if empty_counter > EMPTY_LIMIT: break
def tearDown(self): # Видалення dummy-файла із затримкою на час його завантаження deleted = False i = 0 while not deleted and i<30: try: self.report.file.delete() deleted = True except: sleep(10) i += 1 if not deleted: print('file not deleted in ReportDownloadTest')
def scanPosturl(self,payload,newurl,data): #输出日志 script = "var page = this; page.onConsoleMessage = function(msg) {page.browserLog.push(msg);};" self.browser.command_executor._commands['executePhantomScript'] = ('POST', '/session/$sessionId/phantom/execute') self.browser.execute('executePhantomScript', {'script': script, 'args': []}) #发起GET请求,设置同域,最好的链接应该是POST请求的母链接 self.browser.get(newurl) sleep(1) winhandlers = self.browser.window_handles befhandler = winhandlers[0] #加载执行jquery.js jquery = open("jquery-3.4.1.min.js", "r").read() self.browser.execute_script(jquery) #构造POST请求,打开新的标签页面 request_type="'POST'" ajax_query = ''' $.ajax('%s', { type: %s, data: %s, headers: { "User-Agent": "Mozilla/5.0" }, crossDomain: true, xhrFields: { withCredentials: true }, success: function(str_response){var obj = window.open("about:blank"); obj.document.write(str_response); } }); ''' % (newurl, request_type, data) ajax_query = ajax_query.replace("\n", "") resp = self.browser.execute_script("return " + ajax_query) time.sleep(2) newhandler = "" winhandlers = self.browser.window_handles for a in winhandlers: if(a != befhandler): newhandler = a #切换至新的标签页(理论上仅有2个) self.browser.switch_to.window(newhandler) logs = self.browser.get_log('browser') log = [] for l in logs: ldata = l['message'] ldata = ldata[:ldata.rfind(" (:)")] log.append(ldata) self.addLog(log) self.addPagecontent(self.browser.page_source) self.addPagecontent(resp) self.checkPayloads(payload, self.pages,logs, newurl+json.dumps(data))
def addzifufangsi(self,goodbrand): driver = self.driver menu_loc = driver.find_element_by_name("menu-frame") driver.switch_to_frame(menu_loc) driver.find_element_by_link_text("配送方式").click() driver.switch_to_default_content() menu_loc1 = driver.find_element_by_name("main-frame") driver.switch_to_frame(menu_loc1) sleep(2) driver.find_element_by_link_text("添加品牌").click() sleep(2) driver.find_element_by_name("brand_name").send_keys(goodbrand) driver.find_element_by_xpath("/html/body/div[1]/form/table/tbody/tr[7]/td/input[1]").click() driver.switch_to_default_content()
def writeActuatorDataToDbms(self): redis_subscribe = self.redis_connection.pubsub() redis_subscribe.subscribe("ActuatorData_Channel") for m in redis_subscribe.listen(): msg = redis_subscribe.get_message()['data'] if (msg['data'] != 1): sleep(0.5) data = redis_subscribe.get_message()['data'] print(data) self.registerActuatorDataDbmsListener() redis_subscribe.unsubscribe("ActuatorData_Channel") self.redis_connection.close()
async def process_messages(): handlers = {} channels = {} for i, message in messages: if i not in handlers: channel = Channel() handler = message_handler(str(i), channel) loop.create_task(handler) handlers[i] = handler channels[i] = channel channel = channels[i] channel.receive(message) sleep(.5)
def run(self): while True : if nextPageUrl.empty(): sleep(5)#等一等线程1 else : print("这里是线程2开始启动!") nextUrl=nextPageUrl.get() soup = publicMethod(nextUrl) jsonData= soup.text#json数据字符串化 Dict=json.loads(jsonData)#转换为dict类型 print(Dict) NewsHrefList=Dict.get("data").get("article")#list里面嵌套dict for News in NewsHrefList: href = News.get("href") print(href) print(NewsHrefList)
def goodbrand(self): driver = self.driver goodbrand = 'ap'+str(time()*1000)[6:] menu_loc = driver.find_element_by_name("menu-frame") driver.switch_to_frame(menu_loc) driver.find_element_by_link_text("商品品牌").click() driver.switch_to_default_content() menu_loc1 = driver.find_element_by_name("main-frame") driver.switch_to_frame(menu_loc1) sleep(2) driver.find_element_by_link_text("添加品牌").click() sleep(2) driver.find_element_by_name("brand_name").send_keys(goodbrand) driver.find_element_by_xpath("/html/body/div[1]/form/table/tbody/tr[7]/td/input[1]").click() driver.switch_to_default_content() return(goodbrand)
def test_sleep_cancel(self): def gen(): when = yield self.assertAlmostEqual(10.0, when) yield 0 loop = test_utils.TestLoop(gen) self.addCleanup(loop.close) t = tasks.Task(tasks.sleep(10.0, 'yeah', loop=loop), loop=loop) handle = None orig_call_later = loop.call_later def call_later(self, delay, callback, *args): nonlocal handle handle = orig_call_later(self, delay, callback, *args) return handle loop.call_later = call_later test_utils.run_briefly(loop) self.assertFalse(handle._cancelled) t.cancel() test_utils.run_briefly(loop) self.assertTrue(handle._cancelled)
def readPassWord(self): print("开始破解:") while True: try: myStr = self.file.readline() if not myStr: break bool1 = self.test_connect(myStr) if bool1: print("密码正确:", myStr) break else: print("密码错误:" + myStr) sleep(3) except: continue
def test(): t = tasks.Task(putter(), loop=loop) yield from tasks.sleep(0.01, loop=loop) # The putter is blocked after putting two items. self.assertEqual([0, 1], have_been_put) self.assertEqual(0, q.get_nowait()) # Let the putter resume and put last item. yield from tasks.sleep(0.01, loop=loop) self.assertEqual([0, 1, 2], have_been_put) self.assertEqual(1, q.get_nowait()) self.assertEqual(2, q.get_nowait()) self.assertTrue(t.done()) self.assertTrue(t.result())
def crack_password(self): print('开始破解 wifi 密码。') while True: try: my_str = self.file.readline() if not my_str: break c = self.test_connect(my_str) if c: print('bingo, 密码准确:', my_str) break else: print('密码错误:' + my_str) sleep(3) except: continue
def test_wait_with_exception(self): def gen(): when = yield self.assertAlmostEqual(0.1, when) when = yield 0 self.assertAlmostEqual(0.15, when) yield 0.15 loop = test_utils.TestLoop(gen) self.addCleanup(loop.close) a = tasks.Task(tasks.sleep(0.1, loop=loop), loop=loop) @tasks.coroutine def sleeper(): yield from tasks.sleep(0.15, loop=loop) raise ZeroDivisionError('really') b = tasks.Task(sleeper(), loop=loop) @tasks.coroutine def foo(): done, pending = yield from tasks.wait([b, a], loop=loop) self.assertEqual(len(done), 2) self.assertEqual(pending, set()) errors = set(f for f in done if f.exception() is not None) self.assertEqual(len(errors), 1) loop.run_until_complete(tasks.Task(foo(), loop=loop)) self.assertAlmostEqual(0.15, loop.time()) loop.run_until_complete(tasks.Task(foo(), loop=loop)) self.assertAlmostEqual(0.15, loop.time())
def test_wait_first_exception_in_wait(self): def gen(): when = yield self.assertAlmostEqual(10.0, when) when = yield 0 self.assertAlmostEqual(0.01, when) yield 0.01 loop = test_utils.TestLoop(gen) self.addCleanup(loop.close) # first_exception, exception during waiting a = tasks.Task(tasks.sleep(10.0, loop=loop), loop=loop) @tasks.coroutine def exc(): yield from tasks.sleep(0.01, loop=loop) raise ZeroDivisionError('err') b = tasks.Task(exc(), loop=loop) task = tasks.wait([b, a], return_when=tasks.FIRST_EXCEPTION, loop=loop) done, pending = loop.run_until_complete(task) self.assertEqual({b}, done) self.assertEqual({a}, pending) self.assertAlmostEqual(0.01, loop.time()) # move forward to close generator loop.advance_time(10) loop.run_until_complete(tasks.wait([a, b], loop=loop))
def task(): nonlocal x while x < 10: waiters.append(tasks.sleep(0.1, loop=loop)) yield from waiters[-1] x += 1 if x == 2: loop.stop()
def readPassWord(self): print("开始破解:") #while True: for line in self.file: myStr = line.strip() try: bool1 = self.test_connect(myStr) if bool1: print("password right for ssid %s : %s" % (self.ssid, myStr)) break # else: # print("password wrong:"+myStr) sleep(1) except: continue print('Crack Done. Nothing.')
async def f_retry(self, *args, **kwargs): if not iscoroutine(func): f = coroutine(func) else: f = func mtries, mdelay = tries, delay while mtries > 1: try: return await f(self, *args, **kwargs) except exceptions: if logger: logger.info('Retrying %s after %s seconds', f.__name__, mdelay) sleep(mdelay) mtries -= 1 mdelay *= backoff return await f(self, *args, **kwargs)
def sleeper(dt, x): nonlocal time_shifted yield from tasks.sleep(dt, loop=loop) completed.add(x) if not time_shifted and 'a' in completed and 'b' in completed: time_shifted = True loop.advance_time(0.14) return x
def run_until(loop, pred, timeout=30): deadline = time.time() + timeout while not pred(): if timeout is not None: timeout = deadline - time.time() if timeout <= 0: raise futures.TimeoutError() loop.run_until_complete(tasks.sleep(0.001, loop=loop))
def run_until(loop, pred, timeout=support.SHORT_TIMEOUT): deadline = time.monotonic() + timeout while not pred(): if timeout is not None: timeout = deadline - time.monotonic() if timeout <= 0: raise futures.TimeoutError() loop.run_until_complete(tasks.sleep(0.001))
def _handle_possible_logout(self): """ Handles a possible logout :return: True is we were not logged out and false if we were logged out """ retries = 0 max_retries = 3 while retries < max_retries: logging.debug("Start with relogin try number: {}".format(retries + 1)) page_with_login_form = self._get_webpage( self.user.url_with_login_form) login_form, login_clickable = self._find_form_with_special_parameters( page_with_login_form, self.user.login_data, self.interactive_login_form_search) if login_form is not None: #So login_form is visible, we are logged out logging.debug("Logout detected, visible login form...") hopefully_reloggedin_page = self._login_and_return_webpage( login_form, page_with_login_form, self.user.login_data, login_clickable) if hopefully_reloggedin_page is None: retries += 1 logging.debug( "Relogin attempt number {} failed".format(retries)) sleep(2000) else: login_form, login_clickable = self._find_form_with_special_parameters( hopefully_reloggedin_page, self.user.login_data) if login_form is None: logging.debug("Relogin successfull...continue") return False else: logging.debug( "Relogin fails, loginform is still present...") retries += 1 sleep(2000) else: logging.debug( "Login form is not there... we can continue (I hope)") if retries < 3: return True else: return False raise LoginFailed("We cannot login anymore... stop crawling here")
def test_wait_errors(self): self.assertRaises( ValueError, self.loop.run_until_complete, tasks.wait(set(), loop=self.loop)) self.assertRaises( ValueError, self.loop.run_until_complete, tasks.wait([tasks.sleep(10.0, loop=self.loop)], return_when=-1, loop=self.loop))
def add_getter(): q = queues.Queue(loop=loop) # Start a task that waits to get. tasks.Task(q.get(), loop=loop) # Let it start waiting. yield from tasks.sleep(0.1, loop=loop) self.assertTrue('_getters[1]' in fn(q)) # resume q.get coroutine to finish generator q.put_nowait(0)
def test_handshake_timeout(self): # bpo-29970: Check that a connection is aborted if handshake is not # completed in timeout period, instead of remaining open indefinitely ssl_proto = self.ssl_protocol() transport = self.connection_made(ssl_proto) with test_utils.disable_logger(): self.loop.run_until_complete(tasks.sleep(0.2, loop=self.loop)) self.assertTrue(transport.abort.called)
def test_run_until_complete_timeout(self): t0 = self.loop.time() task = tasks.async(tasks.sleep(0.2, loop=self.loop), loop=self.loop) self.assertRaises(futures.TimeoutError, self.loop.run_until_complete, task, timeout=0.1) t1 = self.loop.time() self.assertTrue(0.08 <= t1-t0 <= 0.12, t1-t0) self.loop.run_until_complete(task) t2 = self.loop.time() self.assertTrue(0.18 <= t2-t0 <= 0.22, t2-t0)
def test_as_completed_concurrent(self): def gen(): when = yield self.assertAlmostEqual(0.05, when) when = yield 0 self.assertAlmostEqual(0.05, when) yield 0.05 loop = test_utils.TestLoop(gen) self.addCleanup(loop.close) a = tasks.sleep(0.05, 'a', loop=loop) b = tasks.sleep(0.05, 'b', loop=loop) fs = {a, b} futs = list(tasks.as_completed(fs, loop=loop)) self.assertEqual(len(futs), 2) waiter = tasks.wait(futs, loop=loop) done, pending = loop.run_until_complete(waiter) self.assertEqual(set(f.result() for f in done), {'a', 'b'})
def test_as_completed_with_timeout(self): def gen(): when = yield self.assertAlmostEqual(0.12, when) when = yield 0 self.assertAlmostEqual(0.1, when) when = yield 0 self.assertAlmostEqual(0.15, when) when = yield 0.1 self.assertAlmostEqual(0.12, when) yield 0.02 loop = test_utils.TestLoop(gen) self.addCleanup(loop.close) a = tasks.sleep(0.1, 'a', loop=loop) b = tasks.sleep(0.15, 'b', loop=loop) @tasks.coroutine def foo(): values = [] for f in tasks.as_completed([a, b], timeout=0.12, loop=loop): try: v = yield from f values.append((1, v)) except futures.TimeoutError as exc: values.append((2, exc)) return values res = loop.run_until_complete(tasks.Task(foo(), loop=loop)) self.assertEqual(len(res), 2, res) self.assertEqual(res[0], (1, 'a')) self.assertEqual(res[1][0], 2) self.assertIsInstance(res[1][1], futures.TimeoutError) self.assertAlmostEqual(0.12, loop.time()) # move forward to close generator loop.advance_time(10) loop.run_until_complete(tasks.wait([a, b], loop=loop))
def test_as_completed_reverse_wait(self): def gen(): yield 0 yield 0.05 yield 0 loop = test_utils.TestLoop(gen) self.addCleanup(loop.close) a = tasks.sleep(0.05, 'a', loop=loop) b = tasks.sleep(0.10, 'b', loop=loop) fs = {a, b} futs = list(tasks.as_completed(fs, loop=loop)) self.assertEqual(len(futs), 2) x = loop.run_until_complete(futs[1]) self.assertEqual(x, 'a') self.assertAlmostEqual(0.05, loop.time()) loop.advance_time(0.05) y = loop.run_until_complete(futs[0]) self.assertEqual(y, 'b') self.assertAlmostEqual(0.10, loop.time())
def exc(): yield from tasks.sleep(0.01, loop=loop) raise ZeroDivisionError('err')
def cb(): self.loop.stop() yield from tasks.sleep(0.1, loop=self.loop)
def task(): yield from tasks.sleep(10.0, loop=loop) return 12
def sleeper(): yield from tasks.sleep(10, loop=loop)
def task(): t.cancel() self.assertTrue(t._must_cancel) # White-box test. # The sleep should be cancelled immediately. yield from tasks.sleep(100, loop=loop) return 12
def sleeper(): yield from tasks.sleep(0.15, loop=loop) raise ZeroDivisionError('really')
def sleeper(dt, arg): yield from tasks.sleep(dt/2, loop=loop) res = yield from tasks.sleep(dt/2, arg, loop=loop) return res
def sleep(dt): nonlocal sleepfut sleepfut = tasks.sleep(dt, loop=loop) yield from sleepfut
def foo(): yield from tasks.sleep(0.2, loop=loop) return 'done'