X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=t%2FGearman.t;h=c344dd681642d070ce869f5a4d0a2a969d9bcce0;hb=8fa0beca9e4ecba63a26a3b97d9319cc9a72c3ef;hp=9ef9f7c97f21529d22951656fc58d0582edf5579;hpb=49217b5c211b54b02c4773054660b8ee2d829d80;p=cloudstore.git diff --git a/t/Gearman.t b/t/Gearman.t index 9ef9f7c..c344dd6 100755 --- a/t/Gearman.t +++ b/t/Gearman.t @@ -2,7 +2,7 @@ use strict; use warnings; -use Test::More tests => 5; +use Test::More tests => 60; use Data::Dump qw(dump); use lib 'lib'; @@ -11,22 +11,103 @@ use_ok 'CloudStore::Gearman'; my $hostname = `hostname -s`; chomp $hostname; - -my $user = $ARGV[0] || 2001; +$hostname =~ s/-dev// && warn "# fix hostname for development"; sub gearman { my ( $function, $args ) = @_; - ok my $o = CloudStore::Gearman->gearman_do( @_ ), $_[0]; - diag dump $o; + ok( my $o = CloudStore::Gearman->gearman_do( @_ ), join(' ',@_) ); + diag "result = ",dump $o if $ENV{DEBUG}; return $o; } -my $o = gearman $hostname . '_s1_quota_get' => $user; -diag dump $o; -cmp_ok $o, '=~', qr/^(\d+)\s+(\d+)$/, 'format: used quota'; +sub file_exists($) { + my ( $file ) = @_; + CloudStore::Gearman->gearman_do( file_size => $file ); +} + +sub test_refresh_file_list { + my ( $login ) = @_; + ok ! file_exists( "~$login/.meta/files" ), "refresh_file_list removed .meta/files"; + gearman list_files => "~$login"; +} + +my $quota = 5 * 1024 * 1024; + +my $u1 = gearman 'create_user' => 'test@example.com secret ' . $quota; +like $u1, qr/u\d+/, "login $u1"; +my $u2 = gearman 'create_user' => 'test2@example.com secret ' . ($quota + 1); +like $u2, qr/u\d+/, "login $u2"; +my $u3 = gearman 'create_user' => 'slice2@example.com secret ' . ($quota + 2); +like $u3, qr/u\d+/, "login $u2 (on other slice)"; -gearman( 'user_usage' => $user ); +foreach my $login ( $u1, $u2, $u3 ) { + my $o = gearman $hostname . '_s1_quota_get' => $login; + diag dump $o; + cmp_ok $o, '=~', qr/^(\d+)\s+(\d+)$/, 'format: used quota'; +} + +gearman( 'user_usage' => $u1 ); gearman( $hostname . '_s1_torrent_list' ); +diag "create .meta/files if it doesn't exist"; +foreach my $login ( $u1, $u2 ) { + gearman list_files => "~$login"; + ok file_exists "~$login/.meta/files", "file_exists ~$login/.meta/files"; +} + +if ( ! file_exists("~$u1/foo.txt") ) { + diag "create ~$u1/foo.txt"; + $ENV{RSYNC_PASSWORD} ||= 'secret'; + system('rsync', '-vv', $0, "rsync://$u1\@127.0.0.1:6501/$u1/" ); + gearman rename_file => "~$u1/Gearman.t#foo.txt"; +} else { + file_exists("~$u1/foo.txt") || BAIL_OUT("~$u1/foo.txt is required for rest of tests"); +} + +my $md5 = gearman( 'md5_get' => "~$u1/foo.txt" ); +diag "md5_get = $md5"; + +gearman send_file => "~$u1/foo.txt#~$u2/dir with space/file with space"; +test_refresh_file_list "$u2"; + +cmp_ok gearman( 'md5_get' => "~$u2/dir with space/file with space" ), 'eq', $md5, "md5_get on send_file to $u2"; + +my $files = gearman list_files => "~$u2"; +like $files, qr|dir with space/file with space|, 'found sent file in list_files'; + +gearman send_file => "~$u2/dir with space/file with space#~$u3/another dir with spaces/and file with spaces"; +test_refresh_file_list "$u3"; + +cmp_ok gearman( 'md5_get' => "~$u3/another dir with spaces/and file with spaces" ), 'eq', $md5, "md5_get on send_file to $u3"; + +gearman delete => "~$u2/dir with space/file with space"; +test_refresh_file_list "$u2"; + +gearman delete => "~$u3/another dir with spaces/and file with spaces"; +test_refresh_file_list "$u3"; + +gearman send_file => "~$u1/foo.txt#~$u2/foo.txt"; +test_refresh_file_list "$u2"; + +gearman rename_file => "~$u2/foo.txt#bar.txt"; +test_refresh_file_list "$u2"; +gearman rename_file => "~$u2/bar.txt#baz.txt"; +test_refresh_file_list "$u2"; + +cmp_ok +gearman( file_size => "~$u1/foo.txt" ), '==', +gearman( file_size => "~$u2/baz.txt" ), 'size_same'; + +diag "test symlink to other shard"; +gearman send_file => "~$u1/foo.txt#~$u3/foo.txt"; +cmp_ok +gearman( file_size => "~$u1/foo.txt" ), '==', +gearman( file_size => "~$u3/foo.txt" ), 'cross-slice symlink size same'; +test_refresh_file_list "$u3"; + +gearman delete => "~$u2/baz.txt"; +test_refresh_file_list "$u2"; + +ok ! file_exists "~$u2/baz.txt", 'deleted file size';