resume.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. var fs = require('fs')
  2. var http = require('http')
  3. var nugget = require('../')
  4. var path = require('path')
  5. var test = require('tape')
  6. var data = new Buffer('hello everybody I am the data')
  7. var testServer = http.createServer(function (req, res) {
  8. if (!req.headers['range']) {
  9. res.setHeader('content-length', data.length)
  10. res.setHeader('accept-ranges', 'bytes')
  11. res.end(data)
  12. } else {
  13. var range = req.headers['range'].split('=').pop().split('-').map(function (s) {
  14. return parseInt(s, 10)
  15. })
  16. res.setHeader('content-length', range[1] - range[0])
  17. res.setHeader('content-range', range[0] + '-' + range[1] + '/' + data.length)
  18. res.end(data.slice(range[0], range[1]))
  19. }
  20. })
  21. var target = path.join(__dirname, 'foobar.html')
  22. if (fs.existsSync(target)) fs.unlinkSync(target)
  23. fs.writeFileSync(target, data.slice(0, 10))
  24. testServer.listen(0, function () {
  25. var port = this.address().port
  26. test('fetches rest of file', function (t) {
  27. nugget('http://localhost:' + port + '/foobar.html', {dir: __dirname, resume: true, quiet: true}, function (err) {
  28. if (err) t.ifErr(err)
  29. t.ok(fs.existsSync(target), 'downloaded file')
  30. t.equal(fs.statSync(target).size, data.length, 'file is complete')
  31. if (fs.existsSync(target)) fs.unlinkSync(target)
  32. t.end()
  33. testServer.close()
  34. })
  35. })
  36. })