diff options
Diffstat (limited to 'slobrok/src/tests/multi/multi.cpp')
-rw-r--r-- | slobrok/src/tests/multi/multi.cpp | 369 |
1 files changed, 0 insertions, 369 deletions
diff --git a/slobrok/src/tests/multi/multi.cpp b/slobrok/src/tests/multi/multi.cpp deleted file mode 100644 index 9a8a7eb41e0..00000000000 --- a/slobrok/src/tests/multi/multi.cpp +++ /dev/null @@ -1,369 +0,0 @@ -// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -#include <vespa/vespalib/testkit/test_kit.h> -#include <vespa/fnet/frt/frt.h> -#include <string> - -//----------------------------------------------------------------------------- - -class Server : public FRT_Invokable -{ -private: - FRT_Supervisor _orb; - std::string _name; - -public: - Server(std::string name, int port); - ~Server(); - void rpc_listNamesServed(FRT_RPCRequest *req); -}; - - -Server::Server(std::string name, int port) - : _orb(), - _name(name) -{ - { - FRT_ReflectionBuilder rb(&_orb); - //--------------------------------------------------------------------- - rb.DefineMethod("slobrok.callback.listNamesServed", "", "S", true, - FRT_METHOD(Server::rpc_listNamesServed), this); - rb.MethodDesc("Look up a rpcserver"); - rb.ReturnDesc("names", "The rpcserver names on this server"); - //--------------------------------------------------------------------- - } - _orb.Listen(port); - _orb.Start(); -} - - -void -Server::rpc_listNamesServed(FRT_RPCRequest *req) -{ - FRT_Values &dst = *req->GetReturn(); - FRT_StringValue *names = dst.AddStringArray(1); - dst.SetString(&names[0], _name.c_str()); -} - - -Server::~Server() -{ - _orb.ShutDown(true); -} - -//----------------------------------------------------------------------------- - -TEST("multi") { - FRT_Supervisor orb; - orb.Start(); - - FRT_Target *sb = orb.GetTarget(18511); - FRT_RPCRequest *req = NULL; - - // test ping against slobrok - req = orb.AllocRPCRequest(req); - req->SetMethodName("frt.rpc.ping"); - sb->InvokeSync(req, 5.0); - ASSERT_TRUE(!req->IsError()); - - // lookup '*' on empty slobrok - req = orb.AllocRPCRequest(req); - req->SetMethodName("slobrok.lookupRpcServer"); - req->GetParams()->AddString("*"); - sb->InvokeSync(req, 5.0); - ASSERT_TRUE(!req->IsError()); - ASSERT_TRUE(strcmp(req->GetReturnSpec(), "SS") == 0); - ASSERT_TRUE(req->GetReturn()->GetValue(0)._string_array._len == 0); - ASSERT_TRUE(req->GetReturn()->GetValue(1)._string_array._len == 0); - - // check managed servers on empty slobrok - req = orb.AllocRPCRequest(req); - req->SetMethodName("slobrok.internal.listManagedRpcServers"); - sb->InvokeSync(req, 5.0); - ASSERT_TRUE(!req->IsError()); - ASSERT_TRUE(strcmp(req->GetReturnSpec(), "SS") == 0); - ASSERT_TRUE(req->GetReturn()->GetValue(0)._string_array._len == 0); - ASSERT_TRUE(req->GetReturn()->GetValue(1)._string_array._len == 0); - - Server a("A", 18518); - - // register server A - req = orb.AllocRPCRequest(req); - req->SetMethodName("slobrok.registerRpcServer"); - req->GetParams()->AddString("A"); - req->GetParams()->AddString("tcp/localhost:18518"); - sb->InvokeSync(req, 5.0); - ASSERT_TRUE(!req->IsError()); - - // lookup '*' should give 'A' - req = orb.AllocRPCRequest(req); - req->SetMethodName("slobrok.lookupRpcServer"); - req->GetParams()->AddString("*"); - sb->InvokeSync(req, 5.0); - ASSERT_TRUE(!req->IsError()); - ASSERT_TRUE(strcmp(req->GetReturnSpec(), "SS") == 0); - ASSERT_TRUE(req->GetReturn()->GetValue(0)._string_array._len == 1); - ASSERT_TRUE(req->GetReturn()->GetValue(1)._string_array._len == 1); - ASSERT_TRUE(strcmp(req->GetReturn()->GetValue(0)._string_array._pt[0]._str, "A") == 0); - ASSERT_TRUE(strcmp(req->GetReturn()->GetValue(1)._string_array._pt[0]._str, "tcp/localhost:18518") == 0); - - // lookup 'A' should give 'A' - req = orb.AllocRPCRequest(req); - req->SetMethodName("slobrok.lookupRpcServer"); - req->GetParams()->AddString("A"); - sb->InvokeSync(req, 5.0); - ASSERT_TRUE(!req->IsError()); - ASSERT_TRUE(strcmp(req->GetReturnSpec(), "SS") == 0); - ASSERT_TRUE(req->GetReturn()->GetValue(0)._string_array._len == 1); - ASSERT_TRUE(req->GetReturn()->GetValue(1)._string_array._len == 1); - ASSERT_TRUE(strcmp(req->GetReturn()->GetValue(0)._string_array._pt[0]._str, "A") == 0); - ASSERT_TRUE(strcmp(req->GetReturn()->GetValue(1)._string_array._pt[0]._str, "tcp/localhost:18518") == 0); - - // lookup 'B' should give '' - req = orb.AllocRPCRequest(req); - req->SetMethodName("slobrok.lookupRpcServer"); - req->GetParams()->AddString("B"); - sb->InvokeSync(req, 5.0); - ASSERT_TRUE(!req->IsError()); - ASSERT_TRUE(strcmp(req->GetReturnSpec(), "SS") == 0); - ASSERT_TRUE(req->GetReturn()->GetValue(0)._string_array._len == 0); - ASSERT_TRUE(req->GetReturn()->GetValue(1)._string_array._len == 0); - - // lookup '*/*' should give '' - req = orb.AllocRPCRequest(req); - req->SetMethodName("slobrok.lookupRpcServer"); - req->GetParams()->AddString("*/*"); - sb->InvokeSync(req, 5.0); - ASSERT_TRUE(!req->IsError()); - ASSERT_TRUE(strcmp(req->GetReturnSpec(), "SS") == 0); - ASSERT_TRUE(req->GetReturn()->GetValue(0)._string_array._len == 0); - ASSERT_TRUE(req->GetReturn()->GetValue(1)._string_array._len == 0); - - { - Server b("B", 18519); - - // register server B as 'C' - req = orb.AllocRPCRequest(req); - req->SetMethodName("slobrok.registerRpcServer"); - req->GetParams()->AddString("C"); - req->GetParams()->AddString("tcp/localhost:18519"); - sb->InvokeSync(req, 5.0); - ASSERT_TRUE(req->IsError()); - - // register server B - req = orb.AllocRPCRequest(req); - req->SetMethodName("slobrok.registerRpcServer"); - req->GetParams()->AddString("B"); - req->GetParams()->AddString("tcp/localhost:18519"); - sb->InvokeSync(req, 5.0); - ASSERT_TRUE(!req->IsError()); - - { - Server a2("A", 18520); - - // register server A(2) - req = orb.AllocRPCRequest(req); - req->SetMethodName("slobrok.registerRpcServer"); - req->GetParams()->AddString("A"); - req->GetParams()->AddString("tcp/localhost:18520"); - sb->InvokeSync(req, 5.0); - ASSERT_TRUE(req->IsError()); - } - - // lookup '*' should give 'AB | BA' - req = orb.AllocRPCRequest(req); - req->SetMethodName("slobrok.lookupRpcServer"); - req->GetParams()->AddString("*"); - sb->InvokeSync(req, 5.0); - ASSERT_TRUE(!req->IsError()); - ASSERT_TRUE(strcmp(req->GetReturnSpec(), "SS") == 0); - ASSERT_TRUE(req->GetReturn()->GetValue(0)._string_array._len == 2); - ASSERT_TRUE(req->GetReturn()->GetValue(1)._string_array._len == 2); - { - FRT_StringValue *name = req->GetReturn()->GetValue(0)._string_array._pt; - FRT_StringValue *spec = req->GetReturn()->GetValue(1)._string_array._pt; - if (strcmp(name[0]._str, "A") == 0) { - ASSERT_TRUE(strcmp(name[0]._str, "A") == 0); - ASSERT_TRUE(strcmp(name[1]._str, "B") == 0); - ASSERT_TRUE(strcmp(spec[0]._str, "tcp/localhost:18518") == 0); - ASSERT_TRUE(strcmp(spec[1]._str, "tcp/localhost:18519") == 0); - } else { - ASSERT_TRUE(strcmp(name[1]._str, "A") == 0); - ASSERT_TRUE(strcmp(name[0]._str, "B") == 0); - ASSERT_TRUE(strcmp(spec[1]._str, "tcp/localhost:18518") == 0); - ASSERT_TRUE(strcmp(spec[0]._str, "tcp/localhost:18519") == 0); - } - } - } - - FastOS_Thread::Sleep(2000); - - // lookup 'B' should give '' - req = orb.AllocRPCRequest(req); - req->SetMethodName("slobrok.lookupRpcServer"); - req->GetParams()->AddString("B"); - sb->InvokeSync(req, 5.0); - ASSERT_TRUE(!req->IsError()); - ASSERT_TRUE(strcmp(req->GetReturnSpec(), "SS") == 0); - ASSERT_TRUE(req->GetReturn()->GetValue(0)._string_array._len == 0); - ASSERT_TRUE(req->GetReturn()->GetValue(1)._string_array._len == 0); - - // unregister server A (wrong spec) - req = orb.AllocRPCRequest(req); - req->SetMethodName("slobrok.unregisterRpcServer"); - req->GetParams()->AddString("A"); - req->GetParams()->AddString("tcp/localhost:18519"); - sb->InvokeSync(req, 5.0); - ASSERT_TRUE(req->IsError()); - - // lookup 'A' should give 'A' - req = orb.AllocRPCRequest(req); - req->SetMethodName("slobrok.lookupRpcServer"); - req->GetParams()->AddString("A"); - sb->InvokeSync(req, 5.0); - ASSERT_TRUE(!req->IsError()); - ASSERT_TRUE(strcmp(req->GetReturnSpec(), "SS") == 0); - ASSERT_TRUE(req->GetReturn()->GetValue(0)._string_array._len == 1); - ASSERT_TRUE(req->GetReturn()->GetValue(1)._string_array._len == 1); - ASSERT_TRUE(strcmp(req->GetReturn()->GetValue(0)._string_array._pt[0]._str, "A") == 0); - ASSERT_TRUE(strcmp(req->GetReturn()->GetValue(1)._string_array._pt[0]._str, "tcp/localhost:18518") == 0); - - // unregister server A - req = orb.AllocRPCRequest(req); - req->SetMethodName("slobrok.unregisterRpcServer"); - req->GetParams()->AddString("A"); - req->GetParams()->AddString("tcp/localhost:18518"); - sb->InvokeSync(req, 5.0); - ASSERT_TRUE(!req->IsError()); - - // lookup 'A' should give '' - req = orb.AllocRPCRequest(req); - req->SetMethodName("slobrok.lookupRpcServer"); - req->GetParams()->AddString("A"); - sb->InvokeSync(req, 5.0); - ASSERT_TRUE(!req->IsError()); - ASSERT_TRUE(strcmp(req->GetReturnSpec(), "SS") == 0); - ASSERT_TRUE(req->GetReturn()->GetValue(0)._string_array._len == 0); - ASSERT_TRUE(req->GetReturn()->GetValue(1)._string_array._len == 0); - - // lookup '*' on empty slobrok - req = orb.AllocRPCRequest(req); - req->SetMethodName("slobrok.lookupRpcServer"); - req->GetParams()->AddString("*"); - sb->InvokeSync(req, 5.0); - ASSERT_TRUE(!req->IsError()); - ASSERT_TRUE(strcmp(req->GetReturnSpec(), "SS") == 0); - ASSERT_TRUE(req->GetReturn()->GetValue(0)._string_array._len == 0); - ASSERT_TRUE(req->GetReturn()->GetValue(1)._string_array._len == 0); - - // unregister server A on empty slobrok - req = orb.AllocRPCRequest(req); - req->SetMethodName("slobrok.unregisterRpcServer"); - req->GetParams()->AddString("A"); - req->GetParams()->AddString("tcp/localhost:18518"); - sb->InvokeSync(req, 5.0); - ASSERT_TRUE(!req->IsError()); - - - FRT_Target *sb1 = orb.GetTarget(18512); - FRT_Target *sb2 = orb.GetTarget(18513); - FRT_Target *sb3 = orb.GetTarget(18514); - FRT_Target *sb4 = orb.GetTarget(18515); - FRT_Target *sb5 = orb.GetTarget(18516); - FRT_Target *sb6 = orb.GetTarget(18517); - - // register server A - req = orb.AllocRPCRequest(req); - req->SetMethodName("slobrok.registerRpcServer"); - req->GetParams()->AddString("A"); - req->GetParams()->AddString("tcp/localhost:18518"); - sb->InvokeSync(req, 5.0); - ASSERT_TRUE(!req->IsError()); - - - Server c("C", 18521); - Server d("D", 18522); - - for (int i=0; i < 150; i++) { - // register server C - req = orb.AllocRPCRequest(req); - req->SetMethodName("slobrok.registerRpcServer"); - req->GetParams()->AddString("C"); - req->GetParams()->AddString("tcp/localhost:18521"); - sb1->InvokeSync(req, 5.0); - ASSERT_TRUE(!req->IsError()); - - // register server D - req = orb.AllocRPCRequest(req); - req->SetMethodName("slobrok.registerRpcServer"); - req->GetParams()->AddString("D"); - req->GetParams()->AddString("tcp/localhost:18522"); - sb2->InvokeSync(req, 5.0); - ASSERT_TRUE(!req->IsError()); - - // lookup 'C' should give 'C' - req = orb.AllocRPCRequest(req); - req->SetMethodName("slobrok.lookupRpcServer"); - req->GetParams()->AddString("C"); - sb3->InvokeSync(req, 5.0); - ASSERT_TRUE(!req->IsError()); - ASSERT_TRUE(strcmp(req->GetReturnSpec(), "SS") == 0); - ASSERT_TRUE(req->GetReturn()->GetValue(0)._string_array._len == 1); - ASSERT_TRUE(req->GetReturn()->GetValue(1)._string_array._len == 1); - ASSERT_TRUE(strcmp(req->GetReturn()->GetValue(0)._string_array._pt[0]._str, "C") == 0); - ASSERT_TRUE(strcmp(req->GetReturn()->GetValue(1)._string_array._pt[0]._str, "tcp/localhost:18521") == 0); - - // lookup 'C' should give 'C' - req = orb.AllocRPCRequest(req); - req->SetMethodName("slobrok.lookupRpcServer"); - req->GetParams()->AddString("C"); - sb4->InvokeSync(req, 5.0); - ASSERT_TRUE(!req->IsError()); - ASSERT_TRUE(strcmp(req->GetReturnSpec(), "SS") == 0); - ASSERT_TRUE(req->GetReturn()->GetValue(0)._string_array._len == 1); - ASSERT_TRUE(req->GetReturn()->GetValue(1)._string_array._len == 1); - ASSERT_TRUE(strcmp(req->GetReturn()->GetValue(0)._string_array._pt[0]._str, "C") == 0); - ASSERT_TRUE(strcmp(req->GetReturn()->GetValue(1)._string_array._pt[0]._str, "tcp/localhost:18521") == 0); - - // lookup 'C' should give 'C' - req = orb.AllocRPCRequest(req); - req->SetMethodName("slobrok.lookupRpcServer"); - req->GetParams()->AddString("C"); - sb5->InvokeSync(req, 5.0); - ASSERT_TRUE(!req->IsError()); - ASSERT_TRUE(strcmp(req->GetReturnSpec(), "SS") == 0); - ASSERT_TRUE(req->GetReturn()->GetValue(0)._string_array._len == 1); - ASSERT_TRUE(req->GetReturn()->GetValue(1)._string_array._len == 1); - ASSERT_TRUE(strcmp(req->GetReturn()->GetValue(0)._string_array._pt[0]._str, "C") == 0); - ASSERT_TRUE(strcmp(req->GetReturn()->GetValue(1)._string_array._pt[0]._str, "tcp/localhost:18521") == 0); - - // lookup 'C' should give 'C' - req = orb.AllocRPCRequest(req); - req->SetMethodName("slobrok.lookupRpcServer"); - req->GetParams()->AddString("C"); - sb6->InvokeSync(req, 5.0); - ASSERT_TRUE(!req->IsError()); - ASSERT_TRUE(strcmp(req->GetReturnSpec(), "SS") == 0); - ASSERT_TRUE(req->GetReturn()->GetValue(0)._string_array._len == 1); - ASSERT_TRUE(req->GetReturn()->GetValue(1)._string_array._len == 1); - ASSERT_TRUE(strcmp(req->GetReturn()->GetValue(0)._string_array._pt[0]._str, "C") == 0); - ASSERT_TRUE(strcmp(req->GetReturn()->GetValue(1)._string_array._pt[0]._str, "tcp/localhost:18521") == 0); - - FastOS_Thread::Sleep(200); - - // lookup 'D' should give 'D' - req = orb.AllocRPCRequest(req); - req->SetMethodName("slobrok.lookupRpcServer"); - req->GetParams()->AddString("D"); - sb->InvokeSync(req, 5.0); - ASSERT_TRUE(!req->IsError()); - ASSERT_TRUE(strcmp(req->GetReturnSpec(), "SS") == 0); - ASSERT_TRUE(req->GetReturn()->GetValue(0)._string_array._len == 1); - ASSERT_TRUE(req->GetReturn()->GetValue(1)._string_array._len == 1); - ASSERT_TRUE(strcmp(req->GetReturn()->GetValue(0)._string_array._pt[0]._str, "D") == 0); - ASSERT_TRUE(strcmp(req->GetReturn()->GetValue(1)._string_array._pt[0]._str, "tcp/localhost:18522") == 0); - } - - orb.ShutDown(true); -} - -TEST_MAIN() { TEST_RUN_ALL(); } |