123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- /*
- huge.tst - Huge get file
- */
- const HTTP = tget('TM_HTTP') || "127.0.0.1:8080"
- const TIMEOUT = 10000
- const HUGE= "../web/huge.txt"
- var SIZE = 5 * 1024 * 1024 * 1024
- let http: Http = new Http
- if (tdepth() >= 5) {
- /*
- Create test file
- */
- if (!Path(HUGE).exists || Path(HUGE).size < SIZE) {
- App.log.write("\n [Generate] Huge 5GB test file \"" + HUGE + "\" ...")
- let data = new ByteArray
- for (i in 1024) {
- data.write("%05d 0123456789012345678901234567890123456789012345678", i)
- }
- let f = File(HUGE, "w")
- while (Path(HUGE).size < SIZE) {
- f.write(data)
- }
- f.close()
- App.log.write("\n [Test] GET \"" + HUGE + "\" ...")
- }
- SIZE = Path(HUGE).size
- /*
- Test Http get for a huge file
- */
- let total, count, complete
- http.async = true
- http.setLimits({receive: 10 * 1024 * 1024 * 1024})
- var buf = new ByteArray
- http.on("readable", function (event, http) {
- buf.flush()
- count = http.read(buf, -1)
- total += count
- // printf("Read %d total %5.2f %%\n", count, total / SIZE * 100.0)
- })
- http.on("close", function (event, http) {
- complete = true
- })
- http.get(HTTP + "/huge.txt")
- let mark = new Date
- http.wait(-1)
- ttrue(complete)
- ttrue(total == SIZE)
- ttrue(http.status == 200)
- http.close()
- /*
- // Get first 5 bytes
- http.setHeader("Range", "bytes=0-4")
- http.get(HTTP + "/big.txt")
- ttrue(http.status == 206)
- ttrue(http.response == "01234")
- http.close()
- // Get last 5 bytes
- http.setHeader("Range", "bytes=-5")
- http.get(HTTP + "/big.txt")
- ttrue(http.status == 206)
- ttrue(http.response.trim() == "MENT")
- http.close()
- // Get from specific position till the end
- http.setHeader("Range", "bytes=117000-")
- http.get(HTTP + "/big.txt")
- ttrue(http.status == 206)
- ttrue(http.response.trim() == "END OF DOCUMENT")
- http.close()
- // Multiple ranges
- http.setHeader("Range", "bytes=0-5,25-30,-5")
- http.get(HTTP + "/big.txt")
- ttrue(http.status == 206)
- ttrue(http.response.contains("Content-Range: bytes 0-5/117016"))
- ttrue(http.response.contains("Content-Range: bytes 25-30/117016"))
- ttrue(http.response.contains("Content-Range: bytes 117011-117015/117016"))
- ttrue(http.response.contains("012345"))
- ttrue(http.response.contains("567890"))
- ttrue(http.response.contains("MENT"))
- http.close()
- */
- } else {
- tskip("Runs at depth 6")
- }
|