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
			| 
								 
											3 years ago
										 
									 | 
							
								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;
							 | 
						||
| 
								 | 
							
								}
							 |