mirror of
https://github.com/emikulic/darkhttpd.git
synced 2023-08-10 21:13:08 +03:00
Test large (>2G, >4G) files.
This commit is contained in:
parent
34ad70cc45
commit
bfd58235c5
@ -72,6 +72,16 @@ class TestHelper(unittest.TestCase):
|
||||
"You requested an invalid URL: %s\n"%path,
|
||||
'Generated by darkhttpd')
|
||||
|
||||
def drive_range(self, range_in, range_out, len_out, data_out,
|
||||
status_out = "206 Partial Content"):
|
||||
resp = Conn().get(self.url, req_hdrs = {"Range": "bytes="+range_in})
|
||||
status, hdrs, body = parse(resp)
|
||||
self.assertContains(status, status_out)
|
||||
self.assertEquals(hdrs["Accept-Ranges"], "bytes")
|
||||
self.assertEquals(hdrs["Content-Range"], "bytes "+range_out)
|
||||
self.assertEquals(hdrs["Content-Length"], str(len_out))
|
||||
self.assertEquals(body, data_out)
|
||||
|
||||
class TestDirList(TestHelper):
|
||||
def setUp(self):
|
||||
self.fn = WWWROOT+"/escape#this"
|
||||
@ -209,16 +219,6 @@ class TestFileGet(TestHelper):
|
||||
self.assertFalse(hdrs.has_key("Content-Length"))
|
||||
self.assertFalse(hdrs.has_key("Content-Type"))
|
||||
|
||||
def drive_range(self, range_in, range_out, len_out, data_out,
|
||||
status_out = "206 Partial Content"):
|
||||
resp = Conn().get(self.url, req_hdrs = {"Range": "bytes="+range_in})
|
||||
status, hdrs, body = parse(resp)
|
||||
self.assertContains(status, status_out)
|
||||
self.assertEquals(hdrs["Accept-Ranges"], "bytes")
|
||||
self.assertEquals(hdrs["Content-Range"], "bytes "+range_out)
|
||||
self.assertEquals(hdrs["Content-Length"], str(len_out))
|
||||
self.assertEquals(body, data_out)
|
||||
|
||||
def test_range_single(self):
|
||||
self.drive_range("5-5", "5-5/%d" % self.datalen,
|
||||
1, self.data[5])
|
||||
@ -274,6 +274,69 @@ class TestFileGet(TestHelper):
|
||||
status, hdrs, body = parse(resp)
|
||||
self.assertContains(status, "416 Requested Range Not Satisfiable")
|
||||
|
||||
def make_large_file(fn, boundary, data):
|
||||
big = 1<<33
|
||||
assert big == 8589934592L
|
||||
assert str(big) == "8589934592"
|
||||
|
||||
f = open(fn, "w")
|
||||
pos = boundary - len(data)/2
|
||||
f.seek(pos)
|
||||
assert f.tell() == pos
|
||||
assert f.tell() < boundary
|
||||
f.write(data)
|
||||
filesize = f.tell()
|
||||
assert filesize == pos + len(data)
|
||||
assert filesize > boundary
|
||||
f.close()
|
||||
return (pos, filesize)
|
||||
|
||||
class TestLargeFile2G(TestHelper):
|
||||
BOUNDARY = 1<<31
|
||||
|
||||
def setUp(self):
|
||||
self.datalen = 4096
|
||||
self.data = "".join(
|
||||
[chr(random.randint(0,255)) for _ in xrange(self.datalen)])
|
||||
self.url = "/big.jpeg"
|
||||
self.fn = WWWROOT + self.url
|
||||
self.filepos, self.filesize = make_large_file(
|
||||
self.fn, self.BOUNDARY, self.data)
|
||||
|
||||
def tearDown(self):
|
||||
os.unlink(self.fn)
|
||||
|
||||
def drive_start(self, ofs):
|
||||
req_start = self.BOUNDARY + ofs
|
||||
req_end = req_start + self.datalen/4 - 1
|
||||
range_in = "%d-%d"%(req_start, req_end)
|
||||
range_out = "%s/%d"%(range_in, self.filesize)
|
||||
|
||||
data_start = req_start - self.filepos
|
||||
data_end = data_start + self.datalen/4
|
||||
|
||||
self.drive_range(range_in, range_out, self.datalen/4,
|
||||
self.data[data_start:data_end])
|
||||
|
||||
def test_largefile_head(self):
|
||||
resp = Conn().get(self.url, method="HEAD")
|
||||
status, hdrs, body = parse(resp)
|
||||
self.assertContains(status, "200 OK")
|
||||
self.assertEquals(hdrs["Accept-Ranges"], "bytes")
|
||||
self.assertEquals(hdrs["Content-Length"], str(self.filesize))
|
||||
self.assertEquals(hdrs["Content-Type"], "image/jpeg")
|
||||
|
||||
def test_largefile__3(self): self.drive_start(-3)
|
||||
def test_largefile__2(self): self.drive_start(-2)
|
||||
def test_largefile__1(self): self.drive_start(-1)
|
||||
def test_largefile_0(self): self.drive_start(0)
|
||||
def test_largefile_1(self): self.drive_start(1)
|
||||
def test_largefile_2(self): self.drive_start(2)
|
||||
def test_largefile_3(self): self.drive_start(3)
|
||||
|
||||
class TestLargeFile4G(TestLargeFile2G):
|
||||
BOUNDARY = 1<<32
|
||||
|
||||
if __name__ == '__main__':
|
||||
setUpModule()
|
||||
unittest.main()
|
||||
|
Loading…
Reference in New Issue
Block a user