Esempio n. 1
0
        public async Task TestReconnectServerGone(string uri)
        {
            var factory = Constants.NngFactory;

            using var client = Lms.CreateClient(factory, uri);
            using var cts    = new CancellationTokenSource(TimeSpan.FromSeconds(2));
            await Task.WhenAll(
                Task.Run(async() =>
            {
                while (!cts.IsCancellationRequested)
                {
                    using var ctsServer = CancellationTokenSource.CreateLinkedTokenSource(cts.Token);
                    ctsServer.CancelAfter(TimeSpan.FromMilliseconds(200));
                    using var server = Lms.CreateServerBuilder()
                                       .AddFunction("Foo", (a, b) => default(ValueTask <byte[]>))
                                       .Build(factory, uri);
                    try {
                        await server.Listen(1, ctsServer.Token);
                    }catch (OperationCanceledException) {}
                }
            }, cts.Token),
                Task.Run(async() => {
                while (!cts.IsCancellationRequested)
                {
                    try {
                        await client.Request("Foo", null, cts.Token);
                    }catch (OperationCanceledException) {}
                }
            }, cts.Token)
                );
        }
Esempio n. 2
0
        static async Task Main(string[] args)
        {
            var uri     = "ipc://tester";
            var path    = Path.GetDirectoryName(typeof(Program).Assembly.Location);
            var ctx     = new NngLoadContext(path);
            var factory = NngLoadContext.Init(ctx);

            using var cts = new CancellationTokenSource(8000);
            await Task.WhenAll(

                // Set up server interface
                Task.Run(async() => {
                await using var server =
                                Lms.CreateServerBuilder()
                                .AddFunction <int, int>("Tester", Tester)
                                .AddFunction <int, int>("ThrowException", ThrowException)
                                .Build(factory, uri, null, loggerFactory.CreateLogger <IServer>());
                await server.Listen(8, cts.Token);
            }),

                // Client Tester request loop
                Task.Run(async() => {
                await using var client = Lms.CreateClient(factory, uri, null, loggerFactory.CreateLogger <IClient>());
                var random             = new Random();
                while (!cts.Token.IsCancellationRequested)
                {
                    var request = random.Next();
                    var result  = await client.Request <int, int>("Tester", request, cts.Token);
                    logger.LogInformation("Requested {Request} and got {Result}", request, result);
                }
            }),

                // Client Tester request loop
                Task.Run(async() => {
                await using var client = Lms.CreateClient(factory, uri, null, loggerFactory.CreateLogger <IClient>());
                while (!cts.Token.IsCancellationRequested)
                {
                    try {
                        var result = await client.Request <int, int>("ThrowException", 20, cts.Token);
                    }catch (Exception e) {
                        logger.LogInformation("Called ThrowException and got a {Type} saying {Message}\n{StackTrace}", e.GetType(), e.Message, e.StackTrace);
                    }
                }
            })
                );
        }
Esempio n. 3
0
        public async Task TestProtocols(string uri)
        {
            var factory = Constants.NngFactory;

            using var server = Lms.CreateServerBuilder()
                               .AddFunction("Foo", (a, b) => default(ValueTask <byte[]>))
                               .Build(factory, uri);
            using var client = Lms.CreateClient(factory, uri);
            using var cts    = new CancellationTokenSource();
            Task listenTask = null;

            try {
                listenTask = server.Listen(1, cts.Token);
                await client.Request("Foo", null);
            }finally{
                cts.Cancel();
                await listenTask;
            }
        }
Esempio n. 4
0
        public async Task TestLargeObject(string uri)
        {
            var factory = Constants.NngFactory;

            using var server = Lms.CreateServerBuilder()
                               .AddFunction <int>("Foo", LargeObject)
                               .Build(factory, uri);
            using var client = Lms.CreateClient(factory, uri);
            using var cts    = new CancellationTokenSource();
            Task listenTask = null;

            try {
                listenTask = server.Listen(1, cts.Token);
                var r = new Random();
                var s = 1024 * 1024 * 2 + r.Next(12, 345);
                var b = await client.Request("Foo", s);

                Assert.Equal(s, b.Length);
            }finally{
                cts.Cancel();
                await listenTask;
            }
        }
Esempio n. 5
0
        public async Task TestRemoteException(string uri)
        {
            var factory = Constants.NngFactory;

            using var server = Lms.CreateServerBuilder()
                               .AddFunction <string>("Throw", ThrowException)
                               .Build(factory, uri);
            using var client = Lms.CreateClient(factory, uri);

            using var cts = new CancellationTokenSource();
            Task listenTask = null;

            try {
                listenTask = server.Listen(1, cts.Token);
                var exception = await Assert.ThrowsAsync <RemoteException>(async() => await client.Request("Throw", "Foo Bar"));

                Assert.Equal("lms.test", exception.Source);
                Assert.Equal("Foo Bar", exception.Message);
                Assert.Contains($"at {typeof(ExceptionTests).FullName}.{nameof(ThrowException)}(String message, CancellationToken cancellationToken)", exception.StackTrace);
            }finally{
                cts.Cancel();
                await listenTask;
            }
        }