Пример #1
0
        public async Task DeliveryContext_Current_differs_per_async_context()
        {
            var barrier = new Barrier(2);

            string commandInTask1 = null;

            string commandInTask2 = null;

            await Task.Run(() =>
            {
                using (DeliveryContext.Establish(
                           new CommandDelivery <string>("", idempotencyToken: "one")))
                {
                    barrier.SignalAndWait(1000);
                    commandInTask1 = DeliveryContext.Current.Delivery.IdempotencyToken;
                }
            });

            await Task.Run(() =>
            {
                using (DeliveryContext.Establish(
                           new CommandDelivery <string>("", idempotencyToken: "two")))
                {
                    barrier.SignalAndWait(1000);
                    commandInTask2 = DeliveryContext.Current.Delivery.IdempotencyToken;
                }
            });

            commandInTask1.Should().Be("one");
            commandInTask2.Should().Be("two");
        }
Пример #2
0
        void DeliverWithDelay(DeliveryContext <GrpcTransportMessage> context)
        {
            Task.Run(async() =>
            {
                var delayed = false;
                try
                {
                    var delay = context.Message.EnqueueTime.Value - DateTime.UtcNow;
                    if (delay > TimeSpan.Zero)
                    {
                        _metrics.DelayedMessageCount.Add();
                        delayed = true;

                        await Task.Delay(delay, Stopping).ConfigureAwait(false);
                    }

                    await _channel.Writer.WriteAsync(context, Stopping).ConfigureAwait(false);
                    _metrics.MessageCount.Add();
                }
                catch (OperationCanceledException)
                {
                }
                catch (Exception exception)
                {
                    LogContext.Error?.Log(exception, "Message delivery faulted: {Queue}", _name);
                }
                finally
                {
                    if (delayed)
                    {
                        _metrics.DelayedMessageCount.Remove();
                    }
                }
            }, context.CancellationToken);
        }
Пример #3
0
        public async Task SeedAsync(DeliveryContext context, IWebHostEnvironment webHostEnvironment)
        {
            var policy = CreatePolicy(nameof(DeliveryContextSeed));
            await policy.ExecuteAsync(async() =>
            {
                using (context)
                {
                    if (!context.DeliveryStatuses.Any())
                    {
                        context.DeliveryStatuses.AddRange(GetPredefinedDeliveryStatus());
                        await context.SaveChangesAsync();
                    }

                    //TODO: Only for demo purposes
                    if (!context.Clients.Any())
                    {
                        var identityGuid = Guid.NewGuid();
                        var client       = new Client(identityGuid, "ClientFirstName", "ClientLastName", "+123456789");
                        context.Clients.Add(client);
                        await context.SaveChangesAsync();
                    }

                    await context.SaveEntitiesAsync();
                }
            });
        }
Пример #4
0
        public void Token_algorithm_should_not_change()
        {
            // if this test fails then it indicates that the sequential etag algorithm has changed
            var etagSequenceProducedByPreviousVersion = new[]
            {
                "7sNkA6fd+WqICHfZpSpca2bETG9e3AV0gwZP5/6zkVA=", "KJYYEMLms/h7kNhd8bmrrEhuGWFYAyMCr9UGtPR9kTY=",
                "SWS6CjQM9taGbF3eYnG6xYrd5gkQyKa9b5KJg3o2YfQ=", "LtN9an7jOaKR3LShgocAH2edLzj8FGTuQ8z9wvMFzjg=",
                "Yl/xj5eSYvywL8basZi0hsBYLWmAki6BG9KfbnpuYuc=", "qUEIZJOFwsI29ISwn25y2kstLOx//NSfVc76hY+KsEM=",
                "2UDKYnVH6sBfnEn0mAXMb1clOayxhqA4wjLoXRYhuV0=", "vzQI9iIC6sQqD/Dk0D3ugVyjrvDeM7FoH+v2Y9H/emA=",
                "iCqOdnu3UnIN68fVQyqZd9AD/PpW8+Qc2fkGT+9PUkc=", "EkHe5MMDkZkJiapyKEfSbKG6XuWhhZZLtD2UUlUML54="
            };

            var newlyGeneratedSequence = new List <string>();

            var token = "some specific token";

            using (var ctx = DeliveryContext.Establish(new CommandDelivery <string>("hello", idempotencyToken: "some specific value")))
            {
                Enumerable.Range(1, 10).ToList().ForEach(_ => newlyGeneratedSequence.Add(ctx.NextToken(token)));
            }

            newlyGeneratedSequence
            .Should()
            .BeEquivalentTo(etagSequenceProducedByPreviousVersion);
        }
