aboutsummaryrefslogtreecommitdiff
path: root/test/recipes/02-test_ordinals.t
diff options
context:
space:
mode:
Diffstat (limited to 'test/recipes/02-test_ordinals.t')
-rw-r--r--test/recipes/02-test_ordinals.t61
1 files changed, 61 insertions, 0 deletions
diff --git a/test/recipes/02-test_ordinals.t b/test/recipes/02-test_ordinals.t
new file mode 100644
index 000000000000..710e7e23240f
--- /dev/null
+++ b/test/recipes/02-test_ordinals.t
@@ -0,0 +1,61 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+
+setup("test_ordinals");
+
+plan tests => 2;
+
+ok(testordinals(srctop_file("util", "libcrypto.num")), "Test libcrypto.num");
+ok(testordinals(srctop_file("util", "libssl.num")), "Test libssl.num");
+
+sub testordinals
+{
+ my $filename = shift;
+ my $cnt = 0;
+ my $ret = 1;
+ my $qualifier = "";
+ my $newqual;
+ my $lastfunc = "";
+
+ open(my $fh, '<', $filename);
+ while (my $line = <$fh>) {
+ my @tokens = split(/(?:\s+|\s*:\s*)/, $line);
+ #Check the line looks sane
+ if ($#tokens < 5 || $#tokens > 6) {
+ print STDERR "Invalid line:\n$line\n";
+ $ret = 0;
+ last;
+ }
+ if ($tokens[3] eq "NOEXIST") {
+ #Ignore this line
+ next;
+ }
+ #Some ordinals can be repeated, e.g. if one is VMS and another is !VMS
+ $newqual = $tokens[4];
+ $newqual =~ s/!//g;
+ my $number = $tokens[1];
+ $number = $cnt + 1 if $number eq '?';
+ $number = $cnt if $number eq '?+';
+ if ($cnt > $number
+ || ($cnt == $number && ($qualifier ne $newqual
+ || $qualifier eq ""))) {
+ print STDERR "Invalid ordinal detected: ".$tokens[1]."\n";
+ $ret = 0;
+ last;
+ }
+ $cnt = $tokens[1];
+ $qualifier = $newqual;
+ $lastfunc = $tokens[0];
+ }
+ close($fh);
+
+ return $ret;
+}