async def test_httpsession_scrape_no_body(self): session = HttpTrackerSession("localhost", ("localhost", 8475), "/announce", 5) session._infohash_list = [] self.assertRaises(ValueError, session._process_scrape_response, None) self.assertTrue(session.is_failed) await session.cleanup()
async def test_httpsession_failure_reason_in_dict(): session = HttpTrackerSession("localhost", ("localhost", 8475), "/announce", 5, None) session._infohash_list = [] with pytest.raises(ValueError): session._process_scrape_response(bencode({'failure reason': 'test'})) assert session.is_failed await session.cleanup()
async def test_httpsession_scrape_no_body(): session = HttpTrackerSession("localhost", ("localhost", 8475), "/announce", 5, None) session._infohash_list = [] with pytest.raises(ValueError): session._process_scrape_response(None) assert session.is_failed await session.cleanup()
async def test_httpsession_cancel_operation(): session = HttpTrackerSession("127.0.0.1", ("localhost", 8475), "/announce", 5, None) task = ensure_future(session.connect_to_tracker()) with pytest.raises(CancelledError): task.cancel() await task await session.cleanup()
async def test_httpsession_failure_reason_in_dict(self): session = HttpTrackerSession("localhost", ("localhost", 8475), "/announce", 5) session._infohash_list = [] self.assertRaises(ValueError, session._process_scrape_response, bencode({'failure reason': 'test'})) self.assertTrue(session.is_failed) await session.cleanup()
async def test_http_unprocessed_infohashes(): session = HttpTrackerSession("localhost", ("localhost", 8475), "/announce", 5, None) session.infohash_list.append(b"test") response = bencode( {"files": { b"a" * 20: { "complete": 10, "incomplete": 10 } }}) session._process_scrape_response(response) assert session.is_finished await session.cleanup()
async def test_task_select_tracker(enable_chant, torrent_checker, session): with db_session: tracker = session.mds.TrackerState(url="http://localhost/tracker") session.mds.TorrentState(infohash=b'a' * 20, seeders=5, leechers=10, trackers={tracker}) controlled_session = HttpTrackerSession("127.0.0.1", ("localhost", 8475), "/announce", 5, None) controlled_session.connect_to_tracker = lambda: succeed(None) torrent_checker._create_session_for_request = lambda *args, **kwargs: controlled_session result = await torrent_checker.check_random_tracker() assert not result assert len(controlled_session.infohash_list) == 1
async def test_httpsession_unicode_err(): session = HttpTrackerSession( "retracker.local", ("retracker.local", 80), "/announce?comment=%26%23%3B%28%2C%29%5B%5D%E3%5B%D4%E8%EB%FC%EC%EE%E2", 5, None) with pytest.raises(UnicodeEncodeError): await session.connect_to_tracker() await session.cleanup()
async def test_task_select_tracker(self): with db_session: tracker = self.session.mds.TrackerState( url="http://localhost/tracker") self.session.mds.TorrentState(infohash=b'a' * 20, seeders=5, leechers=10, trackers={tracker}) controlled_session = HttpTrackerSession("127.0.0.1", ("localhost", 8475), "/announce", 5) controlled_session.connect_to_tracker = lambda: succeed(None) self.torrent_checker._create_session_for_request = lambda *args, **kwargs: controlled_session result = await self.torrent_checker.check_random_tracker() self.assertFalse(result) self.assertEqual(len(controlled_session.infohash_list), 1)
async def test_httpsession_code_not_200(): session = HttpTrackerSession("localhost", ("localhost", 8475), "/announce", 5, None) def fake_request(_): raise HTTPBadRequest() session._session.get = fake_request with pytest.raises(Exception): await session.connect_to_tracker() await session.cleanup()
async def test_httpsession_timeout(): sleep_task = Future() async def _client_connected(_, writer): await sleep_task writer.close() server = await start_server(_client_connected, host='localhost', port=0, family=socket.AF_INET) _, port = server.sockets[0].getsockname() session = HttpTrackerSession("localhost", ("localhost", port), "/announce", .1, None) with pytest.raises(ValueError): await session.connect_to_tracker() sleep_task.set_result(None) await session.cleanup() server.close()
async def test_failed_unicode(): session = HttpTrackerSession("localhost", ("localhost", 8475), "/announce", 5, None) with pytest.raises(ValueError): session._process_scrape_response(bencode({'failure reason': '\xe9'})) await session.cleanup()
async def test_failed_unicode(self): session = HttpTrackerSession(u"localhost", ("localhost", 8475), "/announce", 5) self.assertRaises(ValueError, session._process_scrape_response, bencode({'failure reason': '\xe9'})) await session.cleanup()