Hypersonic
view release on metacpan or search on metacpan
t/0003-server.t view on Meta::CPAN
my $sock = IO::Socket::INET->new(
PeerAddr => '127.0.0.1',
PeerPort => $port,
Proto => 'tcp',
Timeout => 5,
);
return undef unless $sock;
my $content_length = length($body);
my $request = "$method $path HTTP/1.1\r\n"
. "Host: localhost:$port\r\n"
. "Content-Length: $content_length\r\n"
. "Connection: close\r\n"
. "\r\n"
. $body;
print $sock $request;
my $response = '';
while (my $line = <$sock>) {
$response .= $line;
}
close($sock);
return $response;
}
# Run tests
my $resp;
# Test 1: Basic GET request
$resp = http_request('GET', '/test');
ok($resp, 'Got response for GET /test');
like($resp, qr/HTTP\/1\.1 200 OK/, 'GET /test returns 200');
like($resp, qr/Hello from Hypersonic!/, 'GET /test has correct body');
# Test 2: JSON response
$resp = http_request('GET', '/json');
ok($resp, 'Got response for GET /json');
like($resp, qr/Content-Type: application\/json/, 'JSON content type');
like($resp, qr/"status":"ok"/, 'JSON body correct');
# Test 3: POST request
$resp = http_request('POST', '/echo', '{"data":"test"}');
ok($resp, 'Got response for POST /echo');
like($resp, qr/HTTP\/1\.1 200 OK/, 'POST returns 200');
like($resp, qr/"echo":"received"/, 'POST body correct');
# Test 4: 404 for unknown route
$resp = http_request('GET', '/unknown');
ok($resp, 'Got response for unknown route');
like($resp, qr/HTTP\/1\.1 404/, '404 for unknown route');
like($resp, qr/Not Found/, '404 body');
# Test 5: 404 for wrong method
$resp = http_request('DELETE', '/test');
ok($resp, 'Got response for wrong method');
like($resp, qr/HTTP\/1\.1 404/, '404 for wrong method');
# Test 6: Multiple requests (keep-alive simulation)
for my $i (1..5) {
$resp = http_request('GET', '/test');
ok($resp, "Request $i successful");
like($resp, qr/200 OK/, "Request $i returns 200");
}
# Cleanup
kill('TERM', $pid);
waitpid($pid, 0);
# Clean up cache
do { local $@; eval { require File::Path; File::Path::remove_tree($_, { safe => 1, error => \my $e }) for grep { -e $_ } glob(qq($cache_dir)); }; };
done_testing();
( run in 2.770 seconds using v1.01-cache-2.11-cpan-97f6503c9c8 )