From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 613871F4B4 for ; Thu, 24 Sep 2020 20:51:45 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH] xt: add eml ->as_string round trip checker Date: Thu, 24 Sep 2020 20:51:45 +0000 Message-Id: <20200924205145.16754-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: Unlike Email::MIME, PublicInbox::Eml::as_string should be able to round trip from the Perl object to a raw scalar and back without changes. --- MANIFEST | 1 + xt/eml_check_roundtrip.t | 43 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 xt/eml_check_roundtrip.t diff --git a/MANIFEST b/MANIFEST index b6a681e9..65fa8736 100644 --- a/MANIFEST +++ b/MANIFEST @@ -385,6 +385,7 @@ t/xcpdb-reshard.t xt/cmp-msgstr.t xt/cmp-msgview.t xt/eml_check_limits.t +xt/eml_check_roundtrip.t xt/git-http-backend.t xt/git_async_cmp.t xt/httpd-async-stream.t diff --git a/xt/eml_check_roundtrip.t b/xt/eml_check_roundtrip.t new file mode 100644 index 00000000..9b216c53 --- /dev/null +++ b/xt/eml_check_roundtrip.t @@ -0,0 +1,43 @@ +#!perl -w +# Copyright (C) 2020 all contributors +# License: AGPL-3.0+ +use strict; +use Test::More; +use PublicInbox::TestCommon; +use PublicInbox::Eml; +use PublicInbox::Inbox; +use List::Util qw(max); +use Benchmark qw(:all :hireswallclock); +use PublicInbox::Spawn qw(popen_rd); +use Carp (); +require_git(2.19); # for --unordered +my $inboxdir = $ENV{GIANT_INBOX_DIR}; +plan skip_all => "GIANT_INBOX_DIR not defined for $0" unless $inboxdir; +my $ibx = PublicInbox::Inbox->new({ inboxdir => $inboxdir, name => 'x' }); +my $git = $ibx->git; +my @cat = qw(cat-file --buffer --batch-check --batch-all-objects --unordered); +my $fh = $git->popen(@cat); +my $cat_cb = sub { + my ($bref, $oid, $type, $size, $check) = @_; + my $orig = $$bref; + my $copy = PublicInbox::Eml->new($bref)->as_string; + ++$check->[$orig eq $copy ? 0 : 1]; +}; + +my $n = 0; +my $check = [ 0, 0 ]; # [ eql, neq ] +my $t = timeit(1, sub { + my ($blob, $type); + while (<$fh>) { + ($blob, $type) = split / /; + next if $type ne 'blob'; + $git->cat_async($blob, $cat_cb, $check); + if ((++$n % 8192) == 0) { + diag "n=$n eql=$check->[0] neq=$check->[1]"; + } + } + $git->cat_async_wait; +}); +is($check->[0], $n, 'all messages round tripped'); +is($check->[1], 0, 'no messages failed to round trip'); +done_testing;