1- namespace ServiceControl . AcceptanceTests . Recoverability . ExternalIntegration
2- {
3- using System . Collections . Generic ;
4- using System . Linq ;
5- using System . Threading . Tasks ;
6- using AcceptanceTesting ;
7- using AcceptanceTesting . EndpointTemplates ;
8- using Contracts ;
9- using NServiceBus ;
10- using NServiceBus . AcceptanceTesting ;
11- using NUnit . Framework ;
12- using ServiceControl . MessageFailures ;
13- using ServiceControl . MessageFailures . Api ;
14- using JsonSerializer = System . Text . Json . JsonSerializer ;
1+ // namespace ServiceControl.AcceptanceTests.Recoverability.ExternalIntegration
2+ // {
3+ // using System.Collections.Generic;
4+ // using System.Linq;
5+ // using System.Threading.Tasks;
6+ // using AcceptanceTesting;
7+ // using AcceptanceTesting.EndpointTemplates;
8+ // using Contracts;
9+ // using NServiceBus;
10+ // using NServiceBus.AcceptanceTesting;
11+ // using NUnit.Framework;
12+ // using ServiceControl.MessageFailures;
13+ // using ServiceControl.MessageFailures.Api;
14+ // using JsonSerializer = System.Text.Json.JsonSerializer;
15+ // using ServiceBus.Management.Infrastructure.Settings;
16+ //
17+ // class When_a_failed_edit_is_resolved_by_retry : ExternalIntegrationAcceptanceTest
18+ // {
19+ // [Test]
20+ // public async Task Should_publish_notification()
21+ // {
22+ // var context = await Define<EditMessageResolutionContext>()
23+ // .WithEndpoint<MessageReceiver>(b => b.When(async (bus, c) =>
24+ // {
25+ // await bus.Subscribe<MessageFailureResolvedByRetry>();
26+ // }).When(c => c.SendLocal(new EditResolutionMessage())).DoNotFailOnErrorMessages())
27+ // .Done(async ctx =>
28+ // {
29+ // if (!ctx.OriginalMessageHandled)
30+ // {
31+ // return false;
32+ // }
33+ //
34+ // if (!ctx.EditedAndRetriedMessage)
35+ // {
36+ // var allFailedMessages =
37+ // await this.TryGet<IList<FailedMessageView>>($"/api/errors/?status=unresolved");
38+ // if (!allFailedMessages.HasResult)
39+ // {
40+ // return false;
41+ // }
42+ //
43+ // if (allFailedMessages.Item.Count != 1)
44+ // {
45+ // return false;
46+ // }
47+ //
48+ // ctx.OriginalMessageFailureId = allFailedMessages.Item.First().Id;
49+ // ctx.EditedAndRetriedMessage = true;
50+ //
51+ // string editedMessage = JsonSerializer.Serialize(new EditResolutionMessage
52+ // {
53+ // HasBeenEdited = true
54+ // });
55+ //
56+ // SingleResult<FailedMessage> failedMessage =
57+ // await this.TryGet<FailedMessage>($"/api/errors/{ctx.OriginalMessageFailureId}");
58+ //
59+ // var editModel = new EditMessageModel
60+ // {
61+ // MessageBody = editedMessage,
62+ // MessageHeaders = failedMessage.Item.ProcessingAttempts.Last().Headers
63+ // };
64+ // await this.Post($"/api/edit/{ctx.OriginalMessageFailureId}", editModel);
65+ // return false;
66+ // }
67+ //
68+ // if (!ctx.RetriedMessage)
69+ // {
70+ // var allFailedMessagesAfterEdit =
71+ // await this.TryGet<IList<FailedMessageView>>($"/api/errors/?status=unresolved");
72+ // if (!allFailedMessagesAfterEdit.HasResult)
73+ // {
74+ // return false;
75+ // }
76+ //
77+ // if (allFailedMessagesAfterEdit.Item.Count != 1)
78+ // {
79+ // return false;
80+ // }
81+ //
82+ // ctx.EditedMessageFailureId = allFailedMessagesAfterEdit.Item.First().Id;
83+ // ctx.RetriedMessage = true;
84+ //
85+ // await this.Post<object>($"/api/errors/{ctx.EditedMessageFailureId}/retry");
86+ // return false;
87+ // }
88+ //
89+ // if (!ctx.RetriedMessageHandled)
90+ // {
91+ // return false;
92+ // }
93+ //
94+ // if (!ctx.MessageResolved)
95+ // {
96+ // return false;
97+ // }
98+ //
99+ // return true;
100+ // }).Run();
101+ //
102+ // Assert.That(context.ResolvedMessageId, Is.EqualTo(context.OriginalMessageFailureId));
103+ // }
104+ //
105+ //
106+ // public class EditMessageResolutionContext : ScenarioContext
107+ // {
108+ // public bool OriginalMessageHandled { get; set; }
109+ // public bool EditedMessage { get; set; }
110+ // public string OriginalMessageFailureId { get; set; }
111+ // public bool EditedMessageHandled { get; set; }
112+ // public string ResolvedMessageId { get; set; }
113+ // public bool MessageResolved { get; set; }
114+ // public bool EditedAndRetriedMessgaeHandled { get; set; }
115+ // public bool RetriedMessageHandled { get; set; }
116+ // public string EditedMessageFailureId { get; set; }
117+ // public bool EditedAndRetriedMessage { get; set; }
118+ // public bool RetriedMessage { get; set; }
119+ // }
120+ //
121+ // public class MessageReceiver : EndpointConfigurationBuilder
122+ // {
123+ // public MessageReceiver() =>
124+ // EndpointSetup<DefaultServerWithoutAudit>(c =>
125+ // {
126+ // var routing = c.ConfigureRouting();
127+ // routing.RouteToEndpoint(typeof(FailedMessagesArchived).Assembly,
128+ // Settings.DEFAULT_INSTANCE_NAME);
129+ // },
130+ // publisherMetadata =>
131+ // {
132+ // publisherMetadata.RegisterPublisherFor<FailedMessagesArchived>(Settings.DEFAULT_INSTANCE_NAME);
133+ // });
134+ //
135+ //
136+ // public class EditMessageResolutionHandler(EditMessageResolutionContext testContext)
137+ // : IHandleMessages<EditResolutionMessage>, IHandleMessages<MessageFailureResolvedByRetry>
138+ // {
139+ // public Task Handle(EditResolutionMessage message, IMessageHandlerContext context)
140+ // {
141+ // if (!message.HasBeenEdited)
142+ // {
143+ // testContext.OriginalMessageHandled = true;
144+ // throw new SimulatedException();
145+ // }
146+ //
147+ // if (!testContext.RetriedMessage)
148+ // {
149+ // testContext.EditedAndRetriedMessgaeHandled = true;
150+ // throw new SimulatedException();
151+ // }
152+ //
153+ //
154+ // testContext.RetriedMessageHandled = true;
155+ // return Task.CompletedTask;
156+ // }
157+ //
158+ // public Task Handle(MessageFailureResolvedByRetry message, IMessageHandlerContext context)
159+ // {
160+ // testContext.ResolvedMessageId = message.FailedMessageId;
161+ // testContext.MessageResolved = true;
162+ // return Task.CompletedTask;
163+ // }
164+ // }
165+ // }
166+ //
167+ // public class EditResolutionMessage : IMessage
168+ // {
169+ // public bool HasBeenEdited { get; init; }
170+ // }
171+ // }
172+ // }
15173
16- class When_a_failed_edit_is_resolved_by_retry : ExternalIntegrationAcceptanceTest
17- {
18- [ Test ]
19- public async Task Should_publish_notification ( )
20- {
21- var context = await Define < EditMessageResolutionContext > ( )
22- . WithEndpoint < MessageReceiver > ( b => b . When ( async ( bus , c ) =>
23- {
24- await bus . Subscribe < MessageFailureResolvedByRetry > ( ) ;
25- } ) . When ( c => c . SendLocal ( new EditResolutionMessage ( ) ) ) . DoNotFailOnErrorMessages ( ) )
26- . Done ( async ctx =>
27- {
28- if ( ! ctx . OriginalMessageHandled )
29- {
30- return false ;
31- }
32-
33- if ( ! ctx . EditedAndRetriedMessage )
34- {
35- var allFailedMessages =
36- await this . TryGet < IList < FailedMessageView > > ( $ "/api/errors/?status=unresolved") ;
37- if ( ! allFailedMessages . HasResult )
38- {
39- return false ;
40- }
41-
42- if ( allFailedMessages . Item . Count != 1 )
43- {
44- return false ;
45- }
46-
47- ctx . OriginalMessageFailureId = allFailedMessages . Item . First ( ) . Id ;
48- ctx . EditedAndRetriedMessage = true ;
49-
50- string editedMessage = JsonSerializer . Serialize ( new EditResolutionMessage
51- {
52- HasBeenEdited = true
53- } ) ;
54-
55- SingleResult < FailedMessage > failedMessage =
56- await this . TryGet < FailedMessage > ( $ "/api/errors/{ ctx . OriginalMessageFailureId } ") ;
57-
58- var editModel = new EditMessageModel
59- {
60- MessageBody = editedMessage ,
61- MessageHeaders = failedMessage . Item . ProcessingAttempts . Last ( ) . Headers
62- } ;
63- await this . Post ( $ "/api/edit/{ ctx . OriginalMessageFailureId } ", editModel ) ;
64- return false ;
65- }
66-
67- if ( ! ctx . RetriedMessage )
68- {
69- var allFailedMessagesAfterEdit =
70- await this . TryGet < IList < FailedMessageView > > ( $ "/api/errors/?status=unresolved") ;
71- if ( ! allFailedMessagesAfterEdit . HasResult )
72- {
73- return false ;
74- }
75-
76- if ( allFailedMessagesAfterEdit . Item . Count != 1 )
77- {
78- return false ;
79- }
80-
81- ctx . EditedMessageFailureId = allFailedMessagesAfterEdit . Item . First ( ) . Id ;
82- ctx . RetriedMessage = true ;
83-
84- await this . Post < object > ( $ "/api/errors/{ ctx . EditedMessageFailureId } /retry") ;
85- return false ;
86- }
87-
88- if ( ! ctx . RetriedMessageHandled )
89- {
90- return false ;
91- }
92-
93- if ( ! ctx . MessageResolved )
94- {
95- return false ;
96- }
97-
98- return true ;
99- } ) . Run ( ) ;
100-
101- Assert . That ( context . ResolvedMessageId , Is . EqualTo ( context . OriginalMessageFailureId ) ) ;
102- }
103-
104-
105- class EditMessageResolutionContext : ScenarioContext
106- {
107- public bool OriginalMessageHandled { get ; set ; }
108- public bool EditedMessage { get ; set ; }
109- public string OriginalMessageFailureId { get ; set ; }
110- public bool EditedMessageHandled { get ; set ; }
111- public string ResolvedMessageId { get ; set ; }
112- public bool MessageResolved { get ; set ; }
113- public bool EditedAndRetriedMessgaeHandled { get ; set ; }
114- public bool RetriedMessageHandled { get ; set ; }
115- public string EditedMessageFailureId { get ; set ; }
116- public bool EditedAndRetriedMessage { get ; set ; }
117- public bool RetriedMessage { get ; set ; }
118- }
119-
120- class MessageReceiver : EndpointConfigurationBuilder
121- {
122- public MessageReceiver ( )
123- {
124- CustomEndpointName ( "simpleendpoint1" ) ;
125- EndpointSetup < DefaultServerWithoutAudit > ( c => c . NoRetries ( ) ) ;
126- }
127-
128- class EditMessageResolutionHandler ( EditMessageResolutionContext testContext )
129- : IHandleMessages < EditResolutionMessage > , IHandleMessages < MessageFailureResolvedByRetry >
130- {
131- public Task Handle ( EditResolutionMessage message , IMessageHandlerContext context )
132- {
133- if ( ! message . HasBeenEdited )
134- {
135- testContext . OriginalMessageHandled = true ;
136- throw new SimulatedException ( ) ;
137- }
138-
139- if ( ! testContext . RetriedMessage )
140- {
141- testContext . EditedAndRetriedMessgaeHandled = true ;
142- throw new SimulatedException ( ) ;
143- }
144-
145-
146- testContext . RetriedMessageHandled = true ;
147- return Task . CompletedTask ;
148- }
149-
150- public Task Handle ( MessageFailureResolvedByRetry message , IMessageHandlerContext context )
151- {
152- testContext . ResolvedMessageId = message . FailedMessageId ;
153- testContext . MessageResolved = true ;
154- return Task . CompletedTask ;
155- }
156- }
157- }
158-
159- class EditResolutionMessage : IMessage
160- {
161- public bool HasBeenEdited { get ; init ; }
162- public bool HasBeenRetried { get ; init ; }
163- }
164- }
165- }
0 commit comments