Exemple #1
0
        public async Task SendAsync_ValidInputForDomain_SendsMessage(DomainOrigin domainOrigin, string queueName)
        {
            // Arrange
            var serviceBusSenderMock          = new Mock <ServiceBusSender>();
            var serviceBusSessionReceiverMock = new Mock <ServiceBusSessionReceiver>();

            await using var mockedServiceBusClient = new MockedServiceBusClient(
                            queueName,
                            string.Empty,
                            serviceBusSenderMock.Object,
                            serviceBusSessionReceiverMock.Object);

            var serviceBusClientFactory = new Mock <IServiceBusClientFactory>();

            serviceBusClientFactory
            .Setup(x => x.Create())
            .Returns(mockedServiceBusClient);

            await using var messageBusFactory = new AzureServiceBusFactory(serviceBusClientFactory.Object);
            var target = new DequeueNotificationSender(messageBusFactory, _testConfig);

            var dataAvailable = new DequeueNotificationDto(
                "fake_value",
                new ActorIdDto(Guid.NewGuid()));

            // Act
            await target.SendAsync("fake_value", dataAvailable, domainOrigin).ConfigureAwait(false);

            // Assert
            serviceBusSenderMock.Verify(x => x.SendMessageAsync(It.IsAny <ServiceBusMessage>(), default), Times.Once);
        }
Exemple #2
0
 private static DataAvailableNotificationDto CreateDto(DomainOrigin origin, string messageType, string recipient)
 {
     return(new DataAvailableNotificationDto(
                Guid.NewGuid(),
                new GlobalLocationNumberDto(string.IsNullOrWhiteSpace(recipient) ? GlnHelper.CreateRandomGln() : recipient),
                new MessageTypeDto(string.IsNullOrWhiteSpace(messageType) ? "timeseries" : messageType),
                origin,
                true,
                1));
 }
        public void Map_ContentType_ReturnsWeight(DomainOrigin domainOrigin, int expectedWeight)
        {
            // arrange
            var target = new WeightCalculatorDomainService();

            // act
            var actual = target.CalculateMaxWeight(domainOrigin);

            // assert
            Assert.Equal(new Weight(expectedWeight), actual);
        }
 public Bundle(
     Uuid bundleId,
     ActorId recipient,
     DomainOrigin origin,
     ContentType contentType,
     IEnumerable <Uuid> notificationIds,
     IEnumerable <string> documentTypes)
 {
     BundleId        = bundleId;
     Origin          = origin;
     ContentType     = contentType;
     Recipient       = recipient;
     NotificationIds = notificationIds;
     DocumentTypes   = documentTypes;
     ProcessId       = new ProcessId(bundleId, recipient);
 }
        public Weight CalculateMaxWeight(DomainOrigin domainOrigin)
        {
            switch (domainOrigin)
            {
            case DomainOrigin.Aggregations:
            case DomainOrigin.TimeSeries:
            case DomainOrigin.MeteringPoints:
            case DomainOrigin.MarketRoles:
            case DomainOrigin.Charges:
                return(new Weight(50 * 1024));

            case DomainOrigin.Unknown:
                throw new InvalidOperationException($"Mapping of enum {nameof(DomainOrigin)}.{nameof(DomainOrigin.Unknown)} to type {nameof(Weight)} is undefined.");

            default:
                throw new ArgumentOutOfRangeException(nameof(domainOrigin), domainOrigin, null);
            }
        }
 public DataAvailableNotification(
     Uuid notificationId,
     ActorId recipient,
     ContentType contentType,
     DomainOrigin origin,
     SupportsBundling supportsBundling,
     Weight weight,
     SequenceNumber sequenceNumber,
     DocumentType documentType)
 {
     NotificationId   = notificationId;
     Recipient        = recipient;
     ContentType      = contentType;
     Origin           = origin;
     SupportsBundling = supportsBundling;
     Weight           = weight;
     SequenceNumber   = sequenceNumber;
     DocumentType     = documentType;
 }
