File: 002_methods.t

package info (click to toggle)
libdigest-bcrypt-perl 1.212-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 204 kB
  • sloc: perl: 305; makefile: 2
file content (83 lines) | stat: -rwxr-xr-x 2,298 bytes parent folder | download
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
use strict;
use warnings;

use Digest;
use Digest::Bcrypt;
use Scalar::Util qw(refaddr);
use Test::More;
use Try::Tiny qw(try catch);

my $secret = "Super Secret Squirrel";
my $salt   = "   known salt   ";
my $cost   = 5;

# direct object
{
    my $direct = Digest::Bcrypt->new;
    isa_ok($direct, 'Digest::Bcrypt', 'new: direct instance');

    try {
        $direct->add($secret);
        $direct->salt($salt);
        $direct->cost($cost);
    }
    catch { fail("direct instance: $_"); };
    is($direct->salt, $salt,    "direct: salt correct");
    is($direct->cost, "0$cost", "direct: cost correct");


    my $direct_clone = $direct->clone;
    isa_ok($direct_clone, 'Digest::Bcrypt', 'clone: direct instance');
    isnt(refaddr $direct, refaddr $direct_clone, "clone: not the same object");

    try {
        $direct_clone->salt('  unknown salt  ');
        $direct_clone->cost(6);
    }
    catch { fail("direct clone: $_"); };
    isnt($direct->salt, $direct_clone->salt, "clone: salt differs from orig");
    isnt($direct->cost, $direct_clone->cost, "clone: cost differs from orig");
    isnt($direct->hexdigest, $direct_clone->hexdigest, "clone: different hash");
}

# indirect object
{
    my $indirect = Digest->new('Bcrypt');
    isa_ok($indirect, 'Digest::Bcrypt', 'new: indirect instance');

    try {
        $indirect->add($secret);
        $indirect->salt($salt);
        $indirect->cost($cost);
    }
    catch { fail("indirect instance: $_"); };
    is($indirect->salt, $salt,    "indirect: salt correct");
    is($indirect->cost, "0$cost", "indirect: cost correct");

    my $indirect_clone = $indirect->clone;
    isa_ok($indirect_clone, 'Digest::Bcrypt', 'clone: indirect instance');
    isnt(
        refaddr $indirect,
        refaddr $indirect_clone,
        "clone: not the same object"
    );

    try {
        $indirect_clone->salt('  unknown salt  ');
        $indirect_clone->cost(6);
    }
    catch {
        fail("indirect clone: $_");
    };
    isnt($indirect->salt, $indirect_clone->salt,
        "clone: salt differs from orig");
    isnt($indirect->cost, $indirect_clone->cost,
        "clone: cost differs from orig");
    isnt(
        $indirect->hexdigest,
        $indirect_clone->hexdigest,
        "clone: different hash"
    );
}

done_testing();