예제 #1
0
    public async Task ClientCanSendReadOnlyStreamToServer(bool orderedArguments)
    {
        var ms             = new MemoryStream(MemoryBuffer);
        var readOnlyStream = new OneWayWrapperStream(ms, canRead: true);

        int bytesReceived;

        if (orderedArguments)
        {
            bytesReceived = await this.clientRpc.InvokeWithCancellationAsync <int>(
                nameof(Server.AcceptReadableStream),
                new object[] { ExpectedFileName, readOnlyStream },
                this.TimeoutToken);
        }
        else
        {
            bytesReceived = await this.clientRpc.InvokeWithParameterObjectAsync <int>(
                nameof(Server.AcceptReadableStream),
                new { fileName = ExpectedFileName, content = readOnlyStream },
                this.TimeoutToken);
        }

        Assert.Equal(MemoryBuffer.Length, bytesReceived);

        // Assert that the client-side stream is closed, since the server closed their side.
        await this.AssertStreamClosesAsync(ms);
    }
예제 #2
0
    public async Task ClientCanSendWriteOnlyStreamToServer(bool orderedArguments)
    {
        (Stream, Stream)duplexStream = FullDuplexStream.CreatePair();
        var writeOnlyStream = new OneWayWrapperStream(duplexStream.Item2, canWrite: true);

        int bytesToReceive = MemoryBuffer.Length - 1;

        if (orderedArguments)
        {
            await this.clientRpc.InvokeWithCancellationAsync(
                nameof(Server.AcceptWritableStream),
                new object[] { writeOnlyStream, bytesToReceive },
                this.TimeoutToken);
        }
        else
        {
            await this.clientRpc.InvokeWithParameterObjectAsync(
                nameof(Server.AcceptWritableStream),
                new { lengthToWrite = bytesToReceive, content = writeOnlyStream },
                this.TimeoutToken);
        }

        // Read all that the server wanted us to know, and verify it.
        byte[] buffer        = new byte[bytesToReceive + 1];
        int    receivedBytes = 0;

        while (receivedBytes < bytesToReceive)
        {
            int count = await duplexStream.Item1.ReadAsync(buffer, receivedBytes, buffer.Length - receivedBytes);

            receivedBytes += count;
        }

        Assert.Equal(MemoryBuffer.Take(bytesToReceive), buffer.Take(bytesToReceive));

        // Assert that the client-side stream is closed, since the server closed their side.
        await this.AssertStreamClosesAsync(duplexStream.Item2);
    }