[Rt-commit] rt branch, 4.2/validate-after-shredding-in-tests, created. rt-4.0.8-573-gc6519c5

Ruslan Zakirov ruz at bestpractical.com
Sat Nov 24 11:20:31 EST 2012


The branch, 4.2/validate-after-shredding-in-tests has been created
        at  c6519c5166474cc4ada7efad837f0fad37a4aa50 (commit)

- Log -----------------------------------------------------------------
commit 80ae47dbdd3bb2b8723337afabe8867ede46c10c
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date:   Thu Mar 29 15:49:32 2012 +0400

    move run_validator into RT::Test

diff --git a/lib/RT/Test.pm b/lib/RT/Test.pm
index aafeebc..82dd2c2 100644
--- a/lib/RT/Test.pm
+++ b/lib/RT/Test.pm
@@ -1097,6 +1097,43 @@ sub fetch_caught_mails {
 sub clean_caught_mails {
     unlink $tmp{'mailbox'};
 }
+my $validator_path = "$RT::SbinPath/rt-validator";
+sub run_validator {
+    my $self = shift;
+    my %args = (check => 1, resolve => 0, force => 1, @_ );
+
+    my $cmd = $validator_path;
+    die "Couldn't find $cmd command" unless -f $cmd;
+
+    while( my ($k,$v) = each %args ) {
+        next unless $v;
+        $cmd .= " --$k '$v'";
+    }
+    $cmd .= ' 2>&1';
+
+    require IPC::Open2;
+    my ($child_out, $child_in);
+    my $pid = IPC::Open2::open2($child_out, $child_in, $cmd);
+    close $child_in;
+
+    my $result = do { local $/; <$child_out> };
+    close $child_out;
+    waitpid $pid, 0;
+
+    DBIx::SearchBuilder::Record::Cachable->FlushCache
+        if $args{'resolve'};
+
+    return ($?, $result);
+}
+
+sub db_is_valid {
+    local $Test::Builder::Level = $Test::Builder::Level + 1;
+
+    my $self = shift;
+    my ($ecode, $res) = $self->run_validator;
+    Test::More::is( $ecode, 0, 'no invalid records' )
+        or Test::More::diag "errors:\n$res";
+}
 
 =head2 object_scrips_are
 
diff --git a/t/validator/group_members.t b/t/validator/group_members.t
index fbe7580..115a61e 100644
--- a/t/validator/group_members.t
+++ b/t/validator/group_members.t
@@ -35,45 +35,13 @@ sub load_or_create_group {
     return $group;
 }
 
-my $validator_path = "$RT::SbinPath/rt-validator";
-sub run_validator {
-    my %args = (check => 1, resolve => 0, force => 1, @_ );
-
-    my $cmd = $validator_path;
-    die "Couldn't find $cmd command" unless -f $cmd;
-
-    while( my ($k,$v) = each %args ) {
-        next unless $v;
-        $cmd .= " --$k '$v'";
-    }
-    $cmd .= ' 2>&1';
-
-    require IPC::Open2;
-    my ($child_out, $child_in);
-    my $pid = IPC::Open2::open2($child_out, $child_in, $cmd);
-    close $child_in;
-
-    my $result = do { local $/; <$child_out> };
-    close $child_out;
-    waitpid $pid, 0;
-
-    DBIx::SearchBuilder::Record::Cachable->FlushCache
-        if $args{'resolve'};
-
-    return ($?, $result);
-}
-
-{
-    my ($ecode, $res) = run_validator();
-    is $res, '', 'empty result';
-}
+RT::Test->db_is_valid;
 
 {
     my $group = load_or_create_group('test', Members => [] );
     ok $group, "loaded or created a group";
 
-    my ($ecode, $res) = run_validator();
-    is $res, '', 'empty result';
+    RT::Test->db_is_valid;
 }
 
 # G1 -> G2
@@ -87,20 +55,18 @@ sub run_validator {
     ok $group2->HasMember( $group1->id ), "has member";
     ok $group2->HasMemberRecursively( $group1->id ), "has member";
 
-    my ($ecode, $res) = run_validator();
-    is $res, '', 'empty result';
+    RT::Test->db_is_valid;
 
     $RT::Handle->dbh->do("DELETE FROM CachedGroupMembers");
     DBIx::SearchBuilder::Record::Cachable->FlushCache;
     ok !$group2->HasMemberRecursively( $group1->id ), "has no member, broken DB";
 
-    ($ecode, $res) = run_validator(resolve => 1);
+    my ($ecode, $res) = RT::Test->run_validator(resolve => 1);
 
     ok $group2->HasMember( $group1->id ), "has member";
     ok $group2->HasMemberRecursively( $group1->id ), "has member";
 
-    ($ecode, $res) = run_validator();
-    is $res, '', 'empty result';
+    RT::Test->db_is_valid;
 }
 
 # G1 <- G2 <- G3 <- G4 <- G5
@@ -120,15 +86,14 @@ sub run_validator {
         push @groups, $group;
     }
 
-    my ($ecode, $res) = run_validator();
-    is $res, '', 'empty result';
+    RT::Test->db_is_valid;
 
     $RT::Handle->dbh->do("DELETE FROM CachedGroupMembers");
     DBIx::SearchBuilder::Record::Cachable->FlushCache;
 
     ok !$groups[1]->HasMemberRecursively( $groups[0]->id ), "has no member, broken DB";
 
-    ($ecode, $res) = run_validator(resolve => 1);
+    my ($ecode, $res) = RT::Test->run_validator(resolve => 1);
 
     for ( my $i = 1; $i < @groups; $i++ ) {
         ok $groups[$i]->HasMember( $groups[$i-1]->id ), "has member";
@@ -136,8 +101,7 @@ sub run_validator {
             foreach 0..$i-1;
     }
 
-    ($ecode, $res) = run_validator();
-    is $res, '', 'empty result';
+    RT::Test->db_is_valid;
 }
 
 # G1 <- (G2, G3, G4, G5)
@@ -152,8 +116,7 @@ sub run_validator {
     my $parent = load_or_create_group( 'test1', Members => \@groups );
     ok $parent, "loaded or created a group";
 
-    my ($ecode, $res) = run_validator();
-    is $res, '', 'empty result';
+    RT::Test->db_is_valid;
 }
 
 # G1 <- (G2, G3, G4) <- G5
@@ -171,7 +134,6 @@ sub run_validator {
     my $parent = load_or_create_group( 'test1', Members => \@groups );
     ok $parent, "loaded or created a group";
 
-    my ($ecode, $res) = run_validator();
-    is $res, '', 'empty result';
+    RT::Test->db_is_valid;
 }
 

commit 261ba04ac9c8336188eb43cc3b068db93504e955
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date:   Fri Apr 6 00:29:57 2012 +0400

    check exit code when we expect DB to be invalid

diff --git a/t/validator/group_members.t b/t/validator/group_members.t
index 115a61e..7a37ed5 100644
--- a/t/validator/group_members.t
+++ b/t/validator/group_members.t
@@ -2,7 +2,7 @@
 use strict;
 use warnings;
 
-use RT::Test tests => 60;
+use RT::Test tests => 62;
 
 sub load_or_create_group {
     my $name = shift;
@@ -62,6 +62,7 @@ RT::Test->db_is_valid;
     ok !$group2->HasMemberRecursively( $group1->id ), "has no member, broken DB";
 
     my ($ecode, $res) = RT::Test->run_validator(resolve => 1);
+    isnt($ecode, 0, 'non-zero exit code');
 
     ok $group2->HasMember( $group1->id ), "has member";
     ok $group2->HasMemberRecursively( $group1->id ), "has member";
@@ -94,6 +95,7 @@ RT::Test->db_is_valid;
     ok !$groups[1]->HasMemberRecursively( $groups[0]->id ), "has no member, broken DB";
 
     my ($ecode, $res) = RT::Test->run_validator(resolve => 1);
+    isnt($ecode, 0, 'non-zero exit code');
 
     for ( my $i = 1; $i < @groups; $i++ ) {
         ok $groups[$i]->HasMember( $groups[$i-1]->id ), "has member";

commit c6519c5166474cc4ada7efad837f0fad37a4aa50
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date:   Mon Apr 9 18:45:49 2012 +0400

    validate database in tests after each wipeout

diff --git a/t/shredder/01basics.t b/t/shredder/01basics.t
index aea4e49..368c9ba 100644
--- a/t/shredder/01basics.t
+++ b/t/shredder/01basics.t
@@ -3,7 +3,7 @@ use strict;
 use warnings;
 
 use Test::Deep;
-use RT::Test::Shredder tests => 3;
+use RT::Test::Shredder tests => 4;
 my $test = "RT::Test::Shredder";
 
 $test->create_savepoint();
@@ -20,4 +20,6 @@ ok( $id, "load ticket" ) or diag( "error: $msg" );
 my $shredder = $test->shredder_new();
 $shredder->Wipeout( Object => $ticket );
 
+$test->db_is_valid;
+
 cmp_deeply( $test->dump_current_and_savepoint(), "current DB equal to savepoint");
diff --git a/t/shredder/01ticket.t b/t/shredder/01ticket.t
index a65cdea..4ef4992 100644
--- a/t/shredder/01ticket.t
+++ b/t/shredder/01ticket.t
@@ -3,7 +3,7 @@ use strict;
 use warnings;
 
 use Test::Deep;
-use RT::Test::Shredder tests => 15;
+use RT::Test::Shredder tests => 20;
 my $test = "RT::Test::Shredder";
 
 $test->create_savepoint('clean');
@@ -26,6 +26,7 @@ use RT::Tickets;
     my $shredder = $test->shredder_new();
     $shredder->PutObjects( Objects => $tickets );
     $shredder->WipeoutAll;
+    $test->db_is_valid;
 }
 cmp_deeply( $test->dump_current_and_savepoint('clean'), "current DB equal to savepoint");
 
@@ -44,10 +45,12 @@ cmp_deeply( $test->dump_current_and_savepoint('clean'), "current DB equal to sav
     my $shredder = $test->shredder_new();
     $shredder->PutObjects( Objects => $child );
     $shredder->WipeoutAll;
+    $test->db_is_valid;
     cmp_deeply( $test->dump_current_and_savepoint('parent_ticket'), "current DB equal to savepoint");
 
     $shredder->PutObjects( Objects => $parent );
     $shredder->WipeoutAll;
+    $test->db_is_valid;
 }
 cmp_deeply( $test->dump_current_and_savepoint('clean'), "current DB equal to savepoint");
 
@@ -61,17 +64,18 @@ cmp_deeply( $test->dump_current_and_savepoint('clean'), "current DB equal to sav
 
     my $child = RT::Ticket->new( RT->SystemUser );
     my ($cid) = $child->Create( Subject => 'test', Queue => 1 );
-    ok( $cid, "created new ticket" );
+    ok( $cid, "created new ticket #$cid" );
 
     ($status, $msg) = $parent->AddLink( Type => 'DependsOn', Target => $cid );
     ok( $status, "Added link between tickets") or diag("error: $msg");
     my $shredder = $test->shredder_new();
     $shredder->PutObjects( Objects => $child );
     $shredder->WipeoutAll;
-
+    $test->db_is_valid;
     cmp_deeply( $test->dump_current_and_savepoint('parent_ticket'), "current DB equal to savepoint");
 
     $shredder->PutObjects( Objects => $parent );
     $shredder->WipeoutAll;
+    $test->db_is_valid;
 }
 cmp_deeply( $test->dump_current_and_savepoint('clean'), "current DB equal to savepoint");
diff --git a/t/shredder/02group_member.t b/t/shredder/02group_member.t
index 4f881a0..4170c94 100644
--- a/t/shredder/02group_member.t
+++ b/t/shredder/02group_member.t
@@ -3,7 +3,7 @@ use strict;
 use warnings;
 
 use Test::Deep;
-use RT::Test::Shredder tests => 22;
+use RT::Test::Shredder tests => 26;
 my $test = "RT::Test::Shredder";
 
 ### nested membership check
@@ -41,14 +41,17 @@ my $test = "RT::Test::Shredder";
 	my $shredder = $test->shredder_new();
 	$shredder->PutObjects( Objects => $members );
 	$shredder->WipeoutAll();
+	$test->db_is_valid;
 	cmp_deeply( $test->dump_current_and_savepoint('buadd'), "current DB equal to savepoint");
 	
 	$shredder->PutObjects( Objects => $user );
 	$shredder->WipeoutAll();
+	$test->db_is_valid;
 	cmp_deeply( $test->dump_current_and_savepoint('bucreate'), "current DB equal to savepoint");
 	
 	$shredder->PutObjects( Objects => [$pgroup, $cgroup] );
 	$shredder->WipeoutAll();
+	$test->db_is_valid;
 	cmp_deeply( $test->dump_current_and_savepoint('clean'), "current DB equal to savepoint");
 }
 
@@ -85,6 +88,7 @@ my $test = "RT::Test::Shredder";
 	my $shredder = $test->shredder_new();
 	$shredder->PutObjects( Objects => $member );
 	$shredder->WipeoutAll();
+	$test->db_is_valid;
 
 	$ticket = RT::Ticket->new( RT->SystemUser );
 	($status, $msg) = $ticket->Load( $id );
diff --git a/t/shredder/02queue.t b/t/shredder/02queue.t
index 5b83e0f..00213ec 100644
--- a/t/shredder/02queue.t
+++ b/t/shredder/02queue.t
@@ -3,7 +3,7 @@ use strict;
 use warnings;
 
 use Test::Deep;
-use RT::Test::Shredder tests => 16;
+use RT::Test::Shredder tests => 21;
 my $test = "RT::Test::Shredder";
 
 diag 'simple queue' if $ENV{TEST_VERBOSE};
@@ -16,6 +16,7 @@ diag 'simple queue' if $ENV{TEST_VERBOSE};
 	my $shredder = $test->shredder_new();
 	$shredder->PutObjects( Objects => $queue );
 	$shredder->WipeoutAll;
+	$test->db_is_valid;
 	cmp_deeply( $test->dump_current_and_savepoint('clean'), "current DB equal to savepoint");
 }
 
@@ -39,6 +40,7 @@ diag 'queue with scrip' if $ENV{TEST_VERBOSE};
 	my $shredder = $test->shredder_new();
 	$shredder->PutObjects( Objects => $queue );
 	$shredder->WipeoutAll;
+	$test->db_is_valid;
 	cmp_deeply( $test->dump_current_and_savepoint('clean'), "current DB equal to savepoint");
 }
 
@@ -60,6 +62,7 @@ diag 'queue with template' if $ENV{TEST_VERBOSE};
 	my $shredder = $test->shredder_new();
 	$shredder->PutObjects( Objects => $queue );
 	$shredder->WipeoutAll;
+	$test->db_is_valid;
 	cmp_deeply( $test->dump_current_and_savepoint('clean'), "current DB equal to savepoint");
 }
 
@@ -83,6 +86,7 @@ diag 'queue with a right granted' if $ENV{TEST_VERBOSE};
 	my $shredder = $test->shredder_new();
 	$shredder->PutObjects( Objects => $queue );
 	$shredder->WipeoutAll;
+	$test->db_is_valid;
 	cmp_deeply( $test->dump_current_and_savepoint('clean'), "current DB equal to savepoint");
 }
 
@@ -108,6 +112,7 @@ diag 'queue with a watcher' if $ENV{TEST_VERBOSE};
 	my $shredder = $test->shredder_new();
 	$shredder->PutObjects( Objects => $queue );
 	$shredder->WipeoutAll;
