コード例 #1
0
        public void ThrowsAnExceptionWhenTheCompletionSourceIsNotCreated()
        {
            var api               = new Mock <IRasApi32>();
            var rasHangUp         = new Mock <IRasHangUp>();
            var extensionsBuilder = new Mock <IRasDialExtensionsBuilder>();
            var paramsBuilder     = new Mock <IRasDialParamsBuilder>();
            var exceptionPolicy   = new Mock <IExceptionPolicy>();

            var completionSourceFactory = new Mock <ITaskCompletionSourceFactory>();

            completionSourceFactory.Setup(o => o.Create <RasConnection>()).Returns((ITaskCompletionSource <RasConnection>)null);

            var cancellationSourceFactory = new Mock <ITaskCancellationSourceFactory>();
            var callbackHandler           = new Mock <IRasDialCallbackHandler>();

            var context = new RasDialContext
            {
                PhoneBookPath = @"C:\Test.pbk",
                EntryName     = "Entry",
                Credentials   = new NetworkCredential("User", "Password"),
                Options       = new RasDialerOptions
                {
                    InterfaceIndex = 0
                }
            };

            var target = new RasDialService(api.Object, rasHangUp.Object, extensionsBuilder.Object, paramsBuilder.Object, exceptionPolicy.Object, callbackHandler.Object, completionSourceFactory.Object, cancellationSourceFactory.Object);

            Assert.ThrowsAsync <InvalidOperationException>(() => target.DialAsync(context));
        }
コード例 #2
0
 public void ThrowAnExceptionWhenTheCallbackHandlerIsNull()
 {
     Assert.Throws <ArgumentNullException>(() =>
     {
         var unused = new RasDialService(new Mock <IRasApi32>().Object, new Mock <IRasHangUp>().Object, new Mock <IRasDialExtensionsBuilder>().Object, new Mock <IRasDialParamsBuilder>().Object, new Mock <IExceptionPolicy>().Object, null, new Mock <ITaskCompletionSourceFactory>().Object, new Mock <ITaskCancellationSourceFactory>().Object);
     });
 }
コード例 #3
0
        public async Task DialTheConnection()
        {
            var handle         = new IntPtr(1);
            var phoneBookPath  = @"C:\Test.pbk";
            var entryName      = "Entry";
            var userName       = "******";
            var password       = "******";
            var interfaceIndex = 1;

            var api = new Mock <IRasApi32>();

            api.Setup(o => o.RasDial(ref It.Ref <RASDIALEXTENSIONS> .IsAny, phoneBookPath, ref It.Ref <RASDIALPARAMS> .IsAny, Ras.NotifierType.RasDialFunc2, It.IsAny <RasDialFunc2>(), out It.Ref <IntPtr> .IsAny)).Returns(new RasDialCallback(
                                                                                                                                                                                                                                 (ref RASDIALEXTENSIONS rasDialExtensions, string lpszPhoneBook, ref RASDIALPARAMS rasDialParams, Ras.NotifierType notifierType, RasDialFunc2 o5, out IntPtr o6) =>
            {
                Assert.AreEqual(phoneBookPath, lpszPhoneBook);
                o6 = handle;

                return(SUCCESS);
            }));

            var rasHangUp         = new Mock <IRasHangUp>();
            var extensionsBuilder = new Mock <IRasDialExtensionsBuilder>();
            var paramsBuilder     = new Mock <IRasDialParamsBuilder>();
            var exceptionPolicy   = new Mock <IExceptionPolicy>();

            var callbackHandler = new Mock <IRasDialCallbackHandler>();
            var connection      = new Mock <RasConnection>();

            var completionSource = new Mock <ITaskCompletionSource <RasConnection> >();

            completionSource.Setup(o => o.Task).Returns(Task.FromResult(connection.Object));

            var completionSourceFactory = new Mock <ITaskCompletionSourceFactory>();

            completionSourceFactory.Setup(o => o.Create <RasConnection>()).Returns(completionSource.Object);

            var cancellationSource        = new Mock <ITaskCancellationSource>();
            var cancellationSourceFactory = new Mock <ITaskCancellationSourceFactory>();

            cancellationSourceFactory.Setup(o => o.Create(It.IsAny <CancellationToken>())).Returns(cancellationSource.Object);

            var context = new RasDialContext
            {
                PhoneBookPath = phoneBookPath,
                EntryName     = entryName,
                Credentials   = new NetworkCredential(userName, password),
                Options       = new RasDialerOptions
                {
                    InterfaceIndex = interfaceIndex
                }
            };

            var target = new RasDialService(api.Object, rasHangUp.Object, extensionsBuilder.Object, paramsBuilder.Object, exceptionPolicy.Object, callbackHandler.Object, completionSourceFactory.Object, cancellationSourceFactory.Object);
            var result = await target.DialAsync(context);

            Assert.AreSame(connection.Object, result);
            Assert.IsTrue(target.IsBusy);
            callbackHandler.Verify(o => o.Initialize(completionSource.Object, It.IsAny <Action <StateChangedEventArgs> >(), It.IsAny <Action>(), It.IsAny <CancellationToken>()), Times.Once);
            callbackHandler.Verify(o => o.SetHandle(handle), Times.Once);
        }
