Condition Coverage

blib/lib/Hypersonic.pm
Criterion Covered Total %
condition 94 259 36.2


and 3 conditions

line !l l&&!r l&&r condition
268 0 0 0 builtin::blessed($handler) && ($handler->can('build_before') || $handler->can('build_after'))
277 0 0 0 builtin::blessed($handler) && ($handler->can('build_before') || $handler->can('build_after'))
553 1 0 0 builtin::blessed($mw) and $mw->can('build_before') || $mw->can('build_after')
560 1 0 0 builtin::blessed($mw) and $mw->can('build_before') || $mw->can('build_after')
669 1 0 35 defined $body and not ref $body
1004 0 16 4 $self->{'enable_security_headers'} and $has_dynamic
1230 0 0 0 ref $result eq "HASH" and $result->{'xs_function'}
1308 2 0 2 $analysis->{'needs_streaming'} and $self->{'_streaming_flags'}
1318 20 0 0 $analysis->{'needs_websocket'} and $self->{'_websocket_paths'}
1360 0 16 4 $self->{'enable_security_headers'} and $has_dynamic
1372 20 0 0 $analysis->{'needs_xs_builder'} and $self->{'_xs_builder_routes'}
0 0 0 $analysis->{'needs_xs_builder'} and $self->{'_xs_builder_routes'} and @{$self->{'_xs_builder_routes'};}
1421 11 0 0 $r->{'need_xs_builder'} and $r->{'_xs_result'}
1917 4 0 0 $analysis->{'needs_xs_builder'} and $self->{'_xs_builder_routes'}
0 0 0 $analysis->{'needs_xs_builder'} and $self->{'_xs_builder_routes'} and @{$self->{'_xs_builder_routes'};}
3122 8 0 3 not $prefix =~ m[/$] and $prefix =~ m[^(.*/)[^/]+$]
3277 177 0 236 defined $value and length $value
3317 6 0 0 $^O eq "MSWin32" and $workers > 1

or 2 conditions

