public InvokeHandlerContext(MessageHandler handler, string messageId, string replyToAddress, Dictionary<string, string> headers, MessageMetadata messageMetadata, object messageBeingHandled, SynchronizedStorageSession storageSession, IBehaviorContext parentContext)
     : base(messageId, replyToAddress, headers, parentContext)
 {
     MessageHandler = handler;
     Headers = headers;
     MessageBeingHandled = messageBeingHandled;
     MessageMetadata = messageMetadata;
     Set(storageSession);
 }
        public void Outgoing_databus_properties_should_be_dehydrated()
        {
            var metadata = new MessageMetadata();
            var message = new LogicalMessage(metadata, new MessageWithDataBusProperty
            {
                DataBusProperty = new DataBusProperty<string>("test")
            }, new Dictionary<string, string>(), null);

            Invoke(message);

            dataBus.AssertWasCalled(
                x => x.Put(Arg<Stream>.Is.Anything, Arg<TimeSpan>.Is.Equal(TimeSpan.MaxValue)));
        }
        public void Time_to_live_should_be_passed_on_the_databus()
        {
            var metadata = new MessageMetadata(timeToBeReceived: TimeSpan.FromMinutes(1));
            var message = new LogicalMessage(metadata, new MessageWithExplicitTimeToLive
            {
                DataBusProperty = new DataBusProperty<string>("test")
            }, new Dictionary<string, string>(), null);

            Invoke(message);
           
            dataBus.AssertWasCalled(
                x => x.Put(Arg<Stream>.Is.Anything, Arg<TimeSpan>.Is.Equal(TimeSpan.FromMinutes(1))));
        }
        public void Should_not_blow_up()
        {
            var metadata = new MessageMetadata(timeToBeReceived: TimeSpan.FromDays(1));
            var message = new LogicalMessage(metadata, new MessageWithNullDataBusProperty(), new Dictionary<string, string>(), null);
            var context = new OutgoingContext(null,new SendOptions(Address.Parse("MyEndpoint")), message);

            
            using (var stream = new MemoryStream())
            {
                new BinaryFormatter().Serialize(stream, "test");
                stream.Position = 0;

                sendBehavior.Invoke(context, () => { });            
            }
        }
Example #5
0
        public virtual void TestSetPropertiesKey()
        {
            var builder = new MessageMetadata();

            builder.Properties.Add(new KeyValue {
                Key = "key1", Value = "value1"
            });
            builder.Properties.Add(new KeyValue {
                Key = "key2", Value = "value2"
            });
            builder.Properties.Add(new KeyValue {
                Key = "key3", Value = "value3"
            });
            var payload = ReadOnlySequence <byte> .Empty;

            var msg = Message <byte[]> .Create(builder, payload, ISchema <object> .Bytes);

            Assert.Equal("value1", msg.GetProperty("key1"));
            Assert.Equal("value3", msg.GetProperty("key3"));
        }
Example #6
0
        internal MessageMetadata CreateMetadata(IBasicProperties properties, string topic, ISerializer serializer, ulong?deliveryTag = null)
        {
            MessageMetadata metadata = new MessageMetadata
            {
                ReplyTo     = properties.ReplyTo,
                MessageId   = properties.CorrelationId,
                Destination =
                    properties.IsHeadersPresent() &&
                    properties.Headers.ContainsKey(MessageMetadata.ResponseDestinationHeaderKey)
                        ? serializer.ByteArrayToObject <string>(properties.Headers[MessageMetadata.ResponseDestinationHeaderKey] as byte[])
                        : null,
                Topic = topic
            };

            if (deliveryTag != null)
            {
                metadata.DeliveryTag = deliveryTag.Value;
            }
            return(metadata);
        }
