# 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.
#
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)
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]]
[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) {
}
}
- 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
}
}
+ 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
}
file { test } fsig { good 03 1000 }
}
}] check [subst {
+ serials updated
file-tree {
{ inbox scratch stage archive } empty {}
{ pub } files {
file { test } fsig { good 05 1000 }
}
}] check [subst {
+ serials updated
file-tree {
{ inbox scratch stage archive } empty {}
{ pub } files {
file { test } fsig { good 09 2000 }
}
}] check [subst {
+ serials updated
file-tree {
{ inbox scratch stage archive } empty {}
{ pub } files {
file { test } fsig { good 0B 1000 }
}
}] check {
+ serials updated
file-tree {
{ inbox stage archive } empty {}
{ scratch } files {
file { test } fsig { good 0B 1000 }
}
}] check {
+ serials updated
file-tree {
{ inbox stage archive } empty {}
{ scratch } files {
file { test } fsig { good 0F 1000 }
}
} check {
+ serials updated
file-tree {
{ inbox scratch stage } empty {}
{ pub } files {
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 {
# 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"
}
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