Condition Coverage

blib/lib/PAGI/Server/Connection.pm
Criterion Covered Total %
condition 259 474 54.6


and 3 conditions

line !l l&&!r l&&r condition
213 2 0 320 $self->{'transport_type'} eq "tcp" and $handle
2 64 256 $self->{'transport_type'} eq "tcp" and $handle and $handle->can("setsockopt")
221 0 65 255 $handle and $handle->can("peerhost")
238 295 1 26 $self->{'alpn_protocol'} and $self->{'alpn_protocol'} eq "h2"
296 0 26 $self->{'alpn_protocol'} and $self->{'alpn_protocol'} eq "h2" and $self->{'h2_protocol'}
243 0 0 322 $self->{'timeout'} and $self->{'timeout'} > 0
0 0 322 $self->{'timeout'} and $self->{'timeout'} > 0 and $self->{'server'}
280 499 0 37 $weak_self->{'h2c_enabled'} and not $weak_self->{'is_h2'}
282 0 1 36 $weak_self->{'h2_protocol'} and "PAGI::Server::Protocol::HTTP2"->detect_preface($weak_self->{'buffer'})
311 280 0 12 $weak_self->{'receive_pending'} and not $weak_self->{'receive_pending'}->is_ready
401 0 203 2 $self->{'h2_session'} and not $self->{'h2_session'}->want_read
412 0 438 269 defined $data and length $data > 0
452 51 1 9 $h->[0] eq "accept" and $h->[1] =~ m[text/event-stream]
478 44 16 6 $self->{'max_body_size'} and $has_body
516 11 0 16 $stream->{'is_websocket'} and $stream->{'ws_accepted'}
536 5 0 1 $self->{'max_body_size'} and length $stream->{'body'} > $self->{'max_body_size'}
558 51 0 15 $stream->{'body_pending'} and not $stream->{'body_pending'}->is_ready
634 0 0 2 $weak_self and not $stream_state->{'response_started'}
647 0 0 64 $weak_self and $weak_self->{'server'}
787 49 33 6 !@data_queue && $eof_pending
1397 1 0 0 $code >= 1007 and $code <= 1011
1 0 0 $code >= 3000 and $code <= 4999
1478 239 0 0 $self->{'request_timeout'} and $self->{'request_timeout'} > 0
1490 0 0 0 $weak_self->{'server'} and $weak_self->{'server'}->can("_log")
1525 21 0 0 $self->{'ws_idle_timeout'} and $self->{'ws_idle_timeout'} > 0
1536 0 0 0 $weak_self->{'server'} and $weak_self->{'server'}->can("_log")
1571 23 0 0 $self->{'sse_idle_timeout'} and $self->{'sse_idle_timeout'} > 0
1582 0 0 0 $weak_self->{'server'} and $weak_self->{'server'}->can("_log")
1638 0 0 586 defined $data and not ref $data
1729 0 0 0 $interval and $interval > 0
1782 0 0 0 $weak_self->{'server'} and $weak_self->{'server'}->can("_log")
1832 0 0 2 $interval and $interval > 0
1896 2 265 8 $self->{'max_body_size'} and defined $request->{'content_length'}
1909 21 239 14 !$is_websocket && $self->_is_sse_request($request)
1941 829 0 21 $name eq "upgrade" and lc $value eq "websocket"
1953 253 0 21 $has_upgrade && $has_connection_upgrade && $has_ws_key
2055 7 200 13 $connection_header and $connection_header =~ /close/
2061 2 0 1 $connection_header and $connection_header =~ /keep-alive/
2173 18 0 0 $expect_continue and not $continue_sent
2181 1 0 0 length $weak_self->{'buffer'} == 0 and not $weak_self->{'closed'}
2198 1 0 0 ref $data eq "HASH" and $data->{'error'}
2212 0 1 0 $weak_self->{'max_body_size'} and $bytes_read > $weak_self->{'max_body_size'}
2258 17 0 12 length $weak_self->{'buffer'} == 0 and not $weak_self->{'closed'}
2272 17 0 0 $weak_self->{'closed'} and length $weak_self->{'buffer'} == 0
2322 1 0 1 $h->[0] eq "connection" and lc($h->[1]) =~ /keep-alive/
2458 32 1 153 $chunked and not $expects_trailers
2494 0 0 2 $handle and $handle->can("setsockopt")
2581 0 0 0 defined $query and length $query
2599 320 0 2 not $reason and $self->{'server'}
0 2 0 not $reason and $self->{'server'} and $self->{'server'}{'shutting_down'}
2608 291 0 31 $self->{'current_connection_state'} and not $self->{'websocket_mode'}
291 0 31 $self->{'current_connection_state'} and not $self->{'websocket_mode'} and not $self->{'sse_mode'}
2629 305 1 16 $self->{'receive_pending'} and not $self->{'receive_pending'}->is_ready
2669 16 0 9 $stream->{'body_pending'} and not $stream->{'body_pending'}->is_ready
2691 130 14 178 $self->{'server'}{'shutting_down'} and keys %{$$self{"server"}{"connections"};} == 0
144 177 1 $self->{'server'}{'shutting_down'} and keys %{$$self{"server"}{"connections"};} == 0 and $self->{'server'}{'drain_complete'}
177 0 1 $self->{'server'}{'shutting_down'} and keys %{$$self{"server"}{"connections"};} == 0 and $self->{'server'}{'drain_complete'} and not $self->{'server'}{'drain_complete'}->is_ready
2765 0 0 44 $handle and $handle->isa("IO::Socket::SSL")
2796 0 44 0 $ssl and $ssl->can("get_cipher_bits")
2899 294 0 44 $self->{'tls_enabled'} and $self->{'tls_info'}
2939 0 0 14 $self->{'sse_started'} and not $self->{'closed'}
0 0 14 $self->{'sse_started'} and not $self->{'closed'} and $self->{'stream'}
0 1 13 $self->{'sse_started'} and not $self->{'closed'} and $self->{'stream'} and $self->{'stream'}->write_handle
2986 13 0 1 defined $content_length && $content_length > 0
3018 4 0 1 $has_body and not $body_complete
3022 1 0 0 length $weak_self->{'buffer'} == 0 and not $weak_self->{'closed'}
1 0 0 length $weak_self->{'buffer'} == 0 and not $weak_self->{'closed'} and $remaining > 0
3093 26 0 17 defined $event->{'event'} and length $event->{'event'}
3104 35 0 7 defined $event->{'id'} and length $event->{'id'}
3244 0 0 1 $handle and $handle->can("setsockopt")
3486 18 0 0 $weak_self->{'receive_pending'} and not $weak_self->{'receive_pending'}->is_ready
3598 0 0 128 $rsv and ref $rsv eq "ARRAY"
3608 128 0 0 $opcode >= 3 and $opcode <= 7
128 0 0 $opcode >= 11 and $opcode <= 15
3616 128 0 0 $opcode == 8 || $opcode == 9 || $opcode == 10 and length $bytes > 125
3676 0 0 0 $code >= 1007 and $code <= 1011
0 0 0 $code >= 3000 and $code <= 4999
3734 23 0 13 $self->{'receive_pending'} and not $self->{'receive_pending'}->is_ready
23 0 13 $self->{'receive_pending'} and not $self->{'receive_pending'}->is_ready and @{$self->{'receive_queue'};}
3756 0 4 25 $self->{'sync_file_threshold'} > 0 and $length <= $self->{'sync_file_threshold'}
3812 5 0 1 $offset and $offset > 0

