def test_udpsession_response_too_short(self): session = UdpTrackerSession("localhost", ("localhost", 4782), "/announce", 0, self.socket_mgr) self.assertFalse(session.is_failed) packet = struct.pack("!i", 123) session.handle_scrape_response(packet) self.assertTrue(session.is_failed)
def test_udpsession_on_error(self): test_deferred = Deferred() session = UdpTrackerSession("localhost", ("localhost", 4782), "/announce", 0, self.socket_mgr) session.result_deferred = Deferred().addErrback( lambda failure: test_deferred.callback(failure.getErrorMessage())) session.on_error(Failure(RuntimeError("test"))) return test_deferred
def test_udpsession_cancel_operation(self): session = UdpTrackerSession("127.0.0.1", ("localhost", 8475), "/announce", 5) d = Deferred(session._on_cancel) d.addErrback(lambda _: None) session.result_deferred = d return session.cleanup()
def test_udp_scraper_stop_no_connection(self): session = UdpTrackerSession("localhost", ("localhost", 4782), "/announce", 5) scraper = UDPScraper(session, "127.0.0.1", 4782, 5) # Stop it manually, so the transport becomes inactive stop_deferred = scraper.stop() return DeferredList([stop_deferred, session.cleanup()])
def test_udpsession_response_wrong_transaction_id(self): session = UdpTrackerSession("localhost", ("localhost", 4782), "/announce", 0, self.socket_mgr) self.assertFalse(session.is_failed) packet = struct.pack("!ii", 0, 1337) session.handle_scrape_response(packet) self.assertTrue(session.is_failed)
def test_udpsession_no_port(self): session = UdpTrackerSession("localhost", ("localhost", 4782), "/announce", 0, self.socket_mgr) self.assertFalse(session.is_failed) self.socket_mgr.transport = None session.connect() self.assertTrue(session.is_failed)
def test_udpsession_udp_tracker_timeout(self): session = UdpTrackerSession("localhost", ("localhost", 4782), "/announce", 5) session.scraper = ClockedUDPCrawler(session, "127.0.0.1", 4782, 5) # Advance 16 seconds so the timeout triggered session.scraper._reactor.advance(session.scraper.timeout + 1) self.assertFalse(session.scraper.timeout_call.active(), "timeout was active while should've canceled")
def test_udpsession_handle_packet(self): session = UdpTrackerSession("localhost", ("localhost", 4782), "/announce", 0, self.socket_mgr) session.action = 123 session.transaction_id = 124 self.assertFalse(session.is_failed) packet = struct.pack("!iiq", 123, 124, 126) session.handle_connection_response(packet) self.assertFalse(session.is_failed)
def test_udpsession_udp_tracker_connection_refused(self): session = UdpTrackerSession("localhost", ("localhost", 4782), "/announce", 5) session.scraper = UDPScraper(session, "127.0.0.1", 4782, 5) session.scraper.connectionRefused() self.assertTrue(session.is_failed, "Session did not fail while it should") return session.scraper.stop()
def test_failed_unicode_udp(self): test_deferred = Deferred() session = UdpTrackerSession("localhost", ("localhost", 8475), "/announce", 0, self.socket_mgr) def on_error(failure): self.assertEqual(failure.type, ValueError) test_deferred.callback(None) session.result_deferred = Deferred().addErrback(on_error) session.failed(msg='\xd0') return test_deferred
def test_udpsession_correct_handle(self): session = UdpTrackerSession("localhost", ("localhost", 4782), "/announce", 5, self.socket_mgr) session.on_ip_address_resolved("127.0.0.1", start_scraper=False) session.result_deferred = Deferred() self.assertFalse(session.is_failed) session._infohash_list = ["test"] packet = struct.pack("!iiiii", session.action, session.transaction_id, 0, 1, 2) session.handle_scrape_response(packet) return session.result_deferred.addCallback(lambda *_: session.cleanup())
def test_big_correct_run(self): session = UdpTrackerSession("localhost", ("192.168.1.1", 1234), "/announce", 0, self.socket_mgr) session.on_ip_address_resolved("192.168.1.1") session.transport = self.mock_transport session.result_deferred = Deferred() self.assertFalse(session.is_failed) packet = struct.pack("!iiq", session.action, session.transaction_id, 126) session.handle_response(packet) session._infohash_list = ["test"] packet = struct.pack("!iiiii", session.action, session.transaction_id, 0, 1, 2) session.handle_response(packet) self.assertTrue(session.is_finished) return session.result_deferred
def test_udpsession_handle_response_wrong_len(self): session = UdpTrackerSession("localhost", ("localhost", 4782), "/announce", 0, self.socket_mgr) session.on_ip_address_resolved("127.0.0.1") self.assertFalse(session.is_failed) session.handle_connection_response("too short") self.assertTrue(session.is_failed) # After receiving a correct packet, it session should still be in a failed state session.action = 123 session.transaction_id = 124 packet = struct.pack("!iiq", 123, 124, 126) session.handle_response(packet) self.assertTrue(session.expect_connection_response) self.assertTrue(session.is_failed)
def test_udpsession_mismatch(self): session = UdpTrackerSession("localhost", ("localhost", 4782), "/announce", 5) session.scraper = FakeScraper() session._action = 123 session._transaction_id = 124 session._infohash_list = [1337] self.assertFalse(session.is_failed) packet = struct.pack("!ii", 123, 124) session.handle_response(packet) self.assertTrue(session.is_failed)
def test_udpsession_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 = UdpTrackerSession("localhost", ("localhost", 4782), "/announce", 1, self.socket_mgr) 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_udpsession_response_list_len_mismatch(self): session = UdpTrackerSession("localhost", ("localhost", 4782), "/announce", 5) session.scraper = FakeScraper() session.result_deferred = Deferred() def on_error(_): pass session.result_deferred.addErrback(on_error) session._action = 123 session._transaction_id = 123 self.assertFalse(session.is_failed) session._infohash_list = ["test", "test2"] packet = struct.pack("!iiiii", 123, 123, 0, 1, 2) session.handle_response(packet) self.assertTrue(session.is_failed)
def test_udpsession_handle_packet(self): session = UdpTrackerSession("localhost", ("localhost", 4782), "/announce", 5) session.scraper = FakeScraper() session._action = 123 session._transaction_id = 124 self.assertFalse(session.is_failed) packet = struct.pack("!iiq", 123, 124, 126) session.handle_connection_response(packet) self.assertFalse(session.is_failed)
def test_udpsession_handle_wrong_action_transaction(self): session = UdpTrackerSession("localhost", ("localhost", 4782), "/announce", 0, self.socket_mgr) session.on_ip_address_resolved("127.0.0.1", start_scraper=None) self.assertFalse(session.is_failed) packet = struct.pack("!qq4s", 123, 123, "test") session.handle_connection_response(packet) self.assertTrue(session.is_failed)
def test_udpsession_handle_response_wrong_len(self): session = UdpTrackerSession("localhost", ("localhost", 4782), "/announce", 5) session.on_ip_address_resolved("127.0.0.1", start_scraper=False) self.assertFalse(session.is_failed) session.handle_connection_response("too short") self.assertTrue(session.is_failed)
def test_udpsession_mismatch(self): session = UdpTrackerSession("localhost", ("localhost", 4782), "/announce", 0, self.socket_mgr) session.action = 123 session.transaction_id = 124 session._infohash_list = [1337] self.assertFalse(session.is_failed) packet = struct.pack("!ii", 123, 124) session.handle_scrape_response(packet) self.assertTrue(session.is_failed)
def test_udpsession_response_list_len_mismatch(self): session = UdpTrackerSession("localhost", ("localhost", 4782), "/announce", 0, self.socket_mgr) session.result_deferred = Deferred() def on_error(_): pass session.result_deferred.addErrback(on_error) session.action = 123 session.transaction_id = 123 self.assertFalse(session.is_failed) session._infohash_list = ["test", "test2"] packet = struct.pack("!iiiii", 123, 123, 0, 1, 2) session.handle_scrape_response(packet) self.assertTrue(session.is_failed)
def test_big_correct_run(self): session = UdpTrackerSession("localhost", ("192.168.1.1", 1234), "/announce", 1) session.on_ip_address_resolved("192.168.1.1", start_scraper=False) session.scraper.transport = self.mock_transport session.result_deferred = Deferred() self.assertFalse(session.is_failed) packet = struct.pack("!iiq", session._action, session._transaction_id, 126) session.scraper.datagramReceived(packet, (None, None)) session._infohash_list = ["test"] packet = struct.pack("!iiiii", session._action, session._transaction_id, 0, 1, 2) session.scraper.datagramReceived(packet, (None, None)) self.assertTrue(session.is_finished) return session.result_deferred
def test_udpsession_cancel_operation(self): session = UdpTrackerSession("127.0.0.1", ("localhost", 8475), "/announce", 0, self.socket_mgr) d = Deferred(session._on_cancel) d.addErrback(lambda _: None) session.result_deferred = d
def test_udpsession_udp_tracker_timeout(self): session = UdpTrackerSession("localhost", ("localhost", 4782), "/announce", 5) session.scraper = ClockedUDPCrawler(session, "127.0.0.1", 4782, 5) # Advance 16 seconds so the timeout triggered session.scraper._reactor.advance(session.scraper.timeout + 1) self.assertIsNone(session.scraper)