class TestCase::IO::Socket::INET {
use IO::Socket;
use IO::Socket::INET;
use IO::Socket::UNIX;
use Go::Sync::WaitGroup;
use Go;
use Fn;
use Sys::Socket::Constant as SOCKET;
static method basic : int ($port : int) {
# Basic
{
my $host = "127.0.0.1";
my $socket = IO::Socket::INET->new({PeerAddr => $host, PeerPort => $port});
unless ($socket is_type IO::Socket::INET) {
return 0;
}
my $send_buffer = "GET /hello HTTP/1.0\r\nHost: $host\r\n\r\n";
$socket->send($send_buffer);
$socket->shutdown(SOCKET->SHUT_WR);
my $recv_buffer = (mutable string)new_string_len 1000;
my $recv_length = $socket->recv($recv_buffer);
unless ($recv_length > 0 && $recv_length < 1000) {
warn $recv_length;
return 0;
}
Fn->shorten_null_char($recv_buffer);
my $content = $recv_buffer;
unless (Fn->contains($content, "HTTP")) {
warn dump $content;
return 0;
}
unless (Fn->contains($content, "hello")) {
warn dump $content;
return 0;
}
$socket->close;
}
return 1;
}
}