or 2 conditions

line l !l condition
189 258 66 $args{'extensions'} // {}
258 66 $args{'state'} // {}
258 66 $args{'tls_enabled'} // 0
258 66 $args{'timeout'} // 60
258 66 $args{'request_timeout'} // 0
258 66 $args{'ws_idle_timeout'} // 0
258 66 $args{'sse_idle_timeout'} // 0
258 66 $args{'max_receive_queue'} // 1000
258 66 $args{'max_ws_frame_size'} // 65536
258 66 $args{'sync_file_threshold'} // 65536
258 66 $args{'validate_events'} // 0
258 66 $args{'write_high_watermark'} // 65536
258 66 $args{'write_low_watermark'} // 16384
39 285 $args{'h2c_enabled'} // 0
258 66 $args{'transport_type'} // "tcp"
229 255 0 $handle->peerhost // "127.0.0.1"
230 255 0 $handle->peerport // 0
231 255 0 $handle->sockhost // "127.0.0.1"
232 255 0 $handle->sockport // 5000
426 67 0 $pseudo->{':method'} // ""
427 13 1 $pseudo->{':protocol'} // ""
660 42 0 $pseudo->{':path'} // "/"
662 2 40 $query_string //= ""
694 42 0 $pseudo->{':method'} // "GET"
805 149 0 $event->{'type'} // ""
812 39 0 $event->{'status'} // 200
815 39 0 $event->{'headers'} // []
821 110 0 $event->{'body'} // ""
822 91 19 $event->{'more'} // 0
888 13 0 $pseudo->{':path'} // "/"
890 0 13 $query_string //= ""
1007 19 0 $event->{'type'} // ""
1081 1 0 $event->{'code'} // 1000
1082 1 0 $event->{'reason'} // ""
1108 9 0 $pseudo->{':path'} // "/"
1110 0 9 $query_string //= ""
1141 9 0 $pseudo->{':method'} // "GET"
1246 30 0 $event->{'type'} // ""
1258 9 0 $event->{'status'} // 200
1259 1 8 $event->{'headers'} // []
1327 2 0 $event->{'interval'} // 0
1393 3 0 substr($bytes, 2) // ""
1466 4 0 $reason // ""
1633 361 0 $self->{'stream'}{'writequeue'} // []
1710 642 2 $reason //= "connection closed"
1733 0 0 $timeout // 0
1835 2 0 $comment // ""
2042 223 0 $request->{'http_version'} // "1.1"
2113 239 0 $request->{'chunked'} // 0
2114 239 0 $request->{'expect_continue'} // 0
2200 0 0 $data->{'message'} // "Bad Request"
2209 1 0 $data // ""
2225 1 0 $data // ""
2314 239 0 $request->{'method'} // ""
2315 239 0 $request->{'http_version'} // "1.1"
2339 469 0 $event->{'type'} // ""
2351 226 0 $event->{'status'} // 200
2352 1 225 $event->{'trailers'} // 0
2354 226 0 $event->{'status'} // 200
2355 226 0 $event->{'headers'} // []
2401 2 0 $event->{'more'} // 0
2423 6 230 $event->{'offset'} // 0
2440 199 2 $body //= ""
2441 180 21 $event->{'more'} // 0
2469 1 0 $event->{'headers'} // []
2570 263 0 $request->{'method'} // "-"
263 0 $request->{'raw_path'} // "/"
263 0 $request->{'http_version'} // "1.1"
263 0 $self->{'response_status'} // "-"
263 0 $self->{'_response_size'} // 0
263 0 $request->{'headers'} // []
2604 320 2 $reason //= "client_closed"
2619 0 14 $self->{'sse_disconnect_reason'} // "client_closed"
2643 3 0 $reason //= ""
2724 0 14 $self->{'sse_disconnect_reason'} // "client_closed"
2996 0 0 ($weak_self ? $weak_self->{'sse_disconnect_reason'} : undef) // "client_closed"
3099 42 0 $event->{'data'} // ""
3122 5 0 $event->{'comment'} // ""
3145 32 0 $event->{'type'} // ""
3158 14 0 $event->{'status'} // 200
3160 13 1 $event->{'headers'} // []
3224 0 0 $event->{'interval'} // 0
3433 42 0 $event->{'type'} // ""
3536 0 2 $event->{'code'} // 1000
3537 0 2 $event->{'reason'} // ""
3556 0 0 $event->{'interval'} // 0
3670 0 0 substr($bytes, 2) // ""

