summaryrefslogtreecommitdiffstats
path: root/debian/vendor-h2o/misc/p5-net-fastcgi/t/020_protocol/060_params.t
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--debian/vendor-h2o/misc/p5-net-fastcgi/t/020_protocol/060_params.t79
1 files changed, 79 insertions, 0 deletions
diff --git a/debian/vendor-h2o/misc/p5-net-fastcgi/t/020_protocol/060_params.t b/debian/vendor-h2o/misc/p5-net-fastcgi/t/020_protocol/060_params.t
new file mode 100644
index 0000000..92d9a64
--- /dev/null
+++ b/debian/vendor-h2o/misc/p5-net-fastcgi/t/020_protocol/060_params.t
@@ -0,0 +1,79 @@
+#!perl
+
+use strict;
+use warnings;
+
+use lib 't/lib', 'lib';
+use myconfig;
+
+use Test::More tests => 38;
+use Test::HexString;
+use Test::Exception;
+
+BEGIN {
+ use_ok('Net::FastCGI::Protocol', qw[ build_params
+ check_params
+ parse_params ]);
+}
+
+sub TRUE () { !!1 }
+sub FALSE () { !!0 }
+
+my @tests = (
+ # octets params
+ [ "", { } ],
+ [ "\x00\x00", { '' => '' }, ],
+ [ "\x01\x01\x31\x31", { 1 => 1 }, ],
+ [ "\x01\x01\x41\x42\x01\x01\x43\x44\x01\x01\x45\x46", { A => 'B', C => 'D', E => 'F' } ],
+);
+
+foreach my $test (@tests) {
+ my ($expected, $params) = @$test;
+ my $got = join '', map {
+ build_params({ $_ => $params->{$_} })
+ } sort keys %$params;
+ is_hexstr($got, $expected, 'build_params()');
+}
+
+is_hexstr("\x03\x00foo", build_params({foo => undef}), 'build_params({foo => undef})');
+is_hexstr("\x7F\x00" . "x" x 127, build_params({ "x" x 127 => '' }));
+is_hexstr("\x00\x7F" . "x" x 127, build_params({ '' => "x" x 127 }));
+is_hexstr("\x80\x00\x00\x80\x00" . "x" x 128, build_params({ "x" x 128 => '' }));
+is_hexstr("\x00\x80\x00\x00\x80" . "x" x 128, build_params({ '' => "x" x 128 }));
+
+foreach my $test (@tests) {
+ my $expected = $test->[1];
+ my $got = parse_params($test->[0]);
+ is_deeply($got, $expected, 'parse_params()');
+}
+
+foreach my $test (@tests) {
+ my $octets = $test->[0];
+ is(check_params($octets), TRUE, 'check_params(octets) eq TRUE');
+}
+
+my @insufficient = (
+ "\x00",
+ "\x01",
+ "\x00\x01",
+ "\x01\x00",
+ "\x00\xFF",
+ "\x01\xFF\x00",
+ "\x00\x80\x00\x00\x80",
+ "\x80\x00\x00\x80\x00",
+);
+
+foreach my $test (@insufficient) {
+ throws_ok { parse_params($test) } qr/^FastCGI: Insufficient .* FCGI_NameValuePair/;
+}
+
+foreach my $test (@insufficient) {
+ is(check_params($test), FALSE, 'check_params(octets) eq FALSE');
+}
+
+is(check_params(undef), FALSE, 'check_params(undef) eq FALSE');
+
+throws_ok { check_params() } qr/^Usage: /;
+throws_ok { build_params() } qr/^Usage: /;
+throws_ok { parse_params() } qr/^Usage: /;
+