Improve tests for generate_token
authorMitch Jackson <mitch@freeside.biz>
Wed, 24 Apr 2019 05:57:18 +0000 (01:57 -0400)
committerMitch Jackson <mitch@freeside.biz>
Wed, 24 Apr 2019 05:57:18 +0000 (01:57 -0400)
Makefile.PL
t/021-generate_token.t

index 50a2906..6f15251 100755 (executable)
@@ -16,5 +16,6 @@ WriteMakefile(
   /},
   TEST_REQUIRES => {qw/
     Test::More 0
+    Business::CreditCard 0
   /}
 );
index 14d38c1..39972e3 100755 (executable)
@@ -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