Example #1
0
class TorrentTestCase(unittest.TestCase):
    def setup_config(self):
        global config_setup
        config_setup = True
        config_dir = common.set_tmp_config_dir()
        core_config = deluge.config.Config(
            "core.conf",
            defaults=deluge.core.preferencesmanager.DEFAULT_PREFS,
            config_dir=config_dir)
        core_config.save()

    def setUp(self):
        self.setup_config()
        global rpcserver
        global core
        rpcserver = RPCServer(listen=False)
        core = Core()
        self.session = lt.session()
        self.torrent = None
        return component.start()

    def tearDown(self):
        if self.torrent:
            self.torrent.prev_status_cleanup_loop.stop()

        def on_shutdown(result):
            component._ComponentRegistry.components = {}

        return component.shutdown().addCallback(on_shutdown)

    def print_priority_list(self, priorities):
        tmp = ''
        for i, p in enumerate(priorities):
            if i % 100 == 0:
                print tmp
                tmp = ''
            tmp += "%s" % p
        print tmp

    def get_torrent_atp(self, filename):
        filename = os.path.join(os.path.dirname(__file__), filename)
        e = lt.bdecode(open(filename, 'rb').read())
        info = lt.torrent_info(e)
        atp = {"ti": info}
        atp["save_path"] = os.getcwd()
        atp["storage_mode"] = lt.storage_mode_t.storage_mode_sparse
        atp["add_paused"] = False
        atp["auto_managed"] = True
        atp["duplicate_is_error"] = True
        return atp

    def test_set_prioritize_first_last(self):
        piece_indexes = [(0, 1), (0, 1), (0, 1), (0, 1), (0, 2), (50, 52),
                         (51, 53), (110, 112), (111, 114), (200, 203),
                         (202, 203), (212, 213), (212, 218), (457, 463)]
        self.run_test_set_prioritize_first_last("dir_with_6_files.torrent",
                                                piece_indexes)

    def run_test_set_prioritize_first_last(self, torrent_file,
                                           prioritized_piece_indexes):
        atp = self.get_torrent_atp(torrent_file)
        handle = self.session.add_torrent(atp)

        self.torrent = Torrent(handle, {})
        priorities_original = handle.piece_priorities()
        prioritized_pieces, new_priorites = self.torrent.set_prioritize_first_last(
            True)
        priorities = handle.piece_priorities()
        non_prioritized_pieces = list(range(len(priorities)))

        # The prioritized indexes are the same as we expect
        self.assertEquals(prioritized_pieces, prioritized_piece_indexes)

        # Test the priority of the prioritized pieces
        for first, last in prioritized_pieces:
            for i in range(first, last):
                if i in non_prioritized_pieces:
                    non_prioritized_pieces.remove(i)
                self.assertEquals(priorities[i], 7)

        # Test the priority of all the non-prioritized pieces
        for i in non_prioritized_pieces:
            self.assertEquals(priorities[i], 1)

        # The length of the list of new priorites is the same as the original
        self.assertEquals(len(priorities_original), len(new_priorites))

        #self.print_priority_list(priorities)

    def test_set_prioritize_first_last_false(self):
        atp = self.get_torrent_atp("dir_with_6_files.torrent")
        handle = self.session.add_torrent(atp)
        self.torrent = Torrent(handle, {})
        # First set some pieces prioritized
        self.torrent.set_prioritize_first_last(True)
        # Reset pirorities
        self.torrent.set_prioritize_first_last(False)
        priorities = handle.piece_priorities()

        # Test the priority of the prioritized pieces
        for i in priorities:
            self.assertEquals(priorities[i], 1)
Example #2
0
class TorrentTestCase(unittest.TestCase):

    def setup_config(self):
        global config_setup
        config_setup = True
        config_dir = common.set_tmp_config_dir()
        core_config = deluge.config.Config("core.conf", defaults=deluge.core.preferencesmanager.DEFAULT_PREFS, config_dir=config_dir)
        core_config.save()

    def setUp(self):
        self.setup_config()
        global rpcserver
        global core
        rpcserver = RPCServer(listen=False)
        core = Core()
        self.session = lt.session()
        self.torrent = None
        return component.start()

    def tearDown(self):
        if self.torrent:
            self.torrent.prev_status_cleanup_loop.stop()

        def on_shutdown(result):
            component._ComponentRegistry.components = {}
        return component.shutdown().addCallback(on_shutdown)

    def print_priority_list(self, priorities):
        tmp = ''
        for i, p in enumerate(priorities):
            if i % 100 == 0:
                print tmp
                tmp = ''
            tmp += "%s" % p
        print tmp

    def get_torrent_atp(self, filename):
        filename = os.path.join(os.path.dirname(__file__), filename)
        e = lt.bdecode(open(filename, 'rb').read())
        info = lt.torrent_info(e)
        atp = {"ti": info}
        atp["save_path"] = os.getcwd()
        atp["storage_mode"] = lt.storage_mode_t.storage_mode_sparse
        atp["add_paused"] = False
        atp["auto_managed"] = True
        atp["duplicate_is_error"] = True
        return atp

    def test_set_prioritize_first_last(self):
        piece_indexes = [(0,1), (0,1), (0,1), (0,1), (0,2), (50,52),
                         (51,53), (110,112), (111,114), (200,203),
                         (202,203), (212,213), (212,218), (457,463)]
        self.run_test_set_prioritize_first_last("dir_with_6_files.torrent", piece_indexes)

    def run_test_set_prioritize_first_last(self, torrent_file, prioritized_piece_indexes):
        atp = self.get_torrent_atp(torrent_file)
        handle = self.session.add_torrent(atp)

        self.torrent = Torrent(handle, {})
        priorities_original = handle.piece_priorities()
        prioritized_pieces, new_priorites = self.torrent.set_prioritize_first_last(True)
        priorities = handle.piece_priorities()
        non_prioritized_pieces = list(range(len(priorities)))

        # The prioritized indexes are the same as we expect
        self.assertEquals(prioritized_pieces, prioritized_piece_indexes)

        # Test the priority of the prioritized pieces
        for first, last in prioritized_pieces:
            for i in range(first, last):
                if i in non_prioritized_pieces:
                    non_prioritized_pieces.remove(i)
                self.assertEquals(priorities[i], 7)

        # Test the priority of all the non-prioritized pieces
        for i in non_prioritized_pieces:
            self.assertEquals(priorities[i], 1)

        # The length of the list of new priorites is the same as the original
        self.assertEquals(len(priorities_original), len(new_priorites))

        #self.print_priority_list(priorities)

    def test_set_prioritize_first_last_false(self):
        atp = self.get_torrent_atp("dir_with_6_files.torrent")
        handle = self.session.add_torrent(atp)
        self.torrent = Torrent(handle, {})
        # First set some pieces prioritized
        self.torrent.set_prioritize_first_last(True)
        # Reset pirorities
        self.torrent.set_prioritize_first_last(False)
        priorities = handle.piece_priorities()

        # Test the priority of the prioritized pieces
        for i in priorities:
            self.assertEquals(priorities[i], 1)