From 8b1008fc81a3247c4f6f3314f784bda17a2b0fdb Mon Sep 17 00:00:00 2001 From: Mitch Jackson Date: Wed, 24 Apr 2019 01:57:18 -0400 Subject: [PATCH] Improve tests for generate_token --- Makefile.PL | 1 + t/021-generate_token.t | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/Makefile.PL b/Makefile.PL index 50a2906..6f15251 100755 --- a/Makefile.PL +++ b/Makefile.PL @@ -16,5 +16,6 @@ WriteMakefile( /}, TEST_REQUIRES => {qw/ Test::More 0 + Business::CreditCard 0 /} ); diff --git a/t/021-generate_token.t b/t/021-generate_token.t index 14d38c1..39972e3 100755 --- a/t/021-generate_token.t +++ b/t/021-generate_token.t @@ -5,6 +5,7 @@ use Test::More; use lib 't'; use Business::OnlinePayment; +use Business::CreditCard qw/ validate /; my $tr; ok( $tr = Business::OnlinePayment->new('Bambora'), 'Instantiatiate $tr' ); @@ -12,4 +13,25 @@ ok( $tr = Business::OnlinePayment->new('Bambora'), 'Instantiatiate $tr' ); my $token; ok( $token = $tr->generate_token, "\$tr->generate_token: $token" ); ok( $token =~ /^99\d{14}$/, 'Token matches expected format' ); + +# +# Generate 1,000,000 tokens in series, and check for token collissions +# + +my $start = time(); +my $invalid = 0; +my %seen; +for my $i ( 1..1000000 ) { + my $token = Business::OnlinePayment::Bambora->generate_token; + $invalid++ unless validate( $token ); + $seen{$token}++; +} +my $end = time(); +ok( + scalar keys %seen == 1000000, + sprintf 'Generated %s tokens in %s seconds', scalar(keys(%seen)), $end-$start +); +ok( $invalid == 0, 'All generated tokens pass Luhn check' ); +ok( ! grep( {$_ > 1} values %seen ), "All 1M tokens were unique" ); + done_testing; \ No newline at end of file -- 2.11.0