Пример #5
0
        public void GetCategories_WhenCalledWithInMemoryDataContext_ReturnsExpectedResult()
        {
            // arrange
            var inMemoryDataContextOptions = new DbContextOptionsBuilder <DeliveryContext>()
                                             .UseInMemoryDatabase(databaseName: "Test_With_In_Memory_Database")
                                             .Options;

            // act
            var DeliveryContext = new DeliveryContext(inMemoryDataContextOptions);
            // Assign values to category object and this object store in memory database
            var category = new Category()
            {
                Name = "Test1", Description = "Description Test1", RestaurantID = 1
            };

            DeliveryContext.Categories.Add(category);
            DeliveryContext.SaveChanges();

            // Initialize CategoriesController and put our inMemory context to its constructor
            var controller = new CategoriesController(DeliveryContext);

            //assert
            //Getting list of categories
            var returnData = controller.GetCategories();
            // We confirm here the return list is of type category + confirm data will return back or not
            List <Category> returnValue = Assert.IsType <List <Category> >(returnData.Result.Value);

            Assert.True(returnValue.FirstOrDefault().Name == "Test1");
        }
Пример #6
0
        public void GetOrderAssignment_WhenCalledWithInMemoryDataContext_ReturnsExpectedResult()
        {
            // arrange
            var inMemoryDataContextOptions = new DbContextOptionsBuilder <DeliveryContext>()
                                             .UseInMemoryDatabase(databaseName: "Test_With_In_Memory_Database")
                                             .Options;


            var DeliveryContext = new DeliveryContext(inMemoryDataContextOptions);
            // act
            var list = new List <OrderAssignmentReason>()
            {
                new OrderAssignmentReason {
                    Reason = "Test1", Description = "Test1 Description"
                },
                new OrderAssignmentReason {
                    Reason = "Test2", Description = "Test2 Description"
                }
            };

            DeliveryContext.OrderAssignmentReasons.AddRange(list);
            DeliveryContext.SaveChanges();

            // Initialize OrderAssignmentReasonsController -> inMemory context to its constructor
            var controller = new OrderAssignmentReasonsController(DeliveryContext);

            //assert
            //Getting list of OrderAssignmentReasons
            var returnData = controller.GetOrderAssignmentReasons();
            // We confirm here the return list is of type OrderAssignmentReason and also confirm data will return back or not
            List <OrderAssignmentReason> returnValue = Assert.IsType <List <OrderAssignmentReason> >(returnData.Result.Value);

            // Confirming here the count should be two as we are adding above two objects in inMemory database
            Assert.True(returnValue.Count == 2);
        }
