示例#1
0
        public void LoadTestWithStopAndStartPush()
        {
            var intervalDataProvider = Substitute.For <IIntervalProvider>();
            var initialDataProvider  = Substitute.For <IInitialInfoProvider>();
            var initialBidAsk        = "initial BidAsk";

            initialDataProvider.Provide(BidAskTopic, Arg.Any <string>()).Returns(initialBidAsk);
            intervalDataProvider.GetInterval(BidAskTopic).Returns(1000);

            var lstValue = new Queue <KeyValuePair <string, string> >();

            for (var j = 1; j < 201; j++)
            {
                for (var i = 1; i < 10001; i++)
                {
                    lstValue.Enqueue(new KeyValuePair <string, string>($"InsIdIR0005D{i.ToString().PadLeft(5, '0')}",
                                                                       $"{CreateBidAsk(j)}"));
                }
            }

            var lstResult = new List <string>();
            var lstLoads  = new List <object>();
            var listener  = Substitute.For <IPushSubscriber>();

            listener.When(x => x.OnPush(Arg.Any <string>(), Arg.Any <IReadOnlyList <KeyValuePair <string, object> > >())).Do(
                x =>
            {
                var topic = (string)x.Args()[0];
                var value = (IEnumerable <KeyValuePair <string, object> >)x.Args()[1];
                foreach (var item in value)
                {
                    lstResult.Add(
                        $"rec topic:{topic} key:{item.Key} value:{item.Value} time:{DateTime.Now.TimeOfDay}");
                }
            });
            var stopwatch            = new Stopwatch();
            var intervalChangePusher = new Core.PeriodicalChangePusher(intervalDataProvider, initialDataProvider);

            intervalChangePusher.Register(listener, BidAskTopic);
            var rnd     = new Random();
            var counter = 0;

            stopwatch.Start();
            while (lstValue.Count > 0)
            {
                var keyValuePair = lstValue.Dequeue();
                intervalChangePusher.Put(BidAskTopic, keyValuePair.Key, keyValuePair.Value);
                counter++;
                if (counter == 100)
                {
                    Task.Delay(1000).Wait();
                    intervalChangePusher.StopPush(BidAskTopic);
                }

                if (counter % 79 == 0)
                {
                    lstLoads.Add(intervalChangePusher.Load(BidAskTopic,
                                                           $"InsIdIR0005D{rnd.Next(1, 10000).ToString().PadLeft(5, '0')}"));
                }
            }

            stopwatch.Stop();
            Task.Delay(2000).Wait();
            var count = lstResult.Count;

            Task.Delay(1000).Wait();
            intervalChangePusher.StartPush(BidAskTopic);
            Task.Delay(3000).Wait();

            Assert.AreEqual(count + 10000, lstResult.Count);
        }