You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							68 lines
						
					
					
						
							1.9 KiB
						
					
					
				
			
		
		
	
	
							68 lines
						
					
					
						
							1.9 KiB
						
					
					
				| var assert = require('assert'),
 | |
|     path = require('path');
 | |
| 
 | |
| var HeaderParser = require('../lib/HeaderParser');
 | |
| 
 | |
| var DCRLF = '\r\n\r\n',
 | |
|     MAXED_BUFFER = new Buffer(128 * 1024);
 | |
| MAXED_BUFFER.fill(0x41); // 'A'
 | |
| 
 | |
| var group = path.basename(__filename, '.js') + '/';
 | |
| 
 | |
| [
 | |
|   { source: DCRLF,
 | |
|     expected: {},
 | |
|     what: 'No header'
 | |
|   },
 | |
|   { source: ['Content-Type:\t  text/plain',
 | |
|              'Content-Length:0'
 | |
|             ].join('\r\n') + DCRLF,
 | |
|     expected: {'content-type': ['  text/plain'], 'content-length': ['0']},
 | |
|     what: 'Value spacing'
 | |
|   },
 | |
|   { source: ['Content-Type:\r\n text/plain',
 | |
|              'Foo:\r\n bar\r\n baz',
 | |
|             ].join('\r\n') + DCRLF,
 | |
|     expected: {'content-type': [' text/plain'], 'foo': [' bar baz']},
 | |
|     what: 'Folded values'
 | |
|   },
 | |
|   { source: ['Content-Type:',
 | |
|              'Foo: ',
 | |
|             ].join('\r\n') + DCRLF,
 | |
|     expected: {'content-type': [''], 'foo': ['']},
 | |
|     what: 'Empty values'
 | |
|   },
 | |
|   { source: MAXED_BUFFER.toString('ascii') + DCRLF,
 | |
|     expected: {},
 | |
|     what: 'Max header size (single chunk)'
 | |
|   },
 | |
|   { source: ['ABCDEFGHIJ', MAXED_BUFFER.toString('ascii'), DCRLF],
 | |
|     expected: {},
 | |
|     what: 'Max header size (multiple chunks #1)'
 | |
|   },
 | |
|   { source: [MAXED_BUFFER.toString('ascii'), MAXED_BUFFER.toString('ascii'), DCRLF],
 | |
|     expected: {},
 | |
|     what: 'Max header size (multiple chunk #2)'
 | |
|   },
 | |
| ].forEach(function(v) {
 | |
|   var parser = new HeaderParser(),
 | |
|       fired = false;
 | |
| 
 | |
|   parser.on('header', function(header) {
 | |
|     assert(!fired, makeMsg(v.what, 'Header event fired more than once'));
 | |
|     fired = true;
 | |
|     assert.deepEqual(header,
 | |
|                      v.expected,
 | |
|                      makeMsg(v.what, 'Parsed result mismatch'));
 | |
|   });
 | |
|   if (!Array.isArray(v.source))
 | |
|     v.source = [v.source];
 | |
|   v.source.forEach(function(s) {
 | |
|     parser.push(s);
 | |
|   });
 | |
|   assert(fired, makeMsg(v.what, 'Did not receive header from parser'));
 | |
| });
 | |
| 
 | |
| function makeMsg(what, msg) {
 | |
|   return '[' + group + what + ']: ' + msg;
 | |
| } |