Add serials file timestamp database checks to upload triplet tests
authorJacob Bachmeyer <jcb@gnu.org>
Fri, 28 Apr 2023 23:24:32 +0000 (18:24 -0500)
committerJacob Bachmeyer <jcb@gnu.org>
Fri, 28 Apr 2023 23:24:32 +0000 (18:24 -0500)
testsuite/gatekeeper.all/03_triplet.exp
testsuite/lib/tool/gatekeeper.exp

index 2eaa7560e0fbe3cf1cfa0ca5830f585f4ef3211b..f8bec87f5becbecf5fad296d344e424230c97136 100644 (file)
@@ -1,6 +1,6 @@
 # Tests for processing upload triplets
 
-# Copyright (C) 2021, 2022 Jacob Bachmeyer
+# Copyright (C) 2021, 2022, 2023 Jacob Bachmeyer
 #
 # This file is part of a testsuite for the GNU FTP upload system.
 #
@@ -27,7 +27,7 @@ proc check_triplet { desc args } {
        files {} symlinks {} packages {}
     }
     array set check {
-       email-to {} log {} file-tree {}
+       email-to {} log {} file-tree {} serials unchanged
     }
     array set setup $data(setup)
     array set check $data(check)
@@ -41,6 +41,7 @@ proc check_triplet { desc args } {
 
     register_test_packages $tenv $setup(packages)
 
+    array set serials {}
     foreach {zone filelist} $setup(files) {
        foreach {file sig} $filelist {
            file mkdir [file dirname [file join $tenv $zone $file]]
@@ -52,6 +53,8 @@ proc check_triplet { desc args } {
                         [eval [list make_test_signature] $sig]]
                age_file [file join $tenv $zone "${file}.sig"] "10 minutes ago"
            }
+           set serials($file,name) $file
+           set serials($file,timestamp) "20 minutes ago"
        }
     }
     foreach {zone linklist} $setup(symlinks) {
@@ -62,7 +65,16 @@ proc check_triplet { desc args } {
        }
     }
 
-    foreach {tag case} $data(upload) { make_test_case $tenv [list $tag $case] }
+    set serials_list [list]
+    foreach {key value} [array get serials *,name] {
+       lappend serials_list \
+           [list $serials($key) $serials($serials($key),timestamp)]
+    }
+    write_serials_v0 [file join $tenv state serials] $serials_list
+
+    foreach {tag case} $data(upload) {
+       make_test_case $tenv [list $tag $case] serials
+    }
 
     start_test_services $tenv
     run_upload_batch_test
@@ -77,6 +89,17 @@ proc check_triplet { desc args } {
        }
     }
 
+    if { $check(serials) eq "updated" } {
+       # only expect serials file to change if so indicated
+       set serials_list [list]
+       foreach {key value} [array get serials *,name] {
+           lappend serials_list \
+               [list $serials($key) $serials($serials($key),timestamp)]
+       }
+    }
+    check_serials_v0 "triplet: $desc" \
+       [file join $tenv state serials] $serials_list
+
     close_test_environment $tenv
 }
 
@@ -1231,6 +1254,7 @@ foreach FVER $DIRECTIVE_FORMAT_VERSIONS {
            file { test } fsig { good 03 1000 }
        }
     }] check [subst {
+       serials updated
        file-tree {
            { inbox scratch stage archive } empty {}
            { pub } files {
@@ -1268,6 +1292,7 @@ foreach FVER $DIRECTIVE_FORMAT_VERSIONS {
            file { test } fsig { good 05 1000 }
        }
     }] check [subst {
+       serials updated
        file-tree {
            { inbox scratch stage archive } empty {}
            { pub } files {
@@ -1342,6 +1367,7 @@ foreach FVER $DIRECTIVE_FORMAT_VERSIONS {
            file { test } fsig { good 09 2000 }
        }
     }] check [subst {
+       serials updated
        file-tree {
            { inbox scratch stage archive } empty {}
            { pub } files {
@@ -1381,6 +1407,7 @@ foreach FVER $DIRECTIVE_FORMAT_VERSIONS {
            file { test } fsig { good 0B 1000 }
        }
     }] check {
+       serials updated
        file-tree {
            { inbox stage archive } empty {}
            { scratch } files {
@@ -1424,6 +1451,7 @@ foreach FVER $DIRECTIVE_FORMAT_VERSIONS {
            file { test } fsig { good 0B 1000 }
        }
     }] check {
+       serials updated
        file-tree {
            { inbox stage archive } empty {}
            { scratch } files {
@@ -1510,6 +1538,7 @@ check_triplet "v1.2 format directive to replace file" setup {
        file { test } fsig { good 0F 1000 }
     }
 } check {
+    serials updated
     file-tree {
        { inbox scratch stage } empty {}
        { pub } files {
index a096320ba7c59275e9f8fc410bc6465388c65057..8238987ac58c74d368c0896d699620d69cfc43f0 100644 (file)
@@ -43,6 +43,7 @@ proc make_test_environment { base_dir } {
 load_lib mockgpg.exp
 load_lib envutils.exp
 load_lib keyindex.exp
+load_lib serials.exp
 
 # make_test_case /some/dir/some/where {
 #     some-package-name-1.2.3.bin {
@@ -66,9 +67,12 @@ load_lib keyindex.exp
 #      fsig { ... }
 #     }
 # }
-proc make_test_case { base_dir packlist } {
+proc make_test_case { base_dir packlist { serials_table {} } } {
+    if { $serials_table ne "" } { upvar 1 $serials_table serials }
+
     foreach { stem triplet } $packlist {
        array unset parts
+       unset -nocomplain -- directory filename
        foreach part {directive file fsig} {
            set "parts(${part}-mtime)" "3 minutes ago"
        }
@@ -78,11 +82,24 @@ proc make_test_case { base_dir packlist } {
            set directive {}
            foreach {key value} $parts(directive) {
                append directive [format "%s: %s\n" $key $value]
+               if { $key eq "filename"  }      { set filename  $value }
+               if { $key eq "directory" }      { set directory $value }
            }
            if { [info exists parts(dsig)] } {  # add signature
                set directive \
                    [sign_test_message $directive \
                         [eval make_test_signature $parts(dsig)]]
+               if { [lindex $parts(dsig) 0] eq "good"
+                    && [info exists filename] && [info exists directory]
+                    && $serials_table ne "" } {
+                   if { [llength $parts(dsig)] < 4 } {
+                       set serials($directory/$filename,timestamp) \
+                           "5 minutes ago"
+                   } else {
+                       set serials($directory/$filename,timestamp) \
+                           [lindex $parts(dsig) 3]
+                   }
+               }
            }
            put_file [file join $base_dir inbox "${stem}.directive.asc"] \
                $directive