summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitch Jackson <mitch@freeside.biz>2019-04-24 01:57:18 -0400
committerMitch Jackson <mitch@freeside.biz>2019-04-24 01:57:18 -0400
commit8b1008fc81a3247c4f6f3314f784bda17a2b0fdb (patch)
treee8238fe8e0f99c6bf9fb642c9f6881e49b9318a5
parent2b4581380de27c17f6d743c94aafb0052a031606 (diff)
Improve tests for generate_token
-rwxr-xr-xMakefile.PL1
-rwxr-xr-xt/021-generate_token.t22
2 files changed, 23 insertions, 0 deletions
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