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); } }
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); } }