X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=xt%2Fmem-imapd-tls.t;h=8992a6fc0d8dc96dfe835ad5d00bae179e0889be;hb=60848de2194f0c518bd660860e9458dd765d0a3e;hp=accf7564eddbe56b4ff9ce3ca2965f66fed42219;hpb=3d52c093ad5ce7a32f8842d9ae020712f9786352;p=public-inbox.git
diff --git a/xt/mem-imapd-tls.t b/xt/mem-imapd-tls.t
index accf7564..8992a6fc 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) 2020-2021 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));
+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;
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;
}