Exemplo n.º 1
0
        public void GlobalSetup()
        {
            var        hubProtocol = new JsonHubProtocol();
            HubMessage hubMessage  = null;

            switch (Input)
            {
            case Message.NoArguments:
                hubMessage = new InvocationMessage(target: "Target", argumentBindingException: null);
                break;

            case Message.FewArguments:
                hubMessage = new InvocationMessage(target: "Target", argumentBindingException: null, 1, "Foo", 2.0f);
                break;

            case Message.ManyArguments:
                hubMessage = new InvocationMessage(target: "Target", argumentBindingException: null, 1, "string", 2.0f, true, (byte)9, new[] { 5, 4, 3, 2, 1 }, 'c', 123456789101112L);
                break;

            case Message.LargeArguments:
                hubMessage = new InvocationMessage(target: "Target", argumentBindingException: null, new string('F', 10240), new string('B', 10240));
                break;
            }

            _parser  = new ServerSentEventsMessageParser();
            _rawData = hubProtocol.WriteToArray(hubMessage);
            var ms = new MemoryStream();

            ServerSentEventsMessageFormatter.WriteMessage(_rawData, ms);
            _sseFormattedData = ms.ToArray();
        }
        public async Task ParseMessageAcrossMultipleReadsSuccess(string[] messageParts, string expectedMessage)
        {
            var parser = new ServerSentEventsMessageParser();
            var pipe   = new Pipe();

            byte[]           message = null;
            SequencePosition consumed = default, examined = default;
        public async Task ParseMultipleMessagesText(string message1, string message2)
        {
            using (var pipeFactory = new PipeFactory())
            {
                var pipe = pipeFactory.Create();

                // Read the first part of the message
                await pipe.Writer.WriteAsync(Encoding.UTF8.GetBytes(message1 + message2));

                var result = await pipe.Reader.ReadAsync();

                var parser = new ServerSentEventsMessageParser();

                var parseResult = parser.ParseMessage(result.Buffer, out var consumed, out var examined, out var message);
                Assert.Equal(ServerSentEventsMessageParser.ParseResult.Completed, parseResult);
                Assert.Equal("foo", Encoding.UTF8.GetString(message));
                Assert.Equal(consumed, result.Buffer.Move(result.Buffer.Start, message1.Length));
                pipe.Reader.Advance(consumed, examined);
                Assert.Equal(consumed, examined);

                parser.Reset();

                result = await pipe.Reader.ReadAsync();

                parseResult = parser.ParseMessage(result.Buffer, out consumed, out examined, out message);
                Assert.Equal(ServerSentEventsMessageParser.ParseResult.Completed, parseResult);
                Assert.Equal("bar", Encoding.UTF8.GetString(message));
                pipe.Reader.Advance(consumed, examined);
            }
        }
        public async Task ParseMessageAcrossMultipleReadsFailure(string encodedMessagePart1, string encodedMessagePart2, string expectedMessage)
        {
            using (var pipeFactory = new PipeFactory())
            {
                var pipe = pipeFactory.Create();

                // Read the first part of the message
                await pipe.Writer.WriteAsync(Encoding.UTF8.GetBytes(encodedMessagePart1));

                var result = await pipe.Reader.ReadAsync();

                var parser = new ServerSentEventsMessageParser();

                var parseResult = parser.ParseMessage(result.Buffer, out var consumed, out var examined, out var buffer);
                Assert.Equal(ServerSentEventsMessageParser.ParseResult.Incomplete, parseResult);

                pipe.Reader.Advance(consumed, examined);

                // Send the rest of the data and parse the complete message
                await pipe.Writer.WriteAsync(Encoding.UTF8.GetBytes(encodedMessagePart2));

                result = await pipe.Reader.ReadAsync();

                var ex = Assert.Throws <FormatException>(() => parser.ParseMessage(result.Buffer, out consumed, out examined, out buffer));
                Assert.Equal(expectedMessage, ex.Message);
            }
        }
        public async Task ParseMessageAcrossMultipleReadsSuccess(string[] messageParts, string expectedMessage)
        {
            using (var pipeFactory = new PipeFactory())
            {
                var parser = new ServerSentEventsMessageParser();
                var pipe   = pipeFactory.Create();

                byte[]     message = null;
                ReadCursor consumed = default(ReadCursor), examined = default(ReadCursor);

                for (var i = 0; i < messageParts.Length; i++)
                {
                    var messagePart = messageParts[i];
                    await pipe.Writer.WriteAsync(Encoding.UTF8.GetBytes(messagePart));

                    var result = await pipe.Reader.ReadAsync();

                    var parseResult = parser.ParseMessage(result.Buffer, out consumed, out examined, out message);
                    pipe.Reader.Advance(consumed, examined);

                    // parse result should be complete only after we parsed the last message part
                    var expectedResult =
                        i == messageParts.Length - 1
                            ? ServerSentEventsMessageParser.ParseResult.Completed
                            : ServerSentEventsMessageParser.ParseResult.Incomplete;

                    Assert.Equal(expectedResult, parseResult);
                }

                Assert.Equal(consumed, examined);

                var resultMessage = Encoding.UTF8.GetString(message);
                Assert.Equal(expectedMessage, resultMessage);
            }
        }
Exemplo n.º 6
0
        public async Task ParseMessageAcrossMultipleReadsSuccess(string[] messageParts, string expectedMessage)
        {
            using (var pipeFactory = new PipeFactory())
            {
                var parser = new ServerSentEventsMessageParser();
                var pipe   = pipeFactory.Create();

                byte[]     message = null;
                ReadCursor consumed = default, examined = default;
        public void ParseSSEMessageIncompleteParseResult(string encodedMessage)
        {
            var buffer         = Encoding.UTF8.GetBytes(encodedMessage);
            var readableBuffer = new ReadOnlySequence <byte>(buffer);
            var parser         = new ServerSentEventsMessageParser();

            var parseResult = parser.ParseMessage(readableBuffer, out var consumed, out var examined, out var message);

            Assert.Equal(ServerSentEventsMessageParser.ParseResult.Incomplete, parseResult);
        }
        public void ParseSSEMessageFailureCases(string encodedMessage, string expectedExceptionMessage)
        {
            var buffer         = Encoding.UTF8.GetBytes(encodedMessage);
            var readableBuffer = new ReadOnlySequence <byte>(buffer);
            var parser         = new ServerSentEventsMessageParser();

            var ex = Assert.Throws <FormatException>(() => { parser.ParseMessage(readableBuffer, out var consumed, out var examined, out var message); });

            Assert.Equal(expectedExceptionMessage, ex.Message);
        }
Exemplo n.º 9
0
        public async Task ParseMessageAcrossMultipleReadsSuccess(string[] messageParts, string expectedMessage)
        {
            var parser = new ServerSentEventsMessageParser();

            using (var pool = new MemoryPool())
            {
                var pipe = new Pipe(new PipeOptions(pool));

                byte[]   message = null;
                Position consumed = default, examined = default;
Exemplo n.º 10
0
        public void ParseSSEMessageSuccessCases(string encodedMessage, string expectedMessage)
        {
            var buffer         = Encoding.UTF8.GetBytes(encodedMessage);
            var readableBuffer = new ReadOnlySequence <byte>(buffer);
            var parser         = new ServerSentEventsMessageParser();

            var parseResult = parser.ParseMessage(readableBuffer, out var consumed, out var examined, out var message);

            Assert.Equal(ServerSentEventsMessageParser.ParseResult.Completed, parseResult);
            Assert.Equal(consumed, examined);

            var result = Encoding.UTF8.GetString(message);

            Assert.Equal(expectedMessage, result);
        }
        public void ParseMessagesWithMultipleDataLines(string encodedMessage, string expectedMessage)
        {
            var buffer         = Encoding.UTF8.GetBytes(encodedMessage);
            var readableBuffer = ReadableBuffer.Create(buffer);
            var parser         = new ServerSentEventsMessageParser();

            var parseResult = parser.ParseMessage(readableBuffer, out var consumed, out var examined, out var message);

            Assert.Equal(ServerSentEventsMessageParser.ParseResult.Completed, parseResult);
            Assert.Equal(consumed, examined);

            var result = Encoding.UTF8.GetString(message);

            Assert.Equal(expectedMessage, result);
        }
        public void GlobalSetup()
        {
            IHubProtocol protocol;

            if (Protocol == "json")
            {
                protocol = new JsonHubProtocol();
            }
            else
            {
                // New line in result to trigger SSE formatting
                protocol = new JsonHubProtocol
                {
                    PayloadSerializer = { Formatting = Formatting.Indented }
                };
            }

            HubMessage hubMessage = null;

            switch (Input)
            {
            case Message.NoArguments:
                hubMessage = new InvocationMessage("Target", null, Array.Empty <object>());
                break;

            case Message.FewArguments:
                hubMessage = new InvocationMessage("Target", null, new object[] { 1, "Foo", 2.0f });
                break;

            case Message.ManyArguments:
                hubMessage = new InvocationMessage("Target", null, new object[] { 1, "string", 2.0f, true, (byte)9, new[] { 5, 4, 3, 2, 1 }, 'c', 123456789101112L });
                break;

            case Message.LargeArguments:
                hubMessage = new InvocationMessage("Target", null, new object[] { new string('F', 10240), new string('B', 10240) });
                break;
            }

            _parser  = new ServerSentEventsMessageParser();
            _rawData = new ReadOnlySequence <byte>(protocol.GetMessageBytes(hubMessage));
            var ms = new MemoryStream();

            ServerSentEventsMessageFormatter.WriteMessageAsync(_rawData, ms).GetAwaiter().GetResult();
            _sseFormattedData = ms.ToArray();
        }