or 3 conditions

line l !l&&r !l&&!r condition
212 322 0 0 $stream->write_handle // $stream->read_handle
667 42 0 0 eval { do { &decode("UTF-8", $unescaped, 1) } } // $unescaped
694 42 0 0 $pseudo->{':scheme'} // $self->_get_scheme
894 13 0 0 eval { do { &decode("UTF-8", $unescaped, 1) } } // $unescaped
1114 9 0 0 eval { do { &decode("UTF-8", $unescaped, 1) } } // $unescaped
1141 9 0 0 $pseudo->{':scheme'} // $self->_get_scheme
1397 2 0 1 $code == 1000 or $code == 1001
2 0 1 $code == 1000 or $code == 1001 or $code == 1002
0 0 1 $code == 1000 or $code == 1001 or $code == 1002 or $code == 1003
2121 6 1 232 defined $content_length && $content_length > 0 || $is_chunked
2372 2 3 221 $is_head_request or $is_http10
2570 261 2 0 $self->{'client_host'} // ($self->{'transport_type'} eq "unix" ? "unix" : "-")
3380 27 0 0 $weak_self->{'websocket_mode'} or $weak_self->{'closed'}
3608 0 0 128 $opcode >= 3 and $opcode <= 7 or $opcode >= 11 and $opcode <= 15
3616 0 0 128 $opcode == 8 || $opcode == 9 || $opcode == 10
3676 0 0 0 $code == 1000 or $code == 1001
0 0 0 $code == 1000 or $code == 1001 or $code == 1002
0 0 0 $code == 1000 or $code == 1001 or $code == 1002 or $code == 1003
3750 4 25 0 $length //= $file_size - $offset