71 lines
2.0 KiB
JavaScript
71 lines
2.0 KiB
JavaScript
var assert = require('assert'),
|
|
https = require('https'),
|
|
spdy = require('../../'),
|
|
keys = require('../fixtures/keys'),
|
|
net = require('net'),
|
|
url = require('url'),
|
|
PORT = 8081;
|
|
|
|
suite('A SPDY server / Proxy', function() {
|
|
test('should emit connect event on CONNECT requests', function(done) {
|
|
var proxyServer = spdy.createServer(keys);
|
|
proxyServer.on('connect', function(req, socket) {
|
|
var srvUrl = url.parse('http://' + req.url);
|
|
var srvSocket = net.connect(srvUrl.port, srvUrl.hostname, function() {
|
|
socket._lock(function() {
|
|
var headers = {
|
|
'Connection': 'keep-alive',
|
|
'Proxy-Agent': 'SPDY Proxy'
|
|
}
|
|
socket._spdyState.framer.replyFrame(
|
|
socket._spdyState.id, 200, "Connection Established", headers,
|
|
function (err, frame) {
|
|
socket.connection.write(frame);
|
|
socket._unlock();
|
|
srvSocket.pipe(socket);
|
|
socket.pipe(srvSocket);
|
|
}
|
|
);
|
|
});
|
|
});
|
|
});
|
|
|
|
proxyServer.listen(PORT, '127.0.0.1', function() {
|
|
var spdyAgent = spdy.createAgent({
|
|
host: '127.0.0.1',
|
|
port: PORT,
|
|
rejectUnauthorized: false
|
|
});
|
|
|
|
var options = {
|
|
method: 'CONNECT',
|
|
path: 'www.google.com:80',
|
|
agent: spdyAgent
|
|
};
|
|
|
|
var req = https.request(options);
|
|
req.end();
|
|
|
|
req.on('connect', function(res, socket) {
|
|
var googlePage = "";
|
|
socket.write('GET / HTTP/1.1\r\n' +
|
|
'Host: www.google.com:80\r\n' +
|
|
'Connection: close\r\n' +
|
|
'\r\n');
|
|
|
|
socket.on('data', function(chunk) {
|
|
googlePage = googlePage + chunk.toString();
|
|
});
|
|
|
|
socket.on('end', function() {
|
|
assert.notEqual(googlePage.search('google'), -1,
|
|
"Google page should contain string 'google'");
|
|
spdyAgent.close(function() {
|
|
proxyServer.close(done);
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|