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); }
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)); }
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); }
public void IsEmpty_returns_false_for_non_empty_stack() { var stack = new MessageVersionStack(typeof(MyMessage)); Assert.True(stack.Count() > 0); Assert.False(stack.IsEmpty()); }
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; }
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)); }
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)); }
public void IsEmpty_returns_true_for_empty_stack() { var stack = new MessageVersionStack(typeof(MyMessage)); stack.Pop(); stack.Should().BeEmpty(); }
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()); }
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 ); }
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; }
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; }
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; }
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; }
public void Unversioned_messages_create_a_stack_containing_the_message_type() { var stack = new MessageVersionStack(typeof(MyMessage)); Assert.Equal(typeof(MyMessage), stack.Single()); }
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); }
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)); }
public void IsEmpty_returns_false_for_non_empty_stack() { var stack = new MessageVersionStack(typeof(MyMessage)); stack.Should().NotBeEmpty(); }