File-SOPS
view release on metacpan or search on metacpan
t/04-interop.t view on Meta::CPAN
);
my $enc_file = "$tempdir/perl_encrypted.json";
write_file($enc_file, $encrypted);
my $output = `$sops_bin -d $enc_file 2>&1`;
my $exit_code = $? >> 8;
is($exit_code, 0, 'sops decrypt JSON succeeded')
or diag("sops output: $output");
if ($exit_code == 0) {
my $decrypted = decode_json($output);
is_deeply($decrypted, $data, 'sops decrypted JSON matches original');
}
};
###############################################################################
# Test 3: sops encrypt -> Perl decrypt (YAML)
###############################################################################
subtest 'sops encrypt -> Perl decrypt (YAML)' => sub {
my $data = {
secret => 'from-sops-cli',
nested => {
value => 'deep-secret',
number => 42,
},
};
my $plain_file = "$tempdir/sops_plain.yaml";
my $enc_file = "$tempdir/sops_encrypted.yaml";
write_file($plain_file, Dump($data));
# Encrypt with sops CLI
my $output = `$sops_bin -e --age $public $plain_file 2>&1`;
my $exit_code = $? >> 8;
is($exit_code, 0, 'sops encrypt succeeded')
or diag("sops output: $output");
if ($exit_code == 0) {
write_file($enc_file, $output);
# Decrypt with Perl
my $decrypted = File::SOPS->decrypt(
encrypted => $output,
identities => [$secret],
format => 'yaml',
);
is_deeply($decrypted, $data, 'Perl decrypted sops-encrypted data');
}
};
###############################################################################
# Test 4: sops encrypt -> Perl decrypt (JSON)
###############################################################################
subtest 'sops encrypt -> Perl decrypt (JSON)' => sub {
my $data = {
credentials => {
username => 'admin',
password => 's3cr3t!',
},
};
my $plain_file = "$tempdir/sops_plain.json";
write_file($plain_file, encode_json($data));
my $output = `$sops_bin -e --age $public $plain_file 2>&1`;
my $exit_code = $? >> 8;
is($exit_code, 0, 'sops encrypt JSON succeeded')
or diag("sops output: $output");
if ($exit_code == 0) {
my $decrypted = File::SOPS->decrypt(
encrypted => $output,
identities => [$secret],
format => 'json',
);
is_deeply($decrypted, $data, 'Perl decrypted sops-encrypted JSON');
}
};
###############################################################################
# Test 5: Various data types
###############################################################################
subtest 'Various data types' => sub {
my $data = {
string => 'hello world',
integer => 12345,
float => 3.14159,
empty => '',
unicode => 'äöü ñ 䏿 ð',
special => "line1\nline2\ttab",
};
my $encrypted = File::SOPS->encrypt(
data => $data,
recipients => [$public],
format => 'yaml',
);
my $enc_file = "$tempdir/types.yaml";
write_file($enc_file, $encrypted);
my $output = `$sops_bin -d $enc_file 2>&1`;
my $exit_code = $? >> 8;
is($exit_code, 0, 'sops decrypt types succeeded')
or diag("sops output: $output");
if ($exit_code == 0) {
# YAML::XS::Load expects bytes, not decoded strings
my $decrypted = Load($output);
is($decrypted->{string}, $data->{string}, 'string preserved');
is($decrypted->{integer}, $data->{integer}, 'integer preserved');
is($decrypted->{empty}, $data->{empty}, 'empty string preserved');
is($decrypted->{unicode}, $data->{unicode}, 'unicode preserved');
( run in 1.005 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )