Skip to content

Commit

Permalink
Merge pull request #281 from Particular/release-4.0
Browse files Browse the repository at this point in the history
Release 4.0
  • Loading branch information
bording authored May 15, 2018
2 parents 14aad2d + a8ff58c commit 1870d5a
Show file tree
Hide file tree
Showing 178 changed files with 1,509 additions and 4,037 deletions.
4 changes: 2 additions & 2 deletions GitVersion.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
assembly-versioning-scheme: Major
next-version: 3.0
next-version: 4.0
branches:
develop:
tag: alpha
release:
tag: beta
tag: rc
2 changes: 1 addition & 1 deletion src/AcceptanceTestHelper/AcceptanceTestHelper.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net452</TargetFramework>
<TargetFrameworks>net452;netcoreapp2.0</TargetFrameworks>
<SignAssembly>true</SignAssembly>
<AssemblyOriginatorKeyFile>$(SolutionDir)Test.snk</AssemblyOriginatorKeyFile>
</PropertyGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
using System.Linq;
using System.Reflection;
using NServiceBus;
using NServiceBus.Configuration.AdvanceExtensibility;
using NServiceBus.Configuration.AdvancedExtensibility;

public static class EndpointConfigurationExtensions
{
Expand Down
72 changes: 21 additions & 51 deletions src/AcceptanceTestsHolder/AcceptanceTestsHolder.csproj

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ public async Task Should_preserve_the_original_body()

public static byte Checksum(byte[] data)
{
var longSum = data.Sum(x => (long) x);
return unchecked((byte) longSum);
var longSum = data.Sum(x => (long)x);
return unchecked((byte)longSum);
}

public class Context : ScenarioContext
Expand All @@ -44,19 +44,25 @@ public class EndpointWithAuditOn : EndpointConfigurationBuilder
{
public EndpointWithAuditOn()
{
EndpointSetup<DefaultServer>(c => c
.AuditProcessedMessagesTo<AuditSpyEndpoint>());
EndpointSetup<DefaultServer,Context>((config, context) =>
{
config.RegisterMessageMutator(new BodyMutator(context));
config.AuditProcessedMessagesTo<AuditSpyEndpoint>();
});
}

class BodyMutator : IMutateIncomingTransportMessages, INeedInitialization
class BodyMutator : IMutateIncomingTransportMessages
{
public Context Context { get; set; }
public BodyMutator(Context testContext)
{
this.testContext = testContext;
}

public Task MutateIncoming(MutateIncomingTransportMessageContext context)
{
var originalBody = context.Body;

Context.OriginalBodyChecksum = Checksum(originalBody);
testContext.OriginalBodyChecksum = Checksum(originalBody);

// modifying the body by adding a line break
var modifiedBody = new byte[originalBody.Length + 1];
Expand All @@ -69,10 +75,7 @@ public Task MutateIncoming(MutateIncomingTransportMessageContext context)
return Task.FromResult(0);
}

public void Customize(EndpointConfiguration configuration)
{
configuration.RegisterComponents(c => c.ConfigureComponent<BodyMutator>(DependencyLifecycle.InstancePerCall));
}
Context testContext;
}

public class MessageToBeAuditedHandler : IHandleMessages<MessageToBeAudited>
Expand All @@ -88,23 +91,23 @@ class AuditSpyEndpoint : EndpointConfigurationBuilder
{
public AuditSpyEndpoint()
{
EndpointSetup<DefaultServer>();
EndpointSetup<DefaultServer,Context>((config, context) => config.RegisterMessageMutator(new BodySpy(context)));
}

class BodySpy : IMutateIncomingTransportMessages, INeedInitialization
class BodySpy : IMutateIncomingTransportMessages
{
public Context Context { get; set; }
public BodySpy(Context context)
{
this.context = context;
}

public Task MutateIncoming(MutateIncomingTransportMessageContext transportMessage)
{
Context.AuditChecksum = Checksum(transportMessage.Body);
context.AuditChecksum = Checksum(transportMessage.Body);
return Task.FromResult(0);
}

public void Customize(EndpointConfiguration configuration)
{
configuration.RegisterComponents(c => c.ConfigureComponent<BodySpy>(DependencyLifecycle.InstancePerCall));
}
Context context;
}

public class MessageToBeAuditedHandler : IHandleMessages<MessageToBeAudited>
Expand All @@ -114,9 +117,7 @@ public class MessageToBeAuditedHandler : IHandleMessages<MessageToBeAudited>
public Task Handle(MessageToBeAudited message, IMessageHandlerContext context)
{
if (message.RunId != TestContext.RunId)
{
return Task.FromResult(0);
}

TestContext.Done = true;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,18 +23,20 @@ public async Task Should_audit_the_message()

Assert.True(context.MessageProcessed);
Assert.True(context.MessageAudited);
Assert.AreEqual("SomeValue", context.HeaderValue);
}

public static byte Checksum(byte[] data)
{
var longSum = data.Sum(x => (long) x);
return unchecked((byte) longSum);
var longSum = data.Sum(x => (long)x);
return unchecked((byte)longSum);
}

public class Context : ScenarioContext
{
public bool MessageAudited { get; set; }
public bool MessageProcessed { get; set; }
public string HeaderValue { get; set; }
}

public class Server : EndpointConfigurationBuilder
Expand Down Expand Up @@ -75,7 +77,7 @@ public class MessageToBeAuditedHandler : IHandleMessages<ResponseToBeAudited>

public Task Handle(ResponseToBeAudited message, IMessageHandlerContext context)
{
Assert.AreEqual(context.MessageHeaders["MyHeader"], "SomeValue");
TestContext.HeaderValue = context.MessageHeaders["MyHeader"];
TestContext.MessageProcessed = true;
return Task.FromResult(0);
}
Expand All @@ -86,23 +88,22 @@ class AuditSpyEndpoint : EndpointConfigurationBuilder
{
public AuditSpyEndpoint()
{
EndpointSetup<DefaultServer>();
EndpointSetup<DefaultServer, Context>((config, context) => config.RegisterMessageMutator(new BodySpy(context)));
}

class BodySpy : IMutateIncomingTransportMessages, INeedInitialization
class BodySpy : IMutateIncomingTransportMessages
{
public Context Context { get; set; }

public Task MutateIncoming(MutateIncomingTransportMessageContext transportMessage)
public BodySpy(Context testContext)
{
Context.MessageAudited = true;
return Task.FromResult(0);
this.testContext = testContext;
}

public void Customize(EndpointConfiguration configuration)
public Task MutateIncoming(MutateIncomingTransportMessageContext context)
{
configuration.RegisterComponents(c => c.ConfigureComponent<BodySpy>(DependencyLifecycle.InstancePerCall));
testContext.MessageAudited = true;
return Task.FromResult(0);
}

Context testContext;
}

public class MessageToBeAuditedHandler : IHandleMessages<ResponseToBeAudited>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
namespace NServiceBus.AcceptanceTests.Audit
{
using System;
using System.Threading;
using System.Threading.Tasks;
using AcceptanceTesting;
using AcceptanceTesting.Customization;
Expand All @@ -9,6 +10,10 @@

public class When_auditing_message_with_TimeToBeReceived : NServiceBusAcceptanceTest
{
// This test has repeatedly failed because the message took longer than the TTBR value to be received.
// We assume this could be due to the parallel test execution.
// If this test fails your build with this attribute set, please ping the NServiceBus maintainers.
[NonParallelizable]
[Test]
public async Task Should_not_honor_TimeToBeReceived_for_audit_message()
{
Expand All @@ -23,8 +28,8 @@ public async Task Should_not_honor_TimeToBeReceived_for_audit_message()

class Context : ScenarioContext
{
public int AuditRetries;
public bool IsMessageHandlingComplete { get; set; }
public DateTime? FirstTimeProcessedByAudit { get; set; }
public bool TTBRHasExpiredAndMessageIsStillInAuditQueue { get; set; }
}

Expand Down Expand Up @@ -56,7 +61,7 @@ class EndpointThatHandlesAuditMessages : EndpointConfigurationBuilder
{
public EndpointThatHandlesAuditMessages()
{
EndpointSetup<DefaultServer>();
EndpointSetup<DefaultServer>(c => c.Recoverability().Immediate(s => s.NumberOfRetries(10)));
}

class AuditMessageHandler : IHandleMessages<MessageToBeAudited>
Expand All @@ -66,28 +71,21 @@ public AuditMessageHandler(Context textContext)
this.textContext = textContext;
}

public Task Handle(MessageToBeAudited message, IMessageHandlerContext context)
public async Task Handle(MessageToBeAudited message, IMessageHandlerContext context)
{
var auditProcessingStarted = DateTime.Now;
if (textContext.FirstTimeProcessedByAudit == null)
if (textContext.AuditRetries > 0)
{
textContext.FirstTimeProcessedByAudit = auditProcessingStarted;
textContext.TTBRHasExpiredAndMessageIsStillInAuditQueue = true;
return;
}

var ttbr = TimeSpan.Parse(context.MessageHeaders[Headers.TimeToBeReceived]);
var ttbrExpired = auditProcessingStarted > textContext.FirstTimeProcessedByAudit.Value + ttbr;
if (ttbrExpired)
{
textContext.TTBRHasExpiredAndMessageIsStillInAuditQueue = true;
var timeElapsedSinceFirstHandlingOfAuditMessage = auditProcessingStarted - textContext.FirstTimeProcessedByAudit.Value;
Console.WriteLine("Audit message not removed because of TTBR({0}) after {1}. Succeeded.", ttbr, timeElapsedSinceFirstHandlingOfAuditMessage);
}
else
{
return context.HandleCurrentMessageLater();
}
// wait longer than configured TTBR
await Task.Delay(ttbr.Add(TimeSpan.FromSeconds(1)));

return Task.FromResult(0);
// enforce message retry
Interlocked.Increment(ref textContext.AuditRetries);
throw new Exception("retry message");
}

Context textContext;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
using System;
using System.IO;
using System.Threading.Tasks;
using NServiceBus;
using NServiceBus.AcceptanceTesting.Support;
using NUnit.Framework;

public class ConfigureEndpointAcceptanceTestingTransport : IConfigureEndpointTestExecution
{
public ConfigureEndpointAcceptanceTestingTransport(bool useNativePubSub, bool useNativeDelayedDelivery)
{
this.useNativePubSub = useNativePubSub;
this.useNativeDelayedDelivery = useNativeDelayedDelivery;
}

public Task Cleanup()
{
if (Directory.Exists(storageDir))
{
Directory.Delete(storageDir, true);
}

return Task.FromResult(0);
}

public Task Configure(string endpointName, EndpointConfiguration configuration, RunSettings settings, PublisherMetadata publisherMetadata)
{
var testRunId = TestContext.CurrentContext.Test.ID;

string tempDir;

if (Environment.OSVersion.Platform == PlatformID.Win32NT)
{
//can't use bin dir since that will be too long on the build agents
tempDir = @"c:\temp";
}
else
{
tempDir = Path.GetTempPath();
}

storageDir = Path.Combine(tempDir, testRunId);

var transportConfig = configuration.UseTransport<AcceptanceTestingTransport>()
.StorageDirectory(storageDir)
.UseNativePubSub(useNativePubSub)
.UseNativeDelayedDelivery(useNativeDelayedDelivery);

if (!useNativePubSub)
{
//apply publisher registrations required for message driven pub/sub
var routingConfig = transportConfig.Routing();
foreach (var publisherMetadataPublisher in publisherMetadata.Publishers)
{
foreach (var @event in publisherMetadataPublisher.Events)
{
routingConfig.RegisterPublisher(@event, publisherMetadataPublisher.PublisherName);
}
}
}

return Task.FromResult(0);
}

readonly bool useNativePubSub;
readonly bool useNativeDelayedDelivery;

string storageDir;
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,27 @@
using System.Threading.Tasks;
using NServiceBus;
using NServiceBus.AcceptanceTesting.Support;
using NServiceBus.Persistence;
using NUnit.Framework;

public class ConfigureEndpointLearningPersistence : IConfigureEndpointTestExecution
{
public Task Configure(string endpointName, EndpointConfiguration configuration, RunSettings settings, PublisherMetadata publisherMetadata)
{
//can't use bindir since that will be to long on the build agents
storageDir = Path.Combine(@"c:\temp", Guid.NewGuid().ToString("N"));
var testRunId = TestContext.CurrentContext.Test.ID;

string tempDir;

if (Environment.OSVersion.Platform == PlatformID.Win32NT)
{
//can't use bin dir since that will be too long on the build agents
tempDir = @"c:\temp";
}
else
{
tempDir = Path.GetTempPath();
}

storageDir = Path.Combine(tempDir, testRunId);

configuration.UsePersistence<InMemoryPersistence, StorageType.Subscriptions>();
configuration.UsePersistence<InMemoryPersistence, StorageType.Timeouts>();
Expand Down
Loading

0 comments on commit 1870d5a

Please sign in to comment.