2121import com .github .tomakehurst .wiremock .junit5 .WireMockTest ;
2222import org .junit .jupiter .api .DisplayName ;
2323import org .junit .jupiter .api .Test ;
24+ import software .amazon .awssdk .services .emrserverless .model .ApplicationState ;
2425import software .amazon .awssdk .services .emrserverless .model .JobRunState ;
2526
2627import sleeper .core .util .PollWithRetries ;
3435import static org .assertj .core .api .Assertions .assertThatThrownBy ;
3536import static sleeper .cdk .custom .WiremockEmrServerlessTestHelper .aResponseWithJobRunWithState ;
3637import static sleeper .cdk .custom .WiremockEmrServerlessTestHelper .aResponseWithNoJobRuns ;
38+ import static sleeper .cdk .custom .WiremockEmrServerlessTestHelper .aResponseWithStartedApplication ;
3739import static sleeper .cdk .custom .WiremockEmrServerlessTestHelper .aResponseWithStoppedApplication ;
3840import static sleeper .cdk .custom .WiremockEmrServerlessTestHelper .aResponseWithStoppingApplication ;
3941import static sleeper .cdk .custom .WiremockEmrServerlessTestHelper .aResponseWithTerminatedApplication ;
@@ -64,13 +66,22 @@ void shouldTimeOutWhenDeleting(WireMockRuntimeInfo runtimeInfo) throws Exception
6466
6567 // Given
6668 stubFor (listRunningJobsForApplicationRequest (applicationId )
67- .willReturn (aResponseWithNoJobRuns ()));
68- stubFor (stopApplicationRequest (applicationId ).inScenario ("StopApplication" )
69+ .inScenario ("ShouldTimeOut" )
70+ .willReturn (aResponseWithStartedApplication (applicationId ))
71+ .willSetStateTo (STARTED ));
72+ stubFor (getApplicationRequest (applicationId )
73+ .inScenario ("ShouldTimeOut" )
74+ .willReturn (aResponseWithStartedApplication (applicationId ))
75+ .whenScenarioStateIs (STARTED ));
76+ stubFor (stopApplicationRequest (applicationId )
77+ .inScenario ("ShouldTimeOut" )
6978 .willReturn (aResponse ().withStatus (200 ))
70- .whenScenarioStateIs (STARTED ).willSetStateTo ("ApplicationStopping" ));
71- stubFor (getApplicationRequest (applicationId ).inScenario ("StopApplication" )
79+ .whenScenarioStateIs (STARTED )
80+ .willSetStateTo (ApplicationState .STOPPING .toString ()));
81+ stubFor (getApplicationRequest (applicationId )
82+ .inScenario ("ShouldTimeOut" )
7283 .willReturn (aResponseWithStoppingApplication (applicationId ))
73- .whenScenarioStateIs ("ApplicationStopping" ));
84+ .whenScenarioStateIs (ApplicationState . STOPPING . toString () ));
7485
7586 // Then
7687 assertThatThrownBy (() -> lambda .handleEvent (applicationEvent (applicationId , "Delete" ), null ))
@@ -84,23 +95,34 @@ void shouldTrackStoppingApplication(WireMockRuntimeInfo runtimeInfo) throws Exce
8495
8596 // Given
8697 stubFor (listRunningJobsForApplicationRequest (applicationId )
87- .willReturn (aResponseWithNoJobRuns ()));
88- stubFor (stopApplicationRequest (applicationId ).inScenario ("StopApplication" )
98+ .inScenario ("ShouldTrackStopping" )
99+ .willReturn (aResponseWithNoJobRuns ())
100+ .willSetStateTo (STARTED ));
101+ stubFor (getApplicationRequest (applicationId )
102+ .inScenario ("ShouldTrackStopping" )
103+ .willReturn (aResponseWithStartedApplication (applicationId ))
104+ .whenScenarioStateIs (STARTED ));
105+ stubFor (stopApplicationRequest (applicationId )
106+ .inScenario ("ShouldTrackStopping" )
89107 .willReturn (aResponse ().withStatus (200 ))
90- .whenScenarioStateIs (STARTED ).willSetStateTo ("ApplicationStopping" ));
91- stubFor (getApplicationRequest (applicationId ).inScenario ("StopApplication" )
108+ .whenScenarioStateIs (STARTED )
109+ .willSetStateTo (ApplicationState .STOPPING .toString ()));
110+ stubFor (getApplicationRequest (applicationId )
111+ .inScenario ("ShouldTrackStopping" )
92112 .willReturn (aResponseWithStoppingApplication (applicationId ))
93- .whenScenarioStateIs ("ApplicationStopping" ).willSetStateTo ("ApplicationStopped" ));
94- stubFor (getApplicationRequest (applicationId ).inScenario ("StopApplication" )
113+ .whenScenarioStateIs (ApplicationState .STOPPING .toString ())
114+ .willSetStateTo (ApplicationState .STOPPED .toString ()));
115+ stubFor (getApplicationRequest (applicationId )
116+ .inScenario ("ShouldTrackStopping" )
95117 .willReturn (aResponseWithStoppedApplication (applicationId ))
96- .whenScenarioStateIs ("ApplicationStopped" ));
118+ .whenScenarioStateIs (ApplicationState . STOPPED . toString () ));
97119
98120 // Then
99121 lambda .handleEvent (applicationEvent (applicationId , "Delete" ), null );
100122 // Then
101- verify (4 , anyRequestedForEmrServerless ());
123+ verify (5 , anyRequestedForEmrServerless ());
102124 verify (1 , stopApplicationRequested (applicationId ));
103- verify (2 , getApplicationRequested (applicationId ));
125+ verify (3 , getApplicationRequested (applicationId ));
104126
105127 }
106128
@@ -110,32 +132,44 @@ void shouldStopEMRServerlessWhenApplicationIsStartedWithRunningJob(WireMockRunti
110132 lambda = lambda (runtimeInfo , PollWithRetries .noRetries ());
111133
112134 // Given
113- stubFor (listRunningJobsForApplicationRequest (applicationId ).inScenario ("StopJob" )
135+ stubFor (listRunningJobsForApplicationRequest (applicationId )
136+ .inScenario ("ShouldStopWithJobs" )
114137 .willReturn (aResponseWithJobRunWithState (applicationId , jobRunId , JobRunState .RUNNING ))
115- .whenScenarioStateIs (STARTED ));
116- stubFor (cancelJobRunRequest (applicationId , jobRunId ).inScenario ("StopJob" )
138+ .willSetStateTo (STARTED ));
139+ stubFor (cancelJobRunRequest (applicationId , jobRunId )
140+ .inScenario ("ShouldStopWithJobs" )
117141 .willReturn (ResponseDefinitionBuilder .okForEmptyJson ())
118- .whenScenarioStateIs (STARTED ).willSetStateTo ("JobStopped" ));
119- stubFor (listRunningOrCancellingJobsForApplicationRequest (applicationId ).inScenario ("StopJob" )
142+ .whenScenarioStateIs (STARTED )
143+ .willSetStateTo (JobRunState .CANCELLING .toString ()));
144+ stubFor (listRunningOrCancellingJobsForApplicationRequest (applicationId )
145+ .inScenario ("ShouldStopWithJobs" )
120146 .willReturn (aResponseWithNoJobRuns ())
121- .whenScenarioStateIs ("JobStopped" ));
122- stubFor (stopApplicationRequest (applicationId ).inScenario ("StopJob" )
147+ .whenScenarioStateIs (JobRunState .CANCELLING .toString ())
148+ .willSetStateTo (JobRunState .CANCELLED .toString ()));
149+ stubFor (getApplicationRequest (applicationId )
150+ .inScenario ("ShouldStopWithJobs" )
151+ .willReturn (aResponseWithStartedApplication (applicationId ))
152+ .whenScenarioStateIs (JobRunState .CANCELLED .toString ()));
153+ stubFor (stopApplicationRequest (applicationId )
154+ .inScenario ("ShouldStopWithJobs" )
123155 .willReturn (aResponse ().withStatus (200 ))
124- .whenScenarioStateIs ("JobStopped" ).willSetStateTo ("AppStopped" ));
125- stubFor (getApplicationRequest (applicationId ).inScenario ("StopJob" )
156+ .whenScenarioStateIs (JobRunState .CANCELLED .toString ())
157+ .willSetStateTo (ApplicationState .STOPPED .toString ()));
158+ stubFor (getApplicationRequest (applicationId )
159+ .inScenario ("ShouldStopWithJobs" )
126160 .willReturn (aResponseWithTerminatedApplication (applicationId ))
127- .whenScenarioStateIs ("AppStopped" ));
161+ .whenScenarioStateIs (ApplicationState . STOPPED . toString () ));
128162
129163 // When
130164 lambda .handleEvent (applicationEvent (applicationId , "Delete" ), null );
131165
132166 // Then
133- verify (5 , anyRequestedForEmrServerless ());
167+ verify (6 , anyRequestedForEmrServerless ());
134168 verify (1 , listRunningJobsForApplicationRequested (applicationId ));
135169 verify (1 , cancelJobRunRequested (applicationId , jobRunId ));
136170 verify (1 , listRunningOrCancellingJobsForApplicationRequested (applicationId ));
137171 verify (1 , stopApplicationRequested (applicationId ));
138- verify (1 , getApplicationRequested (applicationId ));
172+ verify (2 , getApplicationRequested (applicationId ));
139173 }
140174
141175 @ Test
@@ -145,22 +179,31 @@ void shouldStopEMRServerlessWhenApplicationIsStartedWithNoRunningJobs(WireMockRu
145179
146180 // Given
147181 stubFor (listRunningJobsForApplicationRequest (applicationId )
148- .willReturn (aResponseWithNoJobRuns ()));
149- stubFor (stopApplicationRequest (applicationId ).inScenario ("StopApplication" )
182+ .inScenario ("ShouldStopNoJobs" )
183+ .willReturn (aResponseWithNoJobRuns ())
184+ .willSetStateTo (STARTED ));
185+ stubFor (getApplicationRequest (applicationId )
186+ .inScenario ("ShouldStopNoJobs" )
187+ .willReturn (aResponseWithStartedApplication (applicationId ))
188+ .whenScenarioStateIs (STARTED ));
189+ stubFor (stopApplicationRequest (applicationId )
190+ .inScenario ("ShouldStopNoJobs" )
150191 .willReturn (aResponse ().withStatus (200 ))
151- .whenScenarioStateIs (STARTED ).willSetStateTo ("ApplicationStopped" ));
152- stubFor (getApplicationRequest (applicationId ).inScenario ("StopApplication" )
192+ .whenScenarioStateIs (STARTED )
193+ .willSetStateTo (ApplicationState .STOPPED .toString ()));
194+ stubFor (getApplicationRequest (applicationId )
195+ .inScenario ("ShouldStopNoJobs" )
153196 .willReturn (aResponseWithTerminatedApplication (applicationId ))
154- .whenScenarioStateIs ("ApplicationStopped" ));
197+ .whenScenarioStateIs (ApplicationState . STOPPED . toString () ));
155198
156199 // When
157200 lambda .handleEvent (applicationEvent (applicationId , "Delete" ), null );
158201
159202 // Then
160- verify (3 , anyRequestedForEmrServerless ());
203+ verify (4 , anyRequestedForEmrServerless ());
161204 verify (1 , listRunningJobsForApplicationRequested (applicationId ));
162205 verify (1 , stopApplicationRequested (applicationId ));
163- verify (1 , getApplicationRequested (applicationId ));
206+ verify (2 , getApplicationRequested (applicationId ));
164207 }
165208
166209 @ Test
0 commit comments