diff options
Diffstat (limited to 'contrib/cirrus/pr-removes-fixed-skips.t')
-rwxr-xr-x | contrib/cirrus/pr-removes-fixed-skips.t | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/contrib/cirrus/pr-removes-fixed-skips.t b/contrib/cirrus/pr-removes-fixed-skips.t new file mode 100755 index 000000000..c936892cd --- /dev/null +++ b/contrib/cirrus/pr-removes-fixed-skips.t @@ -0,0 +1,134 @@ +#!/usr/bin/perl -w + +# Don't care if these modules don't exist in CI; only Ed runs this test +use v5.14; +use Test::More; +use Test::Differences; +use File::Basename; +use File::Path qw(make_path remove_tree); +use File::Temp qw(tempdir); +use FindBin; + +# Simpleminded parser tests. LHS gets glommed together into one long +# github message; RHS (when present) is the expected subset of issue IDs +# that will be parsed from it. +# +# Again, we glom the LHS into one long multiline string. There doesn't +# seem to be much point to testing line-by-line. +my $parser_tests = <<'END_PARSER_TESTS'; +Fixes 100 +Fixes: 101 +Closes 102 + +Fixes: #103 | 103 +Fix: #104, #105 | 104 +Resolves: #106 closes #107 | 106 107 + +fix: #108, FIXES: #109, FiXeD: #110 | 108 109 110 +Close: #111 resolved: #112 | 111 112 +END_PARSER_TESTS + + +# Read tests from __END__ section of this script +my @full_tests; +while (my $line = <DATA>) { + chomp $line; + + if ($line =~ /^==\s+(.*)/) { + push @full_tests, + { name => $1, issues => [], files => {}, expect => [] }; + } + elsif ($line =~ /^\[([\d\s,]+)\]$/) { + $full_tests[-1]{issues} = [ split /,\s+/, $1 ]; + } + + # 1 1 23 3 4 4 5 52 + elsif ($line =~ m!^(\!|\+)\s+((\S+):(\d+):(.*))$!) { + push @{$full_tests[-1]{expect}}, $2 if $1 eq '+'; + + $full_tests[-1]{files}{$3}[$4] = $5; + } +} + +plan tests => 1 + 1 + @full_tests; + +require_ok "$FindBin::Bin/pr-removes-fixed-skips"; + +# +# Parser tests. Just run as one test. +# +my $msg = ''; +my @parser_expect; +for my $line (split "\n", $parser_tests) { + if ($line =~ s/\s+\|\s+([\d\s]+)$//) { + push @parser_expect, split ' ', $1; + } + $msg .= $line . "\n"; +} + +my @parsed = Podman::CI::PrRemovesFixedSkips::fixed_issues($msg); +eq_or_diff \@parsed, \@parser_expect, "parser parses issue IDs"; + +############################################################################### + +# +# Full tests. Create dummy source-code trees and verify that our check runs. +# +my $tmpdir = tempdir(basename($0) . ".XXXXXXXX", TMPDIR => 1, CLEANUP => 1); +chdir $tmpdir + or die "Cannot cd $tmpdir: $!"; +mkdir $_ for qw(cmd libpod pkg test); +for my $t (@full_tests) { + for my $f (sort keys %{$t->{files}}) { + my $lineno = 0; + make_path(dirname($f)); + open my $fh, '>', $f or die; + + my @lines = @{$t->{files}{$f}}; + for my $i (1 .. @lines + 10) { + my $line = $lines[$i] || "[line $i intentionally left blank]"; + print { $fh } $line, "\n"; + } + close $fh + or die; + } + + # FIXME: run test + my @actual = Podman::CI::PrRemovesFixedSkips::unremoved_skips(@{$t->{issues}}); + eq_or_diff \@actual, $t->{expect}, $t->{name}; + + # clean up + unlink $_ for sort keys %{$t->{files}}; +} + +chdir '/'; + +__END__ + +== basic test +[12345] +! test/foo/bar/foo.bar:10: skip "#12345: not a .go file" ++ test/foo/bar/foo.go:17: skip "#12345: this one should be found" ++ test/zzz/foo.bats:10: # FIXME: #12345: we detect FIXMEs also + +== no substring matches +[123] +! test/system/123-foo.bats:12: skip "#1234: should not match 123" +! test/system/123-foo.bats:13: skip "#0123: should not match 123" + +== multiple matches +[456, 789] ++ cmd/podman/foo_test.go:10: Skip("#456 - blah blah") +! cmd/podman/foo_test.go:15: Skip("#567 - not a match") ++ cmd/podman/foo_test.go:19: Skip("#789 - match 2nd issue") ++ cmd/podman/zzz_test.go:12: Skip("#789 - in another file") + +== no match on bkp files +[10101] +! pkg/podman/foo_test.go~:10: Skip("#10101: no match in ~ file") +! pkg/podman/foo_test.go.bkp:10: Skip("#10101: no match in .bkp file") + +== no match if Skip is commented out +[123] +! test/e2e/foo_test.go:10: // Skip("#123: commented out") +! test/system/012-foo.bats:20: # skip "#123: commented out" |