示例#1
0
    def test_reopen(self):
        bt = self.test_seek()
        bt.close()
        size = TEST_FILE_SIZE

        def no(a, b):
            raise Exception('Should not be called!')

        bt = HTFile(self.tname, self.base, size, 512, no)
        buf = StringIO()
        c = bt.create_cursor()
        c.seek(555)
        while True:
            sz = 1024
            res = c.read(sz)
            if res:
                buf.write(res)
            else:
                break
        with open(self.fname, 'rb') as f:
            f.seek(555)
            ref = f.read(size)
        self.assertEqual(len(ref), len(buf.getvalue()))
        self.assertEqual(ref, buf.getvalue())
        c.close()
示例#2
0
    def test_read(self, delay=0.001, piece_size=1024, read_block=2000):
        size = TEST_FILE_SIZE
        client = DummyClient(self.fname, delay)
        bt = HTFile(self.tname, self.base, size, piece_size, client.request)
        client.serve(bt)
        buf = StringIO()
        c = bt.create_cursor()
        with open(self.fname, 'rb') as inf:
            ofs = 0
            while True:
                sz = read_block
                res = c.read(sz)
                inf.seek(ofs)

                if res:
                    ch = inf.read(len(res))

                    self.assertEqual(len(res), len(ch))
                    self.assertEqual(res, ch, msg="Unequal ot ofs %d" % ofs)
                    ofs += len(ch)

                    buf.write(res)
                else:
                    break
        with open(self.fname, 'rb') as f:
            #f.seek(1 * piece_size + 700)
            ref = f.read(size)
        self.assertTrue(bt.is_complete)
        self.assertEqual(bt.downloaded, size)
        self.assertEqual(len(ref), len(buf.getvalue()))
        self.assertEqual(ref, buf.getvalue())
        c.close()
        bt.close()
        bt.remove()
        self.assertTrue(not os.path.exists(bt.full_path))
 def test_seek_end(self):
     size=TEST_FILE_SIZE
     
     client=DummyClient(self.fname)
     bt = HTFile(self.fname, './', size, 1024, client.request)
     self.assertEqual(bt.last_piece, 14)
     client.serve(bt)
     buf=StringIO()
     c=bt.create_cursor()
     c.seek(size-64)
     while True:
         sz=8
         res=c.read(sz)
         if res:
             buf.write(res)
         else:
             break
     with open(self.fname, 'rb') as f:
         f.seek(size-64)
         ref=f.read(64)
     self.assertTrue(not bt.is_complete)
     self.assertEqual(bt.downloaded, 1024)
     self.assertEqual(len(ref), len(buf.getvalue()))
     self.assertEqual(ref, buf.getvalue())
     c.close()
示例#4
0
    def test(self):
        f = DummyFile(fname)
        piece_size = 1024
        c = HTTPLoader(URL, 0)
        c.init()
        first = c.load_piece(0, piece_size)
        self.assertEqual(len(first.data), piece_size)
        self.assertEqual(first.piece, 0)
        self.assertEqual(first.type, 'video/x-msvideo')
        self.assertEqual(first.total_size, f.size)

        piece_size = 2048 * 1024
        last_piece = f.size // piece_size

        buf = StringIO()
        tmp_file = tempfile.mktemp()
        base, tmp_file = os.path.split(tmp_file)
        htfile = HTFile(tmp_file, base, f.size, piece_size,
                        lambda a, b: self.fail('Should not need prioritize'))
        for piece in xrange(last_piece + 1):
            print "Piece %d" % piece
            p = c.load_piece(piece, piece_size)
            self.assertTrue(p.data)
            if piece != last_piece:
                self.assertEqual(len(p.data), piece_size)
            if piece == last_piece:
                self.assertEqual(len(p.data), f.size % piece_size)

            buf.write(p.data)
            htfile.update_piece(piece, p.data)

        data = buf.getvalue()
        with f.create_cursor() as reader:
            ref = reader.read()

        self.assertEqual(data, ref, "Diffrent")

        buf = StringIO()
        with htfile.create_cursor() as reader:
            while True:
                d = reader.read()
                if not d:
                    break
                buf.write(d)
        data2 = buf.getvalue()
        self.assertEqual(len(data2), len(ref))
        self.assertEqual(data2, ref, "Different")