コード例 #4
0
 public void ThrowAnExceptionWhenTheCallbackHandlerIsNull()
 {
     Assert.Throws <ArgumentNullException>(() =>
     {
         _ = new RasDialService(new Mock <IRasApi32>().Object, new Mock <IRasHangUp>().Object,
                                new Mock <IRasDialExtensionsBuilder>().Object, new Mock <IRasDialParamsBuilder>().Object,
                                new Mock <IExceptionPolicy>().Object, null, marshaller.Object);
     });
 }
コード例 #5
0
        public void CancelsTheDialConnectionAttemptIfDisposed()
        {
            var handle = new IntPtr(1);

            var api = new Mock <IRasApi32>();

            api.Setup(o => o.RasDial(ref It.Ref <RASDIALEXTENSIONS> .IsAny, @"C:\Test.pbk", ref It.Ref <RASDIALPARAMS> .IsAny, Ras.NotifierType.RasDialFunc2, It.IsAny <RasDialFunc2>(), out It.Ref <IntPtr> .IsAny)).Returns(new RasDialCallback(
                                                                                                                                                                                                                                  (ref RASDIALEXTENSIONS o1, string o2, ref RASDIALPARAMS o3, Ras.NotifierType o4, RasDialFunc2 o5, out IntPtr o6) =>
            {
                o6 = handle;

                return(SUCCESS);
            }));

            var rasHangUp         = new Mock <IRasHangUp>();
            var extensionsBuilder = new Mock <IRasDialExtensionsBuilder>();
            var paramsBuilder     = new Mock <IRasDialParamsBuilder>();
            var exceptionPolicy   = new Mock <IExceptionPolicy>();

            var callbackHandler = new Mock <IRasDialCallbackHandler>();
            var connection      = new Mock <RasConnection>();

            var completionSource = new Mock <ITaskCompletionSource <RasConnection> >();

            completionSource.Setup(o => o.Task).Returns(Task.FromResult(connection.Object));

            var completionSourceFactory = new Mock <ITaskCompletionSourceFactory>();

            completionSourceFactory.Setup(o => o.Create <RasConnection>()).Returns(completionSource.Object);

            var cancellationSource        = new Mock <ITaskCancellationSource>();
            var cancellationSourceFactory = new Mock <ITaskCancellationSourceFactory>();

            cancellationSourceFactory.Setup(o => o.Create(It.IsAny <CancellationToken>())).Returns(cancellationSource.Object);

            var context = new RasDialContext
            {
                PhoneBookPath = @"C:\Test.pbk",
                EntryName     = "Entry",
                Credentials   = new NetworkCredential("User", "Password"),
                Options       = new RasDialerOptions
                {
                    InterfaceIndex = 0
                }
            };

            var target = new RasDialService(api.Object, rasHangUp.Object, extensionsBuilder.Object, paramsBuilder.Object, exceptionPolicy.Object, callbackHandler.Object, completionSourceFactory.Object, cancellationSourceFactory.Object);

            target.DialAsync(context);

            Assert.IsTrue(target.IsBusy);

            target.Dispose();

            cancellationSource.Verify(o => o.Cancel(), Times.Once);
        }
