]> Sergey Matveev's repositories - public-inbox.git/blobdiff - xt/mem-imapd-tls.t
imap+nntp: share COMPRESS implementation
[public-inbox.git] / xt / mem-imapd-tls.t
index accf7564eddbe56b4ff9ce3ca2965f66fed42219..d728ce32ac57b5aa34842f06936abc37cb2b597e 100644 (file)
@@ -1,15 +1,15 @@
 #!perl -w
-# Copyright (C) 2020 all contributors <meta@public-inbox.org>
+# Copyright (C) all contributors <meta@public-inbox.org>
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
 # 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;
+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;
 }