blob: 14a2fa1798528e71ed032e0c96e2e6d41977565a [file] [log] [blame]
Oleg Efimov093dfaf2010-12-05 22:33:521var common = require('../common');
Ryan Dahla0159b42010-12-04 23:20:342var assert = require('assert');
3var http = require('http');
4
5var CRLF = '\r\n';
Fedor Indutny5535aa32010-09-22 12:51:536
7var server = http.createServer();
Ryan Dahl3fceb492010-11-29 23:22:488server.on('upgrade', function(req, socket, head) {
Fedor Indutny5535aa32010-09-22 12:51:539 socket.write('HTTP/1.1 101 Ok' + CRLF +
10 'Connection: Upgrade' + CRLF +
11 'Upgrade: Test' + CRLF + CRLF + 'head');
Oleg Efimov093dfaf2010-12-05 22:33:5212 socket.on('end', function() {
Ryan Dahl3fceb492010-11-29 23:22:4813 socket.end();
Fedor Indutny5535aa32010-09-22 12:51:5314 });
15});
Fedor Indutny5535aa32010-09-22 12:51:5316
Ryan Dahla0159b42010-12-04 23:20:3417var successCount = 0;
Fedor Indutny5535aa32010-09-22 12:51:5318
Oleg Efimov093dfaf2010-12-05 22:33:5219server.listen(common.PORT, function() {
Ryan Dahl40f675b2010-10-18 22:05:1820
21 var client = http.createClient(common.PORT);
22
23 function upgradeRequest(fn) {
Ryan Dahl3fceb492010-11-29 23:22:4824 var header = { 'Connection': 'Upgrade', 'Upgrade': 'Test' };
25 var request = client.request('GET', '/', header);
Ryan Dahl40f675b2010-10-18 22:05:1826 var wasUpgrade = false;
Ryan Dahl3fceb492010-11-29 23:22:4827
Ryan Dahl40f675b2010-10-18 22:05:1828 function onUpgrade(res, socket, head) {
29 wasUpgrade = true;
Ryan Dahl3fceb492010-11-29 23:22:4830
Ryan Dahl40f675b2010-10-18 22:05:1831 client.removeListener('upgrade', onUpgrade);
Ryan Dahl3fceb492010-11-29 23:22:4832 socket.end();
Fedor Indutny5535aa32010-09-22 12:51:5333 }
Ryan Dahl40f675b2010-10-18 22:05:1834 client.on('upgrade', onUpgrade);
Ryan Dahl3fceb492010-11-29 23:22:4835
Ryan Dahl40f675b2010-10-18 22:05:1836 function onEnd() {
37 client.removeListener('end', onEnd);
38 if (!wasUpgrade) {
39 throw new Error('hasn\'t received upgrade event');
Ryan Dahl3fceb492010-11-29 23:22:4840 } else {
Ryan Dahl40f675b2010-10-18 22:05:1841 fn && process.nextTick(fn);
42 }
43 }
44 client.on('end', onEnd);
Ryan Dahl3fceb492010-11-29 23:22:4845
Ryan Dahl40f675b2010-10-18 22:05:1846 request.write('head');
47
Fedor Indutny5535aa32010-09-22 12:51:5348 }
Fedor Indutny5535aa32010-09-22 12:51:5349
Fedor Indutny5535aa32010-09-22 12:51:5350 upgradeRequest(function() {
Ryan Dahl3fceb492010-11-29 23:22:4851 successCount++;
Ryan Dahl40f675b2010-10-18 22:05:1852 upgradeRequest(function() {
Ryan Dahl3fceb492010-11-29 23:22:4853 successCount++;
Ryan Dahl40f675b2010-10-18 22:05:1854 // Test pass
55 console.log('Pass!');
56 client.end();
57 client.destroy();
58 server.close();
59 });
Fedor Indutny5535aa32010-09-22 12:51:5360 });
Ryan Dahl40f675b2010-10-18 22:05:1861
Fedor Indutny5535aa32010-09-22 12:51:5362});
63
Oleg Efimov093dfaf2010-12-05 22:33:5264process.on('exit', function() {
Fedor Indutny5535aa32010-09-22 12:51:5365 assert.equal(2, successCount);
66});