Пример #7
0
        public void PutOrder_WhenCalledWithInMemoryDataContext_ReturnsExpectedResult()
        {
            // arrange
            var inMemoryDataContextOptions = new DbContextOptionsBuilder <DeliveryContext>()
                                             .UseInMemoryDatabase(databaseName: "Test_With_In_Memory_Database")
                                             .Options;

            // act
            var DeliveryContext = new DeliveryContext(inMemoryDataContextOptions);
            // Assign values to Orders object and this object store in memory database
            var order = new Order()
            {
                ID = 1, CustomerID = 1, DriverID = 1, LocationID = 1, PreparerID = 1
            };

            DeliveryContext.Orders.Add(order);
            DeliveryContext.SaveChanges();

            // Initialize OrdersController and put our inMemory context to its constructor
            var controller = new OrdersController(DeliveryContext);

            //assert
            //passing object for post method
            var returnData = controller.PutOrder(1, order);

            // We are confirming here the PutOrder() method should return nothing as no content.
            Assert.NotNull(returnData.Result);
        }
        public void Save()
        {
            var options = new DbContextOptionsBuilder <DeliveryContext>()
                          .UseInMemoryDatabase(databaseName: "test")
                          .Options;

            var obj = new DeliveryServiceModel()
            {
                BaseCost        = 100,
                Distance        = 30,
                Floor           = 4,
                GoldRated       = false,
                HasCoupen       = false,
                NewCustomer     = false,
                WeekendDelivery = false
            };

            using (var context = new DeliveryContext(options))
            {
                var adapter = new DeliveryServiceAdapter(context);
                var results = adapter.Save(obj);

                Assert.IsNotNull(results.id);
            }
        }
Пример #9
0
        public void CheckDeleteAddress_WhenCalledWithInMemoryDataContext_ReturnsExpectedResult()
        {
            // arrange
            var inMemoryDataContextOptions = new DbContextOptionsBuilder <DeliveryContext>()
                                             .UseInMemoryDatabase(databaseName: "Test_With_In_Memory_Database")
                                             .Options;

            // act
            var DeliveryContext = new DeliveryContext(inMemoryDataContextOptions);
            // Assign values to address object -> this object store in memory database
            var address = new Address()
            {
                Address1 = "Test1", Address2 = "Test2", City = "Lahore", State = "Punjab", ZipCode = "54000"
            };

            DeliveryContext.Addresses.Add(address);
            DeliveryContext.SaveChanges();

            // Initialize AddressesController and put our inMemory context to its constructor
            var controller = new AddressesController(DeliveryContext);

            //ASSERT
            //check Addresses is exist or not
            var returnData = controller.DeleteAddress(1);

            // We are confirming here the deleted object is of type address.
            Assert.IsType <Address>(returnData.Result.Value);
        }
Пример #10
0
        public void CheckCategoryIsExist_WhenCalledWithInMemoryDataContext_ReturnsExpectedResult()
        {
            //Setup in memory database
            var inMemoryDataContextOptions = new DbContextOptionsBuilder <DeliveryContext>()
                                             .UseInMemoryDatabase(databaseName: "Test_With_In_Memory_Database")
                                             .Options;

            // we need to seed the in-memory test database
            var DeliveryContext = new DeliveryContext(inMemoryDataContextOptions);
            // Assign values to category object and this object store in memory database
            var category = new Category()
            {
                Name = "Test1", Description = "Description Test1", RestaurantID = 1
            };

            DeliveryContext.Categories.Add(category);
            DeliveryContext.SaveChanges();

            // Initialize CategoriesController and put our inMemory context to its constructor
            var controller = new CategoriesController(DeliveryContext);

            //assert
            //check category is exist or not
            var returnData = controller.CategoryExists(1);  //auto-generate from teh DB is 1 since we only created 1 record

            // We are confirming here the category is exist or not, actually CategoryExists return as true or false.
            Assert.True(returnData == true);
        }
Пример #11
0
        public void Nested_command_contexts_maintain_independent_token_sequences()
        {
            var sourceToken  = Guid.NewGuid().ToString();
            var outerCommand = new CommandDelivery <string>("");

            var sequenceWithoutInnerContext = new List <string>();
            var sequenceWithInnerContext    = new List <string>();

            using (var context = DeliveryContext.Establish(outerCommand))
            {
                sequenceWithoutInnerContext.Add(context.NextToken(sourceToken));
                sequenceWithoutInnerContext.Add(context.NextToken(sourceToken));
            }

            using (var outerContext = DeliveryContext.Establish(outerCommand))
            {
                sequenceWithInnerContext.Add(outerContext.NextToken(sourceToken));

                using (var innerCtx = DeliveryContext.Establish(
                           new CommandDelivery <object>(
                               new object(), idempotencyToken: Guid.NewGuid().ToString())))
                {
                    innerCtx.NextToken(Guid.NewGuid().ToString());
                }

                sequenceWithInnerContext.Add(outerContext.NextToken(sourceToken));
            }

            sequenceWithInnerContext.Should().Equal(sequenceWithoutInnerContext);
        }