Exemple #7
0
        public async Task <DataBundleResponseDto?> SendAsync(
            DataBundleRequestDto dataBundleRequestDto,
            DomainOrigin domainOrigin)
        {
            ArgumentNullException.ThrowIfNull(dataBundleRequestDto, nameof(dataBundleRequestDto));

            var bytes = _requestBundleParser.Parse(dataBundleRequestDto);

            var sessionId = dataBundleRequestDto.RequestId.ToString();

            var replyQueue  = GetReplyQueueName(domainOrigin);
            var targetQueue = GetQueueName(domainOrigin);

            var serviceBusMessage = new ServiceBusMessage(bytes)
            {
                SessionId        = sessionId,
                ReplyToSessionId = sessionId,
                ReplyTo          = replyQueue,
                TimeToLive       = _peekRequestConfig.PeekTimeout ?? _defaultTimeout
            }.AddRequestDataBundleIntegrationEvents(dataBundleRequestDto.IdempotencyId);

            var serviceBusClient = _messageBusFactory.GetSenderClient(targetQueue);

            await serviceBusClient
            .PublishMessageAsync <ServiceBusMessage>(serviceBusMessage)
            .ConfigureAwait(false);

            await using var receiverMessageBus = await _messageBusFactory
                                                 .GetSessionReceiverClientAsync(replyQueue, sessionId)
                                                 .ConfigureAwait(false);

            var response = await receiverMessageBus
                           .ReceiveMessageAsync <ServiceBusMessage>(_peekRequestConfig.PeekTimeout ?? _defaultTimeout)
                           .ConfigureAwait(false);

            if (response == null)
            {
                return(null);
            }

            return(_responseBundleParser.Parse(response.Body.ToArray()));
        }
Exemple #8
0
 private static IEnumerable <DataAvailableNotification> CreateInfinite(
     ActorId recipient,
     long initialSequenceNumber,
     DomainOrigin domainOrigin = DomainOrigin.Charges,
     string contentType        = "default_content_type",
     bool supportsBundling     = true,
     int weight = 1)
 {
     while (true)
     {
         yield return(new DataAvailableNotification(
                          new Uuid(Guid.NewGuid()),
                          recipient,
                          new ContentType(contentType),
                          domainOrigin,
                          new SupportsBundling(supportsBundling),
                          new Weight(weight),
                          new SequenceNumber(initialSequenceNumber++),
                          new DocumentType("RSM??")));
     }
 }
Exemple #9
0
        private string GetQueueName(DomainOrigin domainOrigin)
        {
            switch (domainOrigin)
            {
            case DomainOrigin.Charges:
                return(_peekRequestConfig.ChargesQueue);

            case DomainOrigin.TimeSeries:
                return(_peekRequestConfig.TimeSeriesQueue);

            case DomainOrigin.Aggregations:
                return(_peekRequestConfig.AggregationsQueue);

            case DomainOrigin.MarketRoles:
                return(_peekRequestConfig.MarketRolesQueue);

            case DomainOrigin.MeteringPoints:
                return(_peekRequestConfig.MeteringPointsQueue);

            default:
                throw new ArgumentOutOfRangeException(nameof(domainOrigin), domainOrigin, null);
            }
        }
Exemple #10
0
        public static DataAvailableNotificationDto CreateOriginDto(DomainOrigin origin, string messageType, string recipient)
        {
            var dto = CreateDto(origin, messageType, recipient);

            return(dto);
        }
        private static DataAvailableNotificationDto CreateDto(DomainOrigin origin, string messageType, string recipient)
        {
            var msgDto = DataAvailableNotificationFactory.CreateOriginDto(origin, messageType, recipient);

            return(msgDto);
        }
Exemple #12
0
        public Task SendAsync(string correlationId, DequeueNotificationDto dequeueNotificationDto, DomainOrigin domainOrigin)
        {
            ArgumentNullException.ThrowIfNull(dequeueNotificationDto, nameof(dequeueNotificationDto));

            var queueName        = GetQueueName(domainOrigin);
            var serviceBusSender = _messageBusFactory.GetSenderClient(queueName);

#pragma warning disable CS0618
            var marketOperator = dequeueNotificationDto.MarketOperator is LegacyActorIdDto legacyActorIdDto
#pragma warning restore CS0618
                ? legacyActorIdDto.LegacyValue
                : dequeueNotificationDto.MarketOperator.Value.ToString();

            var contract = new DequeueContract
            {
                DataAvailableNotificationReferenceId = dequeueNotificationDto.DataAvailableNotificationReferenceId,
                MarketOperator = marketOperator
            };

            var dequeueMessage = new ServiceBusMessage(new BinaryData(contract.ToByteArray()))
                                 .AddDequeueIntegrationEvents(correlationId);

            return(serviceBusSender.PublishMessageAsync <ServiceBusMessage>(dequeueMessage));
        }