Skip to content

Commit e626228

Browse files
author
John Simons
committed
Merge branch '4.0.3'
2 parents decbcbd + 8b87ce9 commit e626228

9 files changed

+476
-15
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
namespace NServiceBus.AcceptanceTests.Gateway
2+
{
3+
using System;
4+
using Config;
5+
using EndpointTemplates;
6+
using AcceptanceTesting;
7+
using NUnit.Framework;
8+
using ScenarioDescriptors;
9+
10+
public class When_doing_request_response_between_sites : NServiceBusAcceptanceTest
11+
{
12+
[Test]
13+
public void Should_be_able_to_reply_to_the_message()
14+
{
15+
Scenario.Define<Context>()
16+
.WithEndpoint<SiteA>(
17+
b => b.Given((bus, context) =>
18+
bus.SendToSites(new[] {"SiteB"}, new MyRequest())
19+
.Register(result => context.GotCallback = true)))
20+
.WithEndpoint<SiteB>()
21+
.Done(c => c.GotResponseBack)
22+
.Repeat(r => r.For(Transports.Default))
23+
.Should(c =>
24+
{
25+
Assert.IsTrue(c.GotResponseBack);
26+
Assert.IsTrue(c.GotCallback);
27+
})
28+
.Run();
29+
}
30+
31+
public class Context : ScenarioContext
32+
{
33+
public bool GotResponseBack { get; set; }
34+
public bool GotCallback { get; set; }
35+
}
36+
37+
public class SiteA : EndpointConfigurationBuilder
38+
{
39+
public SiteA()
40+
{
41+
EndpointSetup<DefaultServer>(c => c.RunGateway().UseInMemoryGatewayPersister())
42+
.WithConfig<GatewayConfig>(c =>
43+
{
44+
c.Sites = new SiteCollection
45+
{
46+
new SiteConfig
47+
{
48+
Key = "SiteB",
49+
Address = "http://localhost:25899/SiteB/",
50+
ChannelType = "http"
51+
}
52+
};
53+
54+
c.Channels = new ChannelCollection
55+
{
56+
new ChannelConfig
57+
{
58+
Address = "http://localhost:25899/SiteA/",
59+
ChannelType = "http",
60+
Default = true
61+
}
62+
};
63+
});
64+
}
65+
66+
public class MyResponseHandler : IHandleMessages<MyResponse>
67+
{
68+
public Context Context { get; set; }
69+
70+
public void Handle(MyResponse response)
71+
{
72+
Context.GotResponseBack = true;
73+
}
74+
}
75+
}
76+
77+
public class SiteB : EndpointConfigurationBuilder
78+
{
79+
public SiteB()
80+
{
81+
EndpointSetup<DefaultServer>(c => c.RunGateway().UseInMemoryGatewayPersister())
82+
.WithConfig<GatewayConfig>(c =>
83+
{
84+
c.Channels = new ChannelCollection
85+
{
86+
new ChannelConfig
87+
{
88+
Address = "http://localhost:25899/SiteB/",
89+
ChannelType = "http",
90+
Default = true
91+
}
92+
};
93+
});
94+
95+
}
96+
97+
public class MyRequestHandler : IHandleMessages<MyRequest>
98+
{
99+
public IBus Bus { get; set; }
100+
101+
public void Handle(MyRequest request)
102+
{
103+
Bus.Reply(new MyResponse());
104+
}
105+
}
106+
}
107+
108+
[Serializable]
109+
public class MyRequest : ICommand
110+
{
111+
}
112+
113+
[Serializable]
114+
public class MyResponse : IMessage
115+
{
116+
}
117+
}
118+
}

AcceptanceTests/NServiceBus.AcceptanceTests/NServiceBus.AcceptanceTests.csproj

