diff --git a/.github/actions/flatcurve-test-debian/Dockerfile b/.github/actions/flatcurve-test-debian/Dockerfile index 32a06e2..b520596 100644 --- a/.github/actions/flatcurve-test-debian/Dockerfile +++ b/.github/actions/flatcurve-test-debian/Dockerfile @@ -28,7 +28,8 @@ RUN apt-get update && apt-get install -y \ libexttextcat-dev \ libicu-dev \ libxapian-dev \ - dovecot-imaptest + dovecot-imaptest \ + poppler-utils # We need to build Dovecot ourselves, since "standard" Dovecot does not # come with necessary ICU libraries built-in diff --git a/.github/common/configs/dovecot.conf.issue-38 b/.github/common/configs/dovecot.conf.issue-38 new file mode 100644 index 0000000..87f5860 --- /dev/null +++ b/.github/common/configs/dovecot.conf.issue-38 @@ -0,0 +1,12 @@ +!include /dovecot/configs/dovecot.conf + +plugin { + fts_decoder = decode2text +} + +service decode2text { + executable = script /usr/local/libexec/dovecot/decode2text.sh + unix_listener decode2text { + mode = 0666 + } +} diff --git a/.github/common/fts-flatcurve-test.sh b/.github/common/fts-flatcurve-test.sh index 999376a..8e58aae 100755 --- a/.github/common/fts-flatcurve-test.sh +++ b/.github/common/fts-flatcurve-test.sh @@ -195,6 +195,10 @@ run_doveadm "fts-flatcurve stats -A rotatetest" # TODO: Scan for expected input echo "Success!" +run_test "Testing GitHub Issue #38" \ + /dovecot/configs/dovecot.conf.issue-38 \ + /dovecot/imaptest/issue-38/issue-38 + TESTBOX=INBOX echo echo "Testing 'doveadm fts-flatcurve remove'" @@ -210,6 +214,7 @@ for m in imaptest do populate_mbox_msg ${m} "Subject: msg1\n\nbody2\n" done + run_test "Testing virtual search" \ /dovecot/configs/dovecot.conf.virtual \ /dovecot/imaptest/virtual diff --git a/.github/common/imaptest/issue-38/default.mbox b/.github/common/imaptest/issue-38/default.mbox new file mode 100644 index 0000000..cbe8d4a --- /dev/null +++ b/.github/common/imaptest/issue-38/default.mbox @@ -0,0 +1,63 @@ +From user-from@domain Tue Jan 3 13:45:19 2023 +From: user-from@domain.org +To: user-to@example.org +Subject: test +X-Foo: test2 +MIME-Version: 1.0 +Content-Type: multipart/mixed; boundary=1234abcd + +--1234abcd +Content-Transfer-Encoding: base64 + +Ym9keWJvZHkK + +--1234abcd +Content-Type: application/vnd.oasis.opendocument.text; name="test.odt" +Content-Disposition: attachment; filename="test.odt" +Content-Transfer-Encoding: base64 + +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 + +--1234abcd-- diff --git a/.github/common/imaptest/issue-38/issue-38 b/.github/common/imaptest/issue-38/issue-38 new file mode 100644 index 0000000..bf2b929 --- /dev/null +++ b/.github/common/imaptest/issue-38/issue-38 @@ -0,0 +1,18 @@ +messages: all + +ok search body bodybody +* search 1 +ok search body attachment +* search 1 +ok search body test2 +* search +ok search or body test2 header x-foo test2 +* search 1 +ok search or body attachment header x-foo test2 +* search 1 +ok search or body attachment header x-foo baz +* search 1 +ok search body bodybody header x-foo test2 +* search 1 +ok search body attachment header x-foo test2 +* search 1