public void TestSubscriptionOperation() { IAsyncConnectorInfoManager manager = ConnectorInfoManager; var task = manager.FindConnectorInfoAsync(TestStatefulConnectorKey); Assert.IsTrue(task.Wait(TimeSpan.FromMinutes(5))); ConnectorFacade facade = ConnectorFacade; ToListResultsHandler handler = new ToListResultsHandler(); CountdownEvent cde = new CountdownEvent(1); var localFacade = facade; var connectorObjectObservable = Observable.Create<ConnectorObject>(o => localFacade.Subscribe(ObjectClass.ACCOUNT, null, o, null)); var subscription = connectorObjectObservable.Subscribe( co => { Console.WriteLine(@"Connector Event received:{0}", co.Uid.GetUidValue()); handler.ResultsHandler.Handle(co); }, ex => { cde.Signal(); Assert.AreEqual(handler.Objects.Count, 10, "Uncompleted subscription"); }); cde.Wait(new TimeSpan(0, 0, 25)); subscription.Dispose(); Assert.AreEqual(10, handler.Objects.Count); handler = new ToListResultsHandler(); cde = new CountdownEvent(1); var syncDeltaObservable = Observable.Create<SyncDelta>(o => localFacade.Subscribe(ObjectClass.ACCOUNT, null, o, null)); IDisposable[] subscriptions = new IDisposable[1]; subscriptions[0] = syncDeltaObservable.Subscribe( delta => { Console.WriteLine(@"Sync Event received:{0}", delta.Token.Value); if (((int?) delta.Token.Value) > 2) { subscriptions[0].Dispose(); cde.Signal(); } handler.ResultsHandler.Handle(delta.Object); }, ex => { cde.Signal(); Assert.Fail("Failed Subscription {0}", ex); }); cde.Wait(new TimeSpan(0, 0, 25)); for (int i = 0; i < 5 && !(handler.Objects.Count > 2); i++) { Console.WriteLine(@"Wait for result handler thread to complete: {0}", i); Thread.Sleep(200); // Wait to complete all other threads } Assert.IsTrue(handler.Objects.Count < 10 && handler.Objects.Count > 2); }
public void TestSubscriptionOperation() { foreach (ConnectorFacade facade in CreateStateFulFacades()) { if (facade is LocalConnectorFacadeImpl) { ToListResultsHandler handler = new ToListResultsHandler(); CountdownEvent cde = new CountdownEvent(1); var localFacade = facade; var connectorObjectObservable = Observable.Create<ConnectorObject>(o => localFacade.Subscribe(ObjectClass.ACCOUNT, null, o, null)); var subscription = connectorObjectObservable.Subscribe( co => { Console.WriteLine("Connector Event received:{0}", co.Uid.GetUidValue()); handler.ResultsHandler.Handle(co); }, ex => { cde.Signal(); Assert.AreEqual(handler.Objects.Count, 10, "Uncompleted subscription"); }); cde.Wait(new TimeSpan(0, 0, 25)); subscription.Dispose(); Assert.AreEqual(10, handler.Objects.Count); handler = new ToListResultsHandler(); cde = new CountdownEvent(1); connectorObjectObservable = Observable.Create<ConnectorObject>( o => localFacade.Subscribe(ObjectClass.ACCOUNT, null, o, OperationOptionsBuilder.Create().SetOption("doComplete", true).Build())); bool failed = false; subscription = connectorObjectObservable.Subscribe( co => { Console.WriteLine("Connector Event received:{0}", co.Uid.GetUidValue()); handler.ResultsHandler.Handle(co); }, ex => { cde.Signal(); failed = true; }, () => { cde.Signal(); }); cde.Wait(new TimeSpan(0, 0, 25)); subscription.Dispose(); Assert.IsFalse(failed); Assert.AreEqual(10, handler.Objects.Count); handler = new ToListResultsHandler(); cde = new CountdownEvent(1); var syncDeltaObservable = Observable.Create<SyncDelta>(o => localFacade.Subscribe(ObjectClass.ACCOUNT, null, o, null)); IDisposable[] subscriptions = new IDisposable[1]; subscriptions[0] = syncDeltaObservable.Subscribe( delta => { Console.WriteLine("Sync Event received:{0}", delta.Token.Value); if (((int?)delta.Token.Value) > 2) { subscriptions[0].Dispose(); cde.Signal(); } handler.ResultsHandler.Handle(delta.Object); }, ex => { cde.Signal(); Assert.Fail("Failed Subscription", ex); }); cde.Wait(new TimeSpan(0, 0, 25)); for (int i = 0; i < 5 && !(handler.Objects.Count > 2); i++) { Console.WriteLine("Wait for result handler thread to complete: {0}", i); Thread.Sleep(200); // Wait to complete all other threads } Assert.IsTrue(handler.Objects.Count < 10 && handler.Objects.Count > 2); } } }