public void TestClientDisconnectRaisesDisconnectedEventOnQueryHandle() { ICacheEntryEvent <int, int> lastEvt = null; var qry = new ContinuousQueryClient <int, int>( new DelegateListener <int, int>(e => lastEvt = e)); var client = GetClient(); var cache = client.GetOrCreateCache <int, int>(TestUtils.TestName); var handle = cache.QueryContinuous(qry); ContinuousQueryClientDisconnectedEventArgs disconnectedEventArgs = null; handle.Disconnected += (sender, args) => { disconnectedEventArgs = args; // ReSharper disable once AccessToDisposedClosure (disposed state does not matter) Assert.AreEqual(handle, sender); }; cache[1] = 1; TestUtils.WaitForTrueCondition(() => lastEvt != null); client.Dispose(); // Assert: disconnected event has been raised. TestUtils.WaitForTrueCondition(() => disconnectedEventArgs != null); Assert.IsNotNull(disconnectedEventArgs.Exception); StringAssert.StartsWith("Cannot access a disposed object", disconnectedEventArgs.Exception.Message); // Multiple dispose is allowed. handle.Dispose(); handle.Dispose(); }
public void TestClientDisconnectDoesNotRaiseDisconnectedEventOnDisposedQueryHandle() { var qry = new ContinuousQueryClient <int, int>(new DelegateListener <int, int>()); var client = GetClient(); var cache = client.GetOrCreateCache <int, int>(TestUtils.TestName); ContinuousQueryClientDisconnectedEventArgs disconnectedEventArgs = null; using (var handle = cache.QueryContinuous(qry)) { handle.Disconnected += (sender, args) => disconnectedEventArgs = args; } client.Dispose(); // Assert: disconnected event has NOT been raised. Assert.IsNull(disconnectedEventArgs); }