From ffd3fefff540851c2f4b53c1837f4694808a5d9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C5=8Dan?= Date: Thu, 12 Mar 2026 22:59:10 -0600 Subject: [PATCH] test: replace bare ok() with is()/like() and descriptive names in bignum.t Add descriptive test names to all 64 tests in bignum.t: - check_datum() now accepts a $name parameter for each assertion - check_key_parameters() accepts a $label and generates per-parameter names - Standalone ok() comparisons migrated to is() for better diagnostics - Error pattern checks migrated from ok($@ =~ //) to like($@, qr//) This matches the test modernization done in format.t, padding.t, and rsa.t, giving clear failure messages instead of "not ok 42" with no context. Co-Authored-By: Claude Opus 4.6 --- t/bignum.t | 62 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 30 deletions(-) diff --git a/t/bignum.t b/t/bignum.t index 68776d9..883ebba 100644 --- a/t/bignum.t +++ b/t/bignum.t @@ -7,28 +7,30 @@ $INC{'Crypt/OpenSSL/Bignum.pm'} ? plan( tests => 64 ) : plan( skip_all => "Crypt::OpenSSL::Bignum required for bignum tests" ); +my @PARAM_NAMES = qw(n e d p q dmp1 dmq1 iqmp); + sub check_datum { - my ( $p_expected, $p_actual ) = @_; - ok( - defined($p_expected) - ? $p_actual && $p_expected->equals($p_actual) - : !defined($p_actual) - ); + my ( $p_expected, $p_actual, $name ) = @_; + if ( defined($p_expected) ) { + ok( $p_actual && $p_expected->equals($p_actual), $name ); + } + else { + is( $p_actual, undef, $name ); + } } sub check_key_parameters # runs 8 tests { - my ( $p_rsa, $n, $e, $d, $p, $q, $dmp1, $dmq1, $iqmp ) = @_; + my ( $p_rsa, $label, $n, $e, $d, $p, $q, $dmp1, $dmq1, $iqmp ) = @_; my ( $rn, $re, $rd, $rp, $rq, $rdmp1, $rdmq1, $riqmp ) = $p_rsa->get_key_parameters(); - check_datum( $n, $rn ); - check_datum( $e, $re ); - check_datum( $d, $rd ); - check_datum( $p, $rp ); - check_datum( $q, $rq ); - check_datum( $dmp1, $rdmp1 ); - check_datum( $dmq1, $rdmq1 ); - check_datum( $iqmp, $riqmp ); + my @expected = ( $n, $e, $d, $p, $q, $dmp1, $dmq1, $iqmp ); + my @actual = ( $rn, $re, $rd, $rp, $rq, $rdmp1, $rdmq1, $riqmp ); + + for my $i ( 0 .. 7 ) { + check_datum( $expected[$i], $actual[$i], + "$label: $PARAM_NAMES[$i] matches expected" ); + } } { @@ -44,42 +46,42 @@ sub check_key_parameters # runs 8 tests my $iqmp = $q->mod_inverse( $p, $ctx ); my $rsa = Crypt::OpenSSL::RSA->new_key_from_parameters( $n, $e, $d, $p, $q ); - ok($rsa); + ok( $rsa, "new_key_from_parameters(n,e,d,p,q) returns an object" ); $rsa->use_no_padding(); my $plaintext = pack( 'C*', 100, 100, 100, 12 ); my $ciphertext = Crypt::OpenSSL::Bignum->new_from_bin($plaintext)->mod_exp( $e, $n, $ctx )->to_bin(); - check_key_parameters( $rsa, $n, $e, $d, $p, $q, $dmp1, $dmq1, $iqmp ); + check_key_parameters( $rsa, "full key", $n, $e, $d, $p, $q, $dmp1, $dmq1, $iqmp ); - ok( $rsa->encrypt($plaintext) eq $ciphertext ); - ok( $rsa->decrypt($ciphertext) eq $plaintext ); + is( $rsa->encrypt($plaintext), $ciphertext, "encrypt produces expected ciphertext" ); + is( $rsa->decrypt($ciphertext), $plaintext, "decrypt recovers original plaintext" ); my $rsa_pub = Crypt::OpenSSL::RSA->new_public_key( $rsa->get_public_key_string() ); $rsa_pub->use_no_padding(); - ok( $rsa->private_encrypt($ciphertext) eq $plaintext ); - ok( $rsa_pub->public_decrypt($plaintext) eq $ciphertext ); + is( $rsa->private_encrypt($ciphertext), $plaintext, "private_encrypt produces expected plaintext" ); + is( $rsa_pub->public_decrypt($plaintext), $ciphertext, "public_decrypt produces expected ciphertext" ); my @pub_parameters = $rsa_pub->get_key_parameters(); - ok( scalar(@pub_parameters) == 8 ); + is( scalar(@pub_parameters), 8, "public key returns 8 parameters" ); - check_key_parameters( $rsa_pub, $n, $e ); + check_key_parameters( $rsa_pub, "public key", $n, $e ); $rsa = Crypt::OpenSSL::RSA->new_key_from_parameters( $n, $e, $d, $p ); - check_key_parameters( $rsa, $n, $e, $d, $p, $q, $dmp1, $dmq1, $iqmp ); + check_key_parameters( $rsa, "from (n,e,d,p)", $n, $e, $d, $p, $q, $dmp1, $dmq1, $iqmp ); $rsa = Crypt::OpenSSL::RSA->new_key_from_parameters( $n, $e, $d, undef, $q ); - check_key_parameters( $rsa, $n, $e, $d, $p, $q, $dmp1, $dmq1, $iqmp ); + check_key_parameters( $rsa, "from (n,e,d,undef,q)", $n, $e, $d, $p, $q, $dmp1, $dmq1, $iqmp ); $rsa = Crypt::OpenSSL::RSA->new_key_from_parameters( $n, $e ); - check_key_parameters( $rsa, $n, $e ); + check_key_parameters( $rsa, "from (n,e)", $n, $e ); $rsa = Crypt::OpenSSL::RSA->new_key_from_parameters( $n, $e, $d ); - check_key_parameters( $rsa, $n, $e, $d ); + check_key_parameters( $rsa, "from (n,e,d)", $n, $e, $d ); $rsa = Crypt::OpenSSL::RSA->new_key_from_parameters( $n, $e, undef, $p ); - check_key_parameters( $rsa, $n, $e, $d, $p, $q, $dmp1, $dmq1, $iqmp ); + check_key_parameters( $rsa, "from (n,e,undef,p)", $n, $e, $d, $p, $q, $dmp1, $dmq1, $iqmp ); eval { Crypt::OpenSSL::RSA->new_key_from_parameters( @@ -87,7 +89,7 @@ sub check_key_parameters # runs 8 tests $e, $d, undef, $q ); }; - ok( $@ =~ /OpenSSL error: p not prime/ ); + like( $@, qr/OpenSSL error: p not prime/, "bad n with q triggers 'p not prime' error" ); #try again, to make sure the error queue was properly flushed eval { @@ -96,5 +98,5 @@ sub check_key_parameters # runs 8 tests $e, $d, undef, $q ); }; - ok( $@ =~ /OpenSSL error: p not prime/ ); + like( $@, qr/OpenSSL error: p not prime/, "error queue flushed: repeat triggers same error" ); }