Test-Smoke

 view release on metacpan or  search on metacpan

t/poster-post.t  view on Meta::CPAN

        note("Temporary daemon at: $url");
    }
    else { # HTTP-Server for dummies
        while (my $c = $daemon->accept) {
            while (my $r = $c->get_request) {
                if ($r->method eq 'POST' && $r->uri->path eq '/report') {
                    (my $json = uri_unescape($r->decoded_content)) =~ s/^json=//;
                    my $data;
                    $data  =  2 if $r->header('User-Agent') =~ /Test::Smoke/;
                    eval {
                        $data += 40 if decode_json($json)->{sysinfo} eq $^O;
                        1;
                    } or $data = $@ || 'decode_json-error';
                    my $response = HTTP::Response->new(
                        RC_OK(), "OK",
                        HTTP::Headers->new('Content-Type', 'application/json'),
                        encode_json({id => $data}),
                    );
                    $c->send_response($response);
                }
                elsif ($r->method eq 'POST' && $r->uri->path eq '/api/report') {
                    my $json = encode_json(decode_json($r->decoded_content)->{report_data});
                    my $data;
                    $data  =  2 if $r->header('User-Agent') =~ /Test::Smoke/;
                    eval {
                        $data += 40 if decode_json($json)->{sysinfo} eq $^O;
                        1;
                    } or $data = $@ || 'decode_json-error';
                    my $response = HTTP::Response->new(
                        RC_OK(), "OK",
                        HTTP::Headers->new('Content-Type', 'application/json'),
                        encode_json({id => $data}),
                    );
                    $c->send_response($response);
                }
                else {
                    my $response = HTTP::Response->new(
                        RC_NOT_IMPLEMENTED(), 'NOT IMPLEMENTED',
                        HTTP::Headers->new('Content-Type', 'application/json'),
                        uri_unescape($r->decoded_content),
                    );
                    $c->send_response($response);
                    note(">>>Error: @{[$r->as_string]}<<<")
                        unless $r->uri->path eq '/api/report-error';
                }
                $c->close;
            }
        }
    }
}
END {
    unlink "t/$jsnfile";
    if ($pid) {
        note("tear down: $pid");
        $daemon->close;
        kill 9, $pid;
    }
}

# We want to address our daemon directly
for my $envv (qw<ALL_PROXY HTTP_PROXY HTTPS_PROXY>) {
    delete($ENV{$envv})     if exists($ENV{$envv});
    delete($ENV{lc($envv)}) if exists($ENV{lc($envv)});
}

my $sysinfo = { sysinfo => $^O };
SKIP: {
    skip("Could not load LWP::UserAgent", 3) if !has_module('LWP::UserAgent');

    (my $sdb_url = $url->clone)->path('/report');
    my $poster = Test::Smoke::Poster->new(
        'LWP::UserAgent',
        ddir        => $tempdir,
        jsnfile     => $jsnfile,
        smokedb_url => $sdb_url->as_string,
        v           => $debug ? 2 : 0,
    );
    isa_ok($poster, 'Test::Smoke::Poster::LWP_UserAgent');

    ok(write_json($poster->json_filename, $sysinfo), "write_json");
    my $response = eval { $poster->post() };
    $response = $@ if $@;
    is($response, 42, "Got id (LWP::Useragent: $sdb_url")
        or diag(explain({poster => $poster, response => $response}));

    unlink $poster->json_filename;
}

SKIP: {
    skip("Could not load LWP::UserAgent", 3) if !has_module('LWP::UserAgent');

    (my $sdb_url = $url->clone)->path('/api/report');
    my $poster = Test::Smoke::Poster->new(
        'LWP::UserAgent',
        ddir        => $tempdir,
        jsnfile     => $jsnfile,
        smokedb_url => $sdb_url->as_string,
        v           => $debug ? 2 : 0,
    );
    isa_ok($poster, 'Test::Smoke::Poster::LWP_UserAgent');

    ok(write_json($poster->json_filename, $sysinfo), "write_json");
    my $response = eval { $poster->post() };
    $response = $@ if $@;
    is($response, 42, "Got id (LWP::Useragent: $sdb_url")
        or diag(explain({poster => $poster, response => $response}));

    unlink $poster->json_filename;
}

SKIP: {
    my $curlbin = whereis('curl');
    skip("Could not find curl", 3) if !$curlbin;
    skip("curl is from /snap, skipping", 3) if $curlbin =~ m{^/snap/};
    my $curl_version = qx{$curlbin --version};
    my $cv = $curl_version =~ m{curl ([0-9.]+)} ? $1 : '0';

    my $is_v6_address = $url =~ m{^ https?://\[ [0-9a-fA-F:]+ \] /? }x;
    my $needs_globoff = $is_v6_address &&
        (version->parse($cv) < version->parse("7.68.0"));



( run in 0.995 second using v1.01-cache-2.11-cpan-71847e10f99 )