xref: /openbsd-src/regress/lib/libcrypto/x509/bettertls/check.perl (revision f1bd1ab180a1026d9e088b301529fe55fbd6a7d8)
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