Example #7
0
        public void SendMessage(byte[] body, IMessage message, MessageMetadata metadata)
        {
            if (!IsConnected)
            {
                return;
            }

            using (IModel channel = RabbitMqConnection.CreateChannel(this))
            {
                IBasicProperties basicProperties = RabbitMqConnection.CreateBasicProperties(channel, message, metadata);

                string routingKey = string.IsNullOrEmpty(metadata.ReplyTo)
                    ? string.IsNullOrEmpty(metadata.Topic) ? message.GetType().Name : metadata.Topic
                    : metadata.ReplyTo;

                Logger.LogInformation($"Send message to {metadata.Destination} of type {message.GetType().Name} with routing key: {routingKey}");

                RabbitMqConnection.PublishMessage(channel, metadata.Destination, basicProperties, body, routingKey);
            }
        }
        private bool IsHaveResult(Subscription subscription, MessageMetadata message)
        {
            //search by query in service
            var query = subscription.Query;// + "&informationResourceId=" + message.Id;

            Log.Verbose($"Query for search: {query}");

            try
            {
                var checkResult = _checkSubscriptionService.Check(message, query);
                Log.Verbose($"Check result: {checkResult}");

                return(checkResult);
            }
            catch (Exception e)
            {
                Log.Warning($"problem occured when check subscription id {subscription.SubscriptionId}", e);
                return(false);
            }
        }
Example #9
0
 public byte[] Serialize(float data, bool isKey, MessageMetadata messageMetadata, TopicPartition destination)
 {
     if (BitConverter.IsLittleEndian)
     {
         unsafe
         {
             byte[] result = new byte[4];
             byte * p      = (byte *)(&data);
             result[3] = *p++;
             result[2] = *p++;
             result[1] = *p++;
             result[0] = *p++;
             return(result);
         }
     }
     else
     {
         return(BitConverter.GetBytes(data));
     }
 }
Example #10
0
        public async Task ProvidesDefaultSerializationComponents()
        {
            var serializer = new AsyncSchemaRegistrySerializer <int>(
                RegistryClientMock.Object
                );

            var data     = 4;
            var encoding = new byte[] { 0x00, 0x00, 0x00, 0x00, 0x04, 0x08 };
            var metadata = new MessageMetadata();
            var context  = new SerializationContext(MessageComponentType.Key, "test_topic");
            var subject  = $"{context.Topic}-key";

            RegistryClientMock
            .Setup(c => c.GetLatestSchemaAsync(subject))
            .ReturnsAsync(new Schema(subject, 1, 4, "\"int\""));

            Assert.Equal(encoding,
                         await serializer.SerializeAsync(data, context)
                         );
        }
 public void Write(TProtocol oprot)
 {
     oprot.IncrementRecursionDepth();
     try
     {
         TStruct struc = new TStruct("MNMessagesSyncDeltaParticipantsAddedToGroupThread");
         oprot.WriteStructBegin(struc);
         TField field = new TField();
         if (MessageMetadata != null && __isset.MessageMetadata)
         {
             field.Name = "MessageMetadata";
             field.Type = TType.Struct;
             field.ID   = 1;
             oprot.WriteFieldBegin(field);
             MessageMetadata.Write(oprot);
             oprot.WriteFieldEnd();
         }
         if (AddedParticipants != null && __isset.AddedParticipants)
         {
             field.Name = "AddedParticipants";
             field.Type = TType.List;
             field.ID   = 2;
             oprot.WriteFieldBegin(field);
             {
                 oprot.WriteListBegin(new TList(TType.Struct, AddedParticipants.Count));
                 foreach (MNMessagesSyncParticipantInfo _iter66 in AddedParticipants)
                 {
                     _iter66.Write(oprot);
                 }
                 oprot.WriteListEnd();
             }
             oprot.WriteFieldEnd();
         }
         oprot.WriteFieldStop();
         oprot.WriteStructEnd();
     }
     finally
     {
         oprot.DecrementRecursionDepth();
     }
 }