Пример #12
0
 public DeliveryService(DeliveryContext context, HttpClient httpClient)
 {
     this.context = context;
     _apiClient   = httpClient;
     //_documenturl = $"{_settings.Value.DocumentUrl}/api/v1/document";
     _documenturl = "https://localhost:5001/api/v1/document";
     //_forwardingurl = $"{_settings.Value.ForwardingUrl}/api/v1/forwardings";
 }
Пример #13
0
 public Task Deliver(DeliveryContext <InMemoryTransportMessage> context)
 {
     return(context.WasAlreadyDelivered(this)
         ? Task.CompletedTask
         : context.Message.Delay > TimeSpan.Zero
             ? DeliverWithDelay(context)
             : _executor.Push(() => DispatchMessage(context), context.CancellationToken));
 }
Пример #14
0
 public TransactionBehaviour(DeliveryContext dbContext,
                             IDeliveryIntegrationEventService deliveryIntegrationEventService,
                             ILogger <TransactionBehaviour <TRequest, TResponse> > logger)
 {
     _dbContext = dbContext ?? throw new ArgumentException(nameof(DeliveryContext));
     _deliveryIntegrationEventService = deliveryIntegrationEventService ??
                                        throw new ArgumentException(nameof(deliveryIntegrationEventService));
     _logger = logger ?? throw new ArgumentException(nameof(ILogger));
 }
Пример #15
0
 public WebhookEvent(WebhookEventType type, WebhookEventSource source, long timestamp, string mode, string webhookEventId, DeliveryContext deliveryContext)
 {
     Type            = type;
     Source          = source;
     Timestamp       = timestamp;
     Mode            = mode;
     WebhookEventId  = webhookEventId;
     DeliveryContext = deliveryContext;
 }
Пример #16
0
        public void peula()
        {
            using (var ctx = new DeliveryContext())
            {
                //var deliver = new Delivery() { Code = 1 };

                //ctx.Deliveries.Add(deliver);
                ctx.SaveChanges();
            }
        }
Пример #17
0
        public async Task Deliver(DeliveryContext <GrpcTransportMessage> context, string routingKey)
        {
            if (_children.TryGetValue("#", out var hashNode))
            {
                await hashNode.Deliver(context, default).ConfigureAwait(false);
            }

            if (string.IsNullOrWhiteSpace(routingKey))
            {
                await _sinks.ForEachAsync(async sink =>
                {
                    if (context.WasAlreadyDelivered(sink))
                    {
                        return;
                    }

                    await sink.Deliver(context).ConfigureAwait(false);

                    context.Delivered(sink);
                }).ConfigureAwait(false);
            }
            else
            {
                var separator = routingKey.IndexOf('.');
                if (separator < 0)
                {
                    if (_children.TryGetValue("*", out var starNode))
                    {
                        await starNode.Deliver(context, default).ConfigureAwait(false);
                    }

                    if (_children.TryGetValue(routingKey, out var childNode))
                    {
                        await childNode.Deliver(context, default).ConfigureAwait(false);
                    }
                }
                else
                {
                    var word = routingKey.Substring(0, separator);

                    var remaining = routingKey.Substring(separator + 1);

                    if (_children.TryGetValue("*", out var starNode))
                    {
                        await starNode.Deliver(context, remaining).ConfigureAwait(false);
                    }

                    if (_children.TryGetValue(word, out var childNode))
                    {
                        await childNode.Deliver(context, remaining).ConfigureAwait(false);
                    }
                }
            }
        }