+	$test->db_is_valid;
 	cmp_deeply( $test->dump_current_and_savepoint('bqcreate'), "current DB equal to savepoint");
 
 #	$shredder->PutObjects( Objects => $group );
diff --git a/t/shredder/02template.t b/t/shredder/02template.t
index 2f9b4ab..27c9bac 100644
--- a/t/shredder/02template.t
+++ b/t/shredder/02template.t
@@ -3,7 +3,7 @@ use strict;
 use warnings;
 
 use Test::Deep;
-use RT::Test::Shredder tests => 7;
+use RT::Test::Shredder tests => 10;
 my $test = "RT::Test::Shredder";
 
 diag 'global template' if $ENV{TEST_VERBOSE};
@@ -19,6 +19,7 @@ diag 'global template' if $ENV{TEST_VERBOSE};
 	my $shredder = $test->shredder_new();
 	$shredder->PutObjects( Objects => $template );
 	$shredder->WipeoutAll;
+	$test->db_is_valid;
 	cmp_deeply( $test->dump_current_and_savepoint('clean'), "current DB equal to savepoint");
 }
 
@@ -36,6 +37,7 @@ diag 'local template' if $ENV{TEST_VERBOSE};
 	my $shredder = $test->shredder_new();
 	$shredder->PutObjects( Objects => $template );
 	$shredder->WipeoutAll;
