X-Git-Url: http://git.freeside.biz/gitweb/?p=Business-OnlinePayment-Bambora.git;a=blobdiff_plain;f=t%2F021-generate_token.t;fp=t%2F021-generate_token.t;h=39972e3bf54f097a6922d472625bb7dbfe25ef2b;hp=14d38c1fadedd73d116532d8c95ba4fa1b43cb1e;hb=8b1008fc81a3247c4f6f3314f784bda17a2b0fdb;hpb=2b4581380de27c17f6d743c94aafb0052a031606 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