public void InvocationMessageParseTest(string protocolName, string invocationId, string target, object[] arguments)
        {
            var                     message  = new AspNetCore.SignalR.Protocol.InvocationMessage(invocationId, target, arguments);
            IHubProtocol            protocol = protocolName == "json" ? (IHubProtocol) new JsonHubProtocol() : new MessagePackHubProtocol();
            var                     bytes    = new ReadOnlySequence <byte>(protocol.GetMessageBytes(message));
            ReadOnlySequence <byte> payload;

            if (protocolName == "json")
            {
                TextMessageParser.TryParseMessage(ref bytes, out payload);
            }
            else
            {
                BinaryMessageParser.TryParseMessage(ref bytes, out payload);
            }
            var serverlessProtocol = protocolName == "json" ? (IServerlessProtocol) new JsonServerlessProtocol() : new MessagePackServerlessProtocol();

            Assert.True(serverlessProtocol.TryParseMessage(ref payload, out var parsedMessage));
            var invocationMessage = (InvocationMessage)parsedMessage;

            Assert.Equal(1, invocationMessage.Type);
            Assert.Equal(invocationId, invocationMessage.InvocationId);
            Assert.Equal(target, invocationMessage.Target);
            var expected = JsonConvert.SerializeObject(arguments);
            var actual   = JsonConvert.SerializeObject(invocationMessage.Arguments);

            Assert.Equal(expected, actual);
        }
Exemplo n.º 2
0
        public void ReadMessage()
        {
            var message = new ReadOnlySequence <byte>(Encoding.UTF8.GetBytes("ABC\u001e"));

            Assert.True(TextMessageParser.TryParseMessage(ref message, out var payload));
            Assert.Equal("ABC", Encoding.UTF8.GetString(payload.ToArray()));
            Assert.False(TextMessageParser.TryParseMessage(ref message, out payload));
        }
Exemplo n.º 3
0
        public void SingleTextMessage()
        {
            var data = new ReadOnlySequence <byte>(_textInput);

            if (!TextMessageParser.TryParseMessage(ref data, out _))
            {
                throw new InvalidOperationException("Failed to parse");
            }
        }
Exemplo n.º 4
0
        public void SingleTextMessage()
        {
            ReadOnlySpan <byte> buffer = _textInput;

            if (!TextMessageParser.TryParseMessage(ref buffer, out _))
            {
                throw new InvalidOperationException("Failed to parse");
            }
        }
Exemplo n.º 5
0
        public void TryReadingMultipleMessages()
        {
            var message = new ReadOnlyBuffer <byte>(Encoding.UTF8.GetBytes("ABC\u001eXYZ\u001e"));

            Assert.True(TextMessageParser.TryParseMessage(ref message, out var payload));
            Assert.Equal("ABC", Encoding.UTF8.GetString(payload.ToArray()));
            Assert.True(TextMessageParser.TryParseMessage(ref message, out payload));
            Assert.Equal("XYZ", Encoding.UTF8.GetString(payload.ToArray()));
        }
Exemplo n.º 6
0
        public void IncompleteTrailingMessage()
        {
            var message = new ReadOnlyBuffer <byte>(Encoding.UTF8.GetBytes("ABC\u001eXYZ\u001e123"));

            Assert.True(TextMessageParser.TryParseMessage(ref message, out var payload));
            Assert.Equal("ABC", Encoding.UTF8.GetString(payload.ToArray()));
            Assert.True(TextMessageParser.TryParseMessage(ref message, out payload));
            Assert.Equal("XYZ", Encoding.UTF8.GetString(payload.ToArray()));
            Assert.False(TextMessageParser.TryParseMessage(ref message, out payload));
        }
Exemplo n.º 7
0
        public void WhenParsingWithTwoFragmentsAndOneIsEmpty_ItShouldReturnTwoFragments()
        {
            var parser  = new TextMessageParser();
            var message = new TextMessage {
                Message = "first#"
            };
            var result = parser.Parse(message);

            Assert.Equal(2, result.Fragments.Count());
        }
Exemplo n.º 8
0
        private static bool TryGetPayload(IHubProtocol protocol, InvocationMessage invocationMessage, out ReadOnlySequence <byte> payload)
        {
            var buffer = new ReadOnlySequence <byte>(protocol.GetMessageBytes(invocationMessage));

            if (protocol is JsonHubProtocol)
            {
                return(TextMessageParser.TryParseMessage(ref buffer, out payload));
            }
            else if (protocol is MessagePackHubProtocol)
            {
                return(BinaryMessageParser.TryParseMessage(ref buffer, out payload));
            }

            throw new ArgumentException($"{protocol.GetType()} is not supported");
        }
        public async Task SignalRInvocationMethodExecutorTest(string protocolName)
        {
            var resolver       = new SignalRRequestResolver(false);
            var methodExecutor = new SignalRInvocationMethodExecutor(resolver, new ExecutionContext {
                Executor = _triggeredFunctionExecutor
            });
            var hub          = Guid.NewGuid().ToString();
            var category     = Guid.NewGuid().ToString();
            var @event       = Guid.NewGuid().ToString();
            var connectionId = Guid.NewGuid().ToString();
            var arguments    = new object[] { Guid.NewGuid().ToString(), Guid.NewGuid().ToString() };

            var message     = new Microsoft.AspNetCore.SignalR.Protocol.InvocationMessage(Guid.NewGuid().ToString(), @event, arguments);
            var protocol    = protocolName == "json" ? (IHubProtocol) new JsonHubProtocol() : new MessagePackHubProtocol();
            var contentType = protocolName == "json" ? Constants.JsonContentType : Constants.MessagePackContentType;
            var bytes       = new ReadOnlySequence <byte>(protocol.GetMessageBytes(message));
            ReadOnlySequence <byte> payload;

            if (protocolName == "json")
            {
                TextMessageParser.TryParseMessage(ref bytes, out payload);
            }
            else
            {
                BinaryMessageParser.TryParseMessage(ref bytes, out payload);
            }

            var request = TestHelpers.CreateHttpRequestMessage(hub, category, @event, connectionId, contentType: contentType, content: payload.ToArray());
            await methodExecutor.ExecuteAsync(request);

            var result      = await _triggeredFunctionDataTcs.Task;
            var triggerData = (SignalRTriggerEvent)result.TriggerValue;

            Assert.NotNull(triggerData.TaskCompletionSource);
            Assert.Equal(hub, triggerData.Context.Hub);
            Assert.Equal(category, triggerData.Context.Category);
            Assert.Equal(@event, triggerData.Context.Event);
            Assert.Equal(connectionId, triggerData.Context.ConnectionId);
            Assert.Equal(hub, triggerData.Context.Hub);
            Assert.Equal(arguments, triggerData.Context.Arguments);
        }