X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=rt%2Ft%2Fvalidator%2Fgroup_members.t;h=0fd1a749a994c48f87dfc1373a70c90601cdf133;hb=06f4ee7c977486d06aa1e638e0e2a4a29518a2c7;hp=78180142686bf39506e5a431a1ee2e671a3751eb;hpb=a6fe07e49e3fc12169e801b1ed6874c3a5bd8500;p=freeside.git diff --git a/rt/t/validator/group_members.t b/rt/t/validator/group_members.t index 781801426..0fd1a749a 100644 --- a/rt/t/validator/group_members.t +++ b/rt/t/validator/group_members.t @@ -1,107 +1,42 @@ -#!/usr/bin/perl -w use strict; use warnings; -use RT::Test tests => 60; +use RT::Test tests => undef; -sub load_or_create_group { - my $name = shift; - my %args = (@_); - - my $group = RT::Group->new( RT->SystemUser ); - $group->LoadUserDefinedGroup( $name ); - unless ( $group->id ) { - my ($id, $msg) = $group->CreateUserDefinedGroup( - Name => $name, - ); - die "$msg" unless $id; - } - - if ( $args{Members} ) { - my $cur = $group->MembersObj; - while ( my $entry = $cur->Next ) { - my ($status, $msg) = $entry->Delete; - die "$msg" unless $status; - } - - foreach my $new ( @{ $args{Members} } ) { - my ($status, $msg) = $group->AddMember( - ref($new)? $new->id : $new, - ); - die "$msg" unless $status; - } - } - - 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 => [] ); + my $group = RT::Test->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 { - my $group1 = load_or_create_group( 'test1', Members => [] ); + my $group1 = RT::Test->load_or_create_group( 'test1', Members => [] ); ok $group1, "loaded or created a group"; - my $group2 = load_or_create_group( 'test2', Members => [ $group1 ]); + my $group2 = RT::Test->load_or_create_group( 'test2', Members => [ $group1 ]); ok $group2, "loaded or created a group"; 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); + isnt($ecode, 0, 'non-zero exit code'); 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 @@ -110,7 +45,7 @@ sub run_validator { for (1..5) { my $child = @groups? $groups[-1]: undef; - my $group = load_or_create_group( 'test'. $_, Members => [ $child? ($child): () ] ); + my $group = RT::Test->load_or_create_group( 'test'. $_, Members => [ $child? ($child): () ] ); ok $group, "loaded or created a group"; ok $group->HasMember( $child->id ), "has member" @@ -121,15 +56,15 @@ 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); + isnt($ecode, 0, 'non-zero exit code'); for ( my $i = 1; $i < @groups; $i++ ) { ok $groups[$i]->HasMember( $groups[$i-1]->id ), "has member"; @@ -137,42 +72,57 @@ 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) { my @groups; for (2..5) { - my $group = load_or_create_group( 'test'. $_, Members => [] ); + my $group = RT::Test->load_or_create_group( 'test'. $_, Members => [] ); ok $group, "loaded or created a group"; push @groups, $group; } - my $parent = load_or_create_group( 'test1', Members => \@groups ); + my $parent = RT::Test->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 { - my $gchild = load_or_create_group( 'test5', Members => [] ); + my $gchild = RT::Test->load_or_create_group( 'test5', Members => [] ); ok $gchild, "loaded or created a group"; my @groups; for (2..4) { - my $group = load_or_create_group( 'test'. $_, Members => [ $gchild ] ); + my $group = RT::Test->load_or_create_group( 'test'. $_, Members => [ $gchild ] ); ok $group, "loaded or created a group"; push @groups, $group; } - my $parent = load_or_create_group( 'test1', Members => \@groups ); + my $parent = RT::Test->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; +} + +# group without principal record and cgm records +# was causing infinite loop as principal was not created +{ + my $group = RT::Test->load_or_create_group('Test'); + ok $group && $group->id, 'loaded or created group'; + + my $dbh = $group->_Handle->dbh; + $dbh->do('DELETE FROM Principals WHERE id = ?', {RaiseError => 1}, $group->id); + $dbh->do('DELETE FROM CachedGroupMembers WHERE GroupId = ?', {RaiseError => 1}, $group->id); + DBIx::SearchBuilder::Record::Cachable->FlushCache; + + my ($ecode, $res) = RT::Test->run_validator(resolve => 1, timeout => 30); + isnt($ecode, 0, 'non-zero exit code'); + + RT::Test->db_is_valid; } +done_testing;