]> Sergey Matveev's repositories - public-inbox.git/blobdiff - t/httpd.t
t/httpd-unix.t: avoid race in between bind() and listen()
[public-inbox.git] / t / httpd.t
index 8c2a3173a03686187e362ed5392ab7a6c279c5ba..e0a2bf44164a0f79d6be8b6a34471337645352b0 100644 (file)
--- a/t/httpd.t
+++ b/t/httpd.t
@@ -24,15 +24,7 @@ my $addr = $group . '@example.com';
 my $cfgpfx = "publicinbox.$group";
 my $httpd = 'blib/script/public-inbox-httpd';
 my $init = 'blib/script/public-inbox-init';
-
-my %opts = (
-       LocalAddr => '127.0.0.1',
-       ReuseAddr => 1,
-       Proto => 'tcp',
-       Type => SOCK_STREAM,
-       Listen => 1024,
-);
-my $sock = IO::Socket::INET->new(%opts);
+my $sock = tcp_server();
 my $pid;
 use_ok 'PublicInbox::Git';
 use_ok 'PublicInbox::Import';
@@ -106,6 +98,16 @@ SKIP: {
        defined(my $x = getsockopt($sock, IPPROTO_TCP, $var)) or die;
        ok(unpack('i', $x) > 0, 'TCP_DEFER_ACCEPT set');
 };
+SKIP: {
+       skip 'SO_ACCEPTFILTER is FreeBSD-only', 1 if $^O ne 'freebsd';
+       if (system('kldstat -m accf_http >/dev/null') != 0) {
+               skip 'accf_http not loaded: kldload accf_http', 1;
+       }
+       require PublicInbox::Daemon;
+       my $var = PublicInbox::Daemon::SO_ACCEPTFILTER();
+       my $x = getsockopt($sock, SOL_SOCKET, $var);
+       like($x, qr/\Ahttpready\0+\z/, 'got httpready accf for HTTP');
+};
 
 done_testing();