#!/usr/bin/perl -w
use strict;
use SVK::Util qw(can_run abs_path);
use SVK::Test;
use Pushmi::Test;
BEGIN { check_apache() }
use Test::More tests => 11;
use File::Spec::Functions qw(rel2abs catdir catfile);
my ($xd, $svk) = build_test('master', 'slave');
my $tree = create_basic_tree ($xd, '/master/');
my $masterdepot = $xd->find_depot('master');
my $slavedepot = $xd->find_depot('slave');
my $apache_root = rel2abs(catdir ('t', 'apache_master'));
my ($passwd, $policy) = map { catfile($apache_root, $_) }
qw/svnpasswd svnpolicy/;
# XXX: write a test which wouldn't fail only if we have svnpolicy
my ( $master, $master_url ) = get_dav_server(
apache_root => rel2abs( catdir( 't', 'apache_master' ) ),
repospath => $masterdepot->repospath,
map { $_ => catfile( $apache_root, $_ ) } qw/svnpasswd svnpolicy/,
);
diag $master_url;
overwrite_file($passwd, "test:LM9XDLRiC7OUE
mirror:TUcTg/K0XfIcI
"); # test: test, mirror: secret
overwrite_file($policy, q{
[/]
mirror = rw
test = r
[/X]
test = rw
});
my $perl = join(' ', $^X, map { "'-I$_'" } abs_path(@INC));
my $pushmi = can_run('pushmi') or die "can't find pushmi";
my ( $slave, $slave_url ) = get_dav_server(
apache_root => rel2abs( catdir( 't', 'apache_slave' ) ),
repospath => $slavedepot->repospath,
extra_modules => ['perl'],
(map { $_ => catfile( $apache_root, $_ ) } qw/svnpasswd svnpolicy/),
extra_config => qq{
PerlSetVar PushmiConfig $FindBin::Bin/pushmi.conf
Require valid-user
PerlAuthzHandler Pushmi::Apache::AuthCache
},
);
$master->start;
{
local $ENV{PERL5LIB}=join(':', map { abs_path($_) } @INC);
$slave->start;
}
start_memcached();
#my $perlbal_port = 9998;
#my $perlbal_url = start_perlbal($perlbal_port);
my ($perlbal_url, $perlbal_port) = ($slave_url, 5009);
diag $perlbal_url;
run_pushmi('mirror', $slavedepot->repospath, $master_url);
system('svn', 'mkdir', '--non-interactive', '--no-auth-cache', '--username' => 'mirror', '--password' => 'secret', -m => 'mkdir', "$master_url/X");
run_pushmi('sync', $slavedepot->repospath);
is_svn_output(['mkdir', '--non-interactive', '--no-auth-cache', '--username' => 'test', '--password' => 'test', -m => 'mkdir', "$perlbal_url/orzzzz"],
[],
[qr{svn: .*403 Forbidden}]);
#sleep 1 while 1;
is_svn_output(['mkdir', '--non-interactive', '--no-auth-cache', '--username' => 'test', '--password' => 'test', -m => 'mkdir', "$perlbal_url/X/mmmm"],
['','Committed revision 4.']);
diag $slave_url;
is($masterdepot->repos->fs->revision_prop(4, 'svn:author'), 'test', 'user is correct');
is($slavedepot->repos->fs->revision_prop(4, 'svn:author'), 'test', 'user is correct');
my ($copath, $corpath) = get_copath('auth-svn');
is_svn_output(['co', '--non-interactive', '--no-auth-cache', '--username' => 'test', '--password' => 'test', "$slave_url/X", $copath],
['A t/checkout/auth-svn/mmmm',
'Checked out revision 4.']);
overwrite_file("$copath/fileA.txt", "fnord");
is_svn_output(['add', "$copath/fileA.txt"],
['A t/checkout/auth-svn/fileA.txt']);
is_svn_output(['ci', '--non-interactive', '--no-auth-cache', '--username' => 'test', '--password' => '', -m => 'commit a single file', $copath],
[],
["svn: Commit failed (details follow):",
"svn: OPTIONS request failed on '/svn/X'",
"svn: OPTIONS of '/svn/X': authorization failed (http://localhost:$perlbal_port)"]);
is_svn_output(['ci', '--non-interactive', '--no-auth-cache', '--username' => 'test', '--password' => 'test', -m => 'commit a single file', $copath],
['Adding t/checkout/auth-svn/fileA.txt',
'Transmitting file data .',
'Committed revision 5.']);
append_file("$copath/fileA.txt", "fnordfnord");
is_svn_output(['ci', '--non-interactive', '--no-auth-cache', '--username' => 'test', '--password' => 'test', -m => 'commit a single file', $copath],
['Sending t/checkout/auth-svn/fileA.txt',
'Transmitting file data .',
'Committed revision 6.']);
is_svn_output(['rm', "$copath/mmmm"],
['D t/checkout/auth-svn/mmmm']);
is_svn_output(['ci', '--non-interactive', '--no-auth-cache', '--username' => 'test', '--password' => 'test', -m => 'commit a single file', $copath],
['Deleting t/checkout/auth-svn/mmmm',
'',
'Committed revision 7.']);