public Task ScheduleQueueMessageAsync <T>(JsonSerializedMessage <T> message, DateTimeOffset scheduleEnqueueTimeUtc) where T : new()
 {
     return(ScheduleQueueMessagesAsync(new JsonSerializedMessage <T>[1]
     {
         message
     }, scheduleEnqueueTimeUtc));
 }
Ejemplo n.º 2
0
        public async Task ShouldSerializeAndSend_InCamelCase(
            [Frozen] Mock <IMessageTypeCache> cache,
            [Frozen] Mock <IConnection> connection,
            string typeId,
            MyMessage message,
            JsonConnection sut)
        {
            cache.Setup(x => x.GetTypeId(typeof(MyMessage)))
            .Returns(typeId);

            JsonSerializedMessage sent = null !;

            connection.Setup(x => x.SendAsync(It.IsAny <object>(), Cts.Token))
            .Callback <object, CancellationToken>((message, ct) => sent = (JsonSerializedMessage)message);

            await sut.SendAsync(message, Cts.Token);

            Assert.Equal(typeId, sent.TypeId);
            Assert.Equal(
                JsonSerializer.Serialize(
                    message,
                    new JsonSerializerOptions
            {
                PropertyNamingPolicy = JsonNamingPolicy.CamelCase
            }),
                sent.Json);
        }
 public Task SendTopicMessageAsync <T>(JsonSerializedMessage <T> message) where T : new()
 {
     return(SendTopicMessagesAsync(new JsonSerializedMessage <T>[1]
     {
         message
     }));
 }
Ejemplo n.º 4
0
        public bool InvokingJsonService()
        {
            string name    = Guid.NewGuid().ToString();
            var    message = new JsonSerializedMessage()
            {
                Name = name
            };

            var httpResponse = _navigation.GetEndpointDriver().PostJson(message);

            var response = httpResponse.ReadAsJson <JsonSerializedMessage>();

            return(response.Name == name);
        }
Ejemplo n.º 5
0
        public bool InvokingJsonService()
        {
            string name    = Guid.NewGuid().ToString();
            var    message = new JsonSerializedMessage()
            {
                Name = name
            };

            var response =
                _application.InvokeJson <JsonSerializedMessage>("http://localhost/fubu-testing/testpackage1/json/sendmessage", message);


            return(response.Name == name);
        }
Ejemplo n.º 6
0
        public async Task ShouldThrow_WhenDeserializationReturnsNull(
            [Frozen] Mock <IMessageTypeCache> cache,
            [Frozen] Mock <IConnection> connection,
            JsonSerializedMessage jsonMessage,
            JsonConnection sut)
        {
            jsonMessage.Json = "null";

            connection.Setup(x => x.ReceiveAsync(Cts.Token))
            .ReturnsAsync(jsonMessage);
            cache.Setup(x => x.GetTypeById(jsonMessage.TypeId))
            .Returns(typeof(MyMessage));

            await Assert.ThrowsAsync <InvalidOperationException>(
                async() => await sut.ReceiveAsync(Cts.Token));
        }
Ejemplo n.º 7
0
        public async Task ShouldDeserializeEnum_FromNumber(
            [Frozen] Mock <IMessageTypeCache> cache,
            [Frozen] Mock <IConnection> connection,
            JsonSerializedMessage jsonMessage,
            JsonConnection sut)
        {
            jsonMessage.Json = "{\"testEnum\":2}";

            connection.Setup(x => x.ReceiveAsync(Cts.Token))
            .ReturnsAsync(jsonMessage);
            cache.Setup(x => x.GetTypeById(jsonMessage.TypeId))
            .Returns(typeof(TestEnumMessage));

            var result = (TestEnumMessage)await sut.ReceiveAsync(Cts.Token);

            Assert.Equal(TestEnum.Two, result.TestEnum);
        }
        public void JsonSerializedMessage()
        {
            AssertSerializable <JsonSerializedMessage>();

            var sut = new JsonSerializedMessage("typeId", "json");

            Assert.Equal("typeId", sut.TypeId);
            Assert.Equal("json", sut.Json);

            sut = new JsonSerializedMessage
            {
                TypeId = "typeId",
                Json   = "json"
            };
            Assert.Equal("typeId", sut.TypeId);
            Assert.Equal("json", sut.Json);
        }
