src: don't error at startup when cwd doesn't exist
[platform/upstream/nodejs.git] / test / parallel / test-http-parser-bad-ref.js
1 // Run this program with valgrind or efence with --expose_gc to expose the
2 // problem.
3
4 // Flags: --expose_gc
5
6 var common = require('../common');
7 var assert = require('assert');
8 var HTTPParser = process.binding('http_parser').HTTPParser;
9
10 var kOnHeaders = HTTPParser.kOnHeaders | 0;
11 var kOnHeadersComplete = HTTPParser.kOnHeadersComplete | 0;
12 var kOnBody = HTTPParser.kOnBody | 0;
13 var kOnMessageComplete = HTTPParser.kOnMessageComplete | 0;
14
15 var headersComplete = 0;
16 var messagesComplete = 0;
17
18 function flushPool() {
19   new Buffer(Buffer.poolSize - 1);
20   gc();
21 }
22
23 function demoBug(part1, part2) {
24   flushPool();
25
26   var parser = new HTTPParser('REQUEST');
27
28   parser.headers = [];
29   parser.url = '';
30
31   parser[kOnHeaders] = function(headers, url) {
32     parser.headers = parser.headers.concat(headers);
33     parser.url += url;
34   };
35
36   parser[kOnHeadersComplete] = function(info) {
37     headersComplete++;
38     console.log('url', info.url);
39   };
40
41   parser[kOnBody] = function(b, start, len) { };
42
43   parser[kOnMessageComplete] = function() {
44     messagesComplete++;
45   };
46
47
48   // We use a function to eliminate references to the Buffer b
49   // We want b to be GCed. The parser will hold a bad reference to it.
50   (function() {
51     var b = Buffer(part1);
52     flushPool();
53
54     console.log('parse the first part of the message');
55     parser.execute(b, 0, b.length);
56   })();
57
58   flushPool();
59
60   (function() {
61     var b = Buffer(part2);
62
63     console.log('parse the second part of the message');
64     parser.execute(b, 0, b.length);
65     parser.finish();
66   })();
67
68   flushPool();
69 }
70
71
72 demoBug('POST /1', '/22 HTTP/1.1\r\n' +
73         'Content-Type: text/plain\r\n' +
74         'Content-Length: 4\r\n\r\n' +
75         'pong');
76
77 demoBug('POST /1/22 HTTP/1.1\r\n' +
78         'Content-Type: tex', 't/plain\r\n' +
79         'Content-Length: 4\r\n\r\n' +
80         'pong');
81
82 process.on('exit', function() {
83   assert.equal(2, headersComplete);
84   assert.equal(2, messagesComplete);
85   console.log('done!');
86 });