コード例 #1
0
        public void IsEmpty_returns_false_for_non_empty_stack()
        {
            var stack = new MessageVersionStack(typeof(MyMessage));

            Assert.That(stack.Count(), Is.GreaterThan(0));
            Assert.That(stack.IsEmpty(), Is.False);
        }
コード例 #2
0
        public void Versioned_messages_create_a_stack_containing_the_message_type_and_all_superseded_types_oldest_first()
        {
            var stack = new MessageVersionStack(typeof(MyMessageV2));

            Assert.Equal(typeof(MyMessage), stack.ElementAt(0));
            Assert.Equal(typeof(MyMessageV2), stack.ElementAt(1));
        }
コード例 #3
0
        public void Pop_returns_the_top_of_the_stack()
        {
            var stack = new MessageVersionStack(typeof(MyMessageV2));
            var top   = stack.ElementAt(0);

            Assert.Equal(stack.Pop(), top);
        }
コード例 #4
0
        public void IsEmpty_returns_false_for_non_empty_stack()
        {
            var stack = new MessageVersionStack(typeof(MyMessage));

            Assert.True(stack.Count() > 0);
            Assert.False(stack.IsEmpty());
        }
コード例 #5
0
 public IExchange DeclareExchange(IAdvancedBus advancedBus, Type messageType, string exchangeType)
 {
     var conventions = advancedBus.Container.Resolve<IConventions>();
     var messageVersions = new MessageVersionStack( messageType );
     var publishExchange = DeclareVersionedExchanges( advancedBus, conventions, messageVersions, exchangeType );
     return publishExchange;
 }
コード例 #6
0
        public void Versioned_message_stack_works_with_arbitrary_type_names()
        {
            var stack = new MessageVersionStack(typeof(ComplexMessage));

            Assert.Equal(typeof(SimpleMessage), stack.ElementAt(0));
            Assert.Equal(typeof(AdvancedMessage), stack.ElementAt(1));
            Assert.Equal(typeof(ComplexMessage), stack.ElementAt(2));
        }
コード例 #7
0
        public void Versioned_message_stack_works_for_more_than_two_versions_and_types_are_ordered_oldest_first()
        {
            var stack = new MessageVersionStack(typeof(MyMessageV3));

            Assert.Equal(typeof(MyMessage), stack.ElementAt(0));
            Assert.Equal(typeof(MyMessageV2), stack.ElementAt(1));
            Assert.Equal(typeof(MyMessageV3), stack.ElementAt(2));
        }
コード例 #8
0
        public void IsEmpty_returns_true_for_empty_stack()
        {
            var stack = new MessageVersionStack(typeof(MyMessage));

            stack.Pop();

            stack.Should().BeEmpty();
        }
コード例 #9
0
        public void IsEmpty_returns_true_for_empty_stack()
        {
            var stack = new MessageVersionStack(typeof(MyMessage));

            stack.Pop();

            Assert.Equal(0, stack.Count());
            Assert.True(stack.IsEmpty());
        }
コード例 #10
0
 private MessageTypeProperty( ITypeNameSerializer typeNameSerializer, Type messageType )
 {
     this.typeNameSerializer = typeNameSerializer;
     var messageVersions = new MessageVersionStack( messageType );
     // MessageVersionStack has most recent version at the bottom of the stack (hence the reverse)
     // and includes the actual message type (hence the first / removeat)
     alternativeTypes = messageVersions
         .Select( typeNameSerializer.Serialize )
         .Reverse()
         .ToList();
     this.messageType = alternativeTypes.First();
     alternativeTypes.RemoveAt( 0 );
 }
コード例 #11
0
 private Task<IExchange> DeclareVersionedExchanges(IAdvancedBus advancedBus, IConventions conventions, MessageVersionStack messageVersions, string exchangeType)
 {
     var destinationExchangeTask = TaskHelpers.FromResult<IExchange>(null);
     while (! messageVersions.IsEmpty())
     {
         var messageType = messageVersions.Pop();
         var exchangeName = conventions.ExchangeNamingConvention(messageType);
         destinationExchangeTask = destinationExchangeTask.Then(destinationExchange => DeclareExchangeAsync(advancedBus, exchangeName, exchangeType).Then(sourceExchange =>
             {
                 if (destinationExchange != null)
                     return advancedBus.BindAsync(sourceExchange, destinationExchange, "#").Then(() => sourceExchange);
                 return TaskHelpers.FromResult(sourceExchange);
             }));
     }
     return destinationExchangeTask;
 }
コード例 #12
0
 private async Task<IExchange> DeclareVersionedExchangesAsync(IAdvancedBus advancedBus, IConventions conventions, MessageVersionStack messageVersions, string exchangeType)
 {
     IExchange destinationExchange = null;
     while (! messageVersions.IsEmpty())
     {
         var messageType = messageVersions.Pop();
         var exchangeName = conventions.ExchangeNamingConvention(messageType);
         var sourceExchange = await DeclareExchangeAsync(advancedBus, exchangeName, exchangeType).ConfigureAwait(false);
         if (destinationExchange != null)
         {
             await advancedBus.BindAsync(sourceExchange, destinationExchange, "#").ConfigureAwait(false);
         }
         destinationExchange = sourceExchange;
     }
     return destinationExchange;
 }
コード例 #13
0
        private IExchange DeclareVersionedExchanges( IAdvancedBus advancedBus, IConventions conventions, MessageVersionStack messageVersions, string exchangeType )
        {
            // This works because the message version stack is LIFO from most superseded message type to the actual message type
            IExchange destinationExchange = null;
            while( !messageVersions.IsEmpty() )
            {
                var messageType = messageVersions.Pop();
                var exchangeName = conventions.ExchangeNamingConvention( messageType );
                var sourceExchange = DeclareExchange( advancedBus, exchangeName, exchangeType );

                if( destinationExchange != null )
                    advancedBus.Bind( sourceExchange, destinationExchange, "#" );

                destinationExchange = sourceExchange;
            }
            return destinationExchange;
        }
コード例 #14
0
 private IExchange DeclareVersionedExchanges(IAdvancedBus advancedBus, IConventions conventions, MessageVersionStack messageVersions, string exchangeType)
 {
     IExchange destinationExchange = null;
     while (!messageVersions.IsEmpty())
     {
         var messageType = messageVersions.Pop();
         var exchangeName = conventions.ExchangeNamingConvention(messageType);
         var sourceExchange = DeclareExchange(advancedBus, exchangeName, exchangeType);
         if (destinationExchange != null)
         {
             advancedBus.Bind(sourceExchange, destinationExchange, "#");
         }
         destinationExchange = sourceExchange;
     }
     return destinationExchange;
 }
コード例 #15
0
        public void Unversioned_messages_create_a_stack_containing_the_message_type()
        {
            var stack = new MessageVersionStack(typeof(MyMessage));

            Assert.Equal(typeof(MyMessage), stack.Single());
        }
コード例 #16
0
 public Task<IExchange> DeclareExchangeAsync(IAdvancedBus advancedBus, Type messageType, string exchangeType)
 {
     var conventions = advancedBus.Container.Resolve<IConventions>();
     var messageVersions = new MessageVersionStack(messageType);
     return DeclareVersionedExchanges(advancedBus, conventions, messageVersions, exchangeType);
 }
コード例 #17
0
        public void If_given_just_an_object_the_stack_can_handle_it_without_exceptions()
        {
            var stack = new MessageVersionStack(typeof(object));

            Assert.Equal(typeof(object), stack.ElementAt(0));
        }
コード例 #18
0
        public void IsEmpty_returns_false_for_non_empty_stack()
        {
            var stack = new MessageVersionStack(typeof(MyMessage));

            stack.Should().NotBeEmpty();
        }