+	$test->db_is_valid;
 	cmp_deeply( $test->dump_current_and_savepoint('clean'), "current DB equal to savepoint");
 }
 
@@ -63,5 +65,6 @@ diag 'template used in scrip' if $ENV{TEST_VERBOSE};
 	my $shredder = $test->shredder_new();
 	$shredder->PutObjects( Objects => $template );
 	$shredder->WipeoutAll;
+	$test->db_is_valid;
 	cmp_deeply( $test->dump_current_and_savepoint('clean'), "current DB equal to savepoint");
 }
diff --git a/t/shredder/02user.t b/t/shredder/02user.t
index 776a26d..0aa80ee 100644
--- a/t/shredder/02user.t
+++ b/t/shredder/02user.t
@@ -3,7 +3,7 @@ use strict;
 use warnings;
 
 use Test::Deep;
-use RT::Test::Shredder tests => 8;
+use RT::Test::Shredder tests => 10;
 my $test = "RT::Test::Shredder";
 
 $test->create_savepoint('clean');
@@ -38,6 +38,7 @@ $test->create_savepoint('aucreate'); # after user create
     my $shredder = $test->shredder_new();
     $shredder->PutResolver( BaseClass => 'RT::User', Code => $resolver );
     $shredder->Wipeout( Object => $user );
