public static Fake Create(IReadOnlyList <IEnumerable <ServerAction> > msgs,
                                      TimeSpan?ackDeadline = null, TimeSpan?ackExtendWindow = null,
                                      int?flowMaxElements  = null, int?flowMaxBytes         = null,
                                      int clientCount      = 1, int threadCount = 1, TimeSpan?writeAsyncPreDelay = null,
                                      bool useMsgAsId      = false)
            {
                var             scheduler       = new TestScheduler(threadCount: threadCount);
                TaskHelper      taskHelper      = scheduler.TaskHelper;
                List <DateTime> clientShutdowns = new List <DateTime>();
                var             msgEn           = msgs.GetEnumerator();
                var             clients         = Enumerable.Range(0, clientCount)
                                                  .Select(_ => new FakeSubscriberServiceApiClient(msgEn, scheduler, scheduler.Clock, taskHelper, writeAsyncPreDelay ?? TimeSpan.Zero, useMsgAsId))
                                                  .ToList();
                var settings = new SubscriberClient.Settings
                {
                    Scheduler           = scheduler,
                    AckDeadline         = ackDeadline,
                    AckExtensionWindow  = ackExtendWindow,
                    FlowControlSettings = new FlowControlSettings(flowMaxElements, flowMaxBytes),
                };

                Task Shutdown()
                {
                    clientShutdowns.Locked(() => clientShutdowns.Add(scheduler.Clock.GetCurrentDateTimeUtc()));
                    return(Task.FromResult(0));
                }

                var subs = new SubscriberClientImpl(new SubscriptionName("projectid", "subscriptionid"), clients, settings, Shutdown, taskHelper);

                return(new Fake
                {
                    Scheduler = scheduler,
                    Time0 = scheduler.Clock.GetCurrentDateTimeUtc(),
                    TaskHelper = taskHelper,
                    Subscribers = clients,
                    ClientShutdowns = clientShutdowns,
                    Subscriber = subs,
                });
            }
示例#2
0
 private static Task <SubscriberClient> CreateSubscriberClientAsync(SubscriptionName subscriptionName, SubscriberClient.ClientCreationSettings clientCreationSettings = null, SubscriberClient.Settings settings = null)
 {
     clientCreationSettings ??= new SubscriberClient.ClientCreationSettings();
     clientCreationSettings = clientCreationSettings.WithEmulatorDetection(EmulatorDetection.EmulatorOrProduction);
     return(SubscriberClient.CreateAsync(subscriptionName, clientCreationSettings, settings));
 }