Add testsuite infrastructure for detecting repeated email addresses
authorJacob Bachmeyer <jcb@gnu.org>
Fri, 28 Oct 2022 22:43:15 +0000 (17:43 -0500)
committerJacob Bachmeyer <jcb@gnu.org>
Fri, 28 Oct 2022 22:43:15 +0000 (17:43 -0500)
testsuite/lib/gatekeeper.exp

index 38e996c98bbdf1823a3aab8d56c094d654b726d8..817c8616a2e6f9465f075afb3040c2b3c446e79f 100644 (file)
@@ -947,12 +947,14 @@ proc analyze_mail { base_dir name args } {
     foreach address $opt(to) { set expected_address($address) $address }
 
     verbose -log "begin: [string repeat - 60]"
+    set message_counter 0
     set messages_remain 1
     spawn -open [open [file join $base_dir mbox]]
     while { $messages_remain } {
        expect {
            -re {^From } {
                # at beginning of message
+               incr message_counter
            }
            -re {^[^\r\n]*[\r\n]+} { exp_continue }
            eof {
@@ -970,6 +972,12 @@ proc analyze_mail { base_dir name args } {
        expect {
            -re {^<([^>]+)> *} {
                set env_address($expect_out(1,string)) $expect_out(1,string)
+               if { [info exists \
+                         repeated($message_counter,$expect_out(1,string))] } {
+                   incr repeated($message_counter,$expect_out(1,string))
+               } else {
+                   set repeated($message_counter,$expect_out(1,string)) 1
+               }
                exp_continue
            }
            -re {^[\r\n]+} {
@@ -980,6 +988,13 @@ proc analyze_mail { base_dir name args } {
     verbose -log " done: [string repeat - 60]"
 
     set result pass
+    foreach { key count } [array get repeated] {
+       if { $count > 1 } {
+           regexp -- {^(\d+),(.*)$} $key -> message address
+           verbose -log "message $message repeats address $address" 0
+           set result fail
+       }
+    }
     foreach address [array names expected_address] {
        if { [info exists env_address($address)] } {
            unset env_address($address)