Testcase for unittesting multi-source downloading of BDownloader — bdownload 0.1.3 documentation

# Testcase for unittesting multi-source downloading of `BDownloader`

Download: `test_multisource_download.py`

    # -*- coding: utf-8 -*-
    from __future__ import unicode_literals

    import unittest
    import tempfile
    import os
    import hashlib
    from shutil import rmtree

    from bdownload import BDownloader

    # Mixed use of two forms of TAB to separate URLs: 'invisible' Tab character "	" or escape sequence "\t"
    FILES = [
                {
                    "file": "gimp-2.8.22-1.el7.x86_64.rpm",
                    "url": "https://mirror.umd.edu/centos/7/os/x86_64/Packages/gimp-2.8.22-1.el7.x86_64.rpm	"
                           "https://mirrors.mit.edu/centos/7/os/x86_64/Packages/gimp-2.8.22-1.el7.x86_64.rpm\t"
                           "https://mirror.arizona.edu/centos/7/os/x86_64/Packages/gimp-2.8.22-1.el7.x86_64.rpm",
                    "sha1": "520282f3de34875addb8ad05b7d57f98df6cb64f"
                },
                {
                    "file": "valgrind-3.15.0-11.el7.x86_64.rpm",
                    "url": "https://mirrors.163.com/centos/7/os/x86_64/Packages/valgrind-3.15.0-11.el7.x86_64.rpm	"
                           "https://mirrors.tuna.tsinghua.edu.cn/centos/7/os/x86_64/Packages/valgrind-3.15.0-11.el7.x86_64.rpm\t"
                           "https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/valgrind-3.15.0-11.el7.x86_64.rpm",
                    "sha1": "84866f6c637042297eda09cdd4fed35118c4f507"
                },
                {
                    "file": "eclipse_3.8.1.orig.tar.xz",
                    "url": "http://ftp.us.debian.org/debian/pool/main/e/eclipse/eclipse_3.8.1.orig.tar.xz	"
                           "http://debian-archive.trafficmanager.net/debian/pool/main/e/eclipse/eclipse_3.8.1.orig.tar.xz\t"
                           "http://ftp.uk.debian.org/debian/pool/main/e/eclipse/eclipse_3.8.1.orig.tar.xz",
                    "sha1": "9b8bb069eea91ac7f1b7a3295803056e50e31fa1"
                }
            ]

    class TestMultiSourceDownload(unittest.TestCase):
        @classmethod
        def setUpClass(cls):
            cls.tmp_dir = tempfile.mkdtemp(prefix='bdl-')

            cls.files = FILES
            for f in cls.files:
                f['file'] = os.path.normpath(os.path.join(cls.tmp_dir, 'röckshark/高昌/中/南海观音/c-hyphen-key/后海/zhangminguo', f['file']))

        @classmethod
        def tearDownClass(cls):
            rmtree(cls.tmp_dir)

        def test_bdownloader_download(self):
            fi = self.files[-1]
            file_path = fi['file']
            file_url = fi['url']
            file_sha1_exp = fi['sha1']

            with BDownloader(max_workers=20, progress='bar') as downloader:
                downloader.download(file_path, file_url)
                downloader.wait_for_all()

            hashf = hashlib.sha1()
            with open(file_path, mode='rb') as f:
                hashf.update(f.read())
            file_sha1 = hashf.hexdigest()

            self.assertEqual(file_sha1_exp, file_sha1)

        def test_bdownloader_downloads(self):
            fs = self.files[:-1]
            file_urls = [(f["file"], f["url"]) for f in fs]

            with BDownloader(max_workers=20, progress='bar') as downloader:
                downloader.downloads(file_urls)
                downloader.wait_for_all()

            for f in fs:
                hashf = hashlib.sha1()
                with open(f["file"], mode='rb') as fd:
                    hashf.update(fd.read())
                file_sha1 = hashf.hexdigest()

                self.assertEqual(f["sha1"], file_sha1)

    if __name__ == '__main__':
        unittest.main()