#!/usr/bin/env perl
use strict;
use warnings;
use Test::More;
use Test::Requires 'Crypt::Rijndael';
use Test::Requires 'Crypt::CFB';
use Test::Requires 'JSON';
use Crypt::Util;
use KiokuDB;
use KiokuDB::Util;
use Storable 'thaw';
use KiokuDB::Serializer::Crypt;
{
my $backend = KiokuDB::Backend::Hash->new(
serializer => KiokuDB::Serializer::Crypt->new(crypt_key => 's3cr3t'),
);
my $d = KiokuDB->new(backend => $backend);
{
my $s = $d->new_scope;
my $foo = Moose::Meta::Class->create('Foo')->new_object;
$d->insert(foo => $foo);
}
{
my $storage = $d->backend->storage;
my $serialized_foo = $storage->{foo};
my $crypt = Crypt::Util->new(default_key => 's3cr3t');
my $decrypted = $crypt->decrypt_string($serialized_foo);
my $data = thaw($decrypted);
is_deeply(
$data,
{
class => 'Foo',
root => 1,
id => 'foo',
data => {},
},
"encrypted properly"
);
}
{
my $s = $d->new_scope;
my $foo = $d->lookup('foo');
isa_ok($foo, 'Foo');
}
}
{
my $backend = KiokuDB::Backend::Hash->new(
serializer => KiokuDB::Serializer::Crypt->new(
crypt_key => 's3cr3t',
serializer => 'json',
),
);
my $d = KiokuDB->new(backend => $backend);
{
my $s = $d->new_scope;
my $foo = Moose::Meta::Class->create('Bar')->new_object;
$d->insert(foo => $foo);
}
{
my $storage = $d->backend->storage;
my $serialized_foo = $storage->{foo};
my $crypt = Crypt::Util->new(default_key => 's3cr3t');
my $decrypted = $crypt->decrypt_string($serialized_foo);
my $data = JSON->new->decode($decrypted);
is_deeply(
$data,
{
__CLASS__ => 'Bar',
root => 'true',
id => 'foo',
data => {},
},
"encrypted properly"
);
}
{
my $s = $d->new_scope;
my $foo = $d->lookup('foo');
isa_ok($foo, 'Bar');
}
}
{
my $backend = KiokuDB::Backend::Hash->new(
serializer => KiokuDB::Serializer::Crypt->new(
crypt => Crypt::Util->new(default_key => 's3cr3t'),
serializer => 'json',
),
);
my $d = KiokuDB->new(backend => $backend);
{
my $s = $d->new_scope;
my $foo = Moose::Meta::Class->create('Baz')->new_object;
$d->insert(foo => $foo);
}
{
my $storage = $d->backend->storage;
my $serialized_foo = $storage->{foo};
my $crypt = Crypt::Util->new(default_key => 's3cr3t');
my $decrypted = $crypt->decrypt_string($serialized_foo);
my $data = JSON->new->decode($decrypted);
is_deeply(
$data,
{
__CLASS__ => 'Baz',
root => 'true',
id => 'foo',
data => {},
},
"encrypted properly"
);
}
{
my $s = $d->new_scope;
my $foo = $d->lookup('foo');
isa_ok($foo, 'Baz');
}
}
done_testing;