示例#5
0
    def test_seek2(self):
        size = TEST_FILE_SIZE

        client = DummyClient(self.fname)
        bt = HTFile(self.tname, self.base, size, 768, client.request)
        client.serve(bt)
        c = bt.create_cursor()
        c.seek(555)
        buf = StringIO()
        while True:
            sz = 1024
            res = c.read(sz)
            if res:
                buf.write(res)
            else:
                break
        with open(self.fname, 'rb') as f:
            f.seek(555)
            ref = f.read(size)
        self.assertEqual(len(ref), len(buf.getvalue()))
        self.assertEqual(ref, buf.getvalue())

        buf = StringIO()
        c.seek(10000)
        while True:
            sz = 512
            res = c.read(sz)
            if res:
                buf.write(res)
            else:
                break
        with open(self.fname, 'rb') as f:
            f.seek(10000)
            ref = f.read(size)
        self.assertEqual(len(ref), len(buf.getvalue()))
        self.assertEqual(ref, buf.getvalue())

        with open(self.fname, 'rb') as f:
            for _i in xrange(10):
                seek = random.randint(0, size)
                c.seek(seek)
                res = c.read(100)
                f.seek(seek)
                ref = f.read(len(res))
                self.assertTrue(res, ref)

        c.close()
示例#6
0
    def test(self):
        f = DummyFile(fname)
        piece_size = 1024
        c = HTTPLoader(URL, 0)
        c.init()
        first = c.load_piece(0, piece_size)
        self.assertEqual(len(first.data), piece_size)
        self.assertEqual(first.piece, 0)
        self.assertEqual(first.type, 'video/x-msvideo')
        self.assertEqual(first.total_size, f.size)

        piece_size = 2048 * 1024 / 2
        last_piece = f.size // piece_size

        tmp_file = tempfile.mktemp()
        base, tmp_file = os.path.split(tmp_file)
        htfile = HTFile(tmp_file, base, f.size, piece_size,
                        lambda a, b: self.fail('Should not need prioritize'))
        pool = Pool(piece_size, [c],
                    htfile.update_piece,
                    speed_limit=MyResolver.SPEED_LIMIT)

        def gen_loader(url, i):
            return HTTPLoader(url, i)

        for i in xrange(1, 3):
            pool.add_worker_async(i, gen_loader, (URL, i))
        for i in xrange(last_piece + 1):
            pool.add_piece(i, 10 - i)
        while not htfile.is_complete:
            time.sleep(1)
            print htfile.pieces

        with f.create_cursor() as reader:
            ref = reader.read()

        buf = StringIO()
        with htfile.create_cursor() as reader:
            while True:
                d = reader.read()
                if not d:
                    break
                buf.write(d)
        data2 = buf.getvalue()
        self.assertEqual(len(data2), len(ref))
        self.assertEqual(data2, ref, "Different")
示例#7
0
    def test_clone(self, close_first=False):
        size = TEST_FILE_SIZE

        client = DummyClient(self.fname)
        bt = HTFile(self.tname, self.base, size, 512, client.request)
        client.serve(bt)
        c = bt.create_cursor()
        c.seek(5000)
        c.read(100)
        sleep(0.1)
        self.assertTrue(all(c._cache._cache))
        if close_first:
            c.close()
        c2 = bt.create_cursor(offset=5000)
        self.assertTrue(all(c2._cache._cache))

        def no(*args):
            raise Exception('Should not be called')

        client.request = no
        c2.seek(5000)
        c2.read(100)
示例#8
0
    def test_seek(self):
        size = TEST_FILE_SIZE

        client = DummyClient(self.fname)
        bt = HTFile(self.tname, self.base, size, 512, client.request)
        client.serve(bt)
        buf = StringIO()
        c = bt.create_cursor()
        c.seek(555)
        while True:
            sz = 1024
            res = c.read(sz)
            if res:
                buf.write(res)
            else:
                break
        with open(self.fname, 'rb') as f:
            f.seek(555)
            ref = f.read(size)
        self.assertEqual(len(ref), len(buf.getvalue()))
        self.assertEqual(ref, buf.getvalue())
        c.close()
        return bt