コード例 #1
0
    public async Task InvokeAsync()
    {
        var options = new BusOptions
        {
            EnvelopName = "test_lpc"
        };
        var api = new MemoryStorageApi(options);

        using var mocker = AutoMock.GetLoose(builder =>
        {
            builder.RegisterInstance(api)
            .AsImplementedInterfaces();
        });
        var factory = mocker.Create <Bus.Factory>();
        var bus     = factory.Invoke(options);

        mocker.Mock <IBusFactory>()
        .Setup(x => x.Create(It.IsAny <BusOptions>()))
        .Returns(bus);

        // act
        var server   = mocker.Create <LPCServer>();
        var instance = new TestServerInstance();

        server.AddServerInstance(instance);
        await server.StartAsync();

        var request = new BusTestPage.TestRequest
        {
            Name = "newbe36524"
        };
        var response = await bus.SendRequest <BusTestPage.TestRequest, BusTestPage.TestResponse>(request);

        response.Greetings.Should().Be($"hi, {request.Name}");
    }
コード例 #2
0
    public async Task ConcurrentAsync()
    {
        var options = new BusOptions
        {
            EnvelopName = "afEvent"
        };
        var api = new MemoryStorageApi(options);

        using var mocker = AutoMock.GetLoose(builder =>
        {
            builder.RegisterInstance(api)
            .AsImplementedInterfaces();
        });
        var factory = mocker.Create <Bus.Factory>();
        var channel = factory.Invoke(options);
        await channel.EnsureStartAsync();

        channel.RegisterHandler <TestRequest>((scope, payload, message) =>
        {
            channel.SendResponse(new TestResponse
            {
                Greetings = GetGreetings(payload.Name)
            }, message);
        });

        const int maxCount = 100;
        // act
        var tasks = Enumerable.Range(0, maxCount)
                    .Select(x => channel.SendRequest <TestRequest, TestResponse>(new TestRequest
        {
            Name = x.ToString()
        }));
        var results = await Task.WhenAll(tasks);

        var expectation = Enumerable.Range(0, maxCount)
                          .Select(x => GetGreetings(x.ToString())).OrderBy(x => x);

        results.Select(x => x.Greetings).OrderBy(x => x)
        .Should().BeEquivalentTo(expectation);

        channel.MessageHandlerCollection.HandlerItems.Count.Should().Be(1);

        string GetGreetings(string n)
        {
            return($"hi, {n}");
        }
    }
コード例 #3
0
    public async Task NormalAsync()
    {
        var options = new BusOptions
        {
            EnvelopName = "afEvent"
        };
        var api = new MemoryStorageApi(options);

        using var mocker = AutoMock.GetLoose(builder =>
        {
            builder.RegisterInstance(api)
            .AsImplementedInterfaces();
        });
        var factory = mocker.Create <Bus.Factory>();
        var channel = factory.Invoke(options);
        await channel.EnsureStartAsync();

        channel.RegisterHandler <TestRequest>((scope, payload, message) =>
        {
            channel.SendResponse(new TestResponse
            {
                Greetings = GetGreetings(payload.Name)
            }, message);
        });
        var name         = "newbe36524";
        var testResponse = await channel.SendRequest <TestRequest, TestResponse>(new TestRequest
        {
            Name = name
        });

        testResponse.Should().NotBeNull();
        testResponse.Greetings.Should().Be(GetGreetings(name));

        channel.MessageHandlerCollection.HandlerItems.Count.Should().Be(1);

        string GetGreetings(string n)
        {
            return($"hi, {n}");
        }
    }
コード例 #4
0
    public async Task RunAsync()
    {
        var options = new BusOptions
        {
            EnvelopName = "afEvent"
        };
        var         memoryStorageApi = new MemoryStorageApi(options);
        JsonElement?data             = null;
        await memoryStorageApi.RegisterCallBack((changes, area) => { data = changes; });

        await memoryStorageApi.SetLocal(new Dictionary <string, object>
        {
            {
                options.EnvelopName, new TestData
                {
                    Name = "nice"
                }
            }
        });

        data.Should().NotBeNull();
        JsonSerializer.Serialize(data).Should().Be("{\"afEvent\":{\"newValue\":{\"Name\":\"nice\"}}}");
    }