line l !l condition
49 1 47 $opts{'security_headers'} // {}
94 32 16 $opts{'cache_dir'} // "_hypersonic_cache"
0 48 $opts{'host'} // "0.0.0.0"
3 45 $opts{'port'} // 8080
0 48 $opts{'tls'} // 0
0 48 $opts{'http2'} // 0
1 47 $opts{'max_connections'} // 10000
1 47 $opts{'max_request_size'} // 8192
1 47 $opts{'keepalive_timeout'} // 30
1 47 $opts{'recv_timeout'} // 30
0 48 $opts{'websocket_rooms'} // 0
0 48 $opts{'max_rooms'} // 1000
0 48 $opts{'max_clients_per_room'} // 10000
1 47 $opts{'drain_timeout'} // 5
1 47 $security_headers->{'X-Frame-Options'} // "DENY"
0 48 $security_headers->{'X-Content-Type-Options'} // "nosniff"
0 48 $security_headers->{'X-XSS-Protection'} // "1; mode=block"
0 48 $security_headers->{'Referrer-Policy'} // "strict-origin-when-cross-origin"
0 0 $security_headers->{'Strict-Transport-Security'} // "max-age=31536000; includeSubDomains"
1 47 $opts{'enable_security_headers'} // 1
109 0 1 $path //= "/health"
122 0 1 $path //= "/ready"
138 2 2 $self->{'websocket_routes'} //= []
150 1 20 $self->{'websocket_routes'} // []
157 3 0 $self->{'websocket_routes'} // []
188 0 0 $opts //= {}
197 0 0 $self->{'static_dirs'} //= []
204 0 0 $opts->{'max_age'} // 3600
0 0 $opts->{'index'} // "index.html"
0 0 $opts->{'etag'} // 1
0 0 $opts->{'gzip'} // 0
257 0 0 $ext // ""
0 0 $MIME_TYPES{lc($ext // "")} // "application/octet-stream"
333 0 0 $opts{'workers'} // 8
0 0 $opts{'queue_size'} // 4096
337 0 0 $self->{'_async_pools'} //= []
430 0 64 $opts->{'before'} // []
0 64 $opts->{'after'} // []
439 0 1 $self->{'static_dirs'} // []
490 11 0 $route->{'features'} // {}
657 1 0 $status //= 200
658 1 0 $headers //= {}
660 7 1 $result->{'status'} // 200
661 1 7 $result->{'headers'} // {}
662 8 0 $result->{'body'} // ""
839 0 0 $compile_opts{'extra_cflags'} // ""
840 0 0 $compile_opts{'extra_ldflags'} // ""
847 0 0 $compile_opts{'extra_cflags'} // ""
848 0 0 $compile_opts{'extra_ldflags'} // ""
853 0 0 $compile_opts{'extra_cflags'} // ""
854 0 0 $compile_opts{'extra_ldflags'} // ""
861 20 0 $backend->extra_cflags // ""
862 0 0 $compile_opts{'extra_cflags'} // ""
866 20 0 $backend->extra_ldflags // ""
867 0 0 $compile_opts{'extra_ldflags'} // ""
876 0 0 $compile_opts{'extra_ldflags'} // ""
884 0 0 $compile_opts{'extra_ldflags'} // ""
897 0 0 $compile_opts{'extra_ldflags'} // ""
1057 0 0 $config->{'min_size'} // 1024
1058 0 0 $config->{'level'} // 6
1206 0 0 $self->{'_async_config'} // {}
1208 0 0 $async_config->{'max_futures'} // 65536
1212 0 0 $async_config->{'workers'} // 8
0 0 $async_config->{'queue_size'} // 4096
1285 4 0 $self->{'route_param_info'} // []
1290 11 0 $route_params[$i] // []
1605 20 0 $analysis->{'has_body_access'} // 0
1995 0 0 $self->{'_xs_builder_routes'} || []
2716 0 0 $config->{'min_size'} // 1024
3161 0 0 $STATUS_TEXT{$code} // "Unknown"
3310 6 0 $opts{'workers'} // 1

or 3 conditions

line l !l&&r !l&&!r condition
114 0 1 0 $handler //= sub { return "{\"status\":\"ok\"}"; }
126 0 1 0 $handler //= sub { return "{\"ready\":true}"; }
269 0 0 0 ref $handler eq "CODE" or $is_builder
278 0 0 0 ref $handler eq "CODE" or $is_builder
439 22 0 1 @{$self->{'routes'};} or @{$self->{'static_dirs'} // [];}
521 0 0 47 @{$route->{'before'};} or @{$route->{'after'};}
553 0 0 0 $mw->can('build_before') || $mw->can('build_after')
560 0 0 0 $mw->can('build_before') || $mw->can('build_after')
598 0 0 20 $analysis{'has_global_before'} || $analysis{'has_global_after'} || $analysis{'has_builder_before'} || $analysis{'has_builder_after'} || $analysis{'has_route_middleware'}
752 1 0 19 $analysis->{'has_global_before'} or $analysis->{'has_global_after'}
918 0 20 0 $self->{'event_backend'} // "Hypersonic::Event"->best_backend
2095 0 0 4 $analysis->{'needs_query'} or $analysis->{'needs_form'}
2155 0 1 3 $analysis->{'needs_headers'} or $analysis->{'needs_cookies'}
1 0 3 $analysis->{'needs_headers'} or $analysis->{'needs_cookies'} or $analysis->{'needs_json'}
0 0 3 $analysis->{'needs_headers'} or $analysis->{'needs_cookies'} or $analysis->{'needs_json'} or $analysis->{'needs_form'}
2192 0 0 4 $analysis->{'has_builder_before'} or $analysis->{'has_builder_after'}
2353 0 0 3 $analysis->{'needs_headers'} || $analysis->{'needs_cookies'} || $analysis->{'needs_json'} || $analysis->{'needs_form'}
2398 0 1 0 $analysis->{'needs_form'} or $analysis->{'needs_json'}
3101 7 4 0 $DEPARSER //= "B::Deparse"->new("-q")
3308 0 6 0 $opts{'host'} // $self->{'host'}
3309 6 0 0 $opts{'port'} // $self->{'port'}