Files
ASHEBShop-h5/node_modules/spdy/test/client-test.js
T
2017-05-10 16:33:00 +08:00

222 lines
5.3 KiB
JavaScript

var assert = require('assert');
var https = require('https');
var http = require('http');
var util = require('util');
var transport = require('spdy-transport');
var fixtures = require('./fixtures');
var spdy = require('../');
describe('SPDY Client', function() {
describe('regular', function() {
fixtures.everyConfig(function(protocol, npn, version, plain) {
var server;
var agent;
var hmodule;
beforeEach(function(done) {
hmodule = plain ? http : https;
var options = util._extend({
spdy: {
plain: plain
}
}, fixtures.keys);
server = spdy.createServer(options, function(req, res) {
var body = '';
req.on('data', function(chunk) {
body += chunk;
});
req.on('end', function() {
res.writeHead(200, req.headers);
res.addTrailers({ trai: 'ler' });
var push = res.push('/push', {
request: {
push: 'yes'
}
}, function(err) {
assert(!err);
push.end('push');
push.on('error', function() {
});
res.end(body || 'okay');
});
});
});
server.listen(fixtures.port, function() {
agent = spdy.createAgent({
rejectUnauthorized: false,
port: fixtures.port,
spdy: {
plain: plain,
protocol: plain ? npn : null,
protocols: [ npn ]
}
});
done();
});
});
afterEach(function(done) {
var waiting = 2;
agent.close(next);
server.close(next);
function next() {
if (--waiting === 0)
done();
}
});
it('should send GET request', function(done) {
var req = hmodule.request({
agent: agent,
method: 'GET',
path: '/get',
headers: {
a: 'b'
}
}, function(res) {
assert.equal(res.statusCode, 200);
assert.equal(res.headers.a, 'b');
fixtures.expectData(res, 'okay', done);
});
req.end();
});
it('should send POST request', function(done) {
var req = hmodule.request({
agent: agent,
method: 'POST',
path: '/post',
headers: {
post: 'headers'
}
}, function(res) {
assert.equal(res.statusCode, 200);
assert.equal(res.headers.post, 'headers');
fixtures.expectData(res, 'post body', done);
});
agent._spdyState.socket.once(plain ? 'connect' : 'secureConnect',
function() {
req.end('post body');
});
});
it('should receive PUSH_PROMISE', function(done) {
var req = hmodule.request({
agent: agent,
method: 'GET',
path: '/get'
}, function(res) {
assert.equal(res.statusCode, 200);
res.resume();
});
req.on('push', function(push) {
assert.equal(push.path, '/push');
assert.equal(push.headers.push, 'yes');
push.resume();
push.once('end', done);
});
req.end();
});
it('should receive trailing headers', function(done) {
var req = hmodule.request({
agent: agent,
method: 'GET',
path: '/get'
}, function(res) {
assert.equal(res.statusCode, 200);
res.on('trailers', function(headers) {
assert.equal(headers.trai, 'ler');
fixtures.expectData(res, 'okay', done);
});
});
req.end();
});
});
});
describe('x-forwarded-for', function() {
fixtures.everyConfig(function(protocol, npn, version, plain) {
var server;
var agent;
var hmodule;
beforeEach(function(done) {
hmodule = plain ? http : https;
var options = util._extend({
spdy: {
plain: plain,
'x-forwarded-for': true
}
}, fixtures.keys);
server = spdy.createServer(options, function(req, res) {
res.writeHead(200, req.headers);
res.end();
});
server.listen(fixtures.port, function() {
agent = spdy.createAgent({
rejectUnauthorized: false,
port: fixtures.port,
spdy: {
'x-forwarded-for': '1.2.3.4',
plain: plain,
protocol: plain ? npn : null,
protocols: [ npn ]
}
});
done();
});
});
afterEach(function(done) {
var waiting = 2;
agent.close(next);
server.close(next);
function next() {
if (--waiting === 0)
done();
}
});
it('should send x-forwarded-for', function(done) {
var req = hmodule.request({
agent: agent,
method: 'GET',
path: '/get'
}, function(res) {
assert.equal(res.statusCode, 200);
assert.equal(res.headers['x-forwarded-for'], '1.2.3.4');
res.resume();
res.once('end', done);
});
req.end();
});
});
});
});