Ejemplo n.º 9
0
        public async Task ShouldSerializeEnum_ToString(
            [Frozen] Mock <IMessageTypeCache> cache,
            [Frozen] Mock <IConnection> connection,
            string typeId,
            JsonConnection sut)
        {
            cache.Setup(x => x.GetTypeId(typeof(TestEnumMessage)))
            .Returns(typeId);

            JsonSerializedMessage sent = null !;

            connection.Setup(x => x.SendAsync(It.IsAny <object>(), Cts.Token))
            .Callback <object, CancellationToken>((message, ct) => sent = (JsonSerializedMessage)message);

            await sut.SendAsync(new TestEnumMessage { TestEnum = TestEnum.Two }, Cts.Token);

            Assert.Equal(typeId, sent.TypeId);
            Assert.Equal("{\"testEnum\":\"Two\"}", sent.Json);
        }
Ejemplo n.º 10
0
        public async Task ShouldReceiveAndDeserialize_InCamelCase(
            [Frozen] Mock <IMessageTypeCache> cache,
            [Frozen] Mock <IConnection> connection,
            MyMessage message,
            JsonSerializedMessage jsonMessage,
            JsonConnection sut)
        {
            jsonMessage.Json = JsonSerializer.Serialize(message, new JsonSerializerOptions
            {
                PropertyNamingPolicy = JsonNamingPolicy.CamelCase
            });

            connection.Setup(x => x.ReceiveAsync(Cts.Token))
            .ReturnsAsync(jsonMessage);
            cache.Setup(x => x.GetTypeById(jsonMessage.TypeId))
            .Returns(typeof(MyMessage));

            var result = (MyMessage)await sut.ReceiveAsync(Cts.Token);

            Assert.Equal(message.Age, result.Age);
            Assert.Equal(message.LastName, result.LastName);
            Assert.Equal(message.List, result.List);
        }
Ejemplo n.º 11
0
        public async Task SendMessagesAsync <T>(
            IList <T> messages,
            string subject = "",
            CancellationToken cancellationToken = default)
        {
            var messageTypes = messages.Select(m => m?.GetType()).Distinct();

            EnsureMessagesAreMapped(messageTypes);

            var queuedMessages = new Queue <ServiceBusMessage>();
            var producerInfo   = _mappings[Named].Find(x => x.MessageType == typeof(T));

            foreach (var message in messages)
            {
                var queuedMessage = new JsonSerializedMessage <T>(message);

                if (!string.IsNullOrEmpty(producerInfo?.Subscription))
                {
                    queuedMessage.Subject = producerInfo.Subscription;
                }

                if (!string.IsNullOrEmpty(subject))
                {
                    queuedMessage.Subject = subject;
                }

                queuedMessages.Enqueue(queuedMessage);
            }

            var client = _connection.CreateClient(Named);

            var sender = client.CreateSender(producerInfo.QueueOrTopicName);

            // create a message batch that we can send
            // total number of messages to be sent to the Service Bus queue
            var messageCount = messages.Count;

            // while all messages are not sent to the Service Bus queue
            while (queuedMessages.Count > 0)
            {
                // start a new batch
                using var messageBatch = await sender.CreateMessageBatchAsync(cancellationToken);

                // add the first message to the batch
                if (messageBatch.TryAddMessage(queuedMessages.Peek()))
                {
                    // dequeue the message from the .NET queue once the message is added to the batch
                    queuedMessages.Dequeue();
                }
                else
                {
                    // if the first message can't fit, then it is too large for the batch
                    throw new Exception($"Message {messageCount - messages.Count} is too large and cannot be sent.");
                }

                // add as many messages as possible to the current batch
                while (queuedMessages.Count > 0 && messageBatch.TryAddMessage(queuedMessages.Peek()))
                {
                    // dequeue the message from the .NET queue as it has been added to the batch
                    queuedMessages.Dequeue();
                }

                // now, send the batch
                await sender.SendMessagesAsync(messageBatch, cancellationToken);

                // if there are any remaining messages in the .NET queue, the while loop repeats
            }
        }
Ejemplo n.º 12
0
 public void Send(JsonSerializedMessage message)
 {
     _server.NotifyReceived(Context.ConnectionId, message);
 }