comparison h2.t @ 742:fc21544a8640

Tests: isolated simple HTTP/2 HPACK tests.
author Sergey Kandaurov <pluknet@nginx.com>
date Mon, 19 Oct 2015 17:04:42 +0300
parents a2e7f5ff3aa8
children 9cd16dea1392
comparison
equal deleted inserted replaced
741:a2e7f5ff3aa8 742:fc21544a8640
388 388
389 # various HEADERS compression/encoding, see hpack() for mode details 389 # various HEADERS compression/encoding, see hpack() for mode details
390 390
391 # 6.1. Indexed Header Field Representation 391 # 6.1. Indexed Header Field Representation
392 392
393 $sess = new_session();
393 $sid = new_stream($sess, { headers => [ 394 $sid = new_stream($sess, { headers => [
394 { name => ':method', value => 'GET', mode => 0 }, 395 { name => ':method', value => 'GET', mode => 0 },
395 { name => ':scheme', value => 'http', mode => 0 }, 396 { name => ':scheme', value => 'http', mode => 0 },
396 { name => ':path', value => '/', mode => 0 }, 397 { name => ':path', value => '/', mode => 0 },
397 { name => ':authority', value => 'localhost', mode => 1 }]}); 398 { name => ':authority', value => 'localhost', mode => 1 }]});
400 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; 401 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
401 is($frame->{headers}->{':status'}, 200, 'indexed header field'); 402 is($frame->{headers}->{':status'}, 200, 'indexed header field');
402 403
403 # 6.2.1. Literal Header Field with Incremental Indexing 404 # 6.2.1. Literal Header Field with Incremental Indexing
404 405
406 $sess = new_session();
405 $sid = new_stream($sess, { headers => [ 407 $sid = new_stream($sess, { headers => [
406 { name => ':method', value => 'GET', mode => 1, huff => 0 }, 408 { name => ':method', value => 'GET', mode => 1, huff => 0 },
407 { name => ':scheme', value => 'http', mode => 1, huff => 0 }, 409 { name => ':scheme', value => 'http', mode => 1, huff => 0 },
408 { name => ':path', value => '/', mode => 1, huff => 0 }, 410 { name => ':path', value => '/', mode => 1, huff => 0 },
409 { name => ':authority', value => 'localhost', mode => 1, huff => 0 }]}); 411 { name => ':authority', value => 'localhost', mode => 1, huff => 0 }]});
410 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); 412 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]);
411 413
412 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; 414 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
413 is($frame->{headers}->{':status'}, 200, 'literal with indexing'); 415 is($frame->{headers}->{':status'}, 200, 'literal with indexing');
414 416
417 $sess = new_session();
415 $sid = new_stream($sess, { headers => [ 418 $sid = new_stream($sess, { headers => [
416 { name => ':method', value => 'GET', mode => 1, huff => 1 }, 419 { name => ':method', value => 'GET', mode => 1, huff => 1 },
417 { name => ':scheme', value => 'http', mode => 1, huff => 1 }, 420 { name => ':scheme', value => 'http', mode => 1, huff => 1 },
418 { name => ':path', value => '/', mode => 1, huff => 1 }, 421 { name => ':path', value => '/', mode => 1, huff => 1 },
419 { name => ':authority', value => 'localhost', mode => 1, huff => 1 }]}); 422 { name => ':authority', value => 'localhost', mode => 1, huff => 1 }]});
422 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; 425 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
423 is($frame->{headers}->{':status'}, 200, 'literal with indexing - huffman'); 426 is($frame->{headers}->{':status'}, 200, 'literal with indexing - huffman');
424 427
425 # 6.2.1. Literal Header Field with Incremental Indexing -- New Name 428 # 6.2.1. Literal Header Field with Incremental Indexing -- New Name
426 429
430 $sess = new_session();
427 $sid = new_stream($sess, { headers => [ 431 $sid = new_stream($sess, { headers => [
428 { name => ':method', value => 'GET', mode => 2, huff => 0 }, 432 { name => ':method', value => 'GET', mode => 2, huff => 0 },
429 { name => ':scheme', value => 'http', mode => 2, huff => 0 }, 433 { name => ':scheme', value => 'http', mode => 2, huff => 0 },
430 { name => ':path', value => '/', mode => 2, huff => 0 }, 434 { name => ':path', value => '/', mode => 2, huff => 0 },
431 { name => ':authority', value => 'localhost', mode => 2, huff => 0 }]}); 435 { name => ':authority', value => 'localhost', mode => 2, huff => 0 }]});
432 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); 436 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]);
433 437
434 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; 438 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
435 is($frame->{headers}->{':status'}, 200, 'literal with indexing - new'); 439 is($frame->{headers}->{':status'}, 200, 'literal with indexing - new');
436 440
441 $sess = new_session();
437 $sid = new_stream($sess, { headers => [ 442 $sid = new_stream($sess, { headers => [
438 { name => ':method', value => 'GET', mode => 2, huff => 1 }, 443 { name => ':method', value => 'GET', mode => 2, huff => 1 },
439 { name => ':scheme', value => 'http', mode => 2, huff => 1 }, 444 { name => ':scheme', value => 'http', mode => 2, huff => 1 },
440 { name => ':path', value => '/', mode => 2, huff => 1 }, 445 { name => ':path', value => '/', mode => 2, huff => 1 },
441 { name => ':authority', value => 'localhost', mode => 2, huff => 1 }]}); 446 { name => ':authority', value => 'localhost', mode => 2, huff => 1 }]});
444 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; 449 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
445 is($frame->{headers}->{':status'}, 200, 'literal with indexing - new huffman'); 450 is($frame->{headers}->{':status'}, 200, 'literal with indexing - new huffman');
446 451
447 # 6.2.2. Literal Header Field without Indexing 452 # 6.2.2. Literal Header Field without Indexing
448 453
454 $sess = new_session();
449 $sid = new_stream($sess, { headers => [ 455 $sid = new_stream($sess, { headers => [
450 { name => ':method', value => 'GET', mode => 3, huff => 0 }, 456 { name => ':method', value => 'GET', mode => 3, huff => 0 },
451 { name => ':scheme', value => 'http', mode => 3, huff => 0 }, 457 { name => ':scheme', value => 'http', mode => 3, huff => 0 },
452 { name => ':path', value => '/', mode => 3, huff => 0 }, 458 { name => ':path', value => '/', mode => 3, huff => 0 },
453 { name => ':authority', value => 'localhost', mode => 3, huff => 0 }]}); 459 { name => ':authority', value => 'localhost', mode => 3, huff => 0 }]});
454 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); 460 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]);
455 461
456 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; 462 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
457 is($frame->{headers}->{':status'}, 200, 'literal without indexing'); 463 is($frame->{headers}->{':status'}, 200, 'literal without indexing');
458 464
465 $sess = new_session();
459 $sid = new_stream($sess, { headers => [ 466 $sid = new_stream($sess, { headers => [
460 { name => ':method', value => 'GET', mode => 3, huff => 1 }, 467 { name => ':method', value => 'GET', mode => 3, huff => 1 },
461 { name => ':scheme', value => 'http', mode => 3, huff => 1 }, 468 { name => ':scheme', value => 'http', mode => 3, huff => 1 },
462 { name => ':path', value => '/', mode => 3, huff => 1 }, 469 { name => ':path', value => '/', mode => 3, huff => 1 },
463 { name => ':authority', value => 'localhost', mode => 3, huff => 1 }]}); 470 { name => ':authority', value => 'localhost', mode => 3, huff => 1 }]});
466 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; 473 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
467 is($frame->{headers}->{':status'}, 200, 'literal without indexing - huffman'); 474 is($frame->{headers}->{':status'}, 200, 'literal without indexing - huffman');
468 475
469 # 6.2.2. Literal Header Field without Indexing -- New Name 476 # 6.2.2. Literal Header Field without Indexing -- New Name
470 477
478 $sess = new_session();
471 $sid = new_stream($sess, { headers => [ 479 $sid = new_stream($sess, { headers => [
472 { name => ':method', value => 'GET', mode => 4, huff => 0 }, 480 { name => ':method', value => 'GET', mode => 4, huff => 0 },
473 { name => ':scheme', value => 'http', mode => 4, huff => 0 }, 481 { name => ':scheme', value => 'http', mode => 4, huff => 0 },
474 { name => ':path', value => '/', mode => 4, huff => 0 }, 482 { name => ':path', value => '/', mode => 4, huff => 0 },
475 { name => ':authority', value => 'localhost', mode => 4, huff => 0 }]}); 483 { name => ':authority', value => 'localhost', mode => 4, huff => 0 }]});
476 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); 484 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]);
477 485
478 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; 486 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
479 is($frame->{headers}->{':status'}, 200, 'literal without indexing - new'); 487 is($frame->{headers}->{':status'}, 200, 'literal without indexing - new');
480 488
489 $sess = new_session();
481 $sid = new_stream($sess, { headers => [ 490 $sid = new_stream($sess, { headers => [
482 { name => ':method', value => 'GET', mode => 4, huff => 1 }, 491 { name => ':method', value => 'GET', mode => 4, huff => 1 },
483 { name => ':scheme', value => 'http', mode => 4, huff => 1 }, 492 { name => ':scheme', value => 'http', mode => 4, huff => 1 },
484 { name => ':path', value => '/', mode => 4, huff => 1 }, 493 { name => ':path', value => '/', mode => 4, huff => 1 },
485 { name => ':authority', value => 'localhost', mode => 4, huff => 1 }]}); 494 { name => ':authority', value => 'localhost', mode => 4, huff => 1 }]});
488 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; 497 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
489 is($frame->{headers}->{':status'}, 200, 'literal without indexing - new huffman'); 498 is($frame->{headers}->{':status'}, 200, 'literal without indexing - new huffman');
490 499
491 # 6.2.3. Literal Header Field Never Indexed 500 # 6.2.3. Literal Header Field Never Indexed
492 501
502 $sess = new_session();
493 $sid = new_stream($sess, { headers => [ 503 $sid = new_stream($sess, { headers => [
494 { name => ':method', value => 'GET', mode => 5, huff => 0 }, 504 { name => ':method', value => 'GET', mode => 5, huff => 0 },
495 { name => ':scheme', value => 'http', mode => 5, huff => 0 }, 505 { name => ':scheme', value => 'http', mode => 5, huff => 0 },
496 { name => ':path', value => '/', mode => 5, huff => 0 }, 506 { name => ':path', value => '/', mode => 5, huff => 0 },
497 { name => ':authority', value => 'localhost', mode => 5, huff => 0 }]}); 507 { name => ':authority', value => 'localhost', mode => 5, huff => 0 }]});
498 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); 508 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]);
499 509
500 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; 510 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
501 is($frame->{headers}->{':status'}, 200, 'literal never indexed'); 511 is($frame->{headers}->{':status'}, 200, 'literal never indexed');
502 512
513 $sess = new_session();
503 $sid = new_stream($sess, { headers => [ 514 $sid = new_stream($sess, { headers => [
504 { name => ':method', value => 'GET', mode => 5, huff => 1 }, 515 { name => ':method', value => 'GET', mode => 5, huff => 1 },
505 { name => ':scheme', value => 'http', mode => 5, huff => 1 }, 516 { name => ':scheme', value => 'http', mode => 5, huff => 1 },
506 { name => ':path', value => '/', mode => 5, huff => 1 }, 517 { name => ':path', value => '/', mode => 5, huff => 1 },
507 { name => ':authority', value => 'localhost', mode => 5, huff => 1 }]}); 518 { name => ':authority', value => 'localhost', mode => 5, huff => 1 }]});
510 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; 521 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
511 is($frame->{headers}->{':status'}, 200, 'literal never indexed - huffman'); 522 is($frame->{headers}->{':status'}, 200, 'literal never indexed - huffman');
512 523
513 # 6.2.2. Literal Header Field Never Indexed -- New Name 524 # 6.2.2. Literal Header Field Never Indexed -- New Name
514 525
526 $sess = new_session();
515 $sid = new_stream($sess, { headers => [ 527 $sid = new_stream($sess, { headers => [
516 { name => ':method', value => 'GET', mode => 6, huff => 0 }, 528 { name => ':method', value => 'GET', mode => 6, huff => 0 },
517 { name => ':scheme', value => 'http', mode => 6, huff => 0 }, 529 { name => ':scheme', value => 'http', mode => 6, huff => 0 },
518 { name => ':path', value => '/', mode => 6, huff => 0 }, 530 { name => ':path', value => '/', mode => 6, huff => 0 },
519 { name => ':authority', value => 'localhost', mode => 6, huff => 0 }]}); 531 { name => ':authority', value => 'localhost', mode => 6, huff => 0 }]});
520 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); 532 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]);
521 533
522 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; 534 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
523 is($frame->{headers}->{':status'}, 200, 'literal never indexed - new'); 535 is($frame->{headers}->{':status'}, 200, 'literal never indexed - new');
524 536
537 $sess = new_session();
525 $sid = new_stream($sess, { headers => [ 538 $sid = new_stream($sess, { headers => [
526 { name => ':method', value => 'GET', mode => 6, huff => 1 }, 539 { name => ':method', value => 'GET', mode => 6, huff => 1 },
527 { name => ':scheme', value => 'http', mode => 6, huff => 1 }, 540 { name => ':scheme', value => 'http', mode => 6, huff => 1 },
528 { name => ':path', value => '/', mode => 6, huff => 1 }, 541 { name => ':path', value => '/', mode => 6, huff => 1 },
529 { name => ':authority', value => 'localhost', mode => 6, huff => 1 }]}); 542 { name => ':authority', value => 'localhost', mode => 6, huff => 1 }]});
555 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); 568 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]);
556 569
557 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; 570 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
558 is($frame->{headers}->{'x-referer'}, 'foo', 'value with indexing - indexed'); 571 is($frame->{headers}->{'x-referer'}, 'foo', 'value with indexing - indexed');
559 572
573 $sess = new_session();
560 $sid = new_stream($sess, { headers => [ 574 $sid = new_stream($sess, { headers => [
561 { name => ':method', value => 'GET', mode => 0 }, 575 { name => ':method', value => 'GET', mode => 0 },
562 { name => ':scheme', value => 'http', mode => 0 }, 576 { name => ':scheme', value => 'http', mode => 0 },
563 { name => ':path', value => '/', mode => 0 }, 577 { name => ':path', value => '/', mode => 0 },
564 { name => ':authority', value => 'localhost', mode => 0 }, 578 { name => ':authority', value => 'localhost', mode => 1 },
565 { name => 'x-foo', value => 'X-Bar', mode => 2 }]}); 579 { name => 'x-foo', value => 'X-Bar', mode => 2 }]});
566 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); 580 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]);
567 581
568 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; 582 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
569 is($frame->{headers}->{'x-sent-foo'}, 'X-Bar', 'name with indexing - new'); 583 is($frame->{headers}->{'x-sent-foo'}, 'X-Bar', 'name with indexing - new');