App-MtAws
view release on metacpan or search on metacpan
t/integration/metadata.t view on Meta::CPAN
$old_encoded_lenth = $encoded_length;
$old_strlen = $strlen;
}
}
# test increment of length of resulting data
{
for my $str1 (qw/ ! a b c d e f _ à µ Ũ а б в г д е Ñ Ð¶ з и к л м н о п Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð¡ Т У Ф Ð¥ Ц Ч Ш Щ РЮ Я/) {
for my $str2 (qw/a hello/, qq!file1/file2/file3/file4!, qq!длиннÑй ÑÑÑÑкий ÑекÑÑ!, qq!/!) {
my $source = $str1.$str2;
my $encoded = App::MtAws::MetaData::meta_encode($source, 1234);
my ($decoded, $mtime) = App::MtAws::MetaData::meta_decode($encoded);
ok $source eq $decoded;
ok $mtime = 1234;
}
}
}
sub test_undefined
{
my ($str, $msg) = @_;
ok !defined App::MtAws::MetaData::meta_decode($str), "$msg (scalar)";
my @a = App::MtAws::MetaData::meta_decode($str);
is scalar @a, 0, "$msg (array)";
}
# test error catch while decoding
{
test_undefined 'zzz', 'should return undef if no marker present';
test_undefined 'mt2 zzz', 'should return undef if utf is broken';
test_undefined 'mt2 !!!!', 'should return undef if base64 is broken';
test_undefined 'mt2 z+z', 'should return undef if base64 is broken';
ok defined App::MtAws::MetaData::meta_decode('mt2 '._encode_base64url('{ "filename": "a", "mtime": "20080102T222324Z"}').'=='), 'should allow base64 padding';
ok defined App::MtAws::MetaData::meta_decode('mt2 '._encode_base64url('{ "filename": "a", "mtime": "20080102T222324Z"}').'='), 'should allow base64 padding';
test_undefined 'mt2 '._encode_base64url('{ "filename": "a", "mtime": "20081515T222324Z"}'), 'should return undef if mtime is broken';
test_undefined 'mt2 '._encode_base64url('ff'), 'should return undef if json is broken';
test_undefined 'mt2 '._encode_base64url('{ "a": 1, "x": 2}'), 'should return undef if filename and mtime missed';
test_undefined 'mt2 '._encode_base64url('{ "filename": "f", "x": 2}'), 'should return undef if mtime missed';
test_undefined 'mt2 '._encode_base64url('{ "x": 1, "mtime": 2}'), 'should return undef if filename missed';
test_undefined 'mt2 '._encode_base64url('{ "filename": "a", "mtime": "zzz"}'), 'should return undef if time is broken';
test_undefined 'mt2 '._encode_base64url('{ "filename": "'.('x' x 1024).'", "mtime": 1}'), 'should return undef if b64 too big';
test_undefined 'mt2 '._encode_base64url('{ "filename": "f", "mtime": "20081302T222324Z"}'), 'should return undef if b64 too big';
test_undefined '', 'should return undef, without warning, if input is empty string';
test_undefined ' ', 'should return undef, without warning, if input is space';
test_undefined ' ', 'should return undef, without warning, if input is multiple spaces';
test_undefined undef, 'should return undef, without warning, if input is undef';
ok !defined App::MtAws::MetaData::meta_decode(), 'should return undef, without warning, if input is empty list';
for (qw/mt1 mt2/) {
ok !defined App::MtAws::MetaData::meta_decode("$_"), 'should return undef, without warning, if input is marker plus empty string';
ok !defined App::MtAws::MetaData::meta_decode("$_ "), 'should return undef, without warning, if input is marker plus space';
ok !defined App::MtAws::MetaData::meta_decode("$_ "), 'should return undef, without warning, if input is marker plus multiple spaces';
}
ok defined App::MtAws::MetaData::meta_decode('mt2 '._encode_base64url('{ "filename": "a", "mtime": "20080102T222324Z"}')), 'should allow few spaces';
ok defined App::MtAws::MetaData::meta_decode("mt2\t\t"._encode_base64url('{ "filename": "a", "mtime": "20080102T222324Z"}')), 'should allow tabs';
ok defined App::MtAws::MetaData::meta_decode(" \tmt2\t\t "._encode_base64url('{ "filename": "a", "mtime": "20080102T222324Z"}')), 'should allow leading spaces';
eval { App::MtAws::MetaData::meta_decode('zzz') };
ok $@ eq '', 'should not override eval code'; # it looks now that those tests are broken
eval { App::MtAws::MetaData::meta_decode('mt2 zzz') };
ok $@ eq '', 'should not override eval code'; # it looks now that those tests are broken
}
# test error cacth while encoding
{
ok defined App::MtAws::MetaData::meta_encode('filename', -1), 'should not catch negative mtime';
ok !defined App::MtAws::MetaData::meta_encode('filename', -30639629694), 'should disallow time before Y1000';
ok !defined App::MtAws::MetaData::meta_encode('filename'), 'should catche missed mtime';
ok !defined App::MtAws::MetaData::meta_encode(undef, 4), 'should catche missed filename';
ok defined App::MtAws::MetaData::meta_encode('filename', 0), 'should allow 0 mtime';
ok !defined App::MtAws::MetaData::meta_encode('f' x 1024, 0), 'should catch too big string';
ok defined App::MtAws::MetaData::meta_encode('Ñ' x 350, 0), 'should allow 350 UTF 2 bytes characters';
ok defined App::MtAws::MetaData::meta_encode('z' x 700, 0), 'should allow 700 ASCII characters';
}
# check catching for undef - warning duplicate test found in unit tests
{
my $called;
local *App::MtAws::MetaData::decode = sub { $called = 1 };
ok defined App::MtAws::MetaData::_decode_utf8 encode("UTF-8", "ÑеÑÑ");
ok ($called, "_decode_utf8 calls App::MtAws::MetaData::decode (which is Encode::decode)");
$called = 0;
ok !defined App::MtAws::MetaData::_decode_utf8 undef;
ok !$called, "_decode_utf8 retruns undef even without calling Encode::decode";
}
#
# testing jobs metadata
#
ok App::MtAws::MetaData::meta_job_encode("x");
ok ! defined App::MtAws::MetaData::meta_job_encode("x" x 1024);
for (qw/full 0 x ÑеÑÑ Âµ/, '') {
cmp_deeply [App::MtAws::MetaData::meta_job_decode(App::MtAws::MetaData::meta_job_encode($_))], [$_], "should decode jobs metadata";
}
cmp_deeply [App::MtAws::MetaData::meta_job_decode('mtijob1 eyJ0eXBlIjoiZnVsbCJ9')], ['full'], "should decode jobs metadata";
{
my $without_type = "mtijob1 ".App::MtAws::MetaData::_encode_b64(App::MtAws::MetaData::_encode_json({ x => 'y' }));
ok ! defined App::MtAws::MetaData::meta_job_decode($without_type), "should return undef in case there is no type";
my @r = App::MtAws::MetaData::meta_job_decode($without_type);
is scalar @r, 0, "should return empty list in case there is no type";
}
ok ! defined App::MtAws::MetaData::meta_job_decode(undef), 'should return undef if input undef';
ok ! defined App::MtAws::MetaData::meta_job_decode(), 'should return undef if input empty';
ok ! defined App::MtAws::MetaData::meta_job_decode('mtijob11 eyJ0eXBlIjoiZnVsbCJ9'), 'should return undef if wrong marker';
ok ! defined App::MtAws::MetaData::meta_job_decode('mt1 eyJ0eXBlIjoiZnVsbCJ9'), 'should return undef if wrong marker';
ok ! defined App::MtAws::MetaData::meta_job_decode('zzz'), 'should return undef if no marker present';
ok ! defined App::MtAws::MetaData::meta_job_decode('mtijob1 zzz'), 'should return undef if utf is broken';
ok ! defined App::MtAws::MetaData::meta_job_decode('mtijob1 !!!!'), 'should return undef if base64 is broken';
ok ! defined App::MtAws::MetaData::meta_job_decode('mtijob1 z+z'), 'should return undef if base64 is broken';
ok ! defined App::MtAws::MetaData::meta_job_decode('mtijob1 '._encode_base64url('ff')), 'should return undef if json is broken';
( run in 1.010 second using v1.01-cache-2.11-cpan-ceb78f64989 )