/
DefaultServerBase.cs
59 lines (43 loc) · 2.95 KB
/
DefaultServerBase.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
namespace ServiceControl.AcceptanceTesting.EndpointTemplates
{
using System;
using System.Threading.Tasks;
using AcceptanceTesting;
using NServiceBus;
using NServiceBus.AcceptanceTesting.Support;
using NServiceBus.Configuration.AdvancedExtensibility;
using NServiceBus.Features;
using ServiceControl.AcceptanceTesting.InfrastructureConfig;
public abstract class DefaultServerBase(IConfigureEndpointTestExecution endpointTestExecutionConfiguration)
: IEndpointSetupTemplate
{
protected DefaultServerBase() : this(new ConfigureEndpointLearningTransport())
{
}
public virtual async Task<EndpointConfiguration> GetConfiguration(RunDescriptor runDescriptor, EndpointCustomizationConfiguration endpointCustomizations, Func<EndpointConfiguration, Task> configurationBuilderCustomization)
{
var endpointConfiguration = new EndpointConfiguration(endpointCustomizations.EndpointName);
endpointConfiguration.Pipeline.Register(new StampDispatchBehavior(runDescriptor.ScenarioContext), "Stamps outgoing messages with session ID");
endpointConfiguration.Pipeline.Register(new DiscardMessagesBehavior(runDescriptor.ScenarioContext), "Discards messages based on session ID");
endpointConfiguration.SendFailedMessagesTo("error");
endpointConfiguration.EnableInstallers();
await endpointTestExecutionConfiguration.Configure(endpointCustomizations.EndpointName, endpointConfiguration, runDescriptor.Settings, endpointCustomizations.PublisherMetadata);
runDescriptor.OnTestCompleted(_ => endpointTestExecutionConfiguration.Cleanup());
endpointConfiguration.RegisterComponentsAndInheritanceHierarchy(runDescriptor);
await endpointConfiguration.DefinePersistence(runDescriptor, endpointCustomizations);
endpointConfiguration.UseSerialization<NewtonsoftJsonSerializer>();
endpointConfiguration.Pipeline.Register<TraceIncomingBehavior.Registration>();
endpointConfiguration.Pipeline.Register<TraceOutgoingBehavior.Registration>();
endpointConfiguration.Conventions().DefiningEventsAs(t => typeof(IEvent).IsAssignableFrom(t) || IsExternalContract(t));
endpointConfiguration.GetSettings().Set("SC.ScenarioContext", runDescriptor.ScenarioContext);
endpointConfiguration.DisableFeature<AutoSubscribe>();
await configurationBuilderCustomization(endpointConfiguration);
// scan types at the end so that all types used by the configuration have been loaded into the AppDomain
endpointConfiguration.ScanTypesForTest(endpointCustomizations);
return endpointConfiguration;
}
static bool IsExternalContract(Type t) =>
t.Namespace != null && t.Namespace.StartsWith("ServiceControl.Contracts")
&& t.Assembly.GetName().Name == "ServiceControl.Contracts";
}
}