コード例 #6
0
        public void ThrowsAnExceptionWhenNonSuccessIsReturnedFromWin32()
        {
            var api = new Mock <IRasApi32>();

            api.Setup(o => o.RasDial(ref It.Ref <RASDIALEXTENSIONS> .IsAny, @"C:\Test.pbk", ref It.Ref <RASDIALPARAMS> .IsAny, Ras.NotifierType.RasDialFunc2, It.IsAny <RasDialFunc2>(), out It.Ref <IntPtr> .IsAny)).Returns(new RasDialCallback(
                                                                                                                                                                                                                                  (ref RASDIALEXTENSIONS o1, string o2, ref RASDIALPARAMS o3, Ras.NotifierType o4, RasDialFunc2 o5, out IntPtr o6) =>
            {
                o6 = IntPtr.Zero;

                return(ERROR_INVALID_PARAMETER);
            }));

            var rasHangUp         = new Mock <IRasHangUp>();
            var extensionsBuilder = new Mock <IRasDialExtensionsBuilder>();
            var paramsBuilder     = new Mock <IRasDialParamsBuilder>();
            var exceptionPolicy   = new Mock <IExceptionPolicy>();

            exceptionPolicy.Setup(o => o.Create(ERROR_INVALID_PARAMETER)).Returns(new TestException());

            var callbackHandler = new Mock <IRasDialCallbackHandler>();
            var connection      = new Mock <RasConnection>();

            var completionSource = new Mock <ITaskCompletionSource <RasConnection> >();

            completionSource.Setup(o => o.Task).Returns(Task.FromResult(connection.Object));

            var completionSourceFactory = new Mock <ITaskCompletionSourceFactory>();

            completionSourceFactory.Setup(o => o.Create <RasConnection>()).Returns(completionSource.Object);

            var cancellationSource        = new Mock <ITaskCancellationSource>();
            var cancellationSourceFactory = new Mock <ITaskCancellationSourceFactory>();

            cancellationSourceFactory.Setup(o => o.Create(It.IsAny <CancellationToken>())).Returns(cancellationSource.Object);

            var context = new RasDialContext
            {
                PhoneBookPath = @"C:\Test.pbk",
                EntryName     = "Entry",
                Credentials   = new NetworkCredential("User", "Password"),
                Options       = new RasDialerOptions
                {
                    InterfaceIndex = 0
                }
            };

            var target = new RasDialService(api.Object, rasHangUp.Object, extensionsBuilder.Object, paramsBuilder.Object, exceptionPolicy.Object, callbackHandler.Object, completionSourceFactory.Object, cancellationSourceFactory.Object);

            Assert.ThrowsAsync <TestException>(() => target.DialAsync(context));

            Assert.IsFalse(target.IsBusy);
            callbackHandler.Verify(o => o.Initialize(completionSource.Object, It.IsAny <Action <StateChangedEventArgs> >(), It.IsAny <Action>(), It.IsAny <CancellationToken>()), Times.Once);
            callbackHandler.Verify(o => o.SetHandle(It.IsAny <IntPtr>()), Times.Never);
        }
コード例 #7
0
        public void DisposesCorrectlyWhenNotInitialized()
        {
            var api                       = new Mock <IRasApi32>();
            var rasHangUp                 = new Mock <IRasHangUp>();
            var extensionsBuilder         = new Mock <IRasDialExtensionsBuilder>();
            var paramsBuilder             = new Mock <IRasDialParamsBuilder>();
            var exceptionPolicy           = new Mock <IExceptionPolicy>();
            var completionSourceFactory   = new Mock <ITaskCompletionSourceFactory>();
            var cancellationSourceFactory = new Mock <ITaskCancellationSourceFactory>();
            var callbackHandler           = new Mock <IRasDialCallbackHandler>();

            var target = new RasDialService(api.Object, rasHangUp.Object, extensionsBuilder.Object, paramsBuilder.Object, exceptionPolicy.Object, callbackHandler.Object, completionSourceFactory.Object, cancellationSourceFactory.Object);

            target.Dispose();

            callbackHandler.Verify(o => o.Dispose(), Times.Once);
        }
コード例 #8
0
        public async Task DisposeWillDisposeTheObjectAsExpected()
        {
            var completionSource = new Mock <ITaskCompletionSource <RasConnection> >();

            completionSource.Setup(o => o.Task).Returns(Task.FromResult((RasConnection)null));

            var api               = new Mock <IRasApi32>();
            var rasHangUp         = new Mock <IRasHangUp>();
            var extensionsBuilder = new Mock <IRasDialExtensionsBuilder>();
            var paramsBuilder     = new Mock <IRasDialParamsBuilder>();
            var exceptionPolicy   = new Mock <IExceptionPolicy>();

            var completionSourceFactory = new Mock <ITaskCompletionSourceFactory>();

            completionSourceFactory.Setup(o => o.Create <RasConnection>()).Returns(completionSource.Object);

            var cancellationSource = new Mock <ITaskCancellationSource>();

            var cancellationSourceFactory = new Mock <ITaskCancellationSourceFactory>();

            cancellationSourceFactory.Setup(o => o.Create(It.IsAny <CancellationToken>())).Returns(cancellationSource.Object);

            var callbackHandler = new Mock <IRasDialCallbackHandler>();

            var context = new RasDialContext
            {
                PhoneBookPath = @"C:\Test.pbk",
                EntryName     = "Entry",
                Credentials   = new NetworkCredential("User", "Password"),
                Options       = new RasDialerOptions
                {
                    InterfaceIndex = 0
                }
            };

            using (var target = new RasDialService(api.Object, rasHangUp.Object, extensionsBuilder.Object, paramsBuilder.Object, exceptionPolicy.Object, callbackHandler.Object, completionSourceFactory.Object, cancellationSourceFactory.Object))
            {
                await target.DialAsync(context);
            }

            callbackHandler.Verify(o => o.Dispose(), Times.Once);
            cancellationSource.Verify(o => o.Dispose(), Times.Once);
        }