You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
347 lines
9.9 KiB
347 lines
9.9 KiB
# gearman service layer test
|
|
|
|
use strict;
|
|
|
|
## no critic
|
|
|
|
use LoadCLIConfig;
|
|
|
|
use Logging;
|
|
|
|
use Test::Unit::Procedural;
|
|
|
|
use Service::TestService;
|
|
use ServiceProxy qw(new_async_do);
|
|
|
|
use Serialization qw(
|
|
$format_xml
|
|
$format_yaml
|
|
$format_json
|
|
$format_php
|
|
$format_perl
|
|
);
|
|
|
|
my $service1;
|
|
my $service2;
|
|
my $service3;
|
|
|
|
my $service = test::TestService->new();
|
|
my $proxy = ServiceProxy->new();
|
|
#$service1 = test::TestService->new();
|
|
#$service2 = test::TestService->new();
|
|
#$service3 = test::TestService->new();
|
|
|
|
|
|
sub set_up {
|
|
|
|
#set_project(yearmonth2projecttag($download_year,$download_month));
|
|
# $service = test::TestService->new();
|
|
# $proxy = ServiceProxy->new();
|
|
|
|
}
|
|
|
|
|
|
sub test_roundtrip_do {
|
|
|
|
my $data = {};
|
|
|
|
for (my $i = 0; $i < 10; $i++) {
|
|
$data->{$i} = 'roundtrip test ' . $i;
|
|
my $input = [ $data, $i ];
|
|
my $output = $proxy->do('roundtrip',\&on_error,$input);
|
|
print $output->[0]->{$output->[1]} . "\n";
|
|
assert($output->[0]->{$output->[1]} eq $data->{$i},'service do roundtrip failed');
|
|
}
|
|
|
|
}
|
|
|
|
sub test_roundtrip_json {
|
|
$service->stop();
|
|
$service->{serialization_format} = $format_json;
|
|
$proxy->{serialization_format} = $format_json;
|
|
$service->start();
|
|
|
|
my $data = {};
|
|
|
|
for (my $i = 0; $i < 10; $i++) {
|
|
$data->{$i} = 'roundtrip test ' . $i;
|
|
my $input = [ $data, $i ];
|
|
my $output = $proxy->do('roundtrip',\&on_error,$input);
|
|
print $output->[0]->{$output->[1]} . "\n";
|
|
assert($output->[0]->{$output->[1]} eq $data->{$i},'service do roundtrip failed');
|
|
}
|
|
$service->stop();
|
|
$service->{serialization_format} = undef;
|
|
$proxy->{serialization_format} = undef;
|
|
$service->start();
|
|
}
|
|
|
|
sub test_roundtrip_yaml {
|
|
$service->stop();
|
|
$service->{serialization_format} = $format_yaml;
|
|
$proxy->{serialization_format} = $format_yaml;
|
|
$service->start();
|
|
|
|
my $data = {};
|
|
|
|
for (my $i = 0; $i < 10; $i++) {
|
|
$data->{$i} = 'roundtrip test ' . $i;
|
|
my $input = [ $data, $i ];
|
|
my $output = $proxy->do('roundtrip',\&on_error,$input);
|
|
print $output->[0]->{$output->[1]} . "\n";
|
|
assert($output->[0]->{$output->[1]} eq $data->{$i},'service do roundtrip failed');
|
|
}
|
|
$service->stop();
|
|
$service->{serialization_format} = undef;
|
|
$proxy->{serialization_format} = undef;
|
|
$service->start();
|
|
}
|
|
|
|
sub Xtest_roundtrip_php {
|
|
$service->stop();
|
|
$service->{serialization_format} = $format_php;
|
|
$proxy->{serialization_format} = $format_php;
|
|
$service->start();
|
|
|
|
my $data = {};
|
|
|
|
for (my $i = 0; $i < 10; $i++) {
|
|
$data->{$i} = 'roundtrip test ' . $i;
|
|
my $input = [ $data, $i ];
|
|
my $output = $proxy->do('roundtrip',\&on_error,$input);
|
|
print $output->[0]->{$output->[1]} . "\n";
|
|
assert($output->[0]->{$output->[1]} eq $data->{$i},'service do roundtrip failed');
|
|
}
|
|
$service->stop();
|
|
$service->{serialization_format} = undef;
|
|
$proxy->{serialization_format} = undef;
|
|
$service->start();
|
|
}
|
|
|
|
sub test_roundtrip_xml {
|
|
$service->stop();
|
|
$service->{serialization_format} = $format_xml;
|
|
$proxy->{serialization_format} = $format_xml;
|
|
$service->start();
|
|
|
|
my $data = {};
|
|
|
|
for (my $i = 0; $i < 10; $i++) {
|
|
$data->{$i} = 'roundtrip test ' . $i;
|
|
my $input = [ $data, $i ];
|
|
my $output = $proxy->do('roundtrip',\&on_error,$input);
|
|
print $output->[0]->{$output->[1]} . "\n";
|
|
assert($output->[0]->{$output->[1]} eq $data->{$i},'service do roundtrip failed');
|
|
}
|
|
$service->stop();
|
|
$service->{serialization_format} = undef;
|
|
$proxy->{serialization_format} = undef;
|
|
$service->start();
|
|
}
|
|
|
|
sub test_roundtrip_perl {
|
|
$service->stop();
|
|
$service->{serialization_format} = $format_perl;
|
|
$proxy->{serialization_format} = $format_perl;
|
|
$service->start();
|
|
|
|
my $data = {};
|
|
|
|
for (my $i = 0; $i < 10; $i++) {
|
|
$data->{$i} = 'roundtrip test ' . $i;
|
|
my $input = [ $data, $i ];
|
|
my $output = $proxy->do('roundtrip',\&on_error,$input);
|
|
print $output->[0]->{$output->[1]} . "\n";
|
|
assert($output->[0]->{$output->[1]} eq $data->{$i},'service do roundtrip failed');
|
|
}
|
|
$service->stop();
|
|
$service->{serialization_format} = undef;
|
|
$proxy->{serialization_format} = undef;
|
|
$service->start();
|
|
}
|
|
|
|
sub test_noop_do {
|
|
|
|
#my $data = {};
|
|
|
|
for (my $i = 0; $i < 10; $i++) {
|
|
#$data->{$i} = 'roundtrip test ' . $i;
|
|
#my $input = [ $data, $i ];
|
|
my $output = $proxy->do('noop',\&on_error);
|
|
#print $output->[0]->{$output->[1]} . "\n";
|
|
assert(!defined $output,'service do noop failed');
|
|
}
|
|
|
|
}
|
|
|
|
sub test_exception_do {
|
|
|
|
#my $data = {};
|
|
|
|
for (my $i = 0; $i < 10; $i++) {
|
|
#$data->{$i} = 'roundtrip test ' . $i;
|
|
#my $input = [ $data, $i ];
|
|
my $exception = undef;
|
|
my $output = $proxy->do('exception',sub { $exception = shift; });
|
|
#print $output->[0]->{$output->[1]} . "\n";
|
|
assert(length($exception) > 0,'service do exception failed');
|
|
}
|
|
|
|
}
|
|
|
|
sub test_sleep_roundtrip_do {
|
|
|
|
my $proxy = ServiceProxy->new(undef,1.5);
|
|
|
|
my $data = {};
|
|
|
|
for (my $i = 0; $i < 10; $i++) {
|
|
$data->{$i} = 'sleep roundtrip test ' . $i;
|
|
my $input = [ $data, $i ];
|
|
my $output = $proxy->do('sleeproundtrip',\&on_error,1,$input);
|
|
print $output->[0]->{$output->[1]} . "\n";
|
|
assert($output->[0]->{$output->[1]} eq $data->{$i},'service do sleep roundtrip failed');
|
|
}
|
|
|
|
}
|
|
|
|
sub test_sleep_roundtrip_do_async1 {
|
|
|
|
#my $service = test::TestService->new();
|
|
my $proxy = ServiceProxy->new();
|
|
|
|
my $data = {};
|
|
my $output = undef;
|
|
|
|
for (my $i = 0; $i < 3; $i++) {
|
|
$data->{$i} = 'roundtrip test ' . $i;
|
|
my $input = [ $data, $i ];
|
|
if ($i > 0) {
|
|
$proxy->wait(3);
|
|
print $output->[0]->{$output->[1]} . "\n";
|
|
assert($output->[0]->{$output->[1]} eq $data->{$i - 1},'service do async roundtrip failed');
|
|
$output = undef;
|
|
}
|
|
assert($proxy->do_async('sleeproundtrip',sub { $output = shift; },\&on_error,2,$input),'service do async failed');
|
|
|
|
}
|
|
#$proxy->wait();
|
|
|
|
}
|
|
|
|
sub test_sleep_roundtrip_do_async2 {
|
|
|
|
my $data = {};
|
|
my @proxies = ();
|
|
|
|
my $on_complete = sub { my $output = shift;
|
|
print $output->[0]->{$output->[1]} . "\n";
|
|
#assert($output->[0]->{$output->[1]} eq $data->{$i},'service do async roundtrip failed');
|
|
};
|
|
|
|
for (my $i = 0; $i < 10; $i++) {
|
|
$data->{$i} = 'roundtrip test ' . $i;
|
|
my $input = [ $data, $i ];
|
|
#if ($i > 0) {
|
|
# $proxy->wait();
|
|
# print $output->[0]->{$output->[1]} . "\n";
|
|
#assert($output->[0]->{$output->[1]} eq $data->{$i - 1},'service do async roundtrip failed');
|
|
# $output = undef;
|
|
#}
|
|
#my $proxy;
|
|
#if ($i % 3 == 0) {
|
|
# $proxy = $proxy1;
|
|
#} elsif ($i % 3 == 1) {
|
|
# $proxy = $proxy2;
|
|
#} elsif ($i % 3 == 1) {
|
|
# $proxy = $proxy3;
|
|
#}
|
|
|
|
my $proxy = new_async_do('sleeproundtrip', $on_complete, \&on_error, 0, $input); #,
|
|
#sub {
|
|
#print shift . "\n";
|
|
##assert(0,'on_error: ' . shift);
|
|
#},
|
|
#0,$input);
|
|
assert(defined $proxy,'proxy not created');
|
|
#$proxy->wait();
|
|
push(@proxies, $proxy);
|
|
|
|
}
|
|
|
|
|
|
|
|
#undef @proxies;
|
|
#$service->stop();
|
|
#$proxy->wait();
|
|
|
|
}
|
|
|
|
sub test_exception_do_async {
|
|
|
|
my $data = {};
|
|
my @proxies = ();
|
|
|
|
my $on_error = sub { my $exception = shift;
|
|
print $exception . "\n";
|
|
assert(length($exception) > 0,'service do async roundtrip failed');
|
|
};
|
|
|
|
for (my $i = 0; $i < 10; $i++) {
|
|
$data->{$i} = 'roundtrip test ' . $i;
|
|
my $input = [ $data, $i ];
|
|
#if ($i > 0) {
|
|
# $proxy->wait();
|
|
# print $output->[0]->{$output->[1]} . "\n";
|
|
#assert($output->[0]->{$output->[1]} eq $data->{$i - 1},'service do async roundtrip failed');
|
|
# $output = undef;
|
|
#}
|
|
#my $proxy;
|
|
#if ($i % 3 == 0) {
|
|
# $proxy = $proxy1;
|
|
#} elsif ($i % 3 == 1) {
|
|
# $proxy = $proxy2;
|
|
#} elsif ($i % 3 == 1) {
|
|
# $proxy = $proxy3;
|
|
#}
|
|
|
|
my $proxy = new_async_do('sleeproundtrip', undef, $on_error, 0, $input); #,
|
|
#sub {
|
|
#print shift . "\n";
|
|
##assert(0,'on_error: ' . shift);
|
|
#},
|
|
#0,$input);
|
|
assert(defined $proxy,'proxy not created');
|
|
#$proxy->wait();
|
|
push(@proxies, $proxy);
|
|
|
|
}
|
|
|
|
|
|
|
|
#undef @proxies;
|
|
#$service->stop();
|
|
#$proxy->wait();
|
|
|
|
}
|
|
|
|
sub on_error {
|
|
print shift . "\n";
|
|
#assert(0,'on_error: ' . shift);
|
|
}
|
|
|
|
sub tear_down {
|
|
|
|
#undef $service;
|
|
#undef $proxy;
|
|
|
|
}
|
|
|
|
create_suite();
|
|
run_suite();
|
|
|
|
#destroy_dbs();
|
|
undef $service;
|
|
undef $proxy;
|
|
|
|
exit; |