예제 #1
0
 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
예제 #2
0
 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
예제 #3
0
 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)
예제 #4
0
 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)
예제 #6
0
    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)
예제 #7
0
    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)
예제 #8
0
    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)
예제 #9
0
    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)
예제 #10
0
    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
예제 #11
0
    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
예제 #12
0
    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
예제 #13
0
 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)
예제 #14
0
 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)
예제 #15
0
 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)
예제 #16
0
 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)
예제 #17
0
 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)
예제 #18
0
 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