Skip to content

Commit

Permalink
Changed the default behavior of the autosubscriber attribute to not s…
Browse files Browse the repository at this point in the history
…et expires to int.maxvalue if the SubscriptionConfigurationAttribute is applied to a consumer method
  • Loading branch information
zidad committed Nov 19, 2015
1 parent 25ee837 commit 92dcb04
Show file tree
Hide file tree
Showing 5 changed files with 89 additions and 15 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
using System;
using EasyNetQ.AutoSubscribe;
using EasyNetQ.FluentConfiguration;
using NUnit.Framework;
using Rhino.Mocks;

namespace EasyNetQ.Tests.AutoSubscriberTests
{
[TestFixture]
public class When_autosubscribing_with_subscription_configuration_attribute_no_expires
{
private IBus bus;
private Action<ISubscriptionConfiguration> capturedAction;

[SetUp]
public void SetUp()
{
bus = MockRepository.GenerateMock<IBus>();

var autoSubscriber = new AutoSubscriber(bus, "my_app");

bus.Stub(x => x.Subscribe(
Arg<string>.Is.Equal("MyAttrTest"),
Arg<Action<MessageA>>.Is.Anything,
Arg<Action<ISubscriptionConfiguration>>.Is.Anything
))
.WhenCalled(a =>
{
capturedAction= (Action<ISubscriptionConfiguration>)a.Arguments[2];
});

autoSubscriber.Subscribe(GetType().Assembly);
}

[Test]
public void Should_have_called_subscribe()
{
bus.AssertWasCalled(
x => x.Subscribe(
Arg<string>.Is.Anything,
Arg<Action<MessageA>>.Is.Anything,
Arg<Action<ISubscriptionConfiguration>>.Is.Anything));

}

[Test]
public void Should_have_called_subscribe_with_no_expires()
{
var subscriptionConfiguration = new SubscriptionConfiguration(1);

capturedAction(subscriptionConfiguration);

subscriptionConfiguration.AutoDelete.ShouldBeTrue();
subscriptionConfiguration.CancelOnHaFailover.ShouldBeTrue();
subscriptionConfiguration.Expires.ShouldEqual(null);
subscriptionConfiguration.PrefetchCount.ShouldEqual(10);
subscriptionConfiguration.Priority.ShouldEqual(10);

}

// Discovered by reflection over test assembly, do not remove.
private class MyConsumerWithAttr : IConsume<MessageA>
{
[AutoSubscriberConsumer(SubscriptionId = "MyAttrTest")]
[SubscriptionConfiguration(AutoDelete = true, CancelOnHaFailover = true, PrefetchCount = 10, Priority = 10)]
public void Consume(MessageA message)
{
}
}

private class MessageA
{
public string Text { get; set; }
}
}
}
1 change: 1 addition & 0 deletions Source/EasyNetQ.Tests/EasyNetQ.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@
<Compile Include="AutoSubscriberTests\When_autosubscribing_with_subscription_configuration_action.cs" />
<Compile Include="AutoSubscriberTests\When_autosubscribing_with_subscription_configuration.cs" />
<Compile Include="AutoSubscriberTests\When_autosubscribing.cs" />
<Compile Include="AutoSubscriberTests\When_autosubscribing_with_subscription_configuration_attribute_no_expires.cs" />
<Compile Include="BlockedConnectionNotificationTests.cs" />
<Compile Include="ClientCommandDispatcherTests\When_an_action_is_invoked.cs" />
<Compile Include="ClientCommandDispatcherTests\When_an_action_is_invoked_that_throws.cs" />
Expand Down
17 changes: 9 additions & 8 deletions Source/EasyNetQ/AutoSubscribe/AutoSubscriber.cs
Original file line number Diff line number Diff line change
Expand Up @@ -208,15 +208,16 @@ private Action<ISubscriptionConfiguration> AutoSubscriberConsumerInfo(AutoSubscr
{
//prefetch count is set to a configurable default in RabbitAdvancedBus
//so don't touch it unless SubscriptionConfigurationAttribute value is other than 0.
if(configSettings.PrefetchCount > 0)
{
if (configSettings.PrefetchCount > 0)
configuration.WithPrefetchCount(configSettings.PrefetchCount);
}
configuration.WithAutoDelete(configSettings.AutoDelete)
.WithCancelOnHaFailover(configSettings.CancelOnHaFailover)
.WithExpires(configSettings.Expires)
.WithPrefetchCount(configSettings.PrefetchCount)
.WithPriority(configSettings.Priority);
if (configSettings.Expires > 0 )
configuration.WithExpires(configSettings.Expires);
configuration
.WithAutoDelete(configSettings.AutoDelete)
.WithCancelOnHaFailover(configSettings.CancelOnHaFailover)
.WithPriority(configSettings.Priority);
};
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,10 @@ namespace EasyNetQ.AutoSubscribe
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]
public class SubscriptionConfigurationAttribute : Attribute
{
public SubscriptionConfigurationAttribute()
{
Expires = int.MaxValue;
}

public bool AutoDelete { get; set; }
public int Priority { get; set; }
public bool CancelOnHaFailover { get; set; }
public ushort PrefetchCount { get; set; }
public int Expires { get; set; }
public int Expires { get; set; }
}
}
3 changes: 2 additions & 1 deletion Source/Version.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,12 @@
using System.Reflection;

// EasyNetQ version number: <major>.<minor>.<non-breaking-feature>.<build>
[assembly: AssemblyVersion("0.52.0.0")]
[assembly: AssemblyVersion("0.53.0.0")]
[assembly: CLSCompliant(true)]

// Note: until version 1.0 expect breaking changes on 0.X versions.

// 0.53.0.0 fix expires default behavior of subscription configuration attribute
// 0.52.0.0 Added synchronous callback on Consume(byte[]) methods of the advaced api
// 0.51.0.0 Brand new sync/async implementation, a lot of changes in publish mechanisms. Should be used with care
// 0.50.12.0 Added Serilog nuget package
Expand Down

0 comments on commit 92dcb04

Please sign in to comment.