diff options
author | 2020-11-16 00:10:28 +0100 | |
---|---|---|
committer | 2020-11-16 00:10:28 +0100 | |
commit | e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d (patch) | |
tree | 55713f725f77b44ebfec86e4eec3ce33e71458ca /node_modules/stream-http/test | |
download | website_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.tar.gz website_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.tar.bz2 website_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.zip |
api, login, auth
Diffstat (limited to 'node_modules/stream-http/test')
22 files changed, 985 insertions, 0 deletions
diff --git a/node_modules/stream-http/test/browser/abort.js b/node_modules/stream-http/test/browser/abort.js new file mode 100644 index 0000000..2cf43e9 --- /dev/null +++ b/node_modules/stream-http/test/browser/abort.js @@ -0,0 +1,55 @@ +var Buffer = require('buffer').Buffer +var fs = require('fs') +var test = require('tape') + +var http = require('../..') + +test('abort before response', function (t) { + var req = http.get('/basic.txt', function (res) { + t.fail('unexpected response') + }) + req.abort() + t.end() +}) + +test('abort on response', function (t) { + var req = http.get('/basic.txt', function (res) { + req.abort() + t.end() + + res.on('end', function () { + t.fail('unexpected end') + }) + + res.on('data', function (data) { + t.fail('unexpected data') + }) + }) +}) + +test('abort on data', function (t) { + var req = http.get('/browserify.png?copies=5', function (res) { + var firstData = true + var failOnData = false + + res.on('end', function () { + t.fail('unexpected end') + }) + + res.on('data', function (data) { + if (failOnData) + t.fail('unexpected data') + else if (firstData) { + firstData = false + req.abort() + t.end() + process.nextTick(function () { + // Wait for any data that may have been queued + // in the stream before considering data events + // as errors + failOnData = true + }) + } + }) + }) +})
\ No newline at end of file diff --git a/node_modules/stream-http/test/browser/auth.js b/node_modules/stream-http/test/browser/auth.js new file mode 100644 index 0000000..5c73115 --- /dev/null +++ b/node_modules/stream-http/test/browser/auth.js @@ -0,0 +1,22 @@ +var Buffer = require('buffer').Buffer +var test = require('tape') + +var http = require('../..') + +test('authentication', function (t) { + http.get({ + path: '/auth', + auth: 'TestUser:trustno1' + }, function (res) { + var buffers = [] + + res.on('end', function () { + t.ok(new Buffer('You\'re in!').equals(Buffer.concat(buffers)), 'authentication succeeded') + t.end() + }) + + res.on('data', function (data) { + buffers.push(data) + }) + }) +})
\ No newline at end of file diff --git a/node_modules/stream-http/test/browser/binary-streaming.js b/node_modules/stream-http/test/browser/binary-streaming.js new file mode 100644 index 0000000..d1221df --- /dev/null +++ b/node_modules/stream-http/test/browser/binary-streaming.js @@ -0,0 +1,71 @@ +var Buffer = require('buffer').Buffer +var fs = require('fs') +var test = require('tape') +var UAParser = require('ua-parser-js') + +var http = require('../..') + +var browser = (new UAParser()).setUA(navigator.userAgent).getBrowser() +var browserName = browser.name +var browserVersion = browser.major +// Binary streaming doesn't work in IE10 or below +var skipStreamingCheck = (browserName === 'IE' && browserVersion <= 10) + +// Binary data gets corrupted in IE8 or below +var skipVerification = (browserName === 'IE' && browserVersion <= 8) + +// IE8 tends to throw up modal dialogs complaining about scripts running too long +// Since streaming doesn't actually work there anyway, just use one copy +var COPIES = skipVerification ? 1 : 20 +var MIN_PIECES = 2 + +var referenceOnce = fs.readFileSync(__dirname + '/../server/static/browserify.png') +var reference = new Buffer(referenceOnce.length * COPIES) +for(var i = 0; i < COPIES; i++) { + referenceOnce.copy(reference, referenceOnce.length * i) +} + +test('binary streaming', function (t) { + http.get({ + path: '/browserify.png?copies=' + COPIES, + mode: 'allow-wrong-content-type' + }, function (res) { + var buffers = [] + res.on('end', function () { + if (skipVerification) + t.skip('binary data not preserved on IE <= 8') + else + t.ok(reference.equals(Buffer.concat(buffers)), 'contents match') + + if (skipStreamingCheck) + t.skip('streaming not available on IE <= 8') + else + t.ok(buffers.length >= MIN_PIECES, 'received in multiple parts') + t.end() + }) + + res.on('data', function (data) { + buffers.push(data) + }) + }) +}) + +test('large binary request without streaming', function (t) { + http.get({ + path: '/browserify.png?copies=' + COPIES, + mode: 'default', + }, function (res) { + var buffers = [] + res.on('end', function () { + if (skipVerification) + t.skip('binary data not preserved on IE <= 8') + else + t.ok(reference.equals(Buffer.concat(buffers)), 'contents match') + t.end() + }) + + res.on('data', function (data) { + buffers.push(data) + }) + }) +})
\ No newline at end of file diff --git a/node_modules/stream-http/test/browser/binary.js b/node_modules/stream-http/test/browser/binary.js new file mode 100644 index 0000000..e116b8d --- /dev/null +++ b/node_modules/stream-http/test/browser/binary.js @@ -0,0 +1,32 @@ +var Buffer = require('buffer').Buffer +var fs = require('fs') +var test = require('tape') +var UAParser = require('ua-parser-js') + +var http = require('../..') + +var browser = (new UAParser()).setUA(navigator.userAgent).getBrowser() +var browserName = browser.name +var browserVersion = browser.major +// Binary data gets corrupted in IE8 or below +var skipVerification = (browserName === 'IE' && browserVersion <= 8) + +var reference = fs.readFileSync(__dirname + '/../server/static/browserify.png') + +test('binary download', function (t) { + http.get('/browserify.png', function (res) { + var buffers = [] + + res.on('end', function () { + if (skipVerification) + t.skip('binary data not preserved on IE <= 8') + else + t.ok(reference.equals(Buffer.concat(buffers)), 'contents match') + t.end() + }) + + res.on('data', function (data) { + buffers.push(data) + }) + }) +})
\ No newline at end of file diff --git a/node_modules/stream-http/test/browser/body-empty.js b/node_modules/stream-http/test/browser/body-empty.js new file mode 100644 index 0000000..8e99bb7 --- /dev/null +++ b/node_modules/stream-http/test/browser/body-empty.js @@ -0,0 +1,29 @@ +var Buffer = require('buffer').Buffer +var fs = require('fs') +var test = require('tape') + +var http = require('../..') + +var reference = fs.readFileSync(__dirname + '/../server/static/basic.txt') + +test('get body empty', function (t) { + var req = http.request({ + path: '/verifyEmpty', + method: 'GET' + }, function (res) { + var buffers = [] + + res.on('end', function () { + console.log(Buffer.concat(buffers).toString('utf8')) + t.ok(Buffer.from('empty').equals(Buffer.concat(buffers)), 'response body indicates request body was empty') + t.end() + }) + + res.on('data', function (data) { + buffers.push(data) + }) + }) + + req.write(reference) + req.end() +}) diff --git a/node_modules/stream-http/test/browser/cookie.js b/node_modules/stream-http/test/browser/cookie.js new file mode 100644 index 0000000..114c687 --- /dev/null +++ b/node_modules/stream-http/test/browser/cookie.js @@ -0,0 +1,25 @@ +var Buffer = require('buffer').Buffer +var test = require('tape') + +var http = require('../..') + +test('cookie', function (t) { + var cookie = 'hello=world' + window.document.cookie = cookie + + http.get({ + path: '/cookie', + withCredentials: false + }, function (res) { + var buffers = [] + + res.on('end', function () { + t.ok(new Buffer(cookie).equals(Buffer.concat(buffers)), 'hello cookie echoed') + t.end() + }) + + res.on('data', function (data) { + buffers.push(data) + }) + }) +}) diff --git a/node_modules/stream-http/test/browser/disable-fetch.js b/node_modules/stream-http/test/browser/disable-fetch.js new file mode 100644 index 0000000..b50aa71 --- /dev/null +++ b/node_modules/stream-http/test/browser/disable-fetch.js @@ -0,0 +1,37 @@ +var Buffer = require('buffer').Buffer +var test = require('tape') + +var http = require('../..') + +test('disable fetch', function (t) { + var originalFetch + if (typeof fetch === 'function') { + originalFetch = fetch + } + + var fetchCalled = false + fetch = function (input, options) { + fetchCalled = true + if (originalFetch) { + return originalFetch(input, options) + } + } + + http.get({ + path: '/browserify.png', + mode: 'disable-fetch' + }, function (res) { + t.ok(!fetchCalled, 'fetch was not called') + + if (originalFetch) { + fetch = originalFetch + } + + res.on('end', function () { + t.ok(res.headers['content-type'] === 'image/png', 'content-type was set correctly') + t.end() + }) + + res.on('data', function () {}) + }) +}) diff --git a/node_modules/stream-http/test/browser/error.js.disabled b/node_modules/stream-http/test/browser/error.js.disabled new file mode 100644 index 0000000..4a328d6 --- /dev/null +++ b/node_modules/stream-http/test/browser/error.js.disabled @@ -0,0 +1,12 @@ +var Buffer = require('buffer').Buffer +var test = require('tape') + +var http = require('../..') + +test('error handling', function (t) { + var req = http.get('https://0.0.0.0:0/fail.txt') + req.on('error', function (err) { + t.ok(err && ('message' in err), 'got error') + t.end() + }) +})
\ No newline at end of file diff --git a/node_modules/stream-http/test/browser/headers.js b/node_modules/stream-http/test/browser/headers.js new file mode 100644 index 0000000..9d0c77c --- /dev/null +++ b/node_modules/stream-http/test/browser/headers.js @@ -0,0 +1,116 @@ +var Buffer = require('buffer').Buffer +var fs = require('fs') +var test = require('tape') +var UAParser = require('ua-parser-js') + +var http = require('../..') + +test('headers', function (t) { + http.get({ + path: '/testHeaders?Response-Header=bar&Response-Header-2=BAR2', + headers: { + 'Test-Request-Header': 'foo', + 'Test-Request-Header-2': 'FOO2' + } + }, function (res) { + var rawHeaders = [] + for (var i = 0; i < res.rawHeaders.length; i += 2) { + var lowerKey = res.rawHeaders[i].toLowerCase() + if (lowerKey.indexOf('test-') === 0) + rawHeaders.push(lowerKey, res.rawHeaders[i + 1]) + } + var header1Pos = rawHeaders.indexOf('test-response-header') + t.ok(header1Pos >= 0, 'raw response header 1 present') + t.equal(rawHeaders[header1Pos + 1], 'bar', 'raw response header value 1') + var header2Pos = rawHeaders.indexOf('test-response-header-2') + t.ok(header2Pos >= 0, 'raw response header 2 present') + t.equal(rawHeaders[header2Pos + 1], 'BAR2', 'raw response header value 2') + t.equal(rawHeaders.length, 4, 'correct number of raw headers') + + t.equal(res.headers['test-response-header'], 'bar', 'response header 1') + t.equal(res.headers['test-response-header-2'], 'BAR2', 'response header 2') + + var buffers = [] + + res.on('end', function () { + var body = JSON.parse(Buffer.concat(buffers).toString()) + t.equal(body['test-request-header'], 'foo', 'request header 1') + t.equal(body['test-request-header-2'], 'FOO2', 'request header 2') + t.equal(Object.keys(body).length, 2, 'correct number of request headers') + t.end() + }) + + res.on('data', function (data) { + buffers.push(data) + }) + }) +}) + +test('arrays of headers', function (t) { + http.get({ + path: '/testHeaders?Response-Header=bar&Response-Header=BAR2', + headers: { + 'Test-Request-Header': ['foo', 'FOO2'] + } + }, function (res) { + var rawHeaders = [] + for (var i = 0; i < res.rawHeaders.length; i += 2) { + var lowerKey = res.rawHeaders[i].toLowerCase() + if (lowerKey.indexOf('test-') === 0) + rawHeaders.push(lowerKey, res.rawHeaders[i + 1]) + } + t.equal(rawHeaders[0], 'test-response-header', 'raw response header present') + t.equal(rawHeaders[1], 'bar, BAR2', 'raw response header value') + t.equal(rawHeaders.length, 2, 'correct number of raw headers') + + t.equal(res.headers['test-response-header'], 'bar, BAR2', 'response header') + + var buffers = [] + + res.on('end', function () { + var body = JSON.parse(Buffer.concat(buffers).toString()) + t.equal(body['test-request-header'], 'foo,FOO2', 'request headers') + t.equal(Object.keys(body).length, 1, 'correct number of request headers') + t.end() + }) + + res.on('data', function (data) { + buffers.push(data) + }) + }) +}) + +test('content-type response header', function (t) { + http.get('/testHeaders', function (res) { + t.equal(res.headers['content-type'], 'application/json', 'content-type preserved') + t.end() + }) +}) + +var browser = (new UAParser()).setUA(navigator.userAgent).getBrowser() +var browserName = browser.name +var browserVersion = browser.major +var browserMinorVersion = browser.minor || 0 +// The content-type header is broken when 'prefer-streaming' or 'allow-wrong-content-type' +// is passed in browsers that rely on xhr.overrideMimeType(), namely older chrome, safari 6-10.0, and the stock Android browser +// Note that Safari 10.0 on iOS 10.3 doesn't need to override the mime type, so the content-type is preserved. +var wrongMimeType = ((browserName === 'Chrome' && browserVersion <= 42) || + ((browserName === 'Safari' || browserName === 'Mobile Safari') && browserVersion >= 6 && (browserVersion < 10 || (browserVersion == 10 && browserMinorVersion == 0))) + || (browserName === 'Android Browser')) + +test('content-type response header with forced streaming', function (t) { + http.get({ + path: '/testHeaders', + mode: 'prefer-streaming' + }, function (res) { + if (wrongMimeType) { + // allow both the 'wrong' and correct mime type, since sometimes it's impossible to tell which to expect + // from the browser version alone (e.g. Safari 10.0 on iOS 10.2 vs iOS 10.3) + var contentType = res.headers['content-type'] + var correct = (contentType === 'text/plain; charset=x-user-defined') || (contentType === 'application/json') + t.ok(correct, 'content-type either preserved or overridden') + } else + t.equal(res.headers['content-type'], 'application/json', 'content-type preserved') + t.end() + }) +})
\ No newline at end of file diff --git a/node_modules/stream-http/test/browser/lib/webworker-worker.js b/node_modules/stream-http/test/browser/lib/webworker-worker.js new file mode 100644 index 0000000..c3c8b91 --- /dev/null +++ b/node_modules/stream-http/test/browser/lib/webworker-worker.js @@ -0,0 +1,20 @@ +var Buffer = require('buffer').Buffer + +var http = require('../../..') + +module.exports = function (self) { + self.addEventListener('message', function (ev) { + var url = ev.data + http.get(url, function (res) { + var buffers = [] + + res.on('end', function () { + self.postMessage(Buffer.concat(buffers).buffer) + }) + + res.on('data', function (data) { + buffers.push(data) + }) + }) + }) +}
\ No newline at end of file diff --git a/node_modules/stream-http/test/browser/package.json b/node_modules/stream-http/test/browser/package.json new file mode 100644 index 0000000..f4f7b5e --- /dev/null +++ b/node_modules/stream-http/test/browser/package.json @@ -0,0 +1,5 @@ +{ + "browserify": { + "transform": [ "brfs" ] + } +} diff --git a/node_modules/stream-http/test/browser/post-binary.js b/node_modules/stream-http/test/browser/post-binary.js new file mode 100644 index 0000000..52f3d7e --- /dev/null +++ b/node_modules/stream-http/test/browser/post-binary.js @@ -0,0 +1,41 @@ +var Buffer = require('buffer').Buffer +var fs = require('fs') +var test = require('tape') +var UAParser = require('ua-parser-js') + +var http = require('../..') + +var browser = (new UAParser()).setUA(navigator.userAgent).getBrowser() +var browserName = browser.name +var browserVersion = browser.major +// Binary request bodies don't work in a bunch of browsers +var skipVerification = ((browserName === 'IE' && browserVersion <= 10) || + (browserName === 'Safari' && browserVersion <= 5) || + (browserName === 'WebKit' && browserVersion <= 534) || // Old mobile safari + (browserName === 'Android Browser' && browserVersion <= 4)) + +var reference = fs.readFileSync(__dirname + '/../server/static/browserify.png') + +test('post binary', function (t) { + var req = http.request({ + path: '/echo', + method: 'POST' + }, function (res) { + var buffers = [] + + res.on('end', function () { + if (skipVerification) + t.skip('binary data not preserved on this browser') + else + t.ok(reference.equals(Buffer.concat(buffers)), 'echoed contents match') + t.end() + }) + + res.on('data', function (data) { + buffers.push(data) + }) + }) + + req.write(reference) + req.end() +})
\ No newline at end of file diff --git a/node_modules/stream-http/test/browser/post-text.js b/node_modules/stream-http/test/browser/post-text.js new file mode 100644 index 0000000..1cea8d7 --- /dev/null +++ b/node_modules/stream-http/test/browser/post-text.js @@ -0,0 +1,48 @@ +var Buffer = require('buffer').Buffer +var fs = require('fs') +var test = require('tape') + +var http = require('../..') + +var reference = fs.readFileSync(__dirname + '/../server/static/basic.txt') + +test('post text', function (t) { + var req = http.request({ + path: '/echo', + method: 'POST' + }, function (res) { + var buffers = [] + + res.on('end', function () { + t.ok(reference.equals(Buffer.concat(buffers)), 'echoed contents match') + t.end() + }) + + res.on('data', function (data) { + buffers.push(data) + }) + }) + + req.write(reference) + req.end() +}) + +test('post text with data in end()', function (t) { + var req = http.request({ + path: '/echo', + method: 'POST' + }, function (res) { + var buffers = [] + + res.on('end', function () { + t.ok(reference.equals(Buffer.concat(buffers)), 'echoed contents match') + t.end() + }) + + res.on('data', function (data) { + buffers.push(data) + }) + }) + + req.end(reference) +})
\ No newline at end of file diff --git a/node_modules/stream-http/test/browser/text-streaming.js b/node_modules/stream-http/test/browser/text-streaming.js new file mode 100644 index 0000000..21693af --- /dev/null +++ b/node_modules/stream-http/test/browser/text-streaming.js @@ -0,0 +1,43 @@ +var Buffer = require('buffer').Buffer +var fs = require('fs') +var test = require('tape') +var UAParser = require('ua-parser-js') + +var http = require('../..') + +var browser = (new UAParser()).setUA(navigator.userAgent).getBrowser() +var browserName = browser.name +var browserVersion = browser.major +// Streaming doesn't work in IE9 or below +var skipStreamingCheck = (browserName === 'IE' && browserVersion <= 9) + +var COPIES = 1000 +var MIN_PIECES = 5 + +var referenceOnce = fs.readFileSync(__dirname + '/../server/static/basic.txt') +var reference = new Buffer(referenceOnce.length * COPIES) +for(var i = 0; i < COPIES; i++) { + referenceOnce.copy(reference, referenceOnce.length * i) +} + +test('text streaming', function (t) { + http.get({ + path: '/basic.txt?copies=' + COPIES, + mode: 'prefer-streaming' + }, function (res) { + var buffers = [] + + res.on('end', function () { + if (skipStreamingCheck) + t.skip('streaming not available on IE <= 8') + else + t.ok(buffers.length >= MIN_PIECES, 'received in multiple parts') + t.ok(reference.equals(Buffer.concat(buffers)), 'contents match') + t.end() + }) + + res.on('data', function (data) { + buffers.push(data) + }) + }) +})
\ No newline at end of file diff --git a/node_modules/stream-http/test/browser/text.js b/node_modules/stream-http/test/browser/text.js new file mode 100644 index 0000000..568380c --- /dev/null +++ b/node_modules/stream-http/test/browser/text.js @@ -0,0 +1,43 @@ +var Buffer = require('buffer').Buffer +var fs = require('fs') +var test = require('tape') +var UAParser = require('ua-parser-js') +var url = require('url') + +var http = require('../..') + +var browser = (new UAParser()).setUA(navigator.userAgent).getBrowser() +var browserName = browser.name +var browserVersion = browser.major +// Response urls don't work on many browsers +var skipResponseUrl = ((browserName === 'IE') || + (browserName === 'Edge') || + (browserName === 'Chrome' && browserVersion <= 36) || + (browserName === 'Firefox' && browserVersion <= 31) || + ((browserName === 'Safari' || browserName === 'Mobile Safari') && browserVersion <= 8) || + (browserName === 'WebKit') || // Old mobile safari + (browserName === 'Android Browser' && browserVersion <= 4)) + +var reference = fs.readFileSync(__dirname + '/../server/static/basic.txt') + +test('basic functionality', function (t) { + http.get('/basic.txt', function (res) { + if (!skipResponseUrl) { + var testUrl = url.resolve(global.location.href, '/basic.txt') + // Redirects aren't tested, but presumably only browser bugs + // would cause this to fail only after redirects. + t.equals(res.url, testUrl, 'response url correct') + } + + var buffers = [] + + res.on('end', function () { + t.ok(reference.equals(Buffer.concat(buffers)), 'contents match') + t.end() + }) + + res.on('data', function (data) { + buffers.push(data) + }) + }) +})
\ No newline at end of file diff --git a/node_modules/stream-http/test/browser/timeout.js b/node_modules/stream-http/test/browser/timeout.js new file mode 100644 index 0000000..5e94c48 --- /dev/null +++ b/node_modules/stream-http/test/browser/timeout.js @@ -0,0 +1,43 @@ +var Buffer = require('buffer').Buffer +var fs = require('fs') +var test = require('tape') + +var http = require('../..') + +test('timeout', function (t) { + var req = http.get({ + path: '/browserify.png?copies=5', + requestTimeout: 10 // ms + }, function (res) { + res.on('data', function (data) { + }) + res.on('end', function () { + t.fail('request completed (should have timed out)') + }) + }) + req.on('requestTimeout', function () { + t.pass('got timeout') + t.end() + }) +}) + +// TODO: reenable this if there's a way to make it simultaneously +// fast and reliable +test.skip('no timeout after success', function (t) { + var req = http.get({ + path: '/basic.txt', + requestTimeout: 50000 // ms + }, function (res) { + res.on('data', function (data) { + }) + res.on('end', function () { + t.pass('success') + global.setTimeout(function () { + t.end() + }, 50000) + }) + }) + req.on('requestTimeout', function () { + t.fail('unexpected timeout') + }) +})
\ No newline at end of file diff --git a/node_modules/stream-http/test/browser/webworker.js b/node_modules/stream-http/test/browser/webworker.js new file mode 100644 index 0000000..063706c --- /dev/null +++ b/node_modules/stream-http/test/browser/webworker.js @@ -0,0 +1,31 @@ +var fs = require('fs') +var test = require('tape') +var UAParser = require('ua-parser-js') +var url = require('url') +var work = require('webworkify') + +var browser = (new UAParser()).setUA(navigator.userAgent).getBrowser() +var browserName = browser.name +var browserVersion = browser.major +// Skip browsers with poor or nonexistant WebWorker support +var skip = ((browserName === 'IE' && browserVersion <= 10) || + (browserName === 'Safari' && browserVersion <= 5) || + (browserName === 'WebKit' && browserVersion <= 534) || // Old mobile safari + (browserName === 'Android Browser' && browserVersion <= 4)) + +var reference = fs.readFileSync(__dirname + '/../server/static/browserify.png') + +test('binary download in WebWorker', { + skip: skip +}, function (t) { + // We have to use a global url, since webworkify puts the worker in a Blob, + // which doesn't have a proper location + var testUrl = url.resolve(global.location.href, '/browserify.png') + var worker = work(require('./lib/webworker-worker.js')) + worker.addEventListener('message', function (ev) { + var data = new Buffer(new Uint8Array(ev.data)) + t.ok(reference.equals(data), 'contents match') + t.end() + }) + worker.postMessage(testUrl) +})
\ No newline at end of file diff --git a/node_modules/stream-http/test/node/http-browserify.js b/node_modules/stream-http/test/node/http-browserify.js new file mode 100644 index 0000000..42a718f --- /dev/null +++ b/node_modules/stream-http/test/node/http-browserify.js @@ -0,0 +1,147 @@ +// These tests are taken from http-browserify to ensure compatibility with +// that module +var test = require('tape') +var url = require('url') + +var location = 'http://localhost:8081/foo/123' + +var noop = function() {} +global.location = url.parse(location) +global.XMLHttpRequest = function() { + this.open = noop + this.send = noop + this.withCredentials = false +} + +var moduleName = require.resolve('../../') +delete require.cache[moduleName] +var http = require('../../') + +test('Make sure http object has correct properties', function (t) { + t.ok(http.Agent, 'Agent defined') + t.ok(http.ClientRequest, 'ClientRequest defined') + t.ok(http.ClientRequest.prototype, 'ClientRequest.prototype defined') + t.ok(http.IncomingMessage, 'IncomingMessage defined') + t.ok(http.IncomingMessage.prototype, 'IncomingMessage.prototype defined') + t.ok(http.METHODS, 'METHODS defined') + t.ok(http.STATUS_CODES, 'STATUS_CODES defined') + t.ok(http.get, 'get defined') + t.ok(http.globalAgent, 'globalAgent defined') + t.ok(http.request, 'request defined') + t.end() +}) + +test('Test simple url string', function(t) { + var testUrl = { path: '/api/foo' } + var request = http.get(testUrl, noop) + + var resolved = url.resolve(location, request._opts.url) + t.equal(resolved, 'http://localhost:8081/api/foo', 'Url should be correct') + t.end() + +}) + +test('Test full url object', function(t) { + var testUrl = { + host: "localhost:8081", + hostname: "localhost", + href: "http://localhost:8081/api/foo?bar=baz", + method: "GET", + path: "/api/foo?bar=baz", + pathname: "/api/foo", + port: "8081", + protocol: "http:", + query: "bar=baz", + search: "?bar=baz", + slashes: true + } + + var request = http.get(testUrl, noop) + + var resolved = url.resolve(location, request._opts.url) + t.equal(resolved, 'http://localhost:8081/api/foo?bar=baz', 'Url should be correct') + t.end() +}) + +test('Test alt protocol', function(t) { + var params = { + protocol: "foo:", + hostname: "localhost", + port: "3000", + path: "/bar" + } + + var request = http.get(params, noop) + + var resolved = url.resolve(location, request._opts.url) + t.equal(resolved, 'foo://localhost:3000/bar', 'Url should be correct') + t.end() +}) + +test('Test page with \'file:\' protocol', function (t) { + var params = { + hostname: 'localhost', + port: 3000, + path: '/bar' + } + + var fileLocation = 'file:///home/me/stuff/index.html' + + var normalLocation = global.location + global.location = url.parse(fileLocation) // Temporarily change the location + var request = http.get(params, noop) + global.location = normalLocation // Reset the location + + var resolved = url.resolve(fileLocation, request._opts.url) + t.equal(resolved, 'http://localhost:3000/bar', 'Url should be correct') + t.end() +}) + +test('Test string as parameters', function(t) { + var testUrl = '/api/foo' + var request = http.get(testUrl, noop) + + var resolved = url.resolve(location, request._opts.url) + t.equal(resolved, 'http://localhost:8081/api/foo', 'Url should be correct') + t.end() +}) + +test('Test withCredentials param', function(t) { + var url = '/api/foo' + + var request = http.get({ url: url, withCredentials: false }, noop) + t.equal(request._xhr.withCredentials, false, 'xhr.withCredentials should be false') + + var request = http.get({ url: url, withCredentials: true }, noop) + t.equal(request._xhr.withCredentials, true, 'xhr.withCredentials should be true') + + var request = http.get({ url: url }, noop) + t.equal(request._xhr.withCredentials, false, 'xhr.withCredentials should be false') + + t.end() +}) + +test('Test ipv6 address', function(t) { + var testUrl = 'http://[::1]:80/foo' + var request = http.get(testUrl, noop) + + var resolved = url.resolve(location, request._opts.url) + t.equal(resolved, 'http://[::1]:80/foo', 'Url should be correct') + t.end() +}) + +test('Test relative path in url', function(t) { + var params = { path: './bar' } + var request = http.get(params, noop) + + var resolved = url.resolve(location, request._opts.url) + t.equal(resolved, 'http://localhost:8081/foo/bar', 'Url should be correct') + t.end() +}) + +test('Cleanup', function (t) { + delete global.location + delete global.XMLHttpRequest + delete require.cache[moduleName] + t.end() +}) diff --git a/node_modules/stream-http/test/server/index.js b/node_modules/stream-http/test/server/index.js new file mode 100644 index 0000000..0a74aed --- /dev/null +++ b/node_modules/stream-http/test/server/index.js @@ -0,0 +1,137 @@ +var cookieParser = require('cookie-parser') +var basicAuth = require('basic-auth') +var express = require('express') +var fs = require('fs') +var http = require('http') +var path = require('path') +var url = require('url') + +var app = express() +var server = http.createServer(app) + +// Otherwise, use 'application/octet-stream' +var copiesMimeTypes = { + '/basic.txt': 'text/plain' +} + +var maxDelay = 5000 // ms + +// This should make sure bodies aren't cached +// so the streaming tests always pass +app.use(function (req, res, next) { + res.setHeader('Cache-Control', 'no-store') + next() +}) + +app.get('/testHeaders', function (req, res) { + var parsed = url.parse(req.url, true) + + // Values in query parameters are sent as response headers + Object.keys(parsed.query).forEach(function (key) { + res.setHeader('Test-' + key, parsed.query[key]) + }) + + res.setHeader('Content-Type', 'application/json') + res.setHeader('Cache-Control', 'no-cache') + + // Request headers are sent in the body as json + var reqHeaders = {} + Object.keys(req.headers).forEach(function (key) { + key = key.toLowerCase() + if (key.indexOf('test-') === 0) { + // different browsers format request headers with multiple values + // slightly differently, so normalize + reqHeaders[key] = req.headers[key].replace(', ', ',') + } + }) + + var body = JSON.stringify(reqHeaders) + res.setHeader('Content-Length', body.length) + res.write(body) + res.end() +}) + +app.get('/cookie', cookieParser(), function (req, res) { + res.setHeader('Content-Type', 'text/plain') + res.write('hello=' + req.cookies.hello) + res.end() +}) + +app.get('/auth', function (req, res) { + var user = basicAuth(req) + + if (!user || user.name !== 'TestUser' || user.pass !== 'trustno1') { + res.setHeader('WWW-Authenticate', 'Basic realm="example"') + res.end('Access denied') + } else { + res.setHeader('Content-Type', 'text/plain') + res.write('You\'re in!') + res.end() + } +}) + +app.post('/echo', function (req, res) { + res.setHeader('Content-Type', 'application/octet-stream') + req.pipe(res) +}) + +app.use('/verifyEmpty', function (req, res) { + var empty = true + req.on('data', function (buf) { + if (buf.length > 0) { + empty = false + } + }) + req.on('end', function () { + res.setHeader('Content-Type', 'text/plain') + + if (empty) { + res.end('empty') + } else { + res.end('not empty') + } + }) +}) + +app.use(function (req, res, next) { + var parsed = url.parse(req.url, true) + + if ('copies' in parsed.query) { + var totalCopies = parseInt(parsed.query.copies, 10) + function fail () { + res.statusCode = 500 + res.end() + } + fs.readFile(path.join(__dirname, 'static', parsed.pathname), function (err, data) { + if (err) + return fail() + + var mimeType = copiesMimeTypes[parsed.pathname] || 'application/octet-stream' + res.setHeader('Content-Type', mimeType) + res.setHeader('Content-Length', data.length * totalCopies) + var pieceDelay = maxDelay / totalCopies + if (pieceDelay > 100) + pieceDelay = 100 + + function write (copies) { + if (copies === 0) + return res.end() + + res.write(data, function (err) { + if (err) + return fail() + setTimeout(write.bind(null, copies - 1), pieceDelay) + }) + } + write(totalCopies) + }) + return + } + next() +}) + +app.use(express.static(path.join(__dirname, 'static'))) + +var port = parseInt(process.env.AIRTAP_PORT) || 8199 +console.log('Test server listening on port', port) +server.listen(port) diff --git a/node_modules/stream-http/test/server/static/basic.txt b/node_modules/stream-http/test/server/static/basic.txt new file mode 100644 index 0000000..aa7a0cc --- /dev/null +++ b/node_modules/stream-http/test/server/static/basic.txt @@ -0,0 +1,19 @@ +Mary had a little lamb, +His fleece was white as snow, +And everywhere that Mary went, +The lamb was sure to go. + +He followed her to school one day, +Which was against the rule, +It made the children laugh and play +To see a lamb at school. + +And so the teacher turned it out, +But still it lingered near, +And waited patiently about, +Till Mary did appear. + +"Why does the lamb love Mary so?" +The eager children cry. +"Why, Mary loves the lamb, you know." +The teacher did reply. diff --git a/node_modules/stream-http/test/server/static/browserify.png b/node_modules/stream-http/test/server/static/browserify.png Binary files differnew file mode 100644 index 0000000..98d6bf5 --- /dev/null +++ b/node_modules/stream-http/test/server/static/browserify.png diff --git a/node_modules/stream-http/test/server/static/test-polyfill.js b/node_modules/stream-http/test/server/static/test-polyfill.js new file mode 100644 index 0000000..f6a1a9d --- /dev/null +++ b/node_modules/stream-http/test/server/static/test-polyfill.js @@ -0,0 +1,9 @@ +if (!String.prototype.trim) { + (function() { + // Make sure we trim BOM and NBSP + var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; + String.prototype.trim = function() { + return this.replace(rtrim, ''); + }; + })(); +} |