Improve tests for generate_token
[Business-OnlinePayment-Bambora.git] / t / 021-generate_token.t
1 #!/usr/bin/env perl
2 use strict;
3 use warnings;
4 use Test::More;
5
6 use lib 't';
7 use Business::OnlinePayment;
8 use Business::CreditCard qw/ validate /;
9
10 my $tr;
11 ok( $tr = Business::OnlinePayment->new('Bambora'), 'Instantiatiate $tr' );
12
13 my $token;
14 ok( $token = $tr->generate_token, "\$tr->generate_token: $token" );
15 ok( $token =~ /^99\d{14}$/, 'Token matches expected format' );
16
17 #
18 # Generate 1,000,000 tokens in series, and check for token collissions
19 #
20
21 my $start = time();
22 my $invalid = 0;
23 my %seen;
24 for my $i ( 1..1000000 ) {
25     my $token = Business::OnlinePayment::Bambora->generate_token;
26     $invalid++ unless validate( $token );
27     $seen{$token}++;
28 }
29 my $end = time();
30 ok(
31     scalar keys %seen == 1000000,
32     sprintf 'Generated %s tokens in %s seconds', scalar(keys(%seen)), $end-$start
33 );
34 ok( $invalid == 0, 'All generated tokens pass Luhn check' );
35 ok( ! grep( {$_ > 1} values %seen ), "All 1M tokens were unique" );
36
37 done_testing;