File: 14_keepalive.t

package info (click to toggle)
libprotocol-http2-perl 1.11-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 448 kB
  • sloc: perl: 3,370; makefile: 7
file content (122 lines) | stat: -rw-r--r-- 2,612 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
use strict;
use warnings;
use Test::More;
use Protocol::HTTP2::Client;
use Protocol::HTTP2::Server;
use Protocol::HTTP2::Constants qw(:errors);
use lib 't/lib';
use PH2Test qw(fake_connect);

my %common = (
    ':scheme'    => 'https',
    ':authority' => 'localhost:8000',
    ':path'      => '/',
    ':method'    => 'GET',
    headers      => [],
);

subtest 'sequential requests' => sub {

    my $tests = 10;
    plan tests => $tests;

    my $server;
    $server = Protocol::HTTP2::Server->new(
        on_request => sub {
            $server->response_stream(
                ':status' => 204,
                stream_id => shift,
                headers   => [],
            );
        },
    );

    my $client = Protocol::HTTP2::Client->new;

    my $req;
    $req = sub {
        return if --$tests < 0;
        pass "request $tests";
        $client->request( %common, on_done => $req );
    };
    $req->();

    fake_connect( $server, $client );
};

subtest 'client keepalive' => sub {

    my $tests = 10;
    plan tests => $tests + 2;

    my $server;
    $server = Protocol::HTTP2::Server->new(
        on_request => sub {
            $server->response_stream(
                ':status' => 204,
                stream_id => shift,
                headers   => [],
            );
        },
    );

    my $client = Protocol::HTTP2::Client->new->keepalive(1);

    for my $i ( 1 .. $tests ) {
        $client->request(
            %common,
            on_done => sub {
                pass "request $i";
            },
        );
        fake_connect( $server, $client );
    }

    $client->close;
    fake_connect( $server, $client );

    eval { $client->request(%common); };
    ok $@, "request failed after close";
    like $@, qr/closed/, "connection closed";
};

subtest 'client no keepalive' => sub {

    plan tests => 2;

    my $server;
    $server = Protocol::HTTP2::Server->new(
        on_request => sub {
            $server->response_stream(
                ':status' => 204,
                stream_id => shift,
                headers   => [],
            );
        },
    );

    my $client = Protocol::HTTP2::Client->new(
        keepalive => 0,
        on_error  => sub {
            is( shift, PROTOCOL_ERROR, "request failed" );
        },
    );

    $client->request(
        %common,
        on_done => sub {
            pass "request complete";
        },
    );
    fake_connect( $server, $client );

    $client->request(
        %common,
        on_done => sub {
            fail "keepalive?";
        }
    );
    fake_connect( $server, $client );
};

done_testing;