[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[lintian] 01/06: t: Add test for lab auto-metadata fixing



This is an automated email from the git hooks/post-receive script.

nthykier pushed a commit to branch master
in repository lintian.

commit 7b947b6cfb1007fe480ec92af176e2e9fe55a0f1
Author: Niels Thykier <niels@thykier.net>
Date:   Sun Feb 22 16:32:05 2015 +0100

    t: Add test for lab auto-metadata fixing
    
    Signed-off-by: Niels Thykier <niels@thykier.net>
---
 t/scripts/Lintian/Lab/auto-repair.t | 119 ++++++++++++++++++++++++++++++++++++
 1 file changed, 119 insertions(+)

diff --git a/t/scripts/Lintian/Lab/auto-repair.t b/t/scripts/Lintian/Lab/auto-repair.t
new file mode 100755
index 0000000..dd34c6c
--- /dev/null
+++ b/t/scripts/Lintian/Lab/auto-repair.t
@@ -0,0 +1,119 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use autodie qw(opendir closedir);
+
+use Test::More;
+use Lintian::Lab;
+use Lintian::Lab::Manifest;
+use Lintian::Processable::Package;
+use Lintian::Util qw(delete_dir);
+
+my $DATADIR = $0;
+$DATADIR =~ s,[^/]+$,,o;
+if ($DATADIR) {
+    # invokved in some other dir
+    $DATADIR = "$DATADIR/data";
+} else {
+    # current dir
+    $DATADIR = 'data';
+}
+
+plan skip_all => 'Data files not available'
+  unless -d $DATADIR;
+plan tests => 2;
+
+my $LAB = Lintian::Lab->new;
+my $err = undef;
+eval {
+    $LAB->create({ 'keep-lab' => 1});
+
+    subtest 'Lab test' => \&do_tests;
+};
+$err = $@ if $@;
+
+$LAB->remove if $LAB->exists;
+
+is($err, undef, 'Test had no errors');
+
+exit 0;
+
+sub do_tests {
+    # The grand scheme of things; import packages into Lab A.  Check
+    # that repair is "non-destructive" on a "good lab". Then close it;
+    # swap the manifests of Lab A and B.  Now they will both be wrong.
+    #
+    # Repair of A should result in the manifest being restored and repair
+    # of B should result in the Lab being empty.
+
+    my $full_manifest;
+    my $empty_manifest;
+    my $diff;
+    my $added = 0;
+
+    $LAB->open;
+
+    $empty_manifest = $LAB->_get_lab_index('changes')->clone;
+
+    opendir(my $dirfd, "$DATADIR/changes");
+    foreach my $pkgbase (readdir $dirfd) {
+        next unless $pkgbase =~ m/\.(?:changes|u?deb|dsc)$/;
+        my $path = "$DATADIR/changes/$pkgbase";
+        my $proc = Lintian::Processable::Package->new($path);
+        my $entry = $LAB->get_package($proc);
+        $entry->create;
+        $added++;
+    }
+    closedir($dirfd);
+
+    $full_manifest = $LAB->_get_lab_index('changes')->clone;
+
+    $LAB->close;
+
+    $diff = $empty_manifest->diff($full_manifest);
+    cmp_ok(scalar @{ $diff->added },
+        '==', $added, 'Packages have been added to the lab');
+    $diff = undef;
+
+    # Time for some destruction
+
+    delete_dir($LAB->dir . '/pool/l')
+      or die "rename LAB pool: $!";
+
+    # Test that auto repair discards missing entries as they are
+    # discovered.
+    $LAB->open;
+    my $entry = $LAB->get_package('lintian', 'changes', '2.5.8');
+    is($entry, undef, 'Broken entries are not returned');
+
+    $diff = $full_manifest->diff($LAB->_get_lab_index('changes'));
+    cmp_ok(scalar @{ $diff->removed },
+        '==', 1, 'One entry is auto-fixed (match 1 entry)');
+    my $previous_state = $LAB->_get_lab_index('changes')->clone;
+
+    my @entries = $LAB->get_package('lintian', 'changes', '2.5.10');
+    is(scalar(@entries), 0, 'Broken entries are not returned');
+
+    $diff = $previous_state->diff($LAB->_get_lab_index('changes'));
+    cmp_ok(scalar @{ $diff->removed },
+        '==', 2, 'Two entries are fixed (match 2 entries)');
+    $previous_state = $LAB->_get_lab_index('changes')->clone;
+
+    my $number_visited = 0;
+    $LAB->visit_packages(sub { $number_visited++; }, 'changes');
+    cmp_ok($number_visited, '==', 0, 'We do not visit broken entries');
+
+    # The lab should now be empty
+    $diff = $empty_manifest->diff($LAB->_get_lab_index('changes'));
+    cmp_ok(scalar @{ $diff->added },
+        '==', 0, 'Post visit, lab is now empty (added)');
+    cmp_ok(scalar @{ $diff->removed },
+        '==', 0, 'Post visit, lab is now empty (removed)');
+    cmp_ok(scalar @{ $diff->changed },
+        '==', 0, 'Post visit, lab is now empty (changed)');
+
+    $LAB->close;
+
+    return done_testing;
+}

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/lintian/lintian.git


Reply to: