summaryrefslogtreecommitdiff
path: root/t/021-generate_token.t
blob: 39972e3bf54f097a6922d472625bb7dbfe25ef2b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/usr/bin/env perl
use strict;
use warnings;
use Test::More;

use lib 't';
use Business::OnlinePayment;
use Business::CreditCard qw/ validate /;

my $tr;
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;