+4
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@
153153
<Compile Include="Configuration\When_a_config_override_is_found.cs" />
154154
<Compile Include="Encryption\When_using_encryption.cs" />
155155
<Compile Include="EndpointTemplates\BusExtensions.cs" />
156+
<Compile Include="Gateway\When_doing_request_response_between_sites.cs" />
156157
<Compile Include="Gateway\When_using_a_custom_correlation_id.cs" />
157158
<Compile Include="NServiceBusAcceptanceTest.cs" />
158159
<Compile Include="DataBus\When_sending_databus_properties.cs" />
@@ -170,6 +171,9 @@
170171
<Compile Include="Retries\When_messages_fails_flr.cs" />
171172
<Compile Include="Retries\When_message_fails_with_retries_set_to_0.cs" />
172173
<Compile Include="Retries\When_doing_flr_with_default_settings.cs" />
174+
<Compile Include="Sagas\When_doing_request_response_between_sagas.cs" />
175+
<Compile Include="Sagas\When_sending_from_a_saga_timeout.cs" />
176+
<Compile Include="Sagas\When_sending_from_a_saga_handle.cs" />
173177
<Compile Include="Sagas\When_an_endpoint_replies_to_a_saga.cs" />
174178
<Compile Include="Sagas\When_a_saga_is_started_by_an_event_published_by_another_saga.cs" />
175179
<Compile Include="Sagas\When_receiving_a_message_that_is_mapped_to_an_existing_saga_instance.cs" />
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+

