post-binary.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. var Buffer = require('buffer').Buffer
  2. var fs = require('fs')
  3. var test = require('tape')
  4. var UAParser = require('ua-parser-js')
  5. var http = require('../..')
  6. var browser = (new UAParser()).setUA(navigator.userAgent).getBrowser()
  7. var browserName = browser.name
  8. var browserVersion = browser.major
  9. // Binary request bodies don't work in a bunch of browsers
  10. var skipVerification = ((browserName === 'Opera' && browserVersion <= 11) ||
  11. (browserName === 'IE' && browserVersion <= 10) ||
  12. (browserName === 'Safari' && browserVersion <= 5) ||
  13. (browserName === 'WebKit' && browserVersion <= 534) || // Old mobile safari
  14. (browserName === 'Android Browser' && browserVersion <= 4))
  15. var reference = fs.readFileSync(__dirname + '/../server/static/browserify.png')
  16. test('post binary', function (t) {
  17. var req = http.request({
  18. path: '/echo',
  19. method: 'POST'
  20. }, function (res) {
  21. var buffers = []
  22. res.on('end', function () {
  23. if (skipVerification)
  24. t.skip('binary data not preserved on this browser')
  25. else
  26. t.ok(reference.equals(Buffer.concat(buffers)), 'echoed contents match')
  27. t.end()
  28. })
  29. res.on('data', function (data) {
  30. buffers.push(data)
  31. })
  32. })
  33. req.write(reference)
  34. req.end()
  35. })