public void DisposeMustCleanUpSubscriptions() { var handle = new IntPtr(1); var connection = new Mock <IRasConnection>(); connection.Setup(o => o.Handle).Returns(handle); var registeredCallback = new Mock <IRegisteredCallback>(); var api = new Mock <IRasApi32>(); var callbackHandler = new Mock <IRasConnectionNotificationCallbackHandler>(); var exceptionPolicy = new Mock <IExceptionPolicy>(); var callbackFactory = new Mock <IRegisteredCallbackFactory>(); callbackFactory.Setup(o => o.Create(It.IsAny <WaitOrTimerCallback>(), It.IsAny <object>())).Returns(registeredCallback.Object); var target = new RasConnectionNotificationService(api.Object, callbackHandler.Object, exceptionPolicy.Object, callbackFactory.Object); target.Subscribe(new RasNotificationContext { Connection = connection.Object, OnDisconnectedCallback = e => { } }); target.Dispose(); registeredCallback.Verify(o => o.Dispose(), Times.Exactly(2)); }
public void ShouldRegisterForAndResetConnectedEventsWhenNoHandleIsProvided() { var registeredCallback = new Mock <IRegisteredCallback>(); var api = new Mock <IRasApi32>(); var callbackHandler = new Mock <IRasConnectionNotificationCallbackHandler>(); var exceptionPolicy = new Mock <IExceptionPolicy>(); var callbackFactory = new Mock <IRegisteredCallbackFactory>(); callbackFactory.Setup(o => o.Create(It.IsAny <WaitOrTimerCallback>(), It.IsAny <object>())).Returns(registeredCallback.Object); var target = new RasConnectionNotificationService(api.Object, callbackHandler.Object, exceptionPolicy.Object, callbackFactory.Object); target.Subscribe(new RasNotificationContext { Connection = null, OnConnectedCallback = e => { }, OnDisconnectedCallback = e => { } }); callbackHandler.Verify(o => o.Initialize(), Times.Once); api.Verify(o => o.RasConnectionNotification(INVALID_HANDLE_VALUE, It.IsAny <ISafeHandleWrapper>(), RASCN.Connection), Times.Once); api.Verify(o => o.RasConnectionNotification(INVALID_HANDLE_VALUE, It.IsAny <ISafeHandleWrapper>(), RASCN.Disconnection), Times.Once); Assert.True(target.IsActive); target.Reset(); registeredCallback.Verify(o => o.Dispose(), Times.Exactly(2)); Assert.False(target.IsActive); }
public void ReturnsInactiveAfterCreation() { var api = new Mock <IRasApi32>(); var callbackHandler = new Mock <IRasConnectionNotificationCallbackHandler>(); var exceptionPolicy = new Mock <IExceptionPolicy>(); var callbackFactory = new Mock <IRegisteredCallbackFactory>(); var target = new RasConnectionNotificationService(api.Object, callbackHandler.Object, exceptionPolicy.Object, callbackFactory.Object); Assert.False(target.IsActive); }
public void ThrowsAnExceptionWhenContextIsNull() { var api = new Mock <IRasApi32>(); var callbackHandler = new Mock <IRasConnectionNotificationCallbackHandler>(); var exceptionPolicy = new Mock <IExceptionPolicy>(); var callbackFactory = new Mock <IRegisteredCallbackFactory>(); var target = new RasConnectionNotificationService(api.Object, callbackHandler.Object, exceptionPolicy.Object, callbackFactory.Object); Assert.Throws <ArgumentNullException>(() => target.Subscribe(null)); }
public void ThrowsAnExceptionWhenResetAfterDispose() { var api = new Mock <IRasApi32>(); var callbackHandler = new Mock <IRasConnectionNotificationCallbackHandler>(); var exceptionPolicy = new Mock <IExceptionPolicy>(); var callbackFactory = new Mock <IRegisteredCallbackFactory>(); var target = new RasConnectionNotificationService(api.Object, callbackHandler.Object, exceptionPolicy.Object, callbackFactory.Object); target.Dispose(); Assert.Throws <ObjectDisposedException>(() => target.Reset()); }
public void ThrowsAnExceptionWhenRegisteredCallbackIsNull() { var api = new Mock <IRasApi32>(); api.Setup(o => o.RasConnectionNotification(It.IsAny <IntPtr>(), It.IsAny <ISafeHandleWrapper>(), It.IsAny <RASCN>())).Returns(1); var callbackHandler = new Mock <IRasConnectionNotificationCallbackHandler>(); var exceptionPolicy = new Mock <IExceptionPolicy>(); exceptionPolicy.Setup(o => o.Create(1)).Throws <TestException>(); var callbackFactory = new Mock <IRegisteredCallbackFactory>(); callbackFactory.Setup(o => o.Create(It.IsAny <WaitOrTimerCallback>(), It.IsAny <object>())).Returns((IRegisteredCallback)null); var target = new RasConnectionNotificationService(api.Object, callbackHandler.Object, exceptionPolicy.Object, callbackFactory.Object); Assert.Throws <InvalidOperationException>(() => { target.Subscribe(new RasNotificationContext()); }); }