2+
namespace NServiceBus.AcceptanceTests.Sagas
3+
{
4+
using System;
5+
using EndpointTemplates;
6+
using AcceptanceTesting;
7+
using NUnit.Framework;
8+
using Saga;
9+
using ScenarioDescriptors;
10+
11+
public class When_doing_request_response_between_sagas : NServiceBusAcceptanceTest
12+
{
13+
[Test]
14+
public void Should_autocorrelate_the_response_back_to_the_requesting_saga()
15+
{
16+
Scenario.Define<Context>()
17+
.WithEndpoint<Endpoint>(b => b.Given(bus => bus.SendLocal(new InitiateRequestingSaga { DataId = Guid.NewGuid() })))
18+
.Done(c => c.DidRequestingSagaGetTheResponse)
19+
.Repeat(r => r.For(Transports.Default))
20+
.Should(c => Assert.True(c.DidRequestingSagaGetTheResponse))
21+
.Run(TimeSpan.FromSeconds(20));
22+
}
23+
24+
public class Context : ScenarioContext
25+
{
26+
public bool DidRequestingSagaGetTheResponse { get; set; }
27+
}
28+
29+
public class Endpoint : EndpointConfigurationBuilder
30+
{
31+
32+
public Endpoint()
33+
{
34+
EndpointSetup<DefaultServer>();
35+
}
36+
37+
public class RequestingSaga : Saga<RequestingSaga.RequestingSagaData>,
38+
IAmStartedByMessages<InitiateRequestingSaga>,
39+
IHandleMessages<ResponseFromOtherSaga>
40+
{
41+
public Context Context { get; set; }
42+
43+
public void Handle(InitiateRequestingSaga message)
44+
{
45+
Data.DataId = message.DataId;
46+
Bus.SendLocal(new RequestToRespondingSaga());
47+
}
48+
49+
public void Handle(ResponseFromOtherSaga message)
50+
{
51+
Context.DidRequestingSagaGetTheResponse = true;
52+
MarkAsComplete();
53+
}
54+
55+
public override void ConfigureHowToFindSaga()
56+
{
57+
ConfigureMapping<InitiateRequestingSaga>(m => m.DataId).ToSaga(s => s.DataId);
58+
}
59+
public class RequestingSagaData : ContainSagaData
60+
{
61+
[Unique]
62+
public Guid DataId { get; set; }
63+
}
64+
}
65+
66+
67+
68+
69+
public class RespondingSaga : Saga<RespondingSaga.RespondingSagaData>,
70+
IAmStartedByMessages<RequestToRespondingSaga>
71+
{
72+
public Context Context { get; set; }
73+
74+
public void Handle(RequestToRespondingSaga message)
75+
{
76+
Bus.Reply(new ResponseFromOtherSaga());
77+
}
78+
79+
public override void ConfigureHowToFindSaga()
80+
{
81+
}
82+
83+
public class RespondingSagaData : ContainSagaData
84+
{
85+
[Unique]
86+
public Guid DataId { get; set; }
87+
}
88+
}
89+
}
90+
91+
[Serializable]
92+
public class InitiateRequestingSaga : ICommand
93+
{
94+
public Guid DataId { get; set; }
95+
}
96+
97+
98+
[Serializable]
99+
public class RequestToRespondingSaga : ICommand
100+
{
101+
}
102+
103+
[Serializable]
104+
public class ResponseFromOtherSaga : IMessage
105+
{
106+
}
107+
}
108+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+

2+
namespace NServiceBus.AcceptanceTests.Sagas
3+
{
4+
using System;
5+
using EndpointTemplates;
6+
using AcceptanceTesting;
7+
using NUnit.Framework;
8+
using Saga;
9+
using ScenarioDescriptors;
10+
11+
public class When_sending_from_a_saga_handle : NServiceBusAcceptanceTest
12+
{
13+
[Test]
14+
public void Should_match_different_saga()
15+
{
16+
Scenario.Define<Context>()
17+
.WithEndpoint<Endpoint>(b => b.Given(bus => bus.SendLocal(new StartSaga1 { DataId = Guid.NewGuid() })))
18+
.Done(c => c.DidSaga2ReceiveMessage)
19+
.Repeat(r => r.For(Transports.Default))
20+
.Should(c => Assert.True(c.DidSaga2ReceiveMessage))
21+
.Run(TimeSpan.FromSeconds(20));
22+
}
23+
24+
public class Context : ScenarioContext
25+
{
26+
public bool DidSaga2ReceiveMessage { get; set; }
27+
}
28+
29+
public class Endpoint : EndpointConfigurationBuilder
30+
{
31+
32+
public Endpoint()
33+
{
34+
EndpointSetup<DefaultServer>();
35+
}
36+
37+
public class Saga1 : Saga<Saga1Data>, IAmStartedByMessages<StartSaga1>, IHandleMessages<MessageSaga1WillHandle>
38+
{
39+
public Context Context { get; set; }
40+
41+
public void Handle(StartSaga1 message)
42+
{
43+
var dataId = Guid.NewGuid();
44+
Data.DataId = dataId;
45+
Bus.SendLocal(new MessageSaga1WillHandle
46+
{
47+
DataId = dataId
48+
});
49+
}
50+
51+
public void Handle(MessageSaga1WillHandle message)
52+
{
53+
Bus.SendLocal(new StartSaga2());
54+
MarkAsComplete();
55+
}
56+
57+
public override void ConfigureHowToFindSaga()
58+
{
59+
ConfigureMapping<MessageSaga1WillHandle>(m => m.DataId).ToSaga(s => s.DataId);
60+
ConfigureMapping<StartSaga1>(m => m.DataId).ToSaga(s => s.DataId);
61+
}
62+
63+
}
64+
65+
public class Saga1Data : ContainSagaData
66+
{
67+
[Unique]
68+
public Guid DataId { get; set; }
69+
}
70+
71+
72+
public class Saga2 : Saga<Saga2Data>, IAmStartedByMessages<StartSaga2>
73+
{
74+
public Context Context { get; set; }
75+
76+
public void Handle(StartSaga2 message)
77+
{
78+
Context.DidSaga2ReceiveMessage = true;
79+
}
80+
81+
}
82+
83+
public class Saga2Data : ContainSagaData
84+
{
85+
}
86+
}
87+
88+
89+
[Serializable]
90+
public class StartSaga1 : ICommand
91+
{
92+
public Guid DataId { get; set; }
93+
}
94+
95+
96+
[Serializable]
97+
public class StartSaga2 : ICommand
98+
{
99+
}
100+
public class MessageSaga1WillHandle : IMessage
101+
{
102+
public Guid DataId { get; set; }
103+
}
104+
}
105+
}

0 commit comments

Comments
 (0)