Example #12
0
    List <LogicalMessage> Extract(IncomingMessage physicalMessage)
    {
        if (physicalMessage.Body == null || physicalMessage.Body.Length == 0)
        {
            return(new List <LogicalMessage>());
        }

        string messageTypeIdentifier;
        var    messageMetadata = new List <MessageMetadata>();

        if (physicalMessage.Headers.TryGetValue(Headers.EnclosedMessageTypes, out messageTypeIdentifier))
        {
            foreach (var messageTypeString in messageTypeIdentifier.Split(';'))
            {
                var typeString = messageTypeString;

                MessageMetadata metadata = messageMetadataRegistry.GetMessageMetadata(typeString);

                if (metadata == null)
                {
                    continue;
                }

                messageMetadata.Add(metadata);
            }

            if (messageMetadata.Count == 0 && physicalMessage.GetMesssageIntent() != MessageIntentEnum.Publish)
            {
                logger.WarnFormat("Could not determine message type from message header '{0}'. MessageId: {1}", messageTypeIdentifier, physicalMessage.MessageId);
            }
        }

        using (var stream = new MemoryStream(physicalMessage.Body))
        {
            IMessageSerializer messageSerializer = serializationMapper.GetSerializer(physicalMessage.Headers);
            var messageTypes = messageMetadata.Select(metadata => metadata.MessageType).ToList();
            return(messageSerializer.Deserialize(stream, messageTypes)
                   .Select(x => logicalMessageFactory.Create(x.GetType(), x))
                   .ToList());
        }
    }
Example #13
0
 public void Write(TProtocol oprot)
 {
     oprot.IncrementRecursionDepth();
     try
     {
         TStruct struc = new TStruct("MNMessagesSyncDeltaSentMessage");
         oprot.WriteStructBegin(struc);
         TField field = new TField();
         if (MessageMetadata != null && __isset.MessageMetadata)
         {
             field.Name = "MessageMetadata";
             field.Type = TType.Struct;
             field.ID   = 1;
             oprot.WriteFieldBegin(field);
             MessageMetadata.Write(oprot);
             oprot.WriteFieldEnd();
         }
         if (Attachments != null && __isset.Attachments)
         {
             field.Name = "Attachments";
             field.Type = TType.List;
             field.ID   = 2;
             oprot.WriteFieldBegin(field);
             {
                 oprot.WriteListBegin(new TList(TType.Struct, Attachments.Count));
                 foreach (MNMessagesSyncAttachment _iter102 in Attachments)
                 {
                     _iter102.Write(oprot);
                 }
                 oprot.WriteListEnd();
             }
             oprot.WriteFieldEnd();
         }
         oprot.WriteFieldStop();
         oprot.WriteStructEnd();
     }
     finally
     {
         oprot.DecrementRecursionDepth();
     }
 }
        public async Task CachesGeneratedSerializers()
        {
            var serializer = new AsyncSchemaRegistrySerializer <object>(
                RegistryClientMock.Object
                );

            var metadata = new MessageMetadata();
            var context  = new SerializationContext(MessageComponentType.Value, "test_topic");
            var subject  = $"{context.Topic}-value";

            RegistryClientMock
            .Setup(c => c.GetLatestSchemaAsync(subject))
            .ReturnsAsync(new Schema(subject, 1, 12, "\"null\""));

            await Task.WhenAll(Enumerable.Range(0, 5).Select(i =>
                                                             serializer.SerializeAsync(null, context)
                                                             ));

            RegistryClientMock
            .Verify(c => c.GetLatestSchemaAsync(subject), Times.Once());
        }
Example #15
0
    public async Task SendAsync_ShouldHaveDefaultMetadata_WhenMessageMetadataIsNull(
        MessageWithMetadata message, string serialized, string typeId, MessageMetadata metadata)
    {
        message.Metadata = null;

        _messageSerializer.Setup(x => x.Serialize(message.Message))
        .Returns(serialized);

        _messageTypeCache.Setup(x => x.GetTypeId(message.Message.GetType()))
        .Returns(typeId);

        _metadataFactory.Setup(x => x.CreateFor(message.Message))
        .Returns(metadata);

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

        _connection.Verify(x => x.SendAsync(It.Is <MessageData>(msg =>
                                                                msg.Data == serialized &&
                                                                msg.TypeId == typeId &&
                                                                msg.Metadata == metadata), Cts.Token));
    }
        public async Task ReadFramesAsync_ShouldBreak_OnReaderCompletedAtLast(short messageId, params int[] framesLength)
        {
            var random = new Random();

            var(decoder, pipe) = CreateConsumer();
            var enumerator = decoder.ReadFramesAsync().GetAsyncEnumerator();

            foreach (var len in framesLength)
            {
                var meta    = new MessageMetadata(messageId, len);
                var encoded = FrameProvider.GetRandomAsBuffer(messageId, len, random);
                await pipe.Writer.WriteAsync(encoded).ConfigureAwait(false);

                Assert.True(await enumerator.MoveNextAsync());
                Assert.Equal(meta, enumerator.Current.Metadata);
                Assert.Equal(encoded.Slice(_parser.GetLength(meta)).ToArray(),
                             enumerator.Current.Payload.ToArray());
            }

            pipe.Reader.Complete();
            Assert.False(await enumerator.MoveNextAsync()); // will break since tryAdvance returns false whenever the pipe is completed (by throwing an InvalidOperationException)
        }
