Easy.pm learns config(), acquires a test script
This commit is contained in:
parent
2139099706
commit
2845de74ea
|
@ -10,10 +10,13 @@ package Gitolite::Easy;
|
||||||
is_admin
|
is_admin
|
||||||
is_super_admin
|
is_super_admin
|
||||||
in_group
|
in_group
|
||||||
|
|
||||||
owns
|
owns
|
||||||
can_read
|
can_read
|
||||||
can_write
|
can_write
|
||||||
|
|
||||||
|
config
|
||||||
|
|
||||||
%rc
|
%rc
|
||||||
say
|
say
|
||||||
say2
|
say2
|
||||||
|
@ -52,9 +55,9 @@ sub is_super_admin {
|
||||||
# if gitolite list-memberships $GL_USER | grep -x $GROUPNAME >/dev/null; then ...
|
# if gitolite list-memberships $GL_USER | grep -x $GROUPNAME >/dev/null; then ...
|
||||||
sub in_group {
|
sub in_group {
|
||||||
valid_user();
|
valid_user();
|
||||||
my $g = shift;
|
my $g = "@" . +shift;
|
||||||
|
|
||||||
return grep { $_ eq $g } @{ list_memberships($user) };
|
return grep { $_ eq $g } @{ Gitolite::Conf::Load::list_memberships($user) };
|
||||||
}
|
}
|
||||||
|
|
||||||
# shell equivalent
|
# shell equivalent
|
||||||
|
@ -85,6 +88,18 @@ sub can_write {
|
||||||
return not( access( $r, $user, 'W', 'any' ) =~ /DENIED/ );
|
return not( access( $r, $user, 'W', 'any' ) =~ /DENIED/ );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# shell equivalent
|
||||||
|
# foo=$(gitolite git-config -r $REPONAME foo\\.bar)
|
||||||
|
sub config {
|
||||||
|
my $repo = shift;
|
||||||
|
my $key = shift;
|
||||||
|
|
||||||
|
return () if repo_missing($repo);
|
||||||
|
|
||||||
|
my $ret = git_config($repo, $key);
|
||||||
|
return %$ret;
|
||||||
|
}
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
# ----------------------------------------------------------------------
|
||||||
|
|
||||||
sub valid_user {
|
sub valid_user {
|
||||||
|
|
173
t/easy.t
Executable file
173
t/easy.t
Executable file
|
@ -0,0 +1,173 @@
|
||||||
|
#!/usr/bin/perl
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
# this is hardcoded; change it if needed
|
||||||
|
use lib "src";
|
||||||
|
use Gitolite::Easy;
|
||||||
|
use Gitolite::Test;
|
||||||
|
# put this after ::Easy because it chdirs away from where you were and the
|
||||||
|
# 'use lib "src"', not being absolute, fails
|
||||||
|
|
||||||
|
# smoke tests for Easy.pm
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
# for a change these are actual perl tests, so not much call for tsh here,
|
||||||
|
# although I still need the basic infrastructure for setting up the repos and
|
||||||
|
# I still can't intermix this with perl's Test.pm or Test::More etc
|
||||||
|
sub ok { (+shift) ? print "ok\n" : print "not ok\n"; }
|
||||||
|
sub nok { (+shift) ? print "not ok\n" : print "ok\n"; }
|
||||||
|
sub msg { return unless $ENV{D}; print STDERR "#" . +shift . "\n"; }
|
||||||
|
|
||||||
|
try "plan 88";
|
||||||
|
|
||||||
|
try "
|
||||||
|
cat $ENV{HOME}/.gitolite.rc
|
||||||
|
perl s/GIT_CONFIG_KEYS.*/GIT_CONFIG_KEYS => '.*',/
|
||||||
|
put $ENV{HOME}/.gitolite.rc
|
||||||
|
";
|
||||||
|
|
||||||
|
# basic push admin repo
|
||||||
|
confreset;confadd '
|
||||||
|
repo gitolite-admin
|
||||||
|
RW+ VREF/NAME/ = admin
|
||||||
|
RW+ VREF/NAME/u5/ = u5
|
||||||
|
|
||||||
|
repo aa
|
||||||
|
RW+ = u1
|
||||||
|
RW = u2
|
||||||
|
R = u4
|
||||||
|
|
||||||
|
config for.aa = 1
|
||||||
|
|
||||||
|
repo cc/..*
|
||||||
|
C = u4
|
||||||
|
RW+ = CREATOR u5
|
||||||
|
R = u6
|
||||||
|
|
||||||
|
config for.cc = 1
|
||||||
|
|
||||||
|
@oddguys = u1 u3 u5
|
||||||
|
@evensout = u2 u4 u6
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
repo cc/sub/..*
|
||||||
|
config sub.cc = 1
|
||||||
|
';
|
||||||
|
|
||||||
|
try "ADMIN_PUSH set1; !/FATAL/" or die text();
|
||||||
|
|
||||||
|
# valid_user() -- an internal function but still worth testing by itself first
|
||||||
|
eval { Gitolite::Easy::valid_user(); };
|
||||||
|
ok($@ =~ /FATAL.*GL_USER not set/);
|
||||||
|
$ENV{GL_USER} = "u2";
|
||||||
|
eval { Gitolite::Easy::valid_user(); };
|
||||||
|
nok($@ =~ /FATAL.*GL_USER not set/);
|
||||||
|
|
||||||
|
# is_admin
|
||||||
|
msg('is_admin');
|
||||||
|
$ENV{GL_USER} = "admin"; ok(is_admin());
|
||||||
|
$ENV{GL_USER} = "u5"; ok(is_admin());
|
||||||
|
$ENV{GL_USER} = "u2"; nok(is_admin());
|
||||||
|
|
||||||
|
# is_super_admin -- not sure how useful it is right now
|
||||||
|
msg('is_super_admin');
|
||||||
|
$ENV{GL_USER} = "admin"; ok( is_super_admin() );
|
||||||
|
$ENV{GL_USER} = "u5"; nok( is_super_admin() );
|
||||||
|
$ENV{GL_USER} = "u2"; nok( is_super_admin() );
|
||||||
|
|
||||||
|
# in_group
|
||||||
|
msg('in_group');
|
||||||
|
$ENV{GL_USER} = "u1"; ok( in_group('oddguys') ); nok( in_group('evensout') );
|
||||||
|
$ENV{GL_USER} = "u3"; ok( in_group('oddguys') ); nok( in_group('evensout') );
|
||||||
|
$ENV{GL_USER} = "u4"; nok( in_group('oddguys') ); ok( in_group('evensout') );
|
||||||
|
$ENV{GL_USER} = "u2"; nok( in_group('oddguys') ); ok( in_group('evensout') );
|
||||||
|
|
||||||
|
# owns
|
||||||
|
msg('owns');
|
||||||
|
try("glt ls-remote u4 cc/u4; /Initialized empty.*cc/u4/");
|
||||||
|
$ENV{GL_USER} = "u3"; nok( owns("cc/u3") ); nok( owns("cc/u4") );
|
||||||
|
$ENV{GL_USER} = "u4"; nok( owns("cc/u3") ); ok( owns("cc/u4") );
|
||||||
|
$ENV{GL_USER} = "u5"; nok( owns("cc/u3") ); nok( owns("cc/u4") );
|
||||||
|
|
||||||
|
# can_read
|
||||||
|
msg('can_read');
|
||||||
|
$ENV{GL_USER} = "u1"; ok(can_read("aa"));
|
||||||
|
$ENV{GL_USER} = "u2"; ok(can_read("aa"));
|
||||||
|
$ENV{GL_USER} = "u3"; nok(can_read("aa"));
|
||||||
|
$ENV{GL_USER} = "u4"; ok(can_read("aa"));
|
||||||
|
|
||||||
|
$ENV{GL_USER} = "u1"; nok(can_read("bb"));
|
||||||
|
$ENV{GL_USER} = "u2"; nok(can_read("bb"));
|
||||||
|
$ENV{GL_USER} = "u3"; nok(can_read("bb"));
|
||||||
|
$ENV{GL_USER} = "u4"; nok(can_read("bb"));
|
||||||
|
|
||||||
|
$ENV{GL_USER} = "u3"; nok(can_read("cc/u3"));
|
||||||
|
$ENV{GL_USER} = "u4"; nok(can_read("cc/u3"));
|
||||||
|
$ENV{GL_USER} = "u5"; nok(can_read("cc/u3"));
|
||||||
|
$ENV{GL_USER} = "u6"; nok(can_read("cc/u3"));
|
||||||
|
|
||||||
|
$ENV{GL_USER} = "u3"; nok(can_read("cc/u4"));
|
||||||
|
$ENV{GL_USER} = "u4"; ok(can_read("cc/u4"));
|
||||||
|
$ENV{GL_USER} = "u5"; ok(can_read("cc/u4"));
|
||||||
|
$ENV{GL_USER} = "u6"; ok(can_read("cc/u4"));
|
||||||
|
|
||||||
|
# can_write
|
||||||
|
msg('can_write');
|
||||||
|
$ENV{GL_USER} = "u1"; ok(can_write("aa"));
|
||||||
|
$ENV{GL_USER} = "u2"; ok(can_write("aa"));
|
||||||
|
$ENV{GL_USER} = "u3"; nok(can_write("aa"));
|
||||||
|
$ENV{GL_USER} = "u4"; nok(can_write("aa"));
|
||||||
|
|
||||||
|
$ENV{GL_USER} = "u1"; nok(can_write("bb"));
|
||||||
|
$ENV{GL_USER} = "u2"; nok(can_write("bb"));
|
||||||
|
$ENV{GL_USER} = "u3"; nok(can_write("bb"));
|
||||||
|
$ENV{GL_USER} = "u4"; nok(can_write("bb"));
|
||||||
|
|
||||||
|
$ENV{GL_USER} = "u3"; nok(can_write("cc/u3"));
|
||||||
|
$ENV{GL_USER} = "u4"; nok(can_write("cc/u3"));
|
||||||
|
$ENV{GL_USER} = "u5"; nok(can_write("cc/u3"));
|
||||||
|
$ENV{GL_USER} = "u6"; nok(can_write("cc/u3"));
|
||||||
|
|
||||||
|
$ENV{GL_USER} = "u3"; nok(can_write("cc/u4"));
|
||||||
|
$ENV{GL_USER} = "u4"; ok(can_write("cc/u4"));
|
||||||
|
$ENV{GL_USER} = "u5"; ok(can_write("cc/u4"));
|
||||||
|
$ENV{GL_USER} = "u6"; nok(can_write("cc/u4"));
|
||||||
|
|
||||||
|
# config
|
||||||
|
try("glt ls-remote u4 cc/sub/one; /Initialized empty.*cc/sub/one/");
|
||||||
|
try("glt ls-remote u4 cc/two; /Initialized empty.*cc/two/");
|
||||||
|
ok(1);
|
||||||
|
my @a;
|
||||||
|
@a = config("aa", "fo..aa"); ok($a[0] eq 'for.aa' and $a[1] eq '1');
|
||||||
|
@a = config("aa", "for.aa"); ok($a[0] eq 'for.aa' and $a[1] eq '1');
|
||||||
|
@a = config("aa", "fo\\..aa"); ok(scalar(@a) == 0);
|
||||||
|
|
||||||
|
@a = config("aa", "fo..cc"); ok(scalar(@a) == 0);
|
||||||
|
@a = config("aa", "for.cc"); ok(scalar(@a) == 0);
|
||||||
|
@a = config("aa", "fo\\..cc"); ok(scalar(@a) == 0);
|
||||||
|
|
||||||
|
@a = config("bb", "fo..aa"); ok(scalar(@a) == 0);
|
||||||
|
@a = config("bb", "for.aa"); ok(scalar(@a) == 0);
|
||||||
|
@a = config("bb", "fo\\..aa"); ok(scalar(@a) == 0);
|
||||||
|
|
||||||
|
@a = config("cc/u4", "fo..aa"); ok(scalar(@a) == 0);
|
||||||
|
@a = config("cc/u4", "for.aa"); ok(scalar(@a) == 0);
|
||||||
|
@a = config("cc/u4", "fo\\..aa"); ok(scalar(@a) == 0);
|
||||||
|
|
||||||
|
@a = config("cc/u4", "fo..cc"); ok($a[0] eq 'for.cc' and $a[1] eq '1');
|
||||||
|
@a = config("cc/u4", "for.cc"); ok($a[0] eq 'for.cc' and $a[1] eq '1');
|
||||||
|
@a = config("cc/u4", "fo\\..cc"); ok(scalar(@a) == 0);
|
||||||
|
|
||||||
|
@a = config("cc/two", "fo..cc"); ok($a[0] eq 'for.cc' and $a[1] eq '1');
|
||||||
|
@a = config("cc/two", "for.cc"); ok($a[0] eq 'for.cc' and $a[1] eq '1');
|
||||||
|
@a = config("cc/two", "fo\\..cc"); ok(scalar(@a) == 0);
|
||||||
|
|
||||||
|
@a = config("cc/sub/one", "fo..cc"); ok($a[0] eq 'for.cc' and $a[1] eq '1');
|
||||||
|
@a = config("cc/sub/one", "for.cc"); ok($a[0] eq 'for.cc' and $a[1] eq '1');
|
||||||
|
@a = config("cc/sub/one", "fo\\..cc"); ok(scalar(@a) == 0);
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
# @a = config("cc/sub/one", "su..cc"); ok($a[0] eq 'sub.cc' and $a[1] eq '1');
|
||||||
|
# @a = config("cc/sub/one", "sub.cc"); ok($a[0] eq 'sub.cc' and $a[1] eq '1');
|
||||||
|
@a = config("cc/sub/one", "su\\..cc"); ok(scalar(@a) == 0);
|
||||||
|
|
Loading…
Reference in a new issue