4e1aae6ff86a0cb9812ac57b1353308e9371d9df
[platform/upstream/nodejs.git] / test / parallel / test-http-client-timeout-with-data.js
1 // Copyright Joyent, Inc. and other Node contributors.
2 //
3 // Permission is hereby granted, free of charge, to any person obtaining a
4 // copy of this software and associated documentation files (the
5 // "Software"), to deal in the Software without restriction, including
6 // without limitation the rights to use, copy, modify, merge, publish,
7 // distribute, sublicense, and/or sell copies of the Software, and to permit
8 // persons to whom the Software is furnished to do so, subject to the
9 // following conditions:
10 //
11 // The above copyright notice and this permission notice shall be included
12 // in all copies or substantial portions of the Software.
13 //
14 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
17 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
19 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20 // USE OR OTHER DEALINGS IN THE SOFTWARE.
21
22 var common = require('../common');
23 var assert = require('assert');
24 var http = require('http');
25
26 var ntimeouts = 0;
27 var nchunks = 0;
28
29 process.on('exit', function() {
30   assert.equal(ntimeouts, 1);
31   assert.equal(nchunks, 2);
32 });
33
34 var options = {
35   method: 'GET',
36   port: common.PORT,
37   host: '127.0.0.1',
38   path: '/'
39 };
40
41 var server = http.createServer(function(req, res) {
42   res.writeHead(200, {'Content-Length':'2'});
43   res.write('*');
44   setTimeout(function() { res.end('*') }, 100);
45 });
46
47 server.listen(options.port, options.host, function() {
48   var req = http.request(options, onresponse);
49   req.end();
50
51   function onresponse(res) {
52     req.setTimeout(50, function() {
53       assert.equal(nchunks, 1); // should have received the first chunk by now
54       ntimeouts++;
55     });
56
57     res.on('data', function(data) {
58       assert.equal('' + data, '*');
59       nchunks++;
60     });
61
62     res.on('end', function() {
63       assert.equal(nchunks, 2);
64       server.close();
65     });
66   }
67 });