Пример #1
0
        public static void DivManyExample(MathGrpc.IMathServiceClient stub)
        {
            List <DivArgs> divArgsList = new List <DivArgs> {
                new DivArgs.Builder {
                    Dividend = 10, Divisor = 3
                }.Build(),
                new DivArgs.Builder {
                    Dividend = 100, Divisor = 21
                }.Build(),
                new DivArgs.Builder {
                    Dividend = 7, Divisor = 2
                }.Build()
            };

            var recorder = new RecordingObserver <DivReply>();

            var inputs = stub.DivMany(recorder);

            foreach (var input in divArgsList)
            {
                inputs.OnNext(input);
            }
            inputs.OnCompleted();

            Console.WriteLine("DivMany Result: " + string.Join("|", recorder.ToList().Result));
        }
Пример #2
0
        public void DivMany()
        {
            List <DivArgs> divArgsList = new List <DivArgs>
            {
                new DivArgs.Builder {
                    Dividend = 10, Divisor = 3
                }.Build(),
                new DivArgs.Builder {
                    Dividend = 100, Divisor = 21
                }.Build(),
                new DivArgs.Builder {
                    Dividend = 7, Divisor = 2
                }.Build()
            };

            var recorder        = new RecordingObserver <DivReply>();
            var requestObserver = client.DivMany(recorder);

            foreach (var arg in divArgsList)
            {
                requestObserver.OnNext(arg);
            }
            requestObserver.OnCompleted();

            var result = recorder.ToList().Result;

            CollectionAssert.AreEqual(new long[] { 3, 4, 3 }, result.ConvertAll((divReply) => divReply.Quotient));
            CollectionAssert.AreEqual(new long[] { 1, 16, 1 }, result.ConvertAll((divReply) => divReply.Remainder));
        }
Пример #3
0
 public static async Task FibExample(MathGrpc.IMathServiceClient stub)
 {
     var recorder = new RecordingObserver<Num>();
     stub.Fib(new FibArgs.Builder { Limit = 5 }.Build(), recorder);
     List<Num> result = await recorder.ToList();
     Console.WriteLine("Fib Result: " + string.Join("|", result));
 }
        public void InitiateWalk_GeneratesSubsequentTicks_AsExpected()
        {
            var randomWalkStrategy = new MarkovEquityStrategy();
            var randomWalk         = new EquitiesMarkovProcess(
                new NasdaqInitialiser(),
                randomWalkStrategy,
                this._heartbeat,
                this._logger);
            var stream   = new ExchangeStream(new UnsubscriberFactory <EquityIntraDayTimeBarCollection>());
            var observer = new RecordingObserver <EquityIntraDayTimeBarCollection>(this._logger, 5);

            stream.Subscribe(observer);

            randomWalk.InitiateWalk(stream);

            var timeOut = DateTime.UtcNow.AddSeconds(5);

            while (observer.Buffer.Count < 2 && DateTime.UtcNow < timeOut)
            {
                // don't sleep the thread
            }

            Assert.AreEqual(observer.Buffer.Count, 2);

            randomWalk.TerminateWalk();
        }
Пример #5
0
        public async Task QueryAsync(IQuery query, IObserver <BackendEvent> observer, CancellationToken ct)
        {
            if (_eventCache.TryGetValue(query.Argument, out var cachedStream))
            {
                _logger.Debug("Found cached query {rawQuery} with {queryEventCount} events", query.Raw, cachedStream.Count);
                foreach (var cachedEvent in cachedStream)
                {
                    observer.OnNext(cachedEvent);
                }
            }
            else
            {
                _logger.Debug("Cache missed for {rawQuery}. Executing query and saving it to cache", query.Raw);
                var recorder = new RecordingObserver(observer);
                await _actualProvider.QueryAsync(query, recorder, ct);

                ct.ThrowIfCancellationRequested();
                _eventCache.TryAdd(query.Argument, recorder.Recorded);

                _logger.Verbose("Setting up cache expire handling in {expires}.", _expires);
                Timer timer = null;
                timer = new Timer(state =>
                {
                    _logger.Information("Cache for {rawQuery} has expired. Evicting from cache", query.Raw);
                    _eventCache.TryRemove(query.Argument, out _);
                    timer?.Dispose();
                }, query.Raw, _expires, new TimeSpan(-1));
            }
        }
Пример #6
0
        public static void RunServerStreaming(TestServiceGrpc.ITestServiceClient client)
        {
            Console.WriteLine("running server_streaming");

            var bodySizes = new List <int> {
                31415, 9, 2653, 58979
            };

            var request = StreamingOutputCallRequest.CreateBuilder()
                          .SetResponseType(PayloadType.COMPRESSABLE)
                          .AddRangeResponseParameters(bodySizes.ConvertAll(
                                                          (size) => ResponseParameters.CreateBuilder().SetSize(size).Build()))
                          .Build();

            var recorder = new RecordingObserver <StreamingOutputCallResponse>();

            client.StreamingOutputCall(request, recorder);

            var responseList = recorder.ToList().Result;

            foreach (var res in responseList)
            {
                Assert.AreEqual(PayloadType.COMPRESSABLE, res.Payload.Type);
            }
            CollectionAssert.AreEqual(bodySizes, responseList.ConvertAll((item) => item.Payload.Body.Length));
            Console.WriteLine("Passed!");
        }