Пример #18
0
        static void Main(string[] args)
        {
            using (var ctx = new DeliveryContext())
            {
                var adult = new Adult()
                {
                    Id = "123456"
                };

                ctx.Adults.Add(adult);
                ctx.SaveChanges();
            }


            //			Accord.Math.Random.Generator.Seed = 0;

            //            // A common desire when doing clustering is to attempt to find how to
            //            // weight the different components / columns of a dataset, giving them
            //            // different importances depending on the end goal of the clustering task.

            //            // Declare some observations
            //            double[][] observations =
            //            {
            //    new double[] { -5, -2, -1 },
            //    new double[] { -5, -5, -6 },
            //    new double[] {  2,  1,  1 },
            //    new double[] {  1,  1,  2 },
            //    new double[] {  1,  2,  2 },
            //    new double[] {  3,  1,  2 },
            //    new double[] { 11,  5,  4 },
            //    new double[] { 15,  5,  6 },
            //    new double[] { 10,  5,  6 },
            //};

            //            // Create a new K-Means algorithm
            //            KMeans kmeans = new KMeans(k: 3)
            //            {
            //                // For example, let's say we would like to consider the importance of
            //                // the first column as 0.1, the second column as 0.7 and the third 0.9
            //                Distance = new WeightedSquareEuclidean(new double[] { 0.1, 0.7, 1.1 })
            //            };

            //            // Compute and retrieve the data centroids
            //            var clusters = kmeans.Learn(observations);

            //            // Use the centroids to parition all the data
            //            int[] labels = clusters.Decide(observations);
            //           // for(int i=0;i<labels.Length;i++)
            //                foreach(var a in clusters)
            //				{
            //                  //  Console.WriteLine(a.);
            //                }
        }
Пример #19
0
        public void Init()
        {
            context     = TestDataContext.GetContextWithData();
            appSettings = new Mock <IOptions <AppSettings> >();

            appSettings.SetupGet(x => x.Value)
            .Returns(new AppSettings
            {
                Key = "This_Is_My_Secret_Key"
            });

            userService = new UserService(appSettings.Object, context);
        }
Пример #20
0
        public Task Deliver(DeliveryContext <InMemoryTransportMessage> context)
        {
            if (context.WasAlreadyDelivered(this))
            {
                return(Task.FromResult(false));
            }

            Interlocked.Increment(ref _queueDepth);

            Task.Factory.StartNew(() => DispatchMessage(context.Package), _cancellationToken.Token, TaskCreationOptions.None, _scheduler);

            return(Task.FromResult(true));
        }
Пример #21
0
        async Task DispatchMessage(DeliveryContext <InMemoryTransportMessage> context)
        {
            await _consumer.Task.OrCanceled(context.CancellationToken).ConfigureAwait(false);

            try
            {
                await _consumers.ForEachAsync(x => x.Consume(context.Message, context.CancellationToken)).ConfigureAwait(false);
            }
            // ReSharper disable once EmptyGeneralCatchClause
            catch
            {
            }
        }
Пример #22
0
        public void A_series_of_calls_to_NextToken_produces_a_different_token_per_call()
        {
            var token = Guid.NewGuid().ToString();

            var tokens = new List <string>();

            using (var ctx = DeliveryContext.Establish(new CommandDelivery <string>("hi!")))
            {
                Enumerable.Range(1, 100).ToList().ForEach(_ => tokens.Add(ctx.NextToken(token)));
            }

            tokens.Distinct().Should().HaveCount(100);
        }
 public static void Main(string[] args)
 {
     CreateWebHostBuilder(args).Build().Run();
     using (DeliveryContext db = new DeliveryContext())
     {
         var users = db.Users.ToList();
         Console.WriteLine("List of objects:");
         foreach (User u in users)
         {
             Console.WriteLine($"{u.Id}.{u.Email} - {u.Password}-{u.FirstName}-{u.LastName}-{u.Phone}-{u.SubscriptionStatus}-{u.IdRole}-{u.IdCarrier}-{u.IdCompany}");
         }
     }
     Console.ReadKey();
 }
        public async Task Deliver(DeliveryContext <GrpcTransportMessage> context)
        {
            await _sinks.ForEachAsync(async sink =>
            {
                if (context.WasAlreadyDelivered(sink))
                {
                    return;
                }

                await sink.Deliver(context).ConfigureAwait(false);

                context.Delivered(sink);
            }).ConfigureAwait(false);
        }
