X-Git-Url: http://www.git.stargrave.org/?p=public-inbox.git;a=blobdiff_plain;f=xt%2Fmem-imapd-tls.t;h=d728ce32ac57b5aa34842f06936abc37cb2b597e;hp=648a0ad3ae904b14b6f9648d2ade049dabaabde2;hb=23af251dd607c4e75ab1e68063f2c885c48cc035;hpb=4042599799a3706d1b1c0589675b07cab610505a diff --git a/xt/mem-imapd-tls.t b/xt/mem-imapd-tls.t index 648a0ad3..d728ce32 100644 --- a/xt/mem-imapd-tls.t +++ b/xt/mem-imapd-tls.t @@ -1,15 +1,15 @@ #!perl -w -# Copyright (C) 2020 all contributors +# Copyright (C) all contributors # License: AGPL-3.0+ # Idle client memory usage test, particularly after EXAMINE when # Message Sequence Numbers are loaded use strict; -use Test::More; +use v5.10.1; use Socket qw(SOCK_STREAM IPPROTO_TCP SOL_SOCKET); use PublicInbox::TestCommon; use PublicInbox::Syscall qw(:epoll); use PublicInbox::DS; -require_mods(qw(DBD::SQLite Email::Address::XS||Mail::Address)); +require_mods(qw(-imapd)); my $inboxdir = $ENV{GIANT_INBOX_DIR}; my $TEST_TLS; SKIP: { @@ -44,11 +44,13 @@ my $imaps = tcp_server(); EOF close $fh or die "close: $!\n"; } -my $imaps_addr = $imaps->sockhost . ':' . $imaps->sockport; +my $imaps_addr = tcp_host_port($imaps); my $env = { PI_CONFIG => $pi_config }; my $arg = $TEST_TLS ? [ "-limaps://$imaps_addr/?cert=$cert,key=$key" ] : []; my $cmd = [ '-imapd', '-W0', @$arg, "--stdout=$out", "--stderr=$err" ]; -my $td = start_script($cmd, $env, { 3 => $imaps }); + +# run_mode=0 ensures Test::More FDs don't get shared +my $td = start_script($cmd, $env, { 3 => $imaps, run_mode => 0 }); my %ssl_opt; if ($TEST_TLS) { %ssl_opt = ( @@ -93,7 +95,7 @@ foreach my $n (1..$nfd) { # one step through the event loop # do a little work as we connect: - PublicInbox::DS->EventLoop; + PublicInbox::DS::event_loop(); # try not to overflow the listen() backlog: if (!($n % 128) && $DONE != $n) { @@ -102,7 +104,7 @@ foreach my $n (1..$nfd) { PublicInbox::DS->SetPostLoopCallback(sub { $DONE != $n }); # clear the backlog: - PublicInbox::DS->EventLoop; + PublicInbox::DS::event_loop(); # resume looping PublicInbox::DS->SetLoopTimeout(0); @@ -115,7 +117,7 @@ diag "done?: @".time." $DONE/$nfd"; if ($DONE != $nfd) { PublicInbox::DS->SetLoopTimeout(-1); PublicInbox::DS->SetPostLoopCallback(sub { $DONE != $nfd }); - PublicInbox::DS->EventLoop; + PublicInbox::DS::event_loop(); } is($nfd, $DONE, "$nfd/$DONE done"); if ($^O eq 'linux' && open(my $f, '<', "/proc/$pid/status")) { @@ -131,8 +133,8 @@ done_testing; package IMAPC; use strict; -use base qw(PublicInbox::DS); -use fields qw(step zin); +use parent qw(PublicInbox::DS); +# fields: step: state machine, zin: Zlib inflate context use PublicInbox::Syscall qw(EPOLLIN EPOLLOUT EPOLLONESHOT); use Errno qw(EAGAIN); # determines where we start event_step @@ -206,26 +208,23 @@ sub event_step { sub new { my ($class, $io) = @_; - my $self = fields::new($class); - - # wait for connect(), and maybe SSL_connect() - $self->SUPER::new($io, EPOLLOUT|EPOLLONESHOT); + my $self = bless { step => FIRST_STEP }, $class; if ($io->can('connect_SSL')) { $self->{wbuf} = [ \&connect_tls_step ]; } - $self->{step} = FIRST_STEP; - $self; + # wait for connect(), and maybe SSL_connect() + $self->SUPER::new($io, EPOLLOUT|EPOLLONESHOT); } 1; package IMAPCdeflate; use strict; -use base qw(IMAPC); # parent doesn't work for fields -use Hash::Util qw(unlock_hash); # dependency of fields for perl 5.10+, anyways +our @ISA; use Compress::Raw::Zlib; -use PublicInbox::IMAPdeflate; +use PublicInbox::IMAP; my %ZIN_OPT; BEGIN { + @ISA = qw(IMAPC); %ZIN_OPT = ( -WindowBits => -15, -AppendOutput => 1 ); *write = \&PublicInbox::IMAPdeflate::write; *do_read = \&PublicInbox::IMAPdeflate::do_read; @@ -235,7 +234,6 @@ sub enable { my ($class, $self) = @_; my ($in, $err) = Compress::Raw::Zlib::Inflate->new(%ZIN_OPT); die "Inflate->new failed: $err" if $err != Z_OK; - unlock_hash(%$self); bless $self, $class; $self->{zin} = $in; }