def test_httpsession_cancel_operation(self): test_deferred = Deferred() session = HttpTrackerSession("127.0.0.1", ("localhost", 8475), "/announce", 5) session.result_deferred = Deferred(session._on_cancel) session.result_deferred.addErrback(lambda _: test_deferred.callback(None)) session.result_deferred.cancel() return test_deferred
def test_httpsession_on_error(self): test_deferred = Deferred() session = HttpTrackerSession("localhost", ("localhost", 4782), "/announce", 5) session.result_deferred = Deferred().addErrback( lambda failure: test_deferred.callback(None)) session.on_error(Failure(RuntimeError(u"test\xf8\xf9"))) return test_deferred
def test_http_unprocessed_infohashes(self): session = HttpTrackerSession("localhost", ("localhost", 8475), "/announce", 5) result_deffered = Deferred() session.result_deferred = result_deffered session._infohash_list.append("test") response = bencode(dict()) session._process_scrape_response(response) self.assertTrue(session.is_finished)
def test_http_unprocessed_infohashes(self): session = HttpTrackerSession("localhost", ("localhost", 8475), "/announce", 5) result_deferred = Deferred() session.result_deferred = result_deferred session._infohash_list.append("test") response = bencode({"files": {"a" * 20: {"complete": 10, "incomplete": 10}}}) session._process_scrape_response(response) self.assertTrue(session.is_finished)
def test_http_unprocessed_infohashes(self): session = HttpTrackerSession("localhost", ("localhost", 8475), "/announce", 5) result_deffered = Deferred() session.result_deferred = result_deffered session._infohash_list.append("test") response = bencode(dict()) session._process_scrape_response(response) self.assertTrue(session.is_finished)
def test_httpsession_code_not_200(self): session = HttpTrackerSession("localhost", ("localhost", 8475), "/announce", 5) class FakeResponse(object): code = 201 phrase = "unit testing!" session.on_response(FakeResponse()) self.assertTrue(session.is_failed)
def test_task_select_tracker(self): self.torrent_checker._torrent_db.addExternalTorrentNoDef( 'a' * 20, 'ubuntu.iso', [['a.test', 1234]], ['http://google.com/announce'], 5) controlled_session = HttpTrackerSession(None, None, None, None) controlled_session.connect_to_tracker = lambda: Deferred() self.torrent_checker._create_session_for_request = lambda *args, **kwargs: controlled_session self.torrent_checker._task_select_tracker() self.assertEqual(len(controlled_session.infohash_list), 1)
def test_task_select_tracker(self): self.torrent_checker._torrent_db.addExternalTorrentNoDef( 'a' * 20, 'ubuntu.iso', [['a.test', 1234]], ['http://google.com/announce'], 5) controlled_session = HttpTrackerSession(None, None, None, None) controlled_session.connect_to_tracker = lambda: Deferred() self.torrent_checker._create_session_for_request = lambda *args, **kwargs: controlled_session self.torrent_checker._task_select_tracker() self.assertEqual(len(controlled_session.infohash_list), 1)
def test_task_select_tracker(self): with db_session: tracker = self.session.lm.mds.TrackerState(url="http://localhost/tracker") self.session.lm.mds.TorrentState(infohash='a' * 20, seeders=5, leechers=10, trackers={tracker}) controlled_session = HttpTrackerSession(None, None, None, None) controlled_session.connect_to_tracker = lambda: Deferred() self.torrent_checker._create_session_for_request = lambda *args, **kwargs: controlled_session self.torrent_checker.check_random_tracker() self.assertEqual(len(controlled_session.infohash_list), 1)
def test_httpsession_unicode_err(self): session = HttpTrackerSession("retracker.local", ("retracker.local", 80), u"/announce?comment=%26%23%3B%28%2C%29%5B%5D%E3%5B%D4%E8%EB%FC%EC%EE%E2", 5) test_deferred = Deferred() def on_error(failure): failure.trap(UnicodeEncodeError) self.assertTrue(isinstance(failure.value, UnicodeEncodeError)) test_deferred.callback(None) session.connect_to_tracker().addErrback(on_error) return test_deferred
def test_failed_unicode(self): test_deferred = Deferred() session = HttpTrackerSession(u"localhost", ("localhost", 8475), "/announce", 5) def on_error(failure): self.assertEqual(failure.type, ValueError) test_deferred.callback(None) session.result_deferred = Deferred().addErrback(on_error) session._process_scrape_response(bencode({'failure reason': '\xe9'})) return test_deferred
def test_httpsession_timeout(self): test_deferred = Deferred() def on_fake_connect_to_tracker(): session.start_timeout() session.result_deferred = Deferred() return session.result_deferred def on_fake_timeout(): session.timeout_called = True timeout_func() def on_error(failure): failure.trap(ValueError) self.assertTrue(session.timeout_called) test_deferred.callback(None) session = HttpTrackerSession("localhost", ("localhost", 80), "/announce", 1) timeout_func = session.on_timeout session.timeout_called = False session.on_timeout = on_fake_timeout session.connect_to_tracker = on_fake_connect_to_tracker session.connect_to_tracker().addErrback(on_error) return test_deferred
def test_httpsession_failure_reason_in_dict(self): session = HttpTrackerSession("localhost", ("localhost", 8475), "/announce", 5) session._infohash_list = [] session._process_scrape_response(bencode({'failure reason': 'test'})) self.assertTrue(session.is_failed)
def test_httpsession_bdecode_fails(self): session = HttpTrackerSession("localhost", ("localhost", 8475), "/announce", 5) session._infohash_list = [] session._process_scrape_response(bencode({})) self.assertTrue(session.is_failed)
def test_httpsession_scrape_no_body(self): session = HttpTrackerSession("localhost", ("localhost", 8475), "/announce", 5) session._process_scrape_response(None) session._infohash_list = [] self.assertTrue(session.is_failed)
def test_httpsession_bdecode_fails(self): session = HttpTrackerSession("localhost", ("localhost", 8475), "/announce", 5) session._infohash_list = [] session._process_scrape_response("test") self.assertTrue(session.is_failed)
def test_httpsession_failure_reason_in_dict(self): session = HttpTrackerSession("localhost", ("localhost", 8475), "/announce", 5) session._infohash_list = [] session._process_scrape_response(bencode({'failure reason': 'test'})) self.assertTrue(session.is_failed)
def test_httpsession_on_error(self): test_deferred = Deferred() session = HttpTrackerSession("localhost", ("localhost", 4782), "/announce", 5) session.result_deferred = Deferred().addErrback(lambda failure: test_deferred.callback(None)) session.on_error(Failure(RuntimeError(u"test\xf8\xf9"))) return test_deferred