Pass correct message in HTTP client upgrade
authorRyan Dahl <ry@tinyclouds.org>
Sun, 19 Sep 2010 18:53:32 +0000 (11:53 -0700)
committerRyan Dahl <ry@tinyclouds.org>
Sun, 19 Sep 2010 18:55:18 +0000 (11:55 -0700)
Simplify and correct test.

Fix by Fedor Indutny.

lib/http.js
test/simple/test-http-upgrade-client.js

index c994790b5f14a3ae03ef1b632fab75afcccb78b6..aa922ef4723ef5114f237dab9431012fd560c179 100644 (file)
@@ -891,7 +891,7 @@ function Client ( ) {
       self.ondata = null;
       self.onend = null
 
-      var req = self._outgoing[0];
+      var req = parser.incoming;
 
       var upgradeHead = d.slice(start + bytesParsed + 1, end);
 
index 7540b13a047dd3f5c656e72e41c49415387933b2..b09cc58a27b5907561b5bac32b6da89a2a3bcdc9 100644 (file)
@@ -8,48 +8,21 @@ assert = common.assert
 var http = require('http');
 var net = require('net');
 
-// Parse a string of data, returning an object if headers are complete, and
-// undefined otherwise
-var parseHeaders = function(data) {
-    var m = data.search(/\r\n\r\n/);
-    if (!m) {
-        return;
-    }
-
-    var o = {};
-    data.substring(0, m.index).split('\r\n').forEach(function(h) {
-        var foo = h.split(':');
-        if (foo.length < 2) {
-            return;
-        }
-
-        o[foo[0].trim().toLowerCase()] = foo[1].trim().toLowerCase();
-    });
-
-    return o;
-};
-
 // Create a TCP server
 var srv = net.createServer(function(c) {
     var data = '';
     c.addListener('data', function(d) {
         data += d.toString('utf8');
 
-        // We found the end of the headers; make sure that we have an 'upgrade'
-        // header and send back a response
-        var headers = parseHeaders(data);
-        if (!headers) {
-            return;
-        }
-
-        assert.ok('upgrade' in headers);
-
         c.write('HTTP/1.1 101\r\n');
+        c.write('hello: world\r\n');
         c.write('connection: upgrade\r\n');
-        c.write('upgrade: ' + headers.upgrade + '\r\n');
+        c.write('upgrade: websocket\r\n');
         c.write('\r\n');
         c.write('nurtzo');
+    });
 
+    c.addListener('end', function() {
         c.end();
     });
 });
@@ -57,20 +30,24 @@ srv.listen(common.PORT, '127.0.0.1');
 
 var gotUpgrade = false;
 var hc = http.createClient(common.PORT, '127.0.0.1');
-hc.addListener('upgrade', function(req, socket, upgradeHead) {
+hc.addListener('upgrade', function(res, socket, upgradeHead) {
     // XXX: This test isn't fantastic, as it assumes that the entire response
     //      from the server will arrive in a single data callback
     assert.equal(upgradeHead, 'nurtzo');
 
+    console.log(res.headers);
+    var expectedHeaders = { "hello": "world"
+                          , "connection": "upgrade" 
+                          , "upgrade": "websocket"
+                          };
+    assert.deepEqual(expectedHeaders, res.headers);
+
     socket.end();
     srv.close();
 
     gotUpgrade = true;
 });
-hc.request('/', {
-    'Connection' : 'Upgrade',
-    'Upgrade' : 'WebSocket'
-}).end();
+hc.request('GET', '/').end();
 
 process.addListener('exit', function() {
     assert.ok(gotUpgrade);