public virtual void TestStandaloneClient() { try { TestRPC.TestProtocol proxy = RPC.WaitForProxy <TestRPC.TestProtocol>(TestRPC.TestProtocol .versionID, new IPEndPoint(Address, 20), conf, 15000L); proxy.Echo(string.Empty); NUnit.Framework.Assert.Fail("We should not have reached here"); } catch (ConnectException) { } }
public override void Run() { try { Configuration config = new Configuration(TestRPCWaitForProxy.conf); config.SetInt(CommonConfigurationKeysPublic.IpcClientConnectMaxRetriesKey, this.connectRetries ); config.SetInt(CommonConfigurationKeysPublic.IpcClientConnectMaxRetriesOnSocketTimeoutsKey , this.connectRetries); this.waitStarted = true; TestRPC.TestProtocol proxy = RPC.WaitForProxy <TestRPC.TestProtocol>(TestRPC.TestProtocol .versionID, new IPEndPoint(TestRPCWaitForProxy.Address, 20), config, 15000L); proxy.Echo(string.Empty); } catch (Exception throwable) { this.caught = throwable; } }
public virtual void TestRpcMetrics() { Configuration configuration = new Configuration(); int interval = 1; configuration.SetBoolean(CommonConfigurationKeys.RpcMetricsQuantileEnable, true); configuration.Set(CommonConfigurationKeys.RpcMetricsPercentilesIntervalsKey, string.Empty + interval); Server server = new RPC.Builder(configuration).SetProtocol(typeof(TestRPC.TestProtocol )).SetInstance(new TestRPC.TestImpl()).SetBindAddress(Address).SetPort(0).SetNumHandlers (5).SetVerbose(true).Build(); server.Start(); TestRPC.TestProtocol proxy = RPC.GetProxy <TestRPC.TestProtocol>(TestRPC.TestProtocol .versionID, server.GetListenerAddress(), configuration); try { for (int i = 0; i < 1000; i++) { proxy.Ping(); proxy.Echo(string.Empty + i); } MetricsRecordBuilder rpcMetrics = MetricsAsserts.GetMetrics(server.GetRpcMetrics( ).Name()); Assert.True("Expected non-zero rpc queue time", MetricsAsserts.GetLongCounter ("RpcQueueTimeNumOps", rpcMetrics) > 0); Assert.True("Expected non-zero rpc processing time", MetricsAsserts.GetLongCounter ("RpcProcessingTimeNumOps", rpcMetrics) > 0); MetricsAsserts.AssertQuantileGauges("RpcQueueTime" + interval + "s", rpcMetrics); MetricsAsserts.AssertQuantileGauges("RpcProcessingTime" + interval + "s", rpcMetrics ); } finally { if (proxy != null) { RPC.StopProxy(proxy); } server.Stop(); } }
public virtual void TestErrorMsgForInsecureClient() { Configuration serverConf = new Configuration(conf); SecurityUtil.SetAuthenticationMethod(UserGroupInformation.AuthenticationMethod.Kerberos , serverConf); UserGroupInformation.SetConfiguration(serverConf); Server server = new RPC.Builder(serverConf).SetProtocol(typeof(TestRPC.TestProtocol )).SetInstance(new TestRPC.TestImpl()).SetBindAddress(Address).SetPort(0).SetNumHandlers (5).SetVerbose(true).Build(); server.Start(); UserGroupInformation.SetConfiguration(conf); bool succeeded = false; IPEndPoint addr = NetUtils.GetConnectAddress(server); TestRPC.TestProtocol proxy = null; try { proxy = RPC.GetProxy <TestRPC.TestProtocol>(TestRPC.TestProtocol.versionID, addr, conf); proxy.Echo(string.Empty); } catch (RemoteException e) { Log.Info("LOGGING MESSAGE: " + e.GetLocalizedMessage()); Assert.True(e.UnwrapRemoteException() is AccessControlException ); succeeded = true; } finally { server.Stop(); if (proxy != null) { RPC.StopProxy(proxy); } } Assert.True(succeeded); conf.SetInt(CommonConfigurationKeys.IpcServerRpcReadThreadsKey, 2); UserGroupInformation.SetConfiguration(serverConf); Server multiServer = new RPC.Builder(serverConf).SetProtocol(typeof(TestRPC.TestProtocol )).SetInstance(new TestRPC.TestImpl()).SetBindAddress(Address).SetPort(0).SetNumHandlers (5).SetVerbose(true).Build(); multiServer.Start(); succeeded = false; IPEndPoint mulitServerAddr = NetUtils.GetConnectAddress(multiServer); proxy = null; try { UserGroupInformation.SetConfiguration(conf); proxy = RPC.GetProxy <TestRPC.TestProtocol>(TestRPC.TestProtocol.versionID, mulitServerAddr , conf); proxy.Echo(string.Empty); } catch (RemoteException e) { Log.Info("LOGGING MESSAGE: " + e.GetLocalizedMessage()); Assert.True(e.UnwrapRemoteException() is AccessControlException ); succeeded = true; } finally { multiServer.Stop(); if (proxy != null) { RPC.StopProxy(proxy); } } Assert.True(succeeded); }
/// <exception cref="System.IO.IOException"/> private void TestCallsInternal(Configuration conf) { Server server = new RPC.Builder(conf).SetProtocol(typeof(TestRPC.TestProtocol)).SetInstance (new TestRPC.TestImpl()).SetBindAddress(Address).SetPort(0).Build(); TestRPC.TestProtocol proxy = null; try { server.Start(); IPEndPoint addr = NetUtils.GetConnectAddress(server); proxy = RPC.GetProxy <TestRPC.TestProtocol>(TestRPC.TestProtocol.versionID, addr, conf); proxy.Ping(); string stringResult = proxy.Echo("foo"); Assert.Equal(stringResult, "foo"); stringResult = proxy.Echo((string)null); Assert.Equal(stringResult, null); // Check rpcMetrics MetricsRecordBuilder rb = MetricsAsserts.GetMetrics(server.rpcMetrics.Name()); MetricsAsserts.AssertCounter("RpcProcessingTimeNumOps", 3L, rb); MetricsAsserts.AssertCounterGt("SentBytes", 0L, rb); MetricsAsserts.AssertCounterGt("ReceivedBytes", 0L, rb); // Number of calls to echo method should be 2 rb = MetricsAsserts.GetMetrics(server.rpcDetailedMetrics.Name()); MetricsAsserts.AssertCounter("EchoNumOps", 2L, rb); // Number of calls to ping method should be 1 MetricsAsserts.AssertCounter("PingNumOps", 1L, rb); string[] stringResults = proxy.Echo(new string[] { "foo", "bar" }); Assert.True(Arrays.Equals(stringResults, new string[] { "foo", "bar" })); stringResults = proxy.Echo((string[])null); Assert.True(Arrays.Equals(stringResults, null)); UTF8 utf8Result = (UTF8)proxy.Echo(new UTF8("hello world")); Assert.Equal(new UTF8("hello world"), utf8Result); utf8Result = (UTF8)proxy.Echo((UTF8)null); Assert.Equal(null, utf8Result); int intResult = proxy.Add(1, 2); Assert.Equal(intResult, 3); intResult = proxy.Add(new int[] { 1, 2 }); Assert.Equal(intResult, 3); // Test protobufs DescriptorProtos.EnumDescriptorProto sendProto = ((DescriptorProtos.EnumDescriptorProto )DescriptorProtos.EnumDescriptorProto.NewBuilder().SetName("test").Build()); DescriptorProtos.EnumDescriptorProto retProto = proxy.ExchangeProto(sendProto); Assert.Equal(sendProto, retProto); NUnit.Framework.Assert.AreNotSame(sendProto, retProto); bool caught = false; try { proxy.Error(); } catch (IOException e) { if (Log.IsDebugEnabled()) { Log.Debug("Caught " + e); } caught = true; } Assert.True(caught); rb = MetricsAsserts.GetMetrics(server.rpcDetailedMetrics.Name()); MetricsAsserts.AssertCounter("IOExceptionNumOps", 1L, rb); proxy.TestServerGet(); // create multiple threads and make them do large data transfers System.Console.Out.WriteLine("Starting multi-threaded RPC test..."); server.SetSocketSendBufSize(1024); Thread[] threadId = new Thread[numThreads]; for (int i = 0; i < numThreads; i++) { TestRPC.Transactions trans = new TestRPC.Transactions(proxy, datasize); threadId[i] = new Thread(trans, "TransactionThread-" + i); threadId[i].Start(); } // wait for all transactions to get over System.Console.Out.WriteLine("Waiting for all threads to finish RPCs..."); for (int i_1 = 0; i_1 < numThreads; i_1++) { try { threadId[i_1].Join(); } catch (Exception) { i_1--; } } } finally { // retry server.Stop(); if (proxy != null) { RPC.StopProxy(proxy); } } }