Browse Source

add more tests

Pi 1 year ago
parent
commit
ca23a4ff9f
4 changed files with 68 additions and 25 deletions
  1. 3 1
      cropswap-sendmail.sh
  2. 15 4
      filters/cropswap@shandan.one
  3. 27 13
      filters/postmaster@localhost
  4. 23 7
      test.sh

+ 3 - 1
cropswap-sendmail.sh

@@ -66,7 +66,9 @@ for email in "${!SUBSCRIBED[@]}"; do
 	if [ "$TO" != "" ] && [ "$email" != "$TO" ]; then
 		continue
 	fi
-	echo "Forwarding mail to: ${SUBSCRIBED["$email"]} <${email}>"
+	echo "Forwarding mail: "
+	echo "From: ${FROM} <${MAILGROUP}>"
+	echo "To: ${SUBSCRIBED["$email"]} <${email}>"
 	"$SENDMAIL" -F "${FROM}" -f "${MAILGROUP}" "${SUBSCRIBED["$email"]} <${email}>" < "${WD}/mail"
 	DELIVERED=true
 done

+ 15 - 4
filters/cropswap@shandan.one

@@ -16,13 +16,24 @@ elsif ($CONTINUE)
    gdbmopen($MLIST, "R")
    ALIAS=gdbmfetch(tolower($FROM))
    gdbmclose
+
    if ($ALIAS eq "")
    {
       #
       # TODO: test this works at all
       # should at least drop list headers
       SLIST="$LISTDIR/alist"
-      FROM=$FROM
+      MAILGROUP=$FROM
+      cc "|$DEBUGMAIL inspect-match-alias"
+      if (/^From:\s*("(.*)"|(.*))\s*\<.*\>$/)
+      {
+         ALIAS="$MATCH2$MATCH3"
+      }
+      else
+      {
+         ALIAS=""
+      }
+      FROM=$ALIAS
       to "!"
    }
 
@@ -38,7 +49,7 @@ elsif ($CONTINUE)
       # TODO: test this works at all
       # should at least drop list headers
       SLIST="$LISTDIR/alist"
-      FROM=$FROM
+      FROM=$ALIAS
       to "!"
    }
    gdbmclose
@@ -48,7 +59,7 @@ elsif ($CONTINUE)
    ORGANIZER=gdbmfetch(tolower($FROM))
    gdbmclose
 
-   if ($ORGANIZER eq "")
+   if ($ORGANIZER eq "NONE" || $ORGANIZER eq "")
    {
       SLIST="$LISTDIR/alist"
       FROM=$ALIAS
@@ -57,7 +68,7 @@ elsif ($CONTINUE)
 
    #
    # Organizers only
-   FROM=$ORGANIZER
+   FROM=$ALIAS
    SUBJECT="Crop Swap Notice"
    SLIST="$LISTDIR/slist"
    to "!"

+ 27 - 13
filters/postmaster@localhost

@@ -38,21 +38,35 @@ elsif ($CONTINUE)
          gdbmopen($SLIST, "C")
          if (/^X-AUTH:\s(.+)\s*$/)
          {
-            if (gdbmstore(tolower($FROM), "$MATCH1"))
-            {
-               gdbmclose
-               EXITCODE=$FATAL
-               cc "|$DEBUGMAIL 'auth-store-fail'"
-               exit
-            }
-            system "$SUBUNSUB '$SUBSCRIBE' '$KEY' '$FROM'"
-            if ($EXITCODE)
-            {
-               cc "|$DEBUGMAIL 'auth-sub-fail'"
-               exit
-            }
+            AUTH=$MATCH1
+         }
+         else
+         {
+            AUTH="NONE"
+         }
+         if (gdbmstore(tolower($FROM), "$AUTH"))
+         {
+            gdbmclose
+            EXITCODE=$FATAL
+            cc "|$DEBUGMAIL 'auth-store-fail'"
+            exit
+         }
+         if ($AUTH ne "NONE")
+         {
+            SUBSCRIBE="SUBSCRIBE"
+         }
+         else
+         {
+            SUBSCRIBE="UNSUBSCRIBE"
+         }
+         system "$SUBUNSUB '$SUBSCRIBE' '$KEY' '$FROM'"
+         if ($EXITCODE)
+         {
+            cc "|$DEBUGMAIL 'auth-sub-fail'"
+            exit
          }
          gdbmclose
+         cc "|$DEBUGMAIL mailbot-reply"
          to "|$MAILBOT"
       }
       else

