From 9ebca50f1c1771658366aa84f52e917baae2be6c Mon Sep 17 00:00:00 2001 From: Jacob Bachmeyer Date: Fri, 28 Apr 2023 18:24:32 -0500 Subject: [PATCH] Add serials file timestamp database checks to upload triplet tests --- testsuite/gatekeeper.all/03_triplet.exp | 35 ++++++++++++++++++++++--- testsuite/lib/tool/gatekeeper.exp | 19 +++++++++++++- 2 files changed, 50 insertions(+), 4 deletions(-) diff --git a/testsuite/gatekeeper.all/03_triplet.exp b/testsuite/gatekeeper.all/03_triplet.exp index 2eaa756..f8bec87 100644 --- a/testsuite/gatekeeper.all/03_triplet.exp +++ b/testsuite/gatekeeper.all/03_triplet.exp @@ -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 { diff --git a/testsuite/lib/tool/gatekeeper.exp b/testsuite/lib/tool/gatekeeper.exp index a096320..8238987 100644 --- a/testsuite/lib/tool/gatekeeper.exp +++ b/testsuite/lib/tool/gatekeeper.exp @@ -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 -- 2.25.1