#include <boost/lexical_cast.hpp>
#include <boost/test/minimal.hpp>
#include <RCF/RcfServer.hpp>
#include <RCF/TcpEndpoint.hpp>
#include <RCF/test/EndpointFactories.hpp>
#include <RCF/test/TransportFactories.hpp>
#include <RCF/util/AutoBuild.hpp>
#include <RCF/util/CommandLine.hpp>
#include <RCF/util/PortNumbers.hpp>
#include "Test_Performance.hpp"
int test_main(int argc, char **argv)
{
util::CommandLineOption<int> calls( "calls", 1000, "number of calls");
util::CommandLineOption<int> test( "test", 0, "which test to run, 0 to run them all");
util::CommandLine::getSingleton().parse(argc, argv);
int requestedTest = test;
int currentTest = 0;
if (requestedTest == 0)
{
// test all serialization protocols over a TCP transport
std::string ip = "localhost";
int port = util::Ports::getNext();
RCF::TcpEndpoint serverEndpoint(port);
RCF::TcpEndpoint clientEndpoint(ip, port);
RCF::RcfServer server(serverEndpoint);
server.bind<I_X>( boost::shared_ptr<X>(new X) );
server.start();
std::string title = "TcpEndpoint transport: ";
runClientTests(clientEndpoint, calls, title);
}
// test all transports, against the standard serialization protocol
for (unsigned int i=0; i<RCF::getTransportFactories().size(); ++i)
{
RCF::TransportFactoryPtr transportFactoryPtr = RCF::getTransportFactories()[i];
std::pair<RCF::ServerTransportPtr, RCF::ClientTransportAutoPtrPtr> transports = transportFactoryPtr->createTransports();
RCF::ServerTransportPtr serverTransportPtr( transports.first );
RCF::ClientTransportAutoPtr clientTransportAutoPtr( *transports.second );
RCF::writeTransportTypes(std::cout, *serverTransportPtr, *clientTransportAutoPtr);
std::string s0 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
s0 = s0 + s0;
s0 = s0 + s0;
s0 = s0 + s0;
int serializationProtocol = 1;
++currentTest;
if (requestedTest == 0 || requestedTest == currentTest)
{
std::string title = "Test " + boost::lexical_cast<std::string>(currentTest) + ": ";
runPerformanceTest(
title,
clientTransportAutoPtr,
serverTransportPtr,
RCF::Twoway,
s0,
serializationProtocol,
std::vector<RCF::FilterFactoryPtr>(),//filterFactories,
std::vector<RCF::FilterPtr>(),
std::vector<RCF::FilterPtr>(),
calls);
}
}
std::string s0 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
s0 = s0 + s0;
s0 = s0 + s0;
s0 = s0 + s0;
int serializationProtocol = 1;
// test oneway invocations
{
RCF::TcpEndpoint tcpEndpoint("localhost", util::Ports::getNext());
RCF::ServerTransportPtr serverTransportPtr( tcpEndpoint.createServerTransport().release() );
RCF::ClientTransportAutoPtr clientTransportAutoPtr( tcpEndpoint.createClientTransport() );
++currentTest;
if (requestedTest == 0 || requestedTest == currentTest)
{
std::string title = "Test " + boost::lexical_cast<std::string>(currentTest) + ": ";
runPerformanceTest(
title,
clientTransportAutoPtr,
serverTransportPtr,
RCF::Oneway,
s0,
serializationProtocol,
std::vector<RCF::FilterFactoryPtr>(),
std::vector<RCF::FilterPtr>(),
std::vector<RCF::FilterPtr>(),
calls);
}
}
{
// Test performance of concurrent client access over all transports
}
return boost::exit_success;
}