+    $test->db_is_valid;
     cmp_deeply( $test->dump_current_and_savepoint('bucreate'), "current DB equal to savepoint");
 }
 
@@ -49,5 +50,6 @@ $test->create_savepoint('aucreate'); # after user create
     my $shredder = $test->shredder_new();
     eval { $shredder->Wipeout( Object => $user ) };
     ok($@, "wipeout throw exception if no resolvers");
+    $test->db_is_valid;
     cmp_deeply( $test->dump_current_and_savepoint('aucreate'), "current DB equal to savepoint");
 }
diff --git a/t/shredder/03plugin_tickets.t b/t/shredder/03plugin_tickets.t
index a909c89..dd2b120 100644
--- a/t/shredder/03plugin_tickets.t
+++ b/t/shredder/03plugin_tickets.t
@@ -3,7 +3,7 @@ use strict;
 use warnings;
 
 use Test::Deep;
-use RT::Test::Shredder tests => 45;
+use RT::Test::Shredder tests => 49;
 my $test = "RT::Test::Shredder";
 
 use_ok('RT::Shredder');
@@ -56,6 +56,7 @@ use_ok('RT::Tickets');
     my $shredder = $test->shredder_new();
     $shredder->PutObjects( Objects => \@objs );
     $shredder->WipeoutAll;
+    $test->db_is_valid;
 }
 cmp_deeply( $test->dump_current_and_savepoint('clean'), "current DB equal to savepoint");
 
@@ -100,6 +101,7 @@ cmp_deeply( $test->dump_current_and_savepoint('clean'), "current DB equal to sav
     my $shredder = $test->shredder_new();
     $shredder->PutObjects( Objects => \@objs );
     $shredder->WipeoutAll;
+    $test->db_is_valid;
 }
 cmp_deeply( $test->dump_current_and_savepoint('clean'), "current DB equal to savepoint");
 
@@ -138,6 +140,7 @@ cmp_deeply( $test->dump_current_and_savepoint('clean'), "current DB equal to sav
     my $shredder = $test->shredder_new();
     $shredder->PutObjects( Objects => \@objs );
     $shredder->WipeoutAll;
+    $test->db_is_valid;
 
     my $ticket = RT::Ticket->new( RT->SystemUser );
     $ticket->Load( $cid1 );
@@ -145,5 +148,6 @@ cmp_deeply( $test->dump_current_and_savepoint('clean'), "current DB equal to sav
 
     $shredder->PutObjects( Objects => $ticket );
     $shredder->WipeoutAll;
+    $test->db_is_valid;
 }
 cmp_deeply( $test->dump_current_and_savepoint('clean'), "current DB equal to savepoint");

-----------------------------------------------------------------------


More information about the Rt-commit mailing list