mirror of
https://github.com/clearlinux/swupd-client.git
synced 2026-09-08 14:42:02 +00:00
Fixes #307 Previously to this change, lines-checked may have contained lines matching patterns from the ignore-list, but matcher.awk does not expect this situation and may result in difficult-to-diagnose test failures. Instead, pre-validate lines-checked and if this validation fails, exit with status code 2. Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
97 lines
2.2 KiB
Awk
97 lines
2.2 KiB
Awk
BEGIN {
|
|
checked_idx = 0
|
|
checked_count = 0
|
|
early_exit = 0
|
|
}
|
|
|
|
# There are several lines that can be ignored for all tests.
|
|
FILENAME ~ /ignore-list/ {
|
|
toignore[$0]++
|
|
}
|
|
|
|
# Checks if LINE matches any pattern in the "toignore" array. Returns the first
|
|
# matching pattern if true, 0 if false.
|
|
function is_ignored(line) {
|
|
for (pattern in toignore) {
|
|
if (line ~ pattern) {
|
|
return pattern
|
|
}
|
|
}
|
|
return 0
|
|
}
|
|
|
|
# Read all checked lines into an indexed array, later referenced when reading
|
|
# the file containing swupd output.
|
|
FILENAME ~ /lines-checked/ {
|
|
# Validate that none of these lines match the patterns from the ignore list,
|
|
# since the comparison of lines-checked to lines-output requires it.
|
|
result = is_ignored($0)
|
|
if (result) {
|
|
bad_lines[bad_count++] = sprintf("'%s' matches '%s'", $0, result)
|
|
next
|
|
}
|
|
|
|
tocheck[checked_count++] = $0
|
|
}
|
|
|
|
FILENAME ~ /lines-output/ {
|
|
if (0 in bad_lines) {
|
|
exit 2
|
|
}
|
|
|
|
# Skip to the next line if the current line matches any patterns from the
|
|
# global ignore list.
|
|
if (is_ignored($0)) {
|
|
next
|
|
}
|
|
|
|
# An output line may match a regular expression from lines-checked, which
|
|
# begins with the "REGEXP:" prefix. Otherwise, the line is checked as a
|
|
# literal string.
|
|
is_regexp = match(tocheck[checked_idx], /^REGEXP:/)
|
|
|
|
if (is_regexp != 0) {
|
|
regexp = substr(tocheck[checked_idx], RLENGTH + 1)
|
|
if ($0 ~ regexp) {
|
|
matched = 1
|
|
} else {
|
|
matched = 0
|
|
}
|
|
} else {
|
|
if ($0 == tocheck[checked_idx]) {
|
|
matched = 1
|
|
} else {
|
|
matched = 0
|
|
}
|
|
}
|
|
|
|
if (matched == 1) {
|
|
# We found a match, so move to the next entry in lines-checked.
|
|
checked_idx++
|
|
} else {
|
|
# When a line is not checked or not ignored, it's an error
|
|
early_exit = 1
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
END {
|
|
if (0 in bad_lines) {
|
|
printf("\nDetected ignored lines in lines-checked:\n\n")
|
|
for (i in bad_lines) {
|
|
printf(" %s\n", bad_lines[i])
|
|
}
|
|
printf("\n")
|
|
exit 2
|
|
}
|
|
|
|
if (early_exit == 0 && checked_idx < checked_count) {
|
|
printf("\nDetected missing line(s) in the output, beginning with:\n")
|
|
printf("\n %s\n", tocheck[checked_idx])
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
|
|
# vi: ft=awk sw=2 sts=2 et tw=80
|