+ 23 - 7
test.sh

@@ -25,14 +25,30 @@ EOF
 ./cropswap-postmaster.sh SUBSCRIBE cropswap@shandan.one organizer2@mail.com &>/dev/null
 
 set -x
-maildrop -fmember@mail.com < tests/cropswap@shandan.one/from-member.eml 1>"${MAILDROPDIR}/forward.out" 2>"${MAILDROPDIR}/forward.err"
+maildrop -fmember1@mail.com < tests/cropswap@shandan.one/from-member.eml 1>"${MAILDROPDIR}/forward.out" 2>"${MAILDROPDIR}/forward.err"
+grep '^From: Member <cropswap@shandan.one>$' < forward.out
+grep '^To: Organizer <organizer1@mail.com>$' < forward.out
+grep '^To: Organizer 1 <organizer2@mail.com>$' < forward.out
 grep '^Subject: \[Crop Swap Query\] .*$' < forward.out
-grep '^Forwarding mail to: Organizer <organizer1@mail.com>$' < forward.out
-grep '^Forwarding mail to: Organizer 1 <organizer2@mail.com>$' < forward.out
-#maildrop -fmember@mail.com < tests/cropswap@shandan.one/from-member.eml #&2>1 | grep '^SUBJECT=Crop Swap Query$'
 
-# not working - alist.txt empty
-#maildrop -funregistered@mail.com < tests/cropswap@shandan.one/from-unregistered.eml | grep '^Subject: \[Crop Swap Query\] .*$'
-#maildrop -funregistered@mail.com < tests/cropswap@shandan.one/from-unregistered.eml &2>1 | grep '^SUBJECT=Crop Swap Query$'
+maildrop -funregistered@mail.com < tests/cropswap@shandan.one/from-unregistered.eml 1>"${MAILDROPDIR}/forward.out" 2>"${MAILDROPDIR}/forward.err"
+grep '^From: A. Person <unregistered@mail.com>$' < forward.out
+grep '^To: Organizer <organizer1@mail.com>$' < forward.out
+grep '^To: Organizer 1 <organizer2@mail.com>$' < forward.out
+grep '^To: Member <member1@mail.com>$' < forward.out && false
+grep '^To: Member 1 <member2@mail.com>$' < forward.out && false
+grep '^Subject: \[Crop Swap Query\] .*$' < forward.out
 
+maildrop -forganizer1@mail.com < tests/cropswap@shandan.one/from-organizer-to-member.eml 1>"${MAILDROPDIR}/forward.out" 2>"${MAILDROPDIR}/forward.err"
+grep '^From: Organizer <cropswap@shandan.one>$' < forward.out
+grep '^To: Organizer 1 <organizer2@mail.com>$' < forward.out && false
+grep '^To: Member <member1@mail.com>$' < forward.out && false
+grep '^To: Member 1 <member2@mail.com>$' < forward.out
+grep '^Subject: \[Crop Swap Notice\] .*$' < forward.out
 
+maildrop -forganizer2@mail.com < tests/cropswap@shandan.one/from-organizer.eml 1>"${MAILDROPDIR}/forward.out" 2>"${MAILDROPDIR}/forward.err"
+grep '^From: Organizer 1 <cropswap@shandan.one>$' < forward.out
+grep '^To: Organizer <organizer1@mail.com>$' < forward.out
+grep '^To: Member <member1@mail.com>$' < forward.out
+grep '^To: Member 1 <member2@mail.com>$' < forward.out
+grep '^Subject: \[Crop Swap Notice\] .*$' < forward.out