def test_read_alligned(self, delay=0.001, piece_size=1024, read_block=2000):
     size=TEST_FILE_SIZE
     client=DummyClient(self.fname, delay)
     bt = HTFile(self.fname, './', size, piece_size, client.request)
     self.assertEqual(bt.last_piece,14)
     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()
Example #2
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()
 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()
Example #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")
Example #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()
Example #6
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()
Example #7
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")
Example #8
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")
Example #9
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)
Example #10
0
 def test(self):
     f=DummyFile(fname)
     piece_size=1024
     c=HTTPLoader(URL, 0)
     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")
Example #11
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)
Example #12
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
Example #13
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()
Example #14
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