Example #17
0
        /// <summary>
        ///     Serialize an instance of type <typeparamref name="T"/> to a byte array in Avro format. The serialized
        ///     data is preceeded by a "magic byte" (1 byte) and the id of the schema as registered
        ///     in Confluent's Schema Registry (4 bytes, network byte order). This call may block or throw
        ///     on first use for a particular topic during schema registration.
        /// </summary>
        /// <param name="value">
        ///     The value to serialize.
        /// </param>
        /// <param name="messageMetadata">
        ///     Properties of the message the data is associated with in
        ///     addition to the key or value.
        /// </param>
        /// <param name="destination">
        ///     The TopicPartition to which the message is to be sent
        ///     (partition may be Partition.Any).
        /// </param>
        /// <param name="isKey">
        ///     True if deserializing the message key, false if deserializing the
        ///     message value.
        /// <returns>
        ///     A <see cref="System.Threading.Tasks.Task" /> that completes with
        ///     <paramref name="value" /> serialized as a byte array.
        /// </returns>
        public async Task <byte[]> SerializeAsync(T value, bool isKey, MessageMetadata messageMetadata, TopicPartition destination)
        {
            try
            {
                if (serializerImpl == null)
                {
                    serializerImpl = typeof(T) == typeof(GenericRecord)
                        ? (IAvroSerializerImpl <T>) new GenericSerializerImpl(schemaRegistryClient, autoRegisterSchema, initialBufferSize)
                        : new SpecificSerializerImpl <T>(schemaRegistryClient, autoRegisterSchema, initialBufferSize);
                }

                return(await serializerImpl.Serialize(destination.Topic, value, isKey));
            }
            catch (AggregateException e)
            {
                throw new SerializationException("Error occured serializing Avro data.", e.InnerException);
            }
            catch (Exception e)
            {
                throw new SerializationException("Error occured serializing Avro data.", e);
            }
        }
Example #18
0
        public void Aggregate_actor_produce_fault_with_processId_from_command()
        {
            var command = new GoSleepCommand(null, null).CloneForProcess(Guid.NewGuid().ToString());

            var transport = Sys.InitLocalTransportExtension().Transport;

            transport.Subscribe <MessageMetadataEnvelop <Fault <GoSleepCommand> > >(TestActor);
            var handlersActor = Sys.ActorOf(Props.Create(() => new HandlersPipeActor(new HandlersDefaultProcessor(), TestActor)));

            var actor = Sys.ActorOf(Props.Create(() => new AggregateActor <ProgrammerAggregate>(CommandAggregateHandler.New <ProgrammerAggregate>(null),
                                                                                                new SnapshotsPersistencePolicy(1, null, 5, null),
                                                                                                AggregateFactory.Default,
                                                                                                AggregateFactory.Default,
                                                                                                handlersActor)),
                                    EntityActorName.New <ProgrammerAggregate>(command.Id).Name);

            actor.Tell(new MessageMetadataEnvelop <ICommand>(command, MessageMetadata.New(command.Id, null, null)));

            var fault = FishForMessage <MessageMetadataEnvelop>(m => m.Message is Fault <GoSleepCommand>).Message as IFault;

            Assert.Equal(command.ProcessId, fault.ProcessId);
        }