Пример #25
0
        public async Task Deliver(DeliveryContext <InMemoryTransportMessage> context)
        {
            foreach (IMessageSink <InMemoryTransportMessage> sink in _sinks)
            {
                if (context.WasAlreadyDelivered(sink))
                {
                    continue;
                }

                await sink.Deliver(context).ConfigureAwait(false);

                context.Delivered(sink);
            }
        }
        public DeliveryIntegrationEventService(IEventBus eventBus,
                                               DeliveryContext deliveryContext,
                                               IntegrationEventLogContext eventLogContext,
                                               Func <DbConnection, IIntegrationEventLogService> integrationEventLogServiceFactory,
                                               ILogger <DeliveryIntegrationEventService> logger)
        {
            _deliveryContext = deliveryContext ?? throw new ArgumentNullException(nameof(deliveryContext));
            var integrationEventLogServiceFactory1 = integrationEventLogServiceFactory ??
                                                     throw new ArgumentNullException(
                                                               nameof(integrationEventLogServiceFactory));

            _eventBus        = eventBus ?? throw new ArgumentNullException(nameof(eventBus));
            _eventLogService = integrationEventLogServiceFactory1(_deliveryContext.Database.GetDbConnection());
            _logger          = logger ?? throw new ArgumentNullException(nameof(logger));
        }
Пример #27
0
        public static DeliveryContext GetContextWithData()
        {
            var options = new DbContextOptionsBuilder <DeliveryContext>()
                          .UseInMemoryDatabase(Guid.NewGuid().ToString())
                          .Options;

            var context = new DeliveryContext(options);

            var deliverys = DataGenerator.GetDeliveries();

            context.Users.AddRange(DataGenerator.GetUsers());
            context.Deliveries.AddRange(deliverys);

            context.SaveChanges();

            return(context);
        }
        public async Task Deliver(DeliveryContext <GrpcTransportMessage> context)
        {
            if (_sinks.TryGetValue(context.Message.RoutingKey ?? "", out Connectable <IMessageSink <GrpcTransportMessage> > forKey))
            {
                await forKey.ForEachAsync(async sink =>
                {
                    if (context.WasAlreadyDelivered(sink))
                    {
                        return;
                    }

                    await sink.Deliver(context).ConfigureAwait(false);

                    context.Delivered(sink);
                }).ConfigureAwait(false);
            }
        }
Пример #29
0
        Task DeliverWithDelay(DeliveryContext <InMemoryTransportMessage> context)
        {
            Task.Run(async() =>
            {
                try
                {
                    await Task.Delay(context.Message.Delay.Value, _source.Token).ConfigureAwait(false);

                    await _executor.Push(() => DispatchMessage(context), _source.Token).ConfigureAwait(false);
                }
                catch (OperationCanceledException)
                {
                }
            }, context.CancellationToken);

            return(Task.CompletedTask);
        }
Пример #30
0
        public static void Initialize(IServiceProvider serviceProvider)
        {
            using (var context = new DeliveryContext(
                       serviceProvider.GetRequiredService <DbContextOptions <DeliveryContext> >()))
            {
                if (context.Deliveries.Any())
                {
                    return;   // Data was already seeded
                }

                var deliveries = GetDeliveries();
                context.Users.AddRange(GetUsers());
                context.Deliveries.AddRange(deliveries);

                context.SaveChanges();
            }
        }
Пример #31
0
 public DeliveryStore(DeliveryContext context)
 {
     this.context = context;
 }