Пример #7
0
        public static async Task FibExample(MathGrpc.IMathServiceClient stub)
        {
            var recorder = new RecordingObserver <Num>();

            stub.Fib(new FibArgs.Builder {
                Limit = 5
            }.Build(), recorder);
            List <Num> result = await recorder.ToList();

            Console.WriteLine("Fib Result: " + string.Join("|", result));
        }
Пример #8
0
        public void Fib()
        {
            var recorder = new RecordingObserver <Num>();

            client.Fib(new FibArgs.Builder {
                Limit = 6
            }.Build(), recorder);

            CollectionAssert.AreEqual(new List <long> {
                1, 1, 2, 3, 5, 8
            },
                                      recorder.ToList().Result.ConvertAll((n) => n.Num_));
        }
Пример #9
0
        public static void RunEmptyStream(TestServiceGrpc.ITestServiceClient client)
        {
            Console.WriteLine("running empty_stream");

            var recorder = new RecordingObserver <StreamingOutputCallResponse>();
            var inputs   = client.FullDuplexCall(recorder);

            inputs.OnCompleted();

            var responseList = recorder.ToList().Result;

            Assert.AreEqual(0, responseList.Count);

            Console.WriteLine("Passed!");
        }
Пример #10
0
        public IObserver <StreamingInputCallRequest> StreamingInputCall(IObserver <StreamingInputCallResponse> responseObserver)
        {
            var recorder = new RecordingObserver <StreamingInputCallRequest>();

            Task.Run(() => {
                int sum = 0;
                foreach (var req in recorder.ToList().Result)
                {
                    sum += req.Payload.Body.Length;
                }
                var response = StreamingInputCallResponse.CreateBuilder()
                               .SetAggregatedPayloadSize(sum).Build();
                responseObserver.OnNext(response);
                responseObserver.OnCompleted();
            });
            return(recorder);
        }
Пример #11
0
        public void StartCall(string methodName, CallSafeHandle call, CompletionQueueSafeHandle cq)
        {
            var asyncCall = new AsyncCallServer <TRequest, TResponse>(
                method.ResponseMarshaller.Serializer,
                method.RequestMarshaller.Deserializer);

            asyncCall.Initialize(call);

            var requestObserver = new RecordingObserver <TRequest>();
            var finishedTask    = asyncCall.ServerSideCallAsync(requestObserver);

            var request          = requestObserver.ToList().Result.Single();
            var responseObserver = new ServerStreamingOutputObserver <TRequest, TResponse>(asyncCall);

            handler(request, responseObserver);

            finishedTask.Wait();
        }
Пример #12
0
        public IObserver <Num> Sum(IObserver <Num> responseObserver)
        {
            var recorder = new RecordingObserver <Num>();

            Task.Factory.StartNew(() => {
                List <Num> inputs = recorder.ToList().Result;

                long sum = 0;
                foreach (Num num in inputs)
                {
                    sum += num.Num_;
                }

                responseObserver.OnNext(Num.CreateBuilder().SetNum_(sum).Build());
                responseObserver.OnCompleted();
            });
            return(recorder);
        }
        public void InitiateWalk_ReceivesTicks_AfterInitiationImmediately()
        {
            var randomWalkStrategy = new MarkovEquityStrategy();
            var randomWalk         = new EquitiesMarkovProcess(
                this._exchangeTickInitialiser,
                randomWalkStrategy,
                this._heartbeat,
                this._logger);
            var stream   = new ExchangeStream(new UnsubscriberFactory <EquityIntraDayTimeBarCollection>());
            var observer = new RecordingObserver <EquityIntraDayTimeBarCollection>(this._logger, 10);

            stream.Subscribe(observer);

            randomWalk.InitiateWalk(stream);

            Assert.AreEqual(observer.Buffer.Count, 1);

            randomWalk.TerminateWalk();
        }
Пример #14
0
        public static async Task DivManyExample(MathGrpc.IMathServiceClient stub)
        {
            var divArgsList = new List <DivArgs>
            {
                new DivArgs.Builder {
                    Dividend = 10, Divisor = 3
                }.Build(),
                new DivArgs.Builder {
                    Dividend = 100, Divisor = 21
                }.Build(),
                new DivArgs.Builder {
                    Dividend = 7, Divisor = 2
                }.Build()
            };

            var recorder = new RecordingObserver <DivReply>();
            var inputs   = stub.DivMany(recorder);

            divArgsList.Subscribe(inputs);
            var result = await recorder.ToList();

            Console.WriteLine("DivMany Result: " + string.Join("|", result));
        }
        public void InitiateWalk_WaitThenTerminateWalk_EnsuresNoMoreTicksTocked()
        {
            var randomWalk = new EquitiesMarkovProcess(
                new NasdaqInitialiser(),
                this._strategy,
                this._heartbeat,
                this._logger);
            var stream   = new ExchangeStream(new UnsubscriberFactory <EquityIntraDayTimeBarCollection>());
            var observer = new RecordingObserver <EquityIntraDayTimeBarCollection>(this._logger, 5);

            stream.Subscribe(observer);

            randomWalk.InitiateWalk(stream);

            var timeOut = DateTime.UtcNow.AddSeconds(5);

            while (observer.Buffer.Count < 2 && DateTime.UtcNow < timeOut)
            {
                // don't sleep the thread
            }

            randomWalk.TerminateWalk();

            Assert.AreEqual(observer.Buffer.Count, 2);

            var timerForStragglers = DateTime.UtcNow.AddSeconds(2);

            while (DateTime.UtcNow < timerForStragglers)
            {
                // don't sleep the thread
            }

            Assert.AreEqual(observer.Buffer.Count, 2);

            A.CallTo(() => this._logger.LogInformation("Random walk generator terminating walk"))
            .MustHaveHappenedOnceExactly();
        }
Пример #16
0
        public static void DivManyExample(MathGrpc.IMathServiceClient stub)
        {
            List<DivArgs> divArgsList = new List<DivArgs>
            {
                new DivArgs.Builder { Dividend = 10, Divisor = 3 }.Build(),
                new DivArgs.Builder { Dividend = 100, Divisor = 21 }.Build(),
                new DivArgs.Builder { Dividend = 7, Divisor = 2 }.Build()
            };

            var recorder = new RecordingObserver<DivReply>();

            var inputs = stub.DivMany(recorder);
            foreach (var input in divArgsList)
            {
                inputs.OnNext(input);
            }
            inputs.OnCompleted();

            Console.WriteLine("DivMany Result: " + string.Join("|", recorder.ToList().Result));
        }
Пример #17
0
        public static async Task DivManyExample(MathGrpc.IMathServiceClient stub)
        {
            var divArgsList = new List<DivArgs>
            {
                new DivArgs.Builder { Dividend = 10, Divisor = 3 }.Build(),
                new DivArgs.Builder { Dividend = 100, Divisor = 21 }.Build(),
                new DivArgs.Builder { Dividend = 7, Divisor = 2 }.Build()
            };

            var recorder = new RecordingObserver<DivReply>();
            var inputs = stub.DivMany(recorder);
            divArgsList.Subscribe(inputs);
            var result = await recorder.ToList();
            Console.WriteLine("DivMany Result: " + string.Join("|", result));
        }
Пример #18
0
        public void Fib()
        {
            var recorder = new RecordingObserver<Num>();
            client.Fib(new FibArgs.Builder { Limit = 6 }.Build(), recorder);

            CollectionAssert.AreEqual(new List<long>{1, 1, 2, 3, 5, 8},
                recorder.ToList().Result.ConvertAll((n) => n.Num_));
        }
Пример #19
0
        public static void RunServerStreaming(TestServiceGrpc.ITestServiceClient client)
        {
            Console.WriteLine("running server_streaming");

            var bodySizes = new List<int> { 31415, 9, 2653, 58979 };

            var request = StreamingOutputCallRequest.CreateBuilder()
                .SetResponseType(PayloadType.COMPRESSABLE)
                .AddRangeResponseParameters(bodySizes.ConvertAll(
                        (size) => ResponseParameters.CreateBuilder().SetSize(size).Build()))
                .Build();

            var recorder = new RecordingObserver<StreamingOutputCallResponse>();
            client.StreamingOutputCall(request, recorder);

            var responseList = recorder.ToList().Result;

            foreach (var res in responseList)
            {
                Assert.AreEqual(PayloadType.COMPRESSABLE, res.Payload.Type);
            }
            CollectionAssert.AreEqual(bodySizes, responseList.ConvertAll((item) => item.Payload.Body.Length));
            Console.WriteLine("Passed!");
        }
Пример #20
0
        public void DivMany()
        {
            List<DivArgs> divArgsList = new List<DivArgs>{
                new DivArgs.Builder { Dividend = 10, Divisor = 3 }.Build(),
                new DivArgs.Builder { Dividend = 100, Divisor = 21 }.Build(),
                new DivArgs.Builder { Dividend = 7, Divisor = 2 }.Build()
            };

            var recorder = new RecordingObserver<DivReply>();
            var requestObserver = client.DivMany(recorder);

            foreach (var arg in divArgsList)
            {
                requestObserver.OnNext(arg);
            }
            requestObserver.OnCompleted();

            var result = recorder.ToList().Result;

            CollectionAssert.AreEqual(new long[] {3, 4, 3}, result.ConvertAll((divReply) => divReply.Quotient));
            CollectionAssert.AreEqual(new long[] {1, 16, 1}, result.ConvertAll((divReply) => divReply.Remainder));
        }
Пример #21
0
        public static void RunEmptyStream(TestServiceGrpc.ITestServiceClient client)
        {
            Console.WriteLine("running empty_stream");

            var recorder = new RecordingObserver<StreamingOutputCallResponse>();
            var inputs = client.FullDuplexCall(recorder);
            inputs.OnCompleted();

            var responseList = recorder.ToList().Result;
            Assert.AreEqual(0, responseList.Count);

            Console.WriteLine("Passed!");
        }