Example #19
0
        public async Task <ActionResult> PublishMessage([FromBody] SendMessageRequest request)
        {
            if (request.MessageContent.SimulateHeartBeat.HasValue && request.MessageContent.SetVisiblityTimeout < TimeSpan.FromSeconds(5))
            {
                return(BadRequest("If you want to simulate a heartbeat, you need to provide a value greater than 5 for setvisibilitytimeout as the heartbeat simulation sleeps for 5s"));
            }

            // The account ID should be present in the Identity Token
            var account         = User.GetAccountId();
            var interactionGuid = request.InteractionGuid?.ToString() ?? string.Empty;

            // The correlation id should be present in the HttpContent. We add one in, if missing.
            var correlationId = Request.Headers.GetCorrelationId();

            // Here we're demonstrating new'ing up a message n times and publishing each one
            // as a load/perf test for SDK + AWS
            for (var i = 0; i < request.NumberOfTimesToSend; i++)
            {
                // Build up a new message (metadata + content)
                var debugData = new DebugData(Program.ServiceName, BuildInfo.Version)
                {
                    // These 2 are optional, nor required. Although schema version at least is desired.
                    // Model/object/class version
                    MessageSchemaVersion = request.SchemaVersion,
                    // Any additional pertinent info you want to provide
                    AdditionalInfo = request.AdditionalDebugInfo
                };
                var metadata = new MessageMetadata(correlationId, debugData)
                {
                    AccountId       = (long)account,
                    InteractionGuid = interactionGuid
                };
                var newMessage = new Message(request.MessageContent, metadata);
                await _messagePublisher.PublishAsync(newMessage);
            }

            return(Ok());
        }
Example #20
0
        public override string ToString()
        {
            StringBuilder __sb    = new StringBuilder("MNMessagesSyncDeltaP2PPaymentMessage(");
            bool          __first = true;

            if (MessageMetadata != null && __isset.MessageMetadata)
            {
                if (!__first)
                {
                    __sb.Append(", ");
                }
                __first = false;
                __sb.Append("MessageMetadata: ");
                __sb.Append(MessageMetadata == null ? "<null>" : MessageMetadata.ToString());
            }
            if (__isset.TransferId)
            {
                if (!__first)
                {
                    __sb.Append(", ");
                }
                __first = false;
                __sb.Append("TransferId: ");
                __sb.Append(TransferId);
            }
            if (__isset.MessageType)
            {
                if (!__first)
                {
                    __sb.Append(", ");
                }
                __first = false;
                __sb.Append("MessageType: ");
                __sb.Append(MessageType);
            }
            __sb.Append(")");
            return(__sb.ToString());
        }
Example #21
0
        public override string ToString()
        {
            StringBuilder __sb    = new StringBuilder("MNMessagesSyncDeltaAdminTextMessage(");
            bool          __first = true;

            if (MessageMetadata != null && __isset.MessageMetadata)
            {
                if (!__first)
                {
                    __sb.Append(", ");
                }
                __first = false;
                __sb.Append("MessageMetadata: ");
                __sb.Append(MessageMetadata == null ? "<null>" : MessageMetadata.ToString());
            }
            if (Type != null && __isset.Type)
            {
                if (!__first)
                {
                    __sb.Append(", ");
                }
                __first = false;
                __sb.Append("Type: ");
                __sb.Append(Type);
            }
            if (UntypedData != null && __isset.UntypedData)
            {
                if (!__first)
                {
                    __sb.Append(", ");
                }
                __first = false;
                __sb.Append("UntypedData: ");
                __sb.Append(UntypedData);
            }
            __sb.Append(")");
            return(__sb.ToString());
        }
        public override string ToString()
        {
            StringBuilder __sb    = new StringBuilder("MNMessagesSyncDeltaPageAdminReply(");
            bool          __first = true;

            if (MessageMetadata != null && __isset.MessageMetadata)
            {
                if (!__first)
                {
                    __sb.Append(", ");
                }
                __first = false;
                __sb.Append("MessageMetadata: ");
                __sb.Append(MessageMetadata == null ? "<null>" : MessageMetadata.ToString());
            }
            if (ActivityToken != null && __isset.ActivityToken)
            {
                if (!__first)
                {
                    __sb.Append(", ");
                }
                __first = false;
                __sb.Append("ActivityToken: ");
                __sb.Append(ActivityToken);
            }
            if (__isset.ReplyType)
            {
                if (!__first)
                {
                    __sb.Append(", ");
                }
                __first = false;
                __sb.Append("ReplyType: ");
                __sb.Append(ReplyType);
            }
            __sb.Append(")");
            return(__sb.ToString());
        }
