X-Git-Url: http://www.git.stargrave.org/?p=public-inbox.git;a=blobdiff_plain;f=t%2Fplack.t;h=a5fd54c9981c3c845b05262085e789ed6b867155;hp=8d8aa10088d1c0b8afafb33f101de38a08410d6f;hb=4eee5af6011cc8cdefb66c9729952c7eff5c0b0b;hpb=af0b0fb7a454470a32c452119d0392e0dedb3fe1 diff --git a/t/plack.t b/t/plack.t index 8d8aa100..a5fd54c9 100644 --- a/t/plack.t +++ b/t/plack.t @@ -1,67 +1,45 @@ +#!perl -w # Copyright (C) 2014-2021 all contributors # License: AGPL-3.0+ use strict; -use warnings; -use Test::More; +use v5.10.1; use PublicInbox::TestCommon; my $psgi = "./examples/public-inbox.psgi"; -my ($tmpdir, $for_destroy) = tmpdir(); -my $pi_config = "$tmpdir/config"; -my $inboxdir = "$tmpdir/main.git"; -my $addr = 'test-public@example.com'; my @mods = qw(HTTP::Request::Common Plack::Test URI::Escape); require_mods(@mods); -use_ok 'PublicInbox::Import'; -use_ok 'PublicInbox::Git'; -my @ls; - foreach my $mod (@mods) { use_ok $mod; } -local $ENV{PI_CONFIG} = $pi_config; ok(-f $psgi, "psgi example file found"); my $pfx = 'http://example.com/test'; -ok(run_script(['-init', 'test', $inboxdir, "$pfx/", $addr]), - 'initialized repo'); -xsys_e(qw(git config -f), $pi_config, - qw(publicinbox.test.newsgroup inbox.test)); -open my $fh, '>', "$inboxdir/description" or die "open: $!\n"; -print $fh "test for public-inbox\n"; -close $fh or die "close: $!\n"; -my $app = require $psgi; -my $git = PublicInbox::Git->new($inboxdir); -my $im = PublicInbox::Import->new($git, 'test', $addr); -# ensure successful message delivery -{ - my $mime = PublicInbox::Eml->new(<{-primary_address}; + $im->add($eml) or xbail '->add'; + $eml->header_set('Content-Type', + "text/plain; charset=\rso\rb\0gus\rithurts"); + $eml->header_set('Message-ID', ''); + $im->add($eml) or xbail '->add'; + $im->add(PublicInbox::Eml->new(<add'; From: Me To: You Cc: $addr Message-Id: Subject: hihi Date: Fri, 02 Oct 1993 00:00:00 +0000 +Content-Type: text/plain; charset=iso-8859-1 > quoted text zzzzzz EOF - $im->add($mime); - $im->done; - my $rev = $git->qx(qw(rev-list HEAD)); - like($rev, qr/\A[a-f0-9]{40,}/, "good revision committed"); - @ls = $git->qx(qw(ls-tree -r --name-only HEAD)); - chomp @ls; - # multipart with two text bodies - $mime = eml_load 't/plack-2-txt-bodies.eml'; - $im->add($mime); + $im->add(eml_load('t/plack-2-txt-bodies.eml')) or BAIL_OUT '->add'; # multipart with attached patch + filename - $mime = eml_load 't/plack-attached-patch.eml'; - $im->add($mime); + $im->add(eml_load('t/plack-attached-patch.eml')) or BAIL_OUT '->add'; # multipart collapsed to single quoted-printable text/plain - $mime = eml_load 't/plack-qp.eml'; - like($mime->body_raw, qr/hi =3D bye=/, 'our test used QP correctly'); - $im->add($mime); - + $im->add(eml_load('t/plack-qp.eml')) or BAIL_OUT '->add'; my $crlf = < @@ -77,11 +55,24 @@ Date: Fri, 02 Oct 1993 00:00:00 +0000 :( EOF $crlf =~ s/\n/\r\n/sg; - $im->add(PublicInbox::Eml->new($crlf)); + $im->add(PublicInbox::Eml->new($crlf)) or BAIL_OUT '->add'; - $im->done; -} + open my $fh, '>', "$ibx->{inboxdir}/description" or BAIL_OUT "open: $!"; + print $fh "test for public-inbox\n" or BAIL_OUT; + close $fh or BAIL_OUT "close: $!"; + open $fh, '>', "$ibx->{inboxdir}/pi_config"; + print $fh <{inboxdir} + newsgroup = inbox.test + address = $addr + url = $pfx/ +EOF + close $fh or BAIL_OUT "close: $!"; +}); +local $ENV{PI_CONFIG} = "$ibx->{inboxdir}/pi_config"; +my $app = require $psgi; test_psgi($app, sub { my ($cb) = @_; foreach my $u (qw(robots.txt favicon.ico .well-known/foo)) { @@ -94,10 +85,13 @@ test_psgi($app, sub { my ($cb) = @_; my $res = $cb->(GET('http://example.com/test/crlf@example.com/')); is($res->code, 200, 'retrieved CRLF as HTML'); + like($res->content, qr/mailto:me\@example/, 'no %40, per RFC 6068'); unlike($res->content, qr/\r/, 'no CR in HTML'); $res = $cb->(GET('http://example.com/test/crlf@example.com/raw')); is($res->code, 200, 'retrieved CRLF raw'); like($res->content, qr/\r/, 'CR preserved in raw message'); + $res = $cb->(GET('http://example.com/test/bogus@example.com/raw')); + is($res->code, 404, 'missing /raw is 404'); }); # redirect with newsgroup @@ -209,6 +203,19 @@ test_psgi($app, sub { my $res = $cb->(GET($pfx . '/blah@example.com/raw')); is(200, $res->code, 'success response received for /*/raw'); like($res->content, qr!^From !sm, "mbox returned"); + is($res->header('Content-Type'), 'text/plain; charset=iso-8859-1', + 'charset from message used'); + + $res = $cb->(GET($pfx . '/broken@example.com/raw')); + is($res->header('Content-Type'), 'text/plain; charset=UTF-8', + 'broken charset ignored'); + + $res = $cb->(GET($pfx . '/199707281508.AAA24167@hoyogw.example/raw')); + is($res->header('Content-Type'), 'text/plain; charset=ISO-2022-JP', + 'ISO-2002-JP returned'); + chomp(my $body = $res->content); + my $raw = PublicInbox::Eml->new(\$body); + is($raw->body_raw, $eml->body_raw, 'ISO-2022-JP body unmodified'); $res = $cb->(GET($pfx . '/blah@example.com/t.mbox.gz')); is(501, $res->code, '501 when overview missing'); @@ -259,8 +266,7 @@ test_psgi($app, sub { # for a while, we used to support /$INBOX/$X40/ # when we "compressed" long Message-IDs to SHA-1 # Now we're stuck supporting them forever :< - foreach my $path (@ls) { - $path =~ tr!/!!d; + foreach my $path ('f2912279bd7bcd8b7ab3033234942d58746d56f7') { my $from = "http://example.com/test/$path/"; my $res = $cb->(GET($from)); is(301, $res->code, 'is permanent redirect');