public void WriteMessage(string protocolTestDataName)
        {
            var testData = ProtocolTestData[protocolTestDataName];

            var expectedOutput = Frame(testData.Json);

            var protocolOptions = new NewtonsoftJsonHubProtocolOptions
            {
                PayloadSerializerSettings = new JsonSerializerSettings()
                {
                    NullValueHandling = testData.NullValueHandling,
                    ContractResolver  = testData.CamelCase ? new CamelCasePropertyNamesContractResolver() : new DefaultContractResolver()
                }
            };

            var protocol = new NewtonsoftJsonHubProtocol(Options.Create(protocolOptions));

            var writer = MemoryBufferWriter.Get();

            try
            {
                protocol.WriteMessage(testData.Message, writer);
                var json = Encoding.UTF8.GetString(writer.ToArray());

                Assert.Equal(expectedOutput, json);
            }
            finally
            {
                MemoryBufferWriter.Return(writer);
            }
        }
Exemple #2
0
        public override void ConfigureServices(ServiceConfigurationContext context)
        {
            var newtonsoftJsonOptions = new NewtonsoftJsonHubProtocolOptions();

            context.Services.ExecutePreConfiguredActions(newtonsoftJsonOptions);

            context.Services.TryAddEnumerable(ServiceDescriptor.Singleton <IHubProtocol, NewtonsoftJsonHubProtocol>());
        }
Exemple #3
0
        protected override IHubProtocol GetProtocolWithOptions(bool useCamelCase, bool ignoreNullValues)
        {
            var protocolOptions = new NewtonsoftJsonHubProtocolOptions
            {
                PayloadSerializerSettings = new JsonSerializerSettings()
                {
                    NullValueHandling = ignoreNullValues ? NullValueHandling.Ignore : NullValueHandling.Include,
                    ContractResolver  = useCamelCase ? new CamelCasePropertyNamesContractResolver() : new DefaultContractResolver()
                }
            };

            return(new NewtonsoftJsonHubProtocol(Options.Create(protocolOptions)));
        }
    public async Task CamelCasedJsonIsPreservedAcrossRedisBoundary()
    {
        var server = new TestRedisServer();

        var messagePackOptions = new MessagePackHubProtocolOptions();

        var jsonOptions = new NewtonsoftJsonHubProtocolOptions();

        jsonOptions.PayloadSerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();

        using (var client1 = new TestClient())
            using (var client2 = new TestClient())
            {
                // The sending manager has serializer settings
                var manager1 = CreateLifetimeManager(server, messagePackOptions, jsonOptions);

                // The receiving one doesn't matter because of how we serialize!
                var manager2 = CreateLifetimeManager(server);

                var connection1 = HubConnectionContextUtils.Create(client1.Connection);
                var connection2 = HubConnectionContextUtils.Create(client2.Connection);

                await manager1.OnConnectedAsync(connection1).DefaultTimeout();

                await manager2.OnConnectedAsync(connection2).DefaultTimeout();

                await manager1.SendAllAsync("Hello", new object[] { new TestObject {
                                                                        TestProperty = "Foo"
                                                                    } });

                var message = Assert.IsType <InvocationMessage>(await client2.ReadAsync().DefaultTimeout());
                Assert.Equal("Hello", message.Target);
                Assert.Collection(
                    message.Arguments,
                    arg0 =>
                {
                    var dict = Assert.IsType <JObject>(arg0);
                    Assert.Collection(dict.Properties(),
                                      prop =>
                    {
                        Assert.Equal("testProperty", prop.Name);
                        Assert.Equal("Foo", prop.Value.Value <string>());
                    });
                });
            }
    }
        public void ParseMessage(string protocolTestDataName)
        {
            var testData = ProtocolTestData[protocolTestDataName];

            var input = Frame(testData.Json);

            var protocolOptions = new NewtonsoftJsonHubProtocolOptions
            {
                PayloadSerializerSettings = new JsonSerializerSettings
                {
                    NullValueHandling = testData.NullValueHandling,
                    ContractResolver  = testData.CamelCase ? new CamelCasePropertyNamesContractResolver() : new DefaultContractResolver()
                }
            };

            var binder   = new TestBinder(testData.Message);
            var protocol = new NewtonsoftJsonHubProtocol(Options.Create(protocolOptions));
            var data     = new ReadOnlySequence <byte>(Encoding.UTF8.GetBytes(input));

            protocol.TryParseMessage(ref data, binder, out var message);

            Assert.Equal(testData.Message, message, TestHubMessageEqualityComparer.Instance);
        }
    private RedisHubLifetimeManager <Hub> CreateLifetimeManager(TestRedisServer server, MessagePackHubProtocolOptions messagePackOptions = null, NewtonsoftJsonHubProtocolOptions jsonOptions = null)
    {
        var options = new RedisOptions()
        {
            ConnectionFactory = async(t) => await Task.FromResult(new TestConnectionMultiplexer(server))
        };

        messagePackOptions = messagePackOptions ?? new MessagePackHubProtocolOptions();
        jsonOptions        = jsonOptions ?? new NewtonsoftJsonHubProtocolOptions();
        return(new RedisHubLifetimeManager <Hub>(
                   NullLogger <RedisHubLifetimeManager <Hub> > .Instance,
                   Options.Create(options),
                   new DefaultHubProtocolResolver(new IHubProtocol[]
        {
            new NewtonsoftJsonHubProtocol(Options.Create(jsonOptions)),
            new MessagePackHubProtocol(Options.Create(messagePackOptions)),
        }, NullLogger <DefaultHubProtocolResolver> .Instance)));
    }