The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
#!/usr/bin/env perl

# mt-aws-glacier - Amazon Glacier sync client
# Copyright (C) 2012-2014  Victor Efimov
# http://mt-aws.com (also http://vs-dev.com) vs@vs-dev.com
# License: GPLv3
#
# This file is part of "mt-aws-glacier"
#
#    mt-aws-glacier is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#
#    mt-aws-glacier is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.

use strict;
use warnings;
use Test::More tests => 5;
use Test::Deep;
use Carp;
use FindBin;
use Scalar::Util qw/weaken/;
use lib map { "$FindBin::RealBin/../$_" } qw{../lib ../../lib};
use TestUtils 'w_fatal';
use App::MtAws::Glacier::Inventory::JSON;




use Data::Dumper;


#
# testing JSON parsing with real Amazon data
#

{
	my $sample1 = <<'END';
{"VaultARN":"arn:aws:glacier:us-east-1:222222223333:vaults/test1","InventoryDate":"2013-11-06T02:51:29Z","ArchiveList":[
{"ArchiveId":"95qYTtf_E_VV9B-bfk6LrbCmM85J7youtfNWepEVEHF1wbp3QD42trmANUCDindSQ6rvg20EmKSHRo6jwmw6CKNoCKeJAPlzl-n7_VVp3GG20QQySwc5MccL5y_0yYeDTDL6XXd3Sw",
"ArchiveDescription":"textst zz123",
"CreationDate":"2012-08-23T19:08:30Z","Size":3000000,"SHA256TreeHash":"ef0d259231262eae49a48b6c379a5577b05db3910361498d571f0c9c46be2513"},
{"ArchiveId":"xtsSbQFG3BHgE9pk9ocSAXvpaNhXY9KwVUJjASW-5V3jzAbCjNzN5WlhQqcvRBsEUUa13OFc_9NIo2TIxCI6sumcdM5QC4wdL_uyhWxTpE8Bt5ODPchNhvnpeliMc0WnW4I01lA4Sw",
"ArchiveDescription":"mt2 textst","CreationDate":"2012-08-23T19:09:17Z","Size":25000000,"SHA256TreeHash":"ef119aacb102f0c8790e0747a49f10e9b5d785656c04da3f069e6d26c7cc5818"},
{"ArchiveId":"OdEuDQOmt37jouhFioL-rleBdtLs4-e20FpQWwjp98XL0Ls5xRP9ghibqY_rrw07M9-_74LXRosXYsWXhPjaohxMeC02oGNA1SJU03rWibdye0BaNFsU8X5GYjGMNwmGDZF0whQxGg",
"ArchiveDescription":"","CreationDate":"2012-08-23T19:11:42Z","Size":25000000,"SHA256TreeHash":"af119aacb102f0c8790e0747a49f10e9b5d785656c04da3f069e6d26c7cc5818"},
{"ArchiveId":"fH4iYmeZsnll5jwiO4aIIlHBEXZ5KjF-77hIz3TzPu3Ewjl1dxfhtEZWT2IteLjFHVhdrF2JctxhtRKsLmwenDuqBKj3iW-LYR1MXqkNJbaB4BTgnhCFoRkCmCA9rr-_Yr3CMJZoew",
"ArchiveDescription":"textstZ","CreationDate":"2012-08-23T19:20:08Z","Size":25000000,"SHA256TreeHash":"ef119aacb102f0c8790e0747a49f10e9b5d785656c04da3f069e6d26c7cc5819"}
]}
END

	my $data = App::MtAws::Glacier::Inventory::JSON->new($sample1)->get_archives();
	cmp_deeply $data, [
		{
			ArchiveId => "95qYTtf_E_VV9B-bfk6LrbCmM85J7youtfNWepEVEHF1wbp3QD42trmANUCDindSQ6rvg20EmKSHRo6jwmw6CKNoCKeJAPlzl-n7_VVp3GG20QQySwc5MccL5y_0yYeDTDL6XXd3Sw",
			ArchiveDescription => "textst zz123",
			CreationDate => "2012-08-23T19:08:30Z",
			Size => 3000000,
			SHA256TreeHash => 'ef0d259231262eae49a48b6c379a5577b05db3910361498d571f0c9c46be2513',
		},
		{
			ArchiveId => "xtsSbQFG3BHgE9pk9ocSAXvpaNhXY9KwVUJjASW-5V3jzAbCjNzN5WlhQqcvRBsEUUa13OFc_9NIo2TIxCI6sumcdM5QC4wdL_uyhWxTpE8Bt5ODPchNhvnpeliMc0WnW4I01lA4Sw",
			ArchiveDescription => "mt2 textst",
			CreationDate => "2012-08-23T19:09:17Z",
			Size => 25000000,
			SHA256TreeHash => 'ef119aacb102f0c8790e0747a49f10e9b5d785656c04da3f069e6d26c7cc5818',
		},
		{
			ArchiveId => "OdEuDQOmt37jouhFioL-rleBdtLs4-e20FpQWwjp98XL0Ls5xRP9ghibqY_rrw07M9-_74LXRosXYsWXhPjaohxMeC02oGNA1SJU03rWibdye0BaNFsU8X5GYjGMNwmGDZF0whQxGg",
			ArchiveDescription => "",
			CreationDate => "2012-08-23T19:11:42Z",
			Size => 25000000,
			SHA256TreeHash => 'af119aacb102f0c8790e0747a49f10e9b5d785656c04da3f069e6d26c7cc5818',
		},
		{
			ArchiveId => "fH4iYmeZsnll5jwiO4aIIlHBEXZ5KjF-77hIz3TzPu3Ewjl1dxfhtEZWT2IteLjFHVhdrF2JctxhtRKsLmwenDuqBKj3iW-LYR1MXqkNJbaB4BTgnhCFoRkCmCA9rr-_Yr3CMJZoew",
			ArchiveDescription => "textstZ",
			CreationDate => "2012-08-23T19:20:08Z",
			Size => 25000000,
			SHA256TreeHash => 'ef119aacb102f0c8790e0747a49f10e9b5d785656c04da3f069e6d26c7cc5819',
		},
	];
}


{
	my $sample1 = <<'END';
{"VaultARN":"arn:aws:glacier:us-east-1:999966667777:vaults/test1","InventoryDate":"2013-11-06T02:51:29Z","ArchiveList":[
{"ArchiveId":"someid","ArchiveDescription":"","CreationDate":"somedate","Size":25000000,"SHA256TreeHash":"somehash"}
]}
END

	my $data = App::MtAws::Glacier::Inventory::JSON->new($sample1)->get_archives();
	is $data->[0]{ArchiveDescription}, "", "description can be empty string";
}

{
	my $obj;
	my $sample_r;
	{
	my $sample1 = <<'END';
{"VaultARN":"arn:aws:glacier:us-east-1:999966667777:vaults/test1","InventoryDate":"2013-11-06T02:51:29Z","ArchiveList":[
{"ArchiveId":"someid","ArchiveDescription":"somedescr","CreationDate":"somedate","Size":25000000,"SHA256TreeHash":"somehash"}
]}
END
	$sample_r = \$sample1;
	$obj = App::MtAws::Glacier::Inventory::JSON->new($sample1);
	weaken($sample_r);
	ok defined $sample_r;
	my $data = $obj->get_archives();
	is $data->[0]{ArchiveDescription}, "somedescr";
	}
	ok !defined $sample_r, "should save memory";
}