Example #23
0
        public Message Add(MessageIdData messageId, MessageMetadata metadata, ReadOnlySequence <byte> data)
        {
            if (_trackBatches)
            {
                _batches.AddLast(new Batch(messageId, metadata.NumMessagesInBatch));
            }

            long index = 0;

            for (var i = 0; i < metadata.NumMessagesInBatch; ++i)
            {
                var singleMetadataSize = data.ReadUInt32(index, true);
                index += 4;
                var singleMetadata = Serializer.Deserialize <SingleMessageMetadata>(data.Slice(index, singleMetadataSize));
                index += singleMetadataSize;
                var singleMessageId = new MessageId(messageId.LedgerId, messageId.EntryId, messageId.Partition, i);
                var message         = new Message(singleMessageId, metadata, singleMetadata, data.Slice(index, singleMetadata.PayloadSize));
                _messages.Enqueue(message);
                index += (uint)singleMetadata.PayloadSize;
            }

            return(_messages.Dequeue());
        }
Example #24
0
        public async ValueTask <MessageId> Send(MessageMetadata metadata, ReadOnlySequence <byte> data, CancellationToken cancellationToken)
        {
            ThrowIfDisposed();

            var autoAssignSequenceId = metadata.SequenceId == 0;

            if (autoAssignSequenceId)
            {
                metadata.SequenceId = _sequenceId.FetchNext();
            }

            try
            {
                return(await _executor.Execute(() => Send(metadata.Metadata, data, cancellationToken), cancellationToken).ConfigureAwait(false));
            }
            finally
            {
                if (autoAssignSequenceId)
                {
                    metadata.SequenceId = 0;
                }
            }
        }
        public static Activity?StartProducerActivity(MessageMetadata metadata, string operationName, KeyValuePair <string, object?>[] tags)
        {
            if (!ActivitySource.HasListeners())
            {
                return(null);
            }

            var activity = ActivitySource.StartActivity(operationName, ActivityKind.Producer);

            if (activity is not null && activity.IsAllDataRequested)
            {
                metadata[_traceParent] = activity.TraceId.ToHexString();
                metadata[_traceState]  = activity.TraceStateString;

                for (var i = 0; i < tags.Length; ++i)
                {
                    var tag = tags[i];
                    activity.SetTag(tag.Key, tag.Value);
                }
            }

            return(activity);
        }
        public async Task UsesSubjectNameBuilder()
        {
            var version = GetType().Assembly.GetName().Version;

            var serializer = new AsyncSchemaRegistrySerializer <int>(
                RegistryClientMock.Object,
                subjectNameBuilder: c => $"{c.Topic}-{version}-{c.Component.ToString().ToLowerInvariant()}"
                );

            var data     = 2;
            var encoding = new byte[] { 0x00, 0x00, 0x00, 0x00, 0x08, 0x04 };
            var metadata = new MessageMetadata();
            var context  = new SerializationContext(MessageComponentType.Key, "test_topic");
            var subject  = $"{context.Topic}-{version}-key";

            RegistryClientMock
            .Setup(c => c.GetLatestSchemaAsync(subject))
            .ReturnsAsync(new Schema(subject, 2, 8, "\"int\""));

            Assert.Equal(encoding,
                         await serializer.SerializeAsync(data, context)
                         );
        }
