From 8c05b81d6860d8e0da4098cc6f59f630d7c53037 Mon Sep 17 00:00:00 2001 From: Adam Frisby Date: Tue, 25 Mar 2008 16:29:54 +0000 Subject: * Committing Lulurun's Cgi/Perl implementation of the UGAI servers. * I love you long time. --- share/perl/test/OpenSimTest.pm | 53 +++++++++++ share/perl/test/OpenSimTest/AssetTester.pm | 17 ++++ share/perl/test/OpenSimTest/Config.pm | 53 +++++++++++ share/perl/test/OpenSimTest/GridTester.pm | 62 +++++++++++++ share/perl/test/OpenSimTest/InventoryTester.pm | 116 +++++++++++++++++++++++++ share/perl/test/OpenSimTest/UserTester.pm | 53 +++++++++++ share/perl/test/PerformanceTest.pl | 78 +++++++++++++++++ share/perl/test/SingleTest.pl | 21 +++++ 8 files changed, 453 insertions(+) create mode 100644 share/perl/test/OpenSimTest.pm create mode 100644 share/perl/test/OpenSimTest/AssetTester.pm create mode 100644 share/perl/test/OpenSimTest/Config.pm create mode 100644 share/perl/test/OpenSimTest/GridTester.pm create mode 100644 share/perl/test/OpenSimTest/InventoryTester.pm create mode 100644 share/perl/test/OpenSimTest/UserTester.pm create mode 100644 share/perl/test/PerformanceTest.pl create mode 100644 share/perl/test/SingleTest.pl (limited to 'share/perl/test') diff --git a/share/perl/test/OpenSimTest.pm b/share/perl/test/OpenSimTest.pm new file mode 100644 index 0000000..a24ae22 --- /dev/null +++ b/share/perl/test/OpenSimTest.pm @@ -0,0 +1,53 @@ +package OpenSimTest; + +use strict; +use PerformanceTest; +use OpenSimTest::Config; +use OpenSimTest::UserTester; +use OpenSimTest::GridTester; +use OpenSimTest::AssetTester; +use OpenSimTest::InventoryTester; + +sub init { + UserTester::init(); + GridTester::init(); + AssetTester::init(); + InventoryTester::init(); +} + +sub SingleTest { + my $url = shift; + my $methodname = shift; + my @ARGS = @_; + + if (!$OpenSimTest::Config::HANDLER_LIST{$methodname}) { + Carp::croak("unknown handler name: [$methodname]"); + } else { + my $handler = $OpenSimTest::Config::HANDLER_LIST{$methodname}; + my $result = $handler->($url, @ARGS); + return $result; + } +} + +sub PerformanceCompare { + my $server_name = shift; + my $count = shift; + my @args = @_; + my $test = new PerformanceTest(); + { + my @params = @args; + unshift(@params, $OpenSimTest::Config::APACHE_SERVERS{$server_name}); + $test->add_test("APACHE::$args[0]", \&OpenSimTest::SingleTest, \@params); + } + { + my @params = @args; + unshift(@params, $OpenSimTest::Config::OPENSIM_SERVERS{$server_name}); + $test->add_test("OPENSIM::$args[0]", \&OpenSimTest::SingleTest, \@params); + } + $test->set_count($count); + $test->start(); + print "\n\n"; + #$test->bref_result(); +} + +1; diff --git a/share/perl/test/OpenSimTest/AssetTester.pm b/share/perl/test/OpenSimTest/AssetTester.pm new file mode 100644 index 0000000..ba05205 --- /dev/null +++ b/share/perl/test/OpenSimTest/AssetTester.pm @@ -0,0 +1,17 @@ +package AssetTester; + +use strict; +use XML::Serializer; +use OpenSim::Utility; + +sub init { + &OpenSimTest::Config::registerHandler("get_asset", \&_get_asset); +} + +sub _get_asset { + my $url = shift || $OpenSimTest::Config::ASSET_SERVER_URL; + my $asset_id = shift; + my $res = &OpenSim::Utility::HttpGetRequest($url . "/assets/" . $asset_id) . "\n"; +} + +1; diff --git a/share/perl/test/OpenSimTest/Config.pm b/share/perl/test/OpenSimTest/Config.pm new file mode 100644 index 0000000..14ab3ed --- /dev/null +++ b/share/perl/test/OpenSimTest/Config.pm @@ -0,0 +1,53 @@ +package OpenSimTest::Config; + +use strict; + +my $apache_server_host = "localhost"; +my $opensim_server_host = "localhost"; + +# REGION +our $SIM_RECV_KEY = ""; +our $SIM_SEND_KEY = ""; +# ASSET +#our $ASSET_SERVER_URL = "http://127.0.0.1:8003/"; +our $ASSET_SERVER_URL = "http://$apache_server_host/opensim/asset.cgi"; +our $ASSET_RECV_KEY = ""; +our $ASSET_SEND_KEY = ""; +# USER +#our $USER_SERVER_URL = "http://127.0.0.1:8001/"; +our $USER_SERVER_URL = "http://$apache_server_host/opensim/user.cgi"; +our $USER_RECV_KEY = ""; +our $USER_SEND_KEY = ""; +# GRID +#our $GRID_SERVER_URL = "http://127.0.0.1:8001/"; +our $GRID_SERVER_URL = "http://$apache_server_host/opensim/grid.cgi"; +our $GRID_RECV_KEY = ""; +our $GRID_SEND_KEY = ""; +# INVENTORY +#our $INVENTORY_SERVER_URL = "http://127.0.0.1:8004"; +our $INVENTORY_SERVER_URL = "http://$apache_server_host/opensim/inventory.cgi"; +# handler list +our %HANDLER_LIST = (); + +our %APACHE_SERVERS = ( + user => "http://$apache_server_host/opensim/user.cgi", + grid => "http://$apache_server_host/opensim/grid.cgi", + asset => "http://$apache_server_host/opensim/asset.cgi", + inventory => "http://$apache_server_host/opensim/inventory.cgi", +); + +our %OPENSIM_SERVERS = ( + user => "http://$opensim_server_host:8002", + grid => "http://$opensim_server_host:8001", + asset => "http://$opensim_server_host:8003", + inventory => "http://$opensim_server_host:8004", +); + +sub registerHandler { + my ($name, $func) = @_; + $HANDLER_LIST{$name} = $func; +} + + +1; + diff --git a/share/perl/test/OpenSimTest/GridTester.pm b/share/perl/test/OpenSimTest/GridTester.pm new file mode 100644 index 0000000..61fef6b --- /dev/null +++ b/share/perl/test/OpenSimTest/GridTester.pm @@ -0,0 +1,62 @@ +package GridTester; + +use strict; +use OpenSim::Utility; + +sub init { + &OpenSimTest::Config::registerHandler("simulator_login", \&_simulator_login); + &OpenSimTest::Config::registerHandler("simulator_data_request", \&_simulator_data_request); + &OpenSimTest::Config::registerHandler("simulator_after_region_moved", \&_simulator_after_region_moved); + &OpenSimTest::Config::registerHandler("map_block", \&_map_block); +} + +sub _simulator_login { + my $url = shift || $OpenSimTest::Config::GRID_SERVER_URL; + my @param = @_; + my %xml_rpc_param = ( + "authkey" => "null", + "UUID" => $param[0], + "sim_ip" => $param[1], + "sim_port" => $param[2], + "region_locx" => 1000, + "region_locy" => 1000, + "sim_name" => "OpenTest", + "http_port" => 9000, + "remoting_port" => 8895, + "map-image-id" => "0e5a5e87-08d9-4b37-9b8e-a4c3c4e409ab", + ); + return &OpenSim::Utility::XMLRPCCall($url, "simulator_login", \%xml_rpc_param); +} + +sub _map_block { + my $url = shift || $OpenSimTest::Config::GRID_SERVER_URL; + my @param = @_; + my %xml_rpc_param = ( + xmin => $param[0], + ymin => $param[1], + xmax => $param[2], + ymax => $param[3], + ); + return &OpenSim::Utility::XMLRPCCall($url, "map_block", \%xml_rpc_param); +} + +sub _simulator_data_request { + my $url = shift || $OpenSimTest::Config::GRID_SERVER_URL; + my @param = @_; + my %xml_rpc_param = ( + region_handle => $param[0], + authkey => undef, + ); + return &OpenSim::Utility::XMLRPCCall($url, "simulator_data_request", \%xml_rpc_param); +} + +sub _simulator_after_region_moved { + my $url = shift || $OpenSimTest::Config::GRID_SERVER_URL; + my @param = @_; + my %xml_rpc_param = ( + UUID => $param[0], + ); + return &OpenSim::Utility::XMLRPCCall($url, "simulator_after_region_moved", \%xml_rpc_param); +} + +1; diff --git a/share/perl/test/OpenSimTest/InventoryTester.pm b/share/perl/test/OpenSimTest/InventoryTester.pm new file mode 100644 index 0000000..76615b1 --- /dev/null +++ b/share/perl/test/OpenSimTest/InventoryTester.pm @@ -0,0 +1,116 @@ +package InventoryTester; + +use strict; +use XML::Serializer; +use OpenSim::Utility; + +sub init { + &OpenSimTest::Config::registerHandler("create_inventory", \&_create_inventory); + &OpenSimTest::Config::registerHandler("root_folders", \&_root_folders); + &OpenSimTest::Config::registerHandler("get_inventory", \&_get_inventory); + &OpenSimTest::Config::registerHandler("new_item", \&_new_item); + &OpenSimTest::Config::registerHandler("new_folder", \&_new_folder); +} + +sub _apache_flag { + my $url = shift; + return $url =~ /inventory.cgi/ ? 1 : 0; +} + +sub _new_folder { + my $url = shift || $OpenSimTest::Config::INVENTORY_SERVER_URL; + my $post_data =<<"POSTDATA"; + +New Folder + +b9cb58e8-f3c9-4af5-be47-029762baa68f + + +500ea141-2967-49e2-9e18-fcdedffe68df + + +aa6f9220-c945-0b23-6141-43c9ef734100 + +-1 +0 + +POSTDATA + if (&_apache_flag($url)) { + $post_data = "POSTDATA=" . $post_data; # TODO: bad temporary solution + } + my $res = &OpenSim::Utility::HttpPostRequest($url . "/NewFolder/", $post_data) . "\n"; +} + +sub _new_item { + my $url = shift || $OpenSimTest::Config::INVENTORY_SERVER_URL; + my $post_data =<<"POSTDATA"; + + +f975d038-3bd7-4e8b-a945-f46b0c962ee3 + + +5f50f162-1cc6-4907-99be-a4c81d7f5e10 + +6 +6 + +7018dc23-43a9-493f-b3f7-869a6bbad0f3 + + +b9cb58e8-f3c9-4af5-be47-029762baa68f + + +b9cb58e8-f3c9-4af5-be47-029762baa68f + +Primitive + +2147483647 +526053692 +2147483647 +0 + +POSTDATA + if (&_apache_flag($url)) { + $post_data = "POSTDATA=" . $post_data; + } + my $res = &OpenSim::Utility::HttpPostRequest($url . "/NewItem/", $post_data) . "\n"; +} + +sub _get_inventory { + my $url = shift || $OpenSimTest::Config::INVENTORY_SERVER_URL; + my $uuid = shift; + my $serializer = new XML::Serializer($uuid, "guid"); + my $post_data = $serializer->to_string(XML::Serializer::WITH_HEADER); + if (&_apache_flag($url)) { + $post_data = "POSTDATA=" . $post_data; + } + my $res = &OpenSim::Utility::HttpPostRequest($url . "/GetInventory/", $post_data) . "\n"; + return 1; +} + +sub _create_inventory { + my $url = shift || $OpenSimTest::Config::INVENTORY_SERVER_URL; + my $uuid = shift; + my $serializer = new XML::Serializer($uuid, "guid"); + my $post_data = $serializer->to_string(XML::Serializer::WITH_HEADER); + if (&_apache_flag($url)) { + $post_data = "POSTDATA=" . $post_data; + } + my $res = &OpenSim::Utility::HttpPostRequest($url . "/CreateInventory/", $post_data) . "\n"; + return 1; +} + +sub _root_folders { + my $url = shift || $OpenSimTest::Config::INVENTORY_SERVER_URL; + my $uuid = shift; + my $serializer = new XML::Serializer($uuid, "guid"); + my $post_data = $serializer->to_string(XML::Serializer::WITH_HEADER); + if (&_apache_flag($url)) { + $post_data = "POSTDATA=" . $post_data; + } + my $res = &OpenSim::Utility::HttpPostRequest($url . "/RootFolders/", $post_data) . "\n"; + return 1; +} + +1; + diff --git a/share/perl/test/OpenSimTest/UserTester.pm b/share/perl/test/OpenSimTest/UserTester.pm new file mode 100644 index 0000000..194102a --- /dev/null +++ b/share/perl/test/OpenSimTest/UserTester.pm @@ -0,0 +1,53 @@ +package UserTester; + +use strict; +use Digest::MD5; +use OpenSim::Utility; + +my $user_server_url; + +sub init { + &OpenSimTest::Config::registerHandler("login_to_simulator", \&_login_to_simulator); + &OpenSimTest::Config::registerHandler("get_user_by_name", \&_get_user_by_name); + &OpenSimTest::Config::registerHandler("get_user_by_uuid", \&_get_user_by_uuid); + &OpenSimTest::Config::registerHandler("get_avatar_picker_avatar", \&_get_avatar_picker_avatar); +} + +sub _login_to_simulator { + my $url = shift || $OpenSimTest::Config::USER_SERVER_URL; + my @param = @_; + my %xml_rpc_param = ( + first => $param[0], + last => $param[1], + passwd => "\$1\$" . Digest::MD5::md5_hex($param[2]), + start => "last", + version => "1.18.3.5", + mac => "cc82e1e2bfd24e5424d66b4fd3f70d55", + ); + return &OpenSim::Utility::XMLRPCCall($url, "login_to_simulator", \%xml_rpc_param); +} + +sub _get_user_by_name { + my $url = shift || $OpenSimTest::Config::USER_SERVER_URL; + my @param = @_; + my %xml_rpc_param = ( + avatar_name => $param[0], + ); + return &OpenSim::Utility::XMLRPCCall($url, "get_user_by_name", \%xml_rpc_param); +} + +# sample uuid: +# db836502-de98-49c9-9edc-b90a67beb0a8 +sub _get_user_by_uuid { + my $url = shift || $OpenSimTest::Config::USER_SERVER_URL; + my @param = @_; + my %xml_rpc_param = ( + avatar_uuid => $param[0], + ); + return &OpenSim::Utility::XMLRPCCall($url, "get_user_by_uuid", \%xml_rpc_param); +} + +sub _get_avatar_picker_avatar { +} + +1; diff --git a/share/perl/test/PerformanceTest.pl b/share/perl/test/PerformanceTest.pl new file mode 100644 index 0000000..5f570e8 --- /dev/null +++ b/share/perl/test/PerformanceTest.pl @@ -0,0 +1,78 @@ +#!/usr/bin/perl + +# Usage: +# ./PerformanceTest.pl +# 2 variables should be changed: +# Line 14: $fork_limit +# Line 13: $benchmark_loop_count +# + +use strict; +use OpenSimTest; + +my $script = "./PerformanceTest.pl"; +my $fork_limit = 50; # the number of process +my $benchmark_loop_count = 10000; # the number of requests sent by each process + +my @child_pid = (); + +for(1..$fork_limit) { + my $pid = fork; + if ($pid) { + &parent_do($pid); + } elsif ($pid == 0) { + &child_do; + exit(0); + } else { + die "could not fork"; + } +} + +foreach (@child_pid) { + waitpid($_, 0); +} + + +sub parent_do { + my $pid = shift; + push(@child_pid, $pid); +} + +sub child_do { + #for(1..10000) { + # print "$_ "; + #} + &OpenSimTest::init(); + # user + &OpenSimTest::PerformanceCompare("user", $benchmark_loop_count, "get_user_by_name", "Test User"); + &OpenSimTest::PerformanceCompare("user", $benchmark_loop_count, "get_user_by_uuid", "db836502-de98-49c9-9edc-b90a67beb0a8"); + # grid + &OpenSimTest::PerformanceCompare("grid", $benchmark_loop_count, "simulator_login", "3507f395-88e5-468c-a45f-d4fd96a1c668", "10.8.1.148", 9000); + &OpenSimTest::PerformanceCompare("grid", $benchmark_loop_count, "simulator_data_request", "1099511628032000"); + &OpenSimTest::PerformanceCompare("grid", $benchmark_loop_count, "map_block", 999, 999, 1001, 1001); + # asset + &OpenSimTest::PerformanceCompare("asset", $benchmark_loop_count, "get_asset", "00000000000022223333000000000001"); + # inventory + &OpenSimTest::PerformanceCompare("inventory", $benchmark_loop_count, "root_folders", "b9cb58e8-f3c9-4af5-be47-029762baa68f"); + &OpenSimTest::PerformanceCompare("inventory", $benchmark_loop_count, "get_inventory", "b9cb58e8-f3c9-4af5-be47-029762baa68f"); +} + +__END__ +my $count = 10000; + +&OpenSimTest::init(); +# user +#&OpenSimTest::PerformanceCompare("user", $count, "get_user_by_name", "Test User"); +#&OpenSimTest::PerformanceCompare("user", $count, "get_user_by_uuid", "db836502-de98-49c9-9edc-b90a67beb0a8"); +# grid +#&OpenSimTest::PerformanceCompare("grid", $count, "simulator_login", "3507f395-88e5-468c-a45f-d4fd96a1c668", "10.8.1.148", 9000); +#&OpenSimTest::PerformanceCompare("grid", $count, "simulator_data_request", "1099511628032000"); +#&OpenSimTest::PerformanceCompare("grid", $count, "map_block", 999, 999, 1001, 1001); +# asset +&OpenSimTest::PerformanceCompare("asset", $count, "get_asset", "00000000000022223333000000000001"); +# inventory +#&OpenSimTest::PerformanceCompare("inventory", $count, "create_inventory", "b9cb58e8-f3c9-4af5-be47-029762baa68f"); +#&OpenSimTest::PerformanceCompare("inventory", $count, "root_folders", "b9cb58e8-f3c9-4af5-be47-029762baa68f"); +#&OpenSimTest::PerformanceCompare("inventory", $count, "get_inventory", "b9cb58e8-f3c9-4af5-be47-029762baa68f"); +#&OpenSimTest::PerformanceCompare("inventory", $count, "new_item"); +#&OpenSimTest::PerformanceCompare("inventory", $count, "new_folder"); diff --git a/share/perl/test/SingleTest.pl b/share/perl/test/SingleTest.pl new file mode 100644 index 0000000..e6be081 --- /dev/null +++ b/share/perl/test/SingleTest.pl @@ -0,0 +1,21 @@ +#!/usr/bin/perl + +# usage: +# ./SingleTest.pl $URL $METHOD @PARAMETERS +# example +# ./SingleTest.pl http://127.0.0.1/user.cgi get_user_by_name "Test User" +# ./SingleTest.pl http://127.0.0.1/grid.cgi simulator_login 3507f395-88e5-468c-a45f-d4fd96a1c668 10.8.1.148 9000 +# ./SingleTest.pl http://127.0.0.1/grid.cgi map_block 999 999 1001 1001 +# ./SingleTest.pl http://127.0.0.1/asset.cgi get_asset 00000000000022223333000000000001 +# + +use strict; +use Data::Dump; +use OpenSimTest; + +&OpenSimTest::init(); +my $url = shift @ARGV; +#my $url = "http://localhost:8002"; +my $result = &OpenSimTest::SingleTest($url, @ARGV); +Data::Dump::dump($result); + -- cgit v1.1