gitolite/t/standalone/gl-system-install
2012-02-26 19:33:26 +05:30

178 lines
4.1 KiB
Perl
Executable file

#!/usr/bin/perl
# test script for install side of gitolite (not part of normal test suite)
use 5.10.0;
use strict;
use warnings;
use lib "$ENV{HOME}/._s/bin";
use Tsh;
my $version_string = get_version();
my $euid=$>;
try 'cd';
# invalid arguments
clean();
try "
## invalid arguments
gitolite/src/gl-system-install bin2
!ok
/I need all 3.../
gitolite/src/gl-system-install bin2 share2/gitolite/conf share2/gitolite/hooks
!ok
/should be an absolute path/
";
# no arguments
clean();
try "
## no arguments
gitolite/src/gl-system-install
ok
/using default values for EUID=$euid/
//home/gl-test/bin, /home/gl-test/share/gitolite/conf, /home/gl-test/share/gitolite/hooks/
";
static_checks(
"/home/gl-test/bin",
"/home/gl-test/share/gitolite/conf",
"/home/gl-test/share/gitolite/hooks",
$version_string
);
# non-default arguments
clean();
try "
## non-default arguments
gitolite/src/gl-system-install \$PWD/bin2 \$PWD/share2/gitolite/conf \$PWD/share2/gitolite/hooks
!ok
/WARNING/
/gl-setup is not in your .PATH/
";
static_checks(
"/home/gl-test/bin2",
"/home/gl-test/share2/gitolite/conf",
"/home/gl-test/share2/gitolite/hooks",
$version_string
);
# occurs earlier in PATH
clean();
try "
## occurs earlier in PATH
gitolite/src/gl-system-install
gitolite/src/gl-system-install \$PWD/bin2 \$PWD/share2/gitolite/conf \$PWD/share2/gitolite/hooks
!ok
/WARNING/
/in your .PATH .also. contains gl-setup/
" or die;
static_checks(
"/home/gl-test/bin2",
"/home/gl-test/share2/gitolite/conf",
"/home/gl-test/share2/gitolite/hooks",
$version_string
);
# ----------------------------------------------------------------------
sub static_checks {
# 3 directory names, version string
my ($bin_dir, $conf_dir, $hooks_dir, $verstr) = @_;
try "
# $bin_dir/gl-setup contains $conf_dir
cat $bin_dir/gl-setup
ok
/\Q$conf_dir\E/
!/\Q/tmp/share\E/
" or die;
try "
# $conf_dir/example.gitolite.rc has $conf_dir and $hooks_dir
cat $conf_dir/example.gitolite.rc
ok
/\Q$conf_dir\E/
/\Q$hooks_dir\E/
!/\Q/tmp/share\E/
" or die;
try "
# check $bin_dir got most of the sources
ls -al $bin_dir
ok
/gitolite_env.pm/
/gitolite.pm/
/gitolite_rc.pm/
/gl-auth-command/
/gl-compile-conf/
/gl-install/
/gl-query-rc/
/gl-setup/
/gl-system-install/
" or die;
try "
# check $conf_dir got the example files
ls -al $conf_dir
ok
/example.gitolite.rc/
/example.conf/
/VERSION/
" or die;
try "
# check $hooks_dir got the hooks
find $hooks_dir -type f
ok
/\Q$hooks_dir/common/gitolite-hooked\E/
/\Q$hooks_dir/common/update\E/
/\Q$hooks_dir/common/post-receive.mirrorpush\E/
/\Q$hooks_dir/common/gl-pre-git.hub-sample\E/
/\Q$hooks_dir/gitolite-admin/post-update\E/
" or die;
try "
# check version string
cat $conf_dir/VERSION
ok
/\Q$verstr\E/
" or die;
}
sub clean {
chdir($ENV{HOME});
system("rm -rf .ssh*");
system("rm -rf .gito* gitolite-admin projects.list repositories *back.tar share share2 bin bin2 glt-adc td");
mkdir "td";
system("mkdir -p .ssh; chmod go-w .ssh");
system("ssh-keygen -q -N '' -f .ssh/id_rsa");
# set up our identity (impacts some tests; don't change this!)
system('git config --global user.name "gitolite tester"');
system('git config --global user.email "tester@example.com"');
}
sub cd_g {
chdir($ENV{HOME});
chdir("gitolite");
}
sub setup {
chdir($ENV{HOME});
try "cp .ssh/id_rsa.pub tester.pub";
try "gl-setup -q tester.pub";
}
sub get_version {
chdir($ENV{HOME});
chdir("gitolite");
try "git describe --tags --long --dirty=-dt 2>/dev/null";
return ((lines())[0]);
}