123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- #!/usr/bin/perl
- #
- # This program 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 2 of the License, or
- # (at your option) any later version.
- #
- # This program 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 <https://www.gnu.org/licenses/>.
- use strict;
- use warnings;
- use Test::More tests => 44;
- use Test::Dpkg qw(:paths);
- BEGIN {
- use_ok('Dpkg::Checksums');
- }
- my $datadir = test_get_data_path('t/Dpkg_Checksums');
- my @data = (
- {
- file => 'empty',
- size => 0,
- sums => {
- md5 => 'd41d8cd98f00b204e9800998ecf8427e',
- sha1 => 'da39a3ee5e6b4b0d3255bfef95601890afd80709',
- sha256 => 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855',
- }
- }, {
- file => 'data-1',
- size => 7,
- sums => {
- md5 => '1b662eff496fde1a63cc5ff97beec10a',
- sha1 => 'ff66a3dc152f273a19392d3099b2915c311c707e',
- sha256 => 'f53cb4ee5128363210053c89627757c3dd864ab87e3ac9bff20dd6fe4175a140',
- }
- }, {
- file => 'data-2',
- size => 14,
- sums => {
- md5 => '785400cfc51d16a06e2c34aa511b99ef',
- sha1 => '329ba56c0c9c63b6e138f3970ac3628e476a6854',
- sha256 => '217147cd3126a076ba3fd816566a80aaaffff5facc572394dbd6af61a49760d1',
- }
- }
- );
- my %str_checksum;
- foreach my $f (@data) {
- foreach my $alg (keys %{$f->{sums}}) {
- $str_checksum{$alg} .= "\n$f->{sums}->{$alg} $f->{size} $f->{file}";
- }
- }
- sub test_checksums {
- my $ck = shift;
- my @known_files = $ck->get_files();
- my @data_files = map { $_->{file} } @data;
- is_deeply(\@known_files, \@data_files, 'List of files');
- foreach my $f (@data) {
- ok($ck->has_file($f->{file}), "Known file $f->{file}");
- is($ck->get_size($f->{file}), $f->{size}, "Known file $f->{file} size");
- is_deeply($ck->get_checksum($f->{file}), $f->{sums},
- "Known file $f->{file} checksums");
- }
- }
- my @expected_checksums = qw(md5 sha1 sha256);
- my @known_checksums = checksums_get_list();
- is_deeply(\@known_checksums, \@expected_checksums, 'List of known checksums');
- foreach my $c (@expected_checksums) {
- ok(checksums_is_supported($c), "Checksum $c is supported");
- my $uc = uc $c;
- ok(checksums_is_supported($uc), "Checksum $uc (uppercase) is supported");
- ok(defined checksums_get_property($c, 'name'), "Checksum $c has name");
- ok(defined checksums_get_property($c, 'regex'), "Checksum $c has regex");
- ok(defined checksums_get_property($c, 'strong'), "Checksum $c has strong");
- }
- my $ck = Dpkg::Checksums->new();
- is(scalar $ck->get_files(), 0, 'No checkums recorded');
- # Check add_from_file()
- foreach my $f (@data) {
- $ck->add_from_file("$datadir/$f->{file}", key => $f->{file});
- }
- foreach my $alg (keys %str_checksum) {
- my $str = $ck->export_to_string($alg);
- is($str, $str_checksum{$alg}, "Export checksum $alg to string from file");
- }
- test_checksums($ck);
- # Check add_from_string()
- foreach my $alg (keys %str_checksum) {
- $ck->add_from_string($alg, $str_checksum{$alg});
- my $str = $ck->export_to_string($alg);
- is($str, $str_checksum{$alg}, "Export checksum $alg to string from string");
- }
- test_checksums($ck);
- 1;
|