13d006088Sbeck#!/usr/bin/perl 23d006088Sbeck 3*f1bd1ab1Sbeck# $OpenBSD: check.perl,v 1.3 2020/07/16 01:50:25 beck Exp $ 43d006088Sbeck# 53d006088Sbeck# Copyright (c) 2020 Bob Beck <beck@openbsd.org> 63d006088Sbeck# 73d006088Sbeck# Permission to use, copy, modify, and distribute this software for any 83d006088Sbeck# purpose with or without fee is hereby granted, provided that the above 93d006088Sbeck# copyright notice and this permission notice appear in all copies. 103d006088Sbeck# 113d006088Sbeck# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 123d006088Sbeck# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 133d006088Sbeck# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 143d006088Sbeck# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 153d006088Sbeck# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 163d006088Sbeck# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 173d006088Sbeck# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 183d006088Sbeck# 193d006088Sbeck 203d006088Sbeckmy $num_args = $#ARGV + 1; 213d006088Sbeckif ($num_args != 3) { 223d006088Sbeck print "\nUsage: test.perl expected known testoutput\n"; 233d006088Sbeck exit 1; 243d006088Sbeck} 253d006088Sbeck 263d006088Sbeckmy $expected_file=$ARGV[0]; 273d006088Sbeckmy $known_file=$ARGV[1]; 28*f1bd1ab1Sbeckmy $output_file=$ARGV[2]; 293d006088Sbeck 303d006088Sbeckopen (OUT, "<$output_file") || die "can't open $output_file"; 313d006088Sbeckopen (KNOWN, "<$known_file") || die "can't open $known_file"; 323d006088Sbeckopen (EXPECTED, "<$expected_file") || die "can't open $expected_file"; 333d006088Sbeck 343d006088Sbeckmy @expectedip; 353d006088Sbeckmy @expecteddns; 363d006088Sbeckmy @knownip; 373d006088Sbeckmy @knowndns; 383d006088Sbeckmy @outip; 393d006088Sbeckmy @outdns; 403d006088Sbeck 413d006088Sbeckmy $i = 0; 423d006088Sbeckwhile(<OUT>) { 433d006088Sbeck chomp; 443d006088Sbeck my @line = split(','); 453d006088Sbeck my $id = $line[0]; 463d006088Sbeck die "$id mismatch with $i" if ($id != $i + 1); 473d006088Sbeck $outdns[$i] = $line[1]; 483d006088Sbeck $outip[$i] = $line[2]; 493d006088Sbeck $i++; 503d006088Sbeck} 513d006088Sbeck$i = 0; 523d006088Sbeckwhile(<KNOWN>) { 533d006088Sbeck chomp; 543d006088Sbeck my @line = split(','); 553d006088Sbeck my $id = $line[0]; 563d006088Sbeck die "$id mismatch with $i" if ($id != $i + 1); 573d006088Sbeck $knowndns[$i] = $line[1]; 583d006088Sbeck $knownip[$i] = $line[2]; 593d006088Sbeck $i++; 603d006088Sbeck} 613d006088Sbeck$i = 0; 623d006088Sbeckwhile(<EXPECTED>) { 633d006088Sbeck chomp; 643d006088Sbeck my @line = split(','); 653d006088Sbeck my $id = $line[0]; 663d006088Sbeck die "$id mismatch with $i" if ($id != $i + 1); 673d006088Sbeck $expecteddns[$i] = $line[1]; 683d006088Sbeck $expectedip[$i] = $line[2]; 693d006088Sbeck $i++; 703d006088Sbeck} 713d006088Sbeckmy $id; 723d006088Sbeckmy $regressions = 0; 733d006088Sbeckmy $known = 0; 743d006088Sbeckfor ($id = 0; $id < $i; $id++) { 75*f1bd1ab1Sbeck my $cert = $id + 1; 763d006088Sbeck my $ipknown = ($outip[$id] eq $knownip[$id]); 773d006088Sbeck my $dnsknown = ($outdns[$id] eq $knowndns[$id]); 783d006088Sbeck if ($expecteddns[$id] ne $outdns[$id] && $expecteddns[$id] !~ /WEAK/) { 79*f1bd1ab1Sbeck print STDERR "$cert DNS expected $expecteddns[$id] known $knowndns[$id] result $outdns[$id]"; 803d006088Sbeck if ($dnsknown) { 81*f1bd1ab1Sbeck print STDERR " (known failure)\n"; 823d006088Sbeck $known++; 833d006088Sbeck } else { 84*f1bd1ab1Sbeck print STDERR " (REGRESSED)\n"; 853d006088Sbeck $regressions++; 863d006088Sbeck } 873d006088Sbeck } 883d006088Sbeck if ($expectedip[$id] ne $outip[$id] && $expectedip[$id] !~ /WEAK/) { 89*f1bd1ab1Sbeck print STDERR "$cert IP expected $expectedip[$id] known $knownip[$id] result $outip[$id]"; 903d006088Sbeck if ($ipknown) { 91*f1bd1ab1Sbeck print STDERR " (known failure)\n"; 923d006088Sbeck $known++; 933d006088Sbeck } else { 94*f1bd1ab1Sbeck print STDERR " (REGRESSED)\n"; 953d006088Sbeck $regressions++; 963d006088Sbeck } 973d006088Sbeck } 983d006088Sbeck} 993d006088Sbeckprint "\n\nTested $i certificates\n"; 1003d006088Sbeckif ($regressions == 0) { 1013d006088Sbeck print STDERR "SUCCESS - no new regressions ($known known failures)\n"; 102aebafcd6Sbeck exit 0; 1033d006088Sbeck} else { 1043d006088Sbeck print STDERR "FAILED - $regressions new regressions ($known known failures)\n"; 105aebafcd6Sbeck exit 1; 1063d006088Sbeck} 1073d006088Sbeck 1083d006088Sbeck 109