Exemplo n.º 1
0
        public async Task NegotiateStream_StreamToStream_Successive_CancelableReadsWrites()
        {
            if (!SupportsCancelableReadsWrites)
            {
                return;
            }

            byte[] recvBuf = new byte[s_sampleMsg.Length];

            (Stream stream1, Stream stream2) = TestHelper.GetConnectedStreams();
            using (var clientStream = new DelayStream(stream1))
                using (var serverStream = new DelayStream(stream2))
                    using (var client = new NegotiateStream(clientStream))
                        using (var server = new NegotiateStream(serverStream))
                        {
                            await TestConfiguration.WhenAllOrAnyFailedWithTimeout(
                                AuthenticateAsClientAsync(client, CredentialCache.DefaultNetworkCredentials, string.Empty),
                                AuthenticateAsServerAsync(server));

                            clientStream.DelayMilliseconds = int.MaxValue;
                            serverStream.DelayMilliseconds = int.MaxValue;

                            var  cts = new CancellationTokenSource();
                            Task t   = WriteAsync(client, s_sampleMsg, 0, s_sampleMsg.Length, cts.Token);
                            Assert.False(t.IsCompleted);
                            cts.Cancel();
                            await Assert.ThrowsAnyAsync <OperationCanceledException>(() => t);

                            cts = new CancellationTokenSource();
                            t   = ReadAsync(server, s_sampleMsg, 0, s_sampleMsg.Length, cts.Token);
                            Assert.False(t.IsCompleted);
                            cts.Cancel();
                            await Assert.ThrowsAnyAsync <OperationCanceledException>(() => t);
                        }
        }
Exemplo n.º 2
0
        public async Task NegotiateStream_StreamToStream_Authentication_Success(int delay)
        {
            (Stream stream1, Stream stream2) = TestHelper.GetConnectedStreams();

            using (var clientStream = new DelayStream(stream1, delay))
                using (var serverStream = new DelayStream(stream2, delay))
                    using (var client = new NegotiateStream(clientStream))
                        using (var server = new NegotiateStream(serverStream))
                        {
                            Assert.False(client.IsAuthenticated);
                            Assert.False(server.IsAuthenticated);

                            Task[] auth = new Task[2];
                            auth[0] = AuthenticateAsClientAsync(client, CredentialCache.DefaultNetworkCredentials, string.Empty);
                            auth[1] = AuthenticateAsServerAsync(server);
                            await TestConfiguration.WhenAllOrAnyFailedWithTimeout(auth);

                            // Expected Client property values:
                            Assert.True(client.IsAuthenticated);
                            Assert.Equal(TokenImpersonationLevel.Identification, client.ImpersonationLevel);
                            Assert.Equal(IsEncryptedAndSigned, client.IsEncrypted);
                            Assert.False(client.IsMutuallyAuthenticated);
                            Assert.False(client.IsServer);
                            Assert.Equal(IsEncryptedAndSigned, client.IsSigned);
                            Assert.False(client.LeaveInnerStreamOpen);

                            IIdentity serverIdentity = client.RemoteIdentity;
                            Assert.Equal("NTLM", serverIdentity.AuthenticationType);
                            Assert.False(serverIdentity.IsAuthenticated);
                            Assert.Equal("", serverIdentity.Name);

                            // Expected Server property values:
                            Assert.True(server.IsAuthenticated);
                            Assert.Equal(TokenImpersonationLevel.Identification, server.ImpersonationLevel);
                            Assert.Equal(IsEncryptedAndSigned, server.IsEncrypted);
                            Assert.False(server.IsMutuallyAuthenticated);
                            Assert.True(server.IsServer);
                            Assert.Equal(IsEncryptedAndSigned, server.IsSigned);
                            Assert.False(server.LeaveInnerStreamOpen);

                            IIdentity clientIdentity = server.RemoteIdentity;
                            Assert.Equal("NTLM", clientIdentity.AuthenticationType);

                            Assert.True(clientIdentity.IsAuthenticated);

                            IdentityValidator.AssertIsCurrentIdentity(clientIdentity);
                        }
        }