Example #27
0
        public async Task When_execute_aggregate_command_with_fault_and_metadata()
        {
            var command         = new BlowBalloonCommand(Guid.NewGuid().ToString());
            var commandMetadata = MessageMetadata.New(command.Id, Guid.NewGuid().ToString(), null);

            var res = await Node.Prepare(command, commandMetadata)
                      .Expect <Fault <BlowBalloonCommand> >()
                      .Execute(false);

            // Result_contains_metadata()
            var metadata = res.ReceivedMetadata;

            Assert.NotNull(metadata);
            // Result_contains_message()
            var fault = res.Fault;

            Assert.NotNull(fault);
            //Result_message_has_expected_type()
            Assert.IsAssignableFrom <IFault <BlowBalloonCommand> >(fault);

            //Result_message_has_expected_id()
            Assert.Equal(command.Id, ((IFault <BlowBalloonCommand>)fault).Message.Id);
            //Result_message_has_expected_value()
            Assert.Equal(command.GetType(), fault.Message.GetType());
            //Result_metadata_has_command_id_as_casuation_id()
            Assert.Equal(command.Id, metadata.CasuationId);
            //Result_metadata_has_correlation_id_same_as_command_metadata()
            Assert.Equal(commandMetadata.CorrelationId, metadata.CorrelationId);
            //Result_metadata_has_processed_history_filled_from_aggregate()
            //Assert.Equal(1, metadata.History?.Steps.Count);
            ////Result_metadata_has_processed_correct_filled_history_step()
            //var step = metadata.History.Steps.First();
            //
            //Assert.Equal(AggregateActorName.New<Balloon>(command.AggregateId).Name, step.Who);
            //Assert.Equal(AggregateActorConstants.CommandRaisedAnError, step.Why);
            //Assert.Equal(AggregateActorConstants.CommandExecutionFinished, step.What);
        }
        protected override void OnReceive(object message)
        {
            try
            {
                var messageWithMetadata = message as IMessageMetadataEnvelop;
                if (messageWithMetadata != null)
                {
                    _group.Project(messageWithMetadata.Message, messageWithMetadata.Metadata);
                }
                else
                {
                    _group.Project(message, MessageMetadata.Empty());
                }
            }
            catch (MessageProcessException ex)
            {
                _log.Error(ex, "Handler actor raised an error on message process: {@Message}", message);

                var withMetadata = message as IMessageMetadataEnvelop;
                if (withMetadata == null)
                {
                    var fault = Fault.NewGeneric(message, ex.InnerException, ex.Type, GetSagaId(message));
                    _publisher.Publish(fault);
                }
                else
                {
                    var fault = Fault.NewGeneric(withMetadata.Message, ex.InnerException, ex.Type, GetSagaId(message));

                    var metadata = withMetadata.Metadata.CreateChild(Guid.Empty,
                                                                     new ProcessEntry(Self.Path.Name,
                                                                                      "publishing fault",
                                                                                      "message process casued an error"));

                    _publisher.Publish(fault, metadata);
                }
            }
        }
        public void When_child_revives_monitor_should_be_created_even_on_collision()
        {
            var ChildId = "testChild";

            var create = new MessageMetadataEnvelop <ICommand>(new InflateNewBallonCommand(42, ChildId),
                                                               MessageMetadata.New(ChildId, null, null));

            _hubRef.Tell(create);

            Task.Run(async() =>
            {
                while (true)
                {
                    var activate = new MessageMetadataEnvelop <ICommand>(new WriteTitleCommand(100, ChildId),
                                                                         MessageMetadata.New(ChildId, null, null));

                    _hubRef.Tell(activate);
                    await Task.Delay(150);
                }
            });

            EventFilter.Exception <InvalidActorNameException>()
            .Expect(0, TimeSpan.FromSeconds(10), () => { });
        }
Example #30
0
        public async Task Given_default_policy()
        {
            var startEvent = new GotTiredEvent(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString());

            var resTask = Node.NewDebugWaiter()
                          .Expect <ProcessReceivedMessage <SoftwareProgrammingState> >()
                          .Create()
                          .SendToProcessManagers(startEvent, MessageMetadata.New(startEvent.Id, null, null));

            var processId = (await resTask).Message <ProcessReceivedMessage <SoftwareProgrammingState> >().SourceId;

            var continueEvent = new CoffeMakeFailedEvent(processId, startEvent.PersonId, BusinessDateTime.UtcNow, processId);

            //to avoid racy state receiving expected message from processing GotTiredEvent
            await Node.NewDebugWaiter()
            .Expect <ProcessReceivedMessage <SoftwareProgrammingState> >(e => e.MessageId == continueEvent.Id)
            .Create()
            .SendToProcessManagers(continueEvent, processId);

            Log.Info("Testcase enforce additional snapshot save & delete, will kill process manager");
            await Node.KillProcessManager <SoftwareProgrammingProcess, SoftwareProgrammingState>(processId);

            var snapshots = await AggregateSnapshotRepository.New(AutoTestNodeDbConfiguration.Default.JournalConnectionString,
                                                                  AggregateFactory.Default)
                            .Load <ProcessStateAggregate <SoftwareProgrammingState> >(processId);

            //Snapshot_should_be_saved_one_time
            Assert.Single(snapshots);
            //Restored_process_state_should_have_correct_ids
            Assert.True(snapshots.All(s => s.Payload.Id == processId));
            //Snapshot_should_have_parameters_from_first_event = created event
            Assert.Equal(nameof(SoftwareProgrammingProcess.Coding),
                         snapshots.First().Payload.State.CurrentStateName);
            //All_snapshots_should_not_have_uncommited_events
            Assert.Empty(snapshots.SelectMany(s => s.Payload.GetEvents()));
        }
        public void UserColorChangedRaisedTest()
        {
            var userMock = new Mock <IUser>();

            userMock.Setup(u => u.BackColorArgb).Returns("#FFFF0000");
            userMock.Setup(u => u.ForeColorArgb).Returns("#FF0000FF");
            var messageMock     = new Mock <ITwicasComment>();
            var optionsMock     = new Mock <ICommentOptions>();
            var siteOptionsMock = new Mock <ITwicasSiteOptions>();
            var message         = messageMock.Object;
            var options         = optionsMock.Object;
            var siteOptions     = siteOptionsMock.Object;
            var user            = userMock.Object;

            var metadata        = new MessageMetadata(message, options, siteOptions, user, null, false);
            var backColorRaised = false;
            var foreColorRaised = false;

            metadata.PropertyChanged += (s, e) =>
            {
                switch (e.PropertyName)
                {
                case nameof(metadata.BackColor):
                    backColorRaised = true;
                    break;

                case nameof(metadata.ForeColor):
                    foreColorRaised = true;
                    break;
                }
            };
            userMock.Raise(c => c.PropertyChanged += null, new PropertyChangedEventArgs(nameof(user.BackColorArgb)));
            userMock.Raise(c => c.PropertyChanged += null, new PropertyChangedEventArgs(nameof(user.ForeColorArgb)));
            Assert.IsTrue(backColorRaised);
            Assert.IsTrue(foreColorRaised);
        }
Example #32
0
        public async Task DoesNotCacheSchemaRegistryFailures()
        {
            var serializer = new AsyncSchemaRegistrySerializer <object>(
                RegistryClientMock.Object
                );

            var metadata = new MessageMetadata();
            var context  = new SerializationContext(MessageComponentType.Value, "test_topic");
            var subject  = $"{context.Topic}-value";

            RegistryClientMock
            .Setup(c => c.GetLatestSchemaAsync(subject))
            .ThrowsAsync(new HttpRequestException());

            await Assert.ThrowsAsync <HttpRequestException>(() =>
                                                            serializer.SerializeAsync(null, context)
                                                            );

            RegistryClientMock
            .Setup(c => c.GetLatestSchemaAsync(subject))
            .ReturnsAsync(new Schema(subject, 1, 12, "\"null\""));

            await serializer.SerializeAsync(null, context);
        }
Example #33
0
 /// <summary>
 /// Create a new <see cref="LogicalMessage"/> instance containing a message object and it's corresponding <see cref="MessageMetadata"/>.
 /// </summary>
 public LogicalMessage(MessageMetadata metadata, object message)
 {
     Instance = message;
     Metadata = metadata;
 }
Example #34
0
 internal Message(string topic, MessageId messageId, MessageMetadata msgMetadata, ReadOnlySequence<byte> payload, Option<EncryptionContext> encryptionCtx, IActorRef cnx, ISchema<T> schema, int redeliveryCount, bool pooledMessage)
 {
     //_metadata = new MessageMetadata();
     Init(this, topic, messageId, msgMetadata, payload, encryptionCtx, cnx, schema, redeliveryCount, pooledMessage);
 }
Example #35
0
 internal Message(string topic, MessageId messageId, MessageMetadata msgMetadata, ReadOnlySequence<byte> payload, Option<EncryptionContext> encryptionCtx, IActorRef cnx, ISchema<T> schema) : this(topic, messageId, msgMetadata, payload, encryptionCtx, cnx, schema, 0, false)
 {
 }
 public void Add(MessageMetadata metadata)
 {
     
 }