public override async Task RunAsync(string[] args) { Dictionary <string, string> properties = CreateTestProperties(ref args); // We must disable connection warnings, because we attempt to ping the router before session establishment, // as well as after session destruction. Both will cause a ConnectionLostException. properties["Ice.Warn.Connections"] = "0"; properties["Test.Protocol"] = "ice1"; await using Communicator communicator = Initialize(properties); IObjectPrx routerBase; { Console.Out.Write("testing stringToProxy for router... "); Console.Out.Flush(); routerBase = IObjectPrx.Parse(GetTestProxy("Glacier2/router", 50), communicator); Console.Out.WriteLine("ok"); } IRouterPrx?router; { Console.Out.Write("testing checked cast for router... "); Console.Out.Flush(); router = routerBase.CheckedCast(IRouterPrx.Factory); Assert(router != null); Console.Out.WriteLine("ok"); } { Console.Out.Write("testing router finder... "); Console.Out.Flush(); var finder = IRouterFinderPrx.Parse(GetTestProxy("Ice/RouterFinder", 50), communicator); Assert(finder.GetRouter() !.Identity.Equals(router.Identity)); Console.Out.WriteLine("ok"); } { Console.Out.Write("installing router with communicator... "); Console.Out.Flush(); communicator.DefaultRouter = router; Console.Out.WriteLine("ok"); } { Console.Out.Write("getting the session timeout... "); Console.Out.Flush(); long sessionTimeout = router.GetSessionTimeout(); long acmTimeout = router.GetACMTimeout(); Assert(sessionTimeout == 30 && acmTimeout == 30); Console.Out.WriteLine("ok"); } ICallbackPrx twoway; { Console.Out.Write("testing stringToProxy for server object... "); Console.Out.Flush(); twoway = ICallbackPrx.Parse(GetTestProxy("c1/callback", 0), communicator); Console.Out.WriteLine("ok"); } { Console.Out.Write("trying to ping server before session creation... "); Console.Out.Flush(); try { twoway.IcePing(); Assert(false); } catch (ConnectionLostException) { Console.Out.WriteLine("ok"); } catch (TransportException) { Assert(false); } } { Console.Out.Write("trying to create session with wrong password... "); Console.Out.Flush(); try { router.CreateSession("userid", "xxx"); Assert(false); } catch (PermissionDeniedException) { Console.Out.WriteLine("ok"); } catch (CannotCreateSessionException) { Assert(false); } } { Console.Out.Write("trying to destroy non-existing session... "); Console.Out.Flush(); try { router.DestroySession(); Assert(false); } catch (SessionNotExistException) { Console.Out.WriteLine("ok"); } } { Console.Out.Write("creating session with correct password... "); Console.Out.Flush(); try { router.CreateSession("userid", "abc123"); } catch (PermissionDeniedException) { Assert(false); } catch (CannotCreateSessionException) { Assert(false); } Console.Out.WriteLine("ok"); } { Console.Out.Write("trying to create a second session... "); Console.Out.Flush(); try { router.CreateSession("userid", "abc123"); Assert(false); } catch (PermissionDeniedException) { Assert(false); } catch (CannotCreateSessionException) { Console.Out.WriteLine("ok"); } } { Console.Out.Write("pinging server after session creation... "); Console.Out.Flush(); twoway.IcePing(); Console.Out.WriteLine("ok"); } { Console.Out.Write("pinging object with client endpoint... "); var baseC = IObjectPrx.Parse(GetTestProxy("collocated", 50), communicator); try { baseC.IcePing(); } catch (ObjectNotExistException) { } Console.Out.WriteLine("ok"); } ObjectAdapter adapter; { Console.Out.Write("creating and activating callback receiver adapter... "); Console.Out.Flush(); communicator.SetProperty("Ice.PrintAdapterReady", "0"); adapter = communicator.CreateObjectAdapterWithRouter("CallbackReceiverAdapter", router); adapter.Activate(); Console.Out.WriteLine("ok"); } string category; { Console.Out.Write("getting category from router... "); Console.Out.Flush(); category = router.GetCategoryForClient(); Console.Out.WriteLine("ok"); } CallbackReceiver callbackReceiverImpl; ICallbackReceiver callbackReceiver; ICallbackReceiverPrx twowayR; ICallbackReceiverPrx fakeTwowayR; { Console.Out.Write("creating and adding callback receiver object... "); Console.Out.Flush(); callbackReceiverImpl = new CallbackReceiver(); callbackReceiver = callbackReceiverImpl; var callbackReceiverIdent = new Identity("callbackReceiver", category); twowayR = adapter.Add(callbackReceiverIdent, callbackReceiver, ICallbackReceiverPrx.Factory); var fakeCallbackReceiverIdent = new Identity("callbackReceiver", "dummy"); fakeTwowayR = adapter.Add(fakeCallbackReceiverIdent, callbackReceiver, ICallbackReceiverPrx.Factory); Console.Out.WriteLine("ok"); } { Console.Out.Write("testing oneway callback... "); Console.Out.Flush(); ICallbackPrx oneway = twoway.Clone(oneway: true); ICallbackReceiverPrx onewayR = twowayR.Clone(oneway: true); var context = new Dictionary <string, string> { ["_fwd"] = "o" }; oneway.InitiateCallback(onewayR, context); callbackReceiverImpl.CallbackOK(); Console.Out.WriteLine("ok"); } { Console.Out.Write("testing twoway callback... "); Console.Out.Flush(); var context = new Dictionary <string, string> { ["_fwd"] = "t" }; twoway.InitiateCallback(twowayR, context); callbackReceiverImpl.CallbackOK(); Console.Out.WriteLine("ok"); } { Console.Out.Write("ditto, but with user exception... "); Console.Out.Flush(); var context = new Dictionary <string, string> { ["_fwd"] = "t" }; try { twoway.InitiateCallbackEx(twowayR, context); Assert(false); } catch (CallbackException ex) { Assert(ex.SomeValue == 3.14); Assert(ex.SomeString.Equals("3.14")); } callbackReceiverImpl.CallbackOK(); Console.Out.WriteLine("ok"); } { Console.Out.Write("trying twoway callback with fake category... "); Console.Out.Flush(); var context = new Dictionary <string, string> { ["_fwd"] = "t" }; try { twoway.InitiateCallback(fakeTwowayR, context); Assert(false); } catch (ObjectNotExistException) { Console.Out.WriteLine("ok"); } } { Console.Out.Write("testing whether other allowed category is accepted... "); Console.Out.Flush(); var context = new Dictionary <string, string> { ["_fwd"] = "t" }; ICallbackPrx otherCategoryTwoway = twoway.Clone(ICallbackPrx.Factory, identity: Identity.Parse("c2/callback")); otherCategoryTwoway.InitiateCallback(twowayR, context); callbackReceiverImpl.CallbackOK(); Console.Out.WriteLine("ok"); } { Console.Out.Write("testing whether disallowed category gets rejected... "); Console.Out.Flush(); var context = new Dictionary <string, string> { ["_fwd"] = "t" }; try { ICallbackPrx otherCategoryTwoway = twoway.Clone(ICallbackPrx.Factory, identity: Identity.Parse("c3/callback")); otherCategoryTwoway.InitiateCallback(twowayR, context); Assert(false); } catch (ObjectNotExistException) { Console.Out.WriteLine("ok"); } } { Console.Out.Write("testing whether user-id as category is accepted... "); Console.Out.Flush(); var context = new Dictionary <string, string> { ["_fwd"] = "t" }; ICallbackPrx otherCategoryTwoway = twoway.Clone(ICallbackPrx.Factory, identity: Identity.Parse("_userid/callback")); otherCategoryTwoway.InitiateCallback(twowayR, context); callbackReceiverImpl.CallbackOK(); Console.Out.WriteLine("ok"); } if (args.Length >= 1 && args[0].Equals("--shutdown")) { Console.Out.Write("testing server shutdown... "); Console.Out.Flush(); twoway.Shutdown(); // No ping, otherwise the router prints a warning message if it's // started with --Ice.Warn.Connections. Console.Out.WriteLine("ok"); /* * try * { * base.IcePing(); * Assert(false); * } * // If we use the glacier router, the exact exception reason gets * // lost. * catch(Ice.UnknownLocalException ex) * { * Console.Out.WriteLine("ok"); * } */ } { Console.Out.Write("destroying session... "); Console.Out.Flush(); try { router.DestroySession(); } catch { Assert(false); } Console.Out.WriteLine("ok"); } { Console.Out.Write("trying to ping server after session destruction... "); Console.Out.Flush(); try { twoway.IcePing(); Assert(false); } catch (ConnectionLostException) { Console.Out.WriteLine("ok"); } catch (TransportException) { Assert(false); } } if (args.Length >= 1 && args[0].Equals("--shutdown")) { { Console.Out.Write("uninstalling router with communicator... "); Console.Out.Flush(); communicator.DefaultRouter = null; Console.Out.WriteLine("ok"); } IProcessPrx process; { Console.Out.Write("testing stringToProxy for admin object... "); process = IProcessPrx.Parse(GetTestProxy("Glacier2/admin -f Process", 51), communicator); Console.Out.WriteLine("ok"); } /* * { * Console.Out.Write("uninstalling router with process object... "); * processBase.ice_router(null); * Console.Out.WriteLine("ok"); * } */ Console.Out.Write("testing Glacier2 shutdown... "); process.Shutdown(); try { process.IcePing(); Assert(false); } catch { Console.Out.WriteLine("ok"); } } }
ConnectImpl(ConnectStrategy factory) { Debug.Assert(!_destroy); new Thread(new ThreadStart(() => { try { lock (_mutex) { _communicator = new Communicator( properties: _properties, logger: _logger, observer: _observer, certificates: _certificates, caCertificates: _caCertificates, certificateValidationCallback: _certificateValidationCallback, passwordCallback: _passwordCallback); } } catch (System.Exception ex) { lock (_mutex) { _destroy = true; } _callback.ConnectFailed(this, ex); return; } if (_communicator.DefaultRouter == null) { IRouterFinderPrx?finder = null; try { finder = IRouterFinderPrx.Parse(_finderStr, _communicator); _communicator.DefaultRouter = finder.GetRouter(); } catch (CommunicatorDestroyedException ex) { _callback.ConnectFailed(this, ex); return; } catch (System.Exception ex) { if (finder == null) { _callback.ConnectFailed(this, ex); return; } else { // // In case of error getting router identity from RouterFinder use default identity. // _communicator.DefaultRouter = finder.Clone(new Identity("router", "Glacier2"), Ice.IRouterPrx.Factory); } } } try { _callback.CreatedCommunicator(this); Ice.IRouterPrx?defaultRouter = _communicator.DefaultRouter; Debug.Assert(defaultRouter != null); var routerPrx = IRouterPrx.UncheckedCast(defaultRouter); ISessionPrx session = factory(routerPrx); Connected(routerPrx, session); } catch (System.Exception ex) { _communicator.Destroy(); _callback.ConnectFailed(this, ex); } })).Start(); }
ConnectImpl(ConnectStrategy factory) { Debug.Assert(!_destroy); new Thread(new ThreadStart(() => { try { lock (_mutex) { _communicator = new Communicator( properties: _properties, compactIdResolver: _compactIdResolver, logger: _logger, observer: _observer, threadStart: _threadStart, threadStop: _threadStop, typeIdNamespaces: _typeIdNamespaces); } } catch (System.Exception ex) { lock (_mutex) { _destroy = true; } _callback.connectFailed(this, ex); return; } if (_communicator.GetDefaultRouter() == null) { var finder = IRouterFinderPrx.Parse(_finderStr, _communicator); try { _communicator.SetDefaultRouter(finder.GetRouter()); } catch (CommunicatorDestroyedException ex) { _callback.connectFailed(this, ex); return; } catch (System.Exception) { // // In case of error getting router identity from RouterFinder use default identity. // _communicator.SetDefaultRouter( Ice.IRouterPrx.UncheckedCast(finder.Clone(new Identity("router", "Glacier2")))); } } try { _callback.createdCommunicator(this); Ice.IRouterPrx?defaultRouter = _communicator.GetDefaultRouter(); Debug.Assert(defaultRouter != null); var routerPrx = IRouterPrx.UncheckedCast(defaultRouter); ISessionPrx session = factory(routerPrx); Connected(routerPrx, session); } catch (System.Exception ex) { _communicator.Destroy(); _callback.connectFailed(this, ex); } })).Start(); }
private void ConnectImpl(Func <IRouterPrx, ISessionPrx> factory) { Debug.Assert(!_destroy); new Thread(new ThreadStart(() => { try { lock (_mutex) { _communicator = new Communicator(_properties, logger: _logger, observer: _observer, tlsClientOptions: _tlsClientOptions, tlsServerOptions: _tlsServerOptions); } } catch (Exception ex) { lock (_mutex) { _destroy = true; } _callback.ConnectFailed(this, ex); return; } if (_communicator.DefaultRouter == null) { IRouterFinderPrx?finder = null; try { finder = IRouterFinderPrx.Parse(_finderStr, _communicator); _communicator.DefaultRouter = finder.GetRouter(); } catch (CommunicatorDisposedException ex) { _callback.ConnectFailed(this, ex); return; } catch (Exception ex) { if (finder == null) { _callback.ConnectFailed(this, ex); return; } else { // In case of error getting router identity from RouterFinder use default identity. _communicator.DefaultRouter = finder.Clone(Ice.IRouterPrx.Factory, identity: new Identity("router", "Glacier2")); } } } try { _callback.CreatedCommunicator(this); IRouterPrx routerPrx = _communicator.DefaultRouter !.Clone(IRouterPrx.Factory); ISessionPrx session = factory(routerPrx); Connected(routerPrx, session); } catch (Exception ex) { _communicator.Dispose(); _callback.ConnectFailed(this, ex); } })).Start(); }
public override void run(string[] args) { Dictionary <string, string> properties = createTestProperties(ref args); // // We must disable connection warnings, because we attempt to // ping the router before session establishment, as well as // after session destruction. Both will cause a // ConnectionLostException. // properties["Ice.Warn.Connections"] = "0"; using (var communicator = initialize(properties)) { IObjectPrx routerBase; { Console.Out.Write("testing stringToProxy for router... "); Console.Out.Flush(); routerBase = IObjectPrx.Parse($"Glacier2/router:{getTestEndpoint(50)}", communicator); Console.Out.WriteLine("ok"); } Glacier2.IRouterPrx router; { Console.Out.Write("testing checked cast for router... "); Console.Out.Flush(); router = Glacier2.IRouterPrx.CheckedCast(routerBase); test(router != null); Console.Out.WriteLine("ok"); } { Console.Out.Write("testing router finder... "); Console.Out.Flush(); IRouterFinderPrx finder = IRouterFinderPrx.Parse($"Ice/RouterFinder:{getTestEndpoint(50)}", communicator); test(finder.GetRouter().Identity.Equals(router.Identity)); Console.Out.WriteLine("ok"); } { Console.Out.Write("installing router with communicator... "); Console.Out.Flush(); communicator.setDefaultRouter(router); Console.Out.WriteLine("ok"); } { Console.Out.Write("getting the session timeout... "); Console.Out.Flush(); long sessionTimeout = router.GetSessionTimeout(); long acmTimeout = router.GetACMTimeout(); test(sessionTimeout == 30 && acmTimeout == 30); Console.Out.WriteLine("ok"); } IObjectPrx @base; { Console.Out.Write("testing stringToProxy for server object... "); Console.Out.Flush(); @base = IObjectPrx.Parse($"c1/callback:{getTestEndpoint(0)}", communicator); Console.Out.WriteLine("ok"); } { Console.Out.Write("trying to ping server before session creation... "); Console.Out.Flush(); try { @base.IcePing(); test(false); } catch (Ice.ConnectionLostException) { Console.Out.WriteLine("ok"); } catch (Ice.SocketException) { test(false); } } { Console.Out.Write("trying to create session with wrong password... "); Console.Out.Flush(); try { router.CreateSession("userid", "xxx"); test(false); } catch (Glacier2.PermissionDeniedException) { Console.Out.WriteLine("ok"); } catch (Glacier2.CannotCreateSessionException) { test(false); } } { Console.Out.Write("trying to destroy non-existing session... "); Console.Out.Flush(); try { router.DestroySession(); test(false); } catch (Glacier2.SessionNotExistException) { Console.Out.WriteLine("ok"); } } { Console.Out.Write("creating session with correct password... "); Console.Out.Flush(); try { router.CreateSession("userid", "abc123"); } catch (Glacier2.PermissionDeniedException) { test(false); } catch (Glacier2.CannotCreateSessionException) { test(false); } Console.Out.WriteLine("ok"); } { Console.Out.Write("trying to create a second session... "); Console.Out.Flush(); try { router.CreateSession("userid", "abc123"); test(false); } catch (Glacier2.PermissionDeniedException) { test(false); } catch (Glacier2.CannotCreateSessionException) { Console.Out.WriteLine("ok"); } } { Console.Out.Write("pinging server after session creation... "); Console.Out.Flush(); @base.IcePing(); Console.Out.WriteLine("ok"); } { Console.Out.Write("pinging object with client endpoint... "); IObjectPrx baseC = IObjectPrx.Parse($"collocated:{getTestEndpoint(50)}", communicator); try { baseC.IcePing(); } catch (Ice.ObjectNotExistException) { } Console.Out.WriteLine("ok"); } ICallbackPrx twoway; { Console.Out.Write("testing checked cast for server object... "); Console.Out.Flush(); twoway = ICallbackPrx.CheckedCast(@base); test(twoway != null); Console.Out.WriteLine("ok"); } Ice.ObjectAdapter adapter; { Console.Out.Write("creating and activating callback receiver adapter... "); Console.Out.Flush(); communicator.SetProperty("Ice.PrintAdapterReady", "0"); adapter = communicator.createObjectAdapterWithRouter("CallbackReceiverAdapter", router); adapter.Activate(); Console.Out.WriteLine("ok"); } string category; { Console.Out.Write("getting category from router... "); Console.Out.Flush(); category = router.GetCategoryForClient(); Console.Out.WriteLine("ok"); } CallbackReceiverI callbackReceiverImpl; CallbackReceiver callbackReceiver; ICallbackReceiverPrx twowayR; ICallbackReceiverPrx fakeTwowayR; { Console.Out.Write("creating and adding callback receiver object... "); Console.Out.Flush(); callbackReceiverImpl = new CallbackReceiverI(); callbackReceiver = callbackReceiverImpl; Ice.Identity callbackReceiverIdent = new Ice.Identity(); callbackReceiverIdent.name = "callbackReceiver"; callbackReceiverIdent.category = category; twowayR = adapter.Add(callbackReceiver, callbackReceiverIdent); Ice.Identity fakeCallbackReceiverIdent = new Ice.Identity(); fakeCallbackReceiverIdent.name = "callbackReceiver"; fakeCallbackReceiverIdent.category = "dummy"; fakeTwowayR = adapter.Add(callbackReceiver, fakeCallbackReceiverIdent); Console.Out.WriteLine("ok"); } { Console.Out.Write("testing oneway callback... "); Console.Out.Flush(); ICallbackPrx oneway = twoway.Clone(oneway: true); ICallbackReceiverPrx onewayR = twowayR.Clone(oneway: true); Dictionary <string, string> context = new Dictionary <string, string>(); context["_fwd"] = "o"; oneway.initiateCallback(onewayR, context); callbackReceiverImpl.callbackOK(); Console.Out.WriteLine("ok"); } { Console.Out.Write("testing twoway callback... "); Console.Out.Flush(); Dictionary <string, string> context = new Dictionary <string, string>(); context["_fwd"] = "t"; twoway.initiateCallback(twowayR, context); callbackReceiverImpl.callbackOK(); Console.Out.WriteLine("ok"); } { Console.Out.Write("ditto, but with user exception... "); Console.Out.Flush(); Dictionary <string, string> context = new Dictionary <string, string>(); context["_fwd"] = "t"; try { twoway.initiateCallbackEx(twowayR, context); test(false); } catch (CallbackException ex) { test(ex.someValue == 3.14); test(ex.someString.Equals("3.14")); } callbackReceiverImpl.callbackOK(); Console.Out.WriteLine("ok"); } { Console.Out.Write("trying twoway callback with fake category... "); Console.Out.Flush(); Dictionary <string, string> context = new Dictionary <string, string>(); context["_fwd"] = "t"; try { twoway.initiateCallback(fakeTwowayR, context); test(false); } catch (Ice.ObjectNotExistException) { Console.Out.WriteLine("ok"); } } { Console.Out.Write("testing whether other allowed category is accepted... "); Console.Out.Flush(); Dictionary <string, string> context = new Dictionary <string, string>(); context["_fwd"] = "t"; ICallbackPrx otherCategoryTwoway = ICallbackPrx.UncheckedCast(twoway.Clone(Identity.Parse("c2/callback"))); otherCategoryTwoway.initiateCallback(twowayR, context); callbackReceiverImpl.callbackOK(); Console.Out.WriteLine("ok"); } { Console.Out.Write("testing whether disallowed category gets rejected... "); Console.Out.Flush(); Dictionary <string, string> context = new Dictionary <string, string>(); context["_fwd"] = "t"; try { ICallbackPrx otherCategoryTwoway = ICallbackPrx.UncheckedCast(twoway.Clone(Identity.Parse("c3/callback"))); otherCategoryTwoway.initiateCallback(twowayR, context); test(false); } catch (Ice.ObjectNotExistException) { Console.Out.WriteLine("ok"); } } { Console.Out.Write("testing whether user-id as category is accepted... "); Console.Out.Flush(); Dictionary <string, string> context = new Dictionary <string, string>(); context["_fwd"] = "t"; ICallbackPrx otherCategoryTwoway = ICallbackPrx.UncheckedCast(twoway.Clone(Identity.Parse("_userid/callback"))); otherCategoryTwoway.initiateCallback(twowayR, context); callbackReceiverImpl.callbackOK(); Console.Out.WriteLine("ok"); } if (args.Length >= 1 && args[0].Equals("--shutdown")) { Console.Out.Write("testing server shutdown... "); Console.Out.Flush(); twoway.shutdown(); // No ping, otherwise the router prints a warning message if it's // started with --Ice.Warn.Connections. Console.Out.WriteLine("ok"); /* * try * { * base.IcePing(); * test(false); * } * // If we use the glacier router, the exact exception reason gets * // lost. * catch(Ice.UnknownLocalException ex) * { * Console.Out.WriteLine("ok"); * } */ } { Console.Out.Write("destroying session... "); Console.Out.Flush(); try { router.DestroySession(); } catch (Ice.LocalException) { test(false); } Console.Out.WriteLine("ok"); } { Console.Out.Write("trying to ping server after session destruction... "); Console.Out.Flush(); try { @base.IcePing(); test(false); } catch (Ice.ConnectionLostException) { Console.Out.WriteLine("ok"); } catch (Ice.SocketException) { test(false); } } if (args.Length >= 1 && args[0].Equals("--shutdown")) { { Console.Out.Write("uninstalling router with communicator... "); Console.Out.Flush(); communicator.setDefaultRouter(null); Console.Out.WriteLine("ok"); } IObjectPrx processBase; { Console.Out.Write("testing stringToProxy for admin object... "); processBase = IObjectPrx.Parse($"Glacier2/admin -f Process:{getTestEndpoint(51)}", communicator); Console.Out.WriteLine("ok"); } /* * { * Console.Out.Write("uninstalling router with process object... "); * processBase.ice_router(null); * Console.Out.WriteLine("ok"); * } */ IProcessPrx process; { Console.Out.Write("testing checked cast for process object... "); process = IProcessPrx.CheckedCast(processBase); process.IcePing(); Console.Out.WriteLine("ok"); } Console.Out.Write("testing Glacier2 shutdown... "); process.Shutdown(); try { process.IcePing(); test(false); } catch (LocalException) { Console.Out.WriteLine("ok"); } } } }