Skip to content

Commit 5d5e85e

Browse files
committed
FINERACT-1420: Idempotency improvement for test and edge cases
1 parent 9ff306c commit 5d5e85e

3 files changed

Lines changed: 2 additions & 62 deletions

File tree

fineract-core/src/main/java/org/apache/fineract/commands/service/DeterministicIdempotencyKeyGenerator.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import java.util.Collections;
3131
import java.util.List;
3232
import lombok.RequiredArgsConstructor;
33-
import org.apache.fineract.commands.domain.CommandWrapper;
3433
import org.springframework.stereotype.Component;
3534

3635
@Component
@@ -102,8 +101,4 @@ private String currentTimeWindow() {
102101
long window = now.getEpochSecond() / (5 * 60);
103102
return String.valueOf(window);
104103
}
105-
106-
private String buildContext(CommandWrapper wrapper) {
107-
return (wrapper.getActionName() + ":" + wrapper.getEntityName() + ":" + wrapper.getHref());
108-
}
109104
}

fineract-provider/src/test/java/org/apache/fineract/commands/service/IdempotencyKeyResolverTest.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@ void shouldGenerateKeyUsingContextWhenHeaderMissing() {
8989
when(wrapper.getEntityId()).thenReturn(null);
9090
when(wrapper.getJobName()).thenReturn(null);
9191

92-
9392
when(deterministicIdempotencyKeyGenerator.generate(anyString(), anyString())).thenReturn("generated-key");
9493

9594
String result = underTest.resolve(wrapper);
@@ -209,12 +208,10 @@ void shouldUseDeterministicKeyWhenJobNamePresentEvenWithoutClientOrEntity() {
209208

210209
Assertions.assertEquals("job-key", result.key());
211210
Assertions.assertTrue(result.isDeterministic());
212-
verify(deterministicIdempotencyKeyGenerator).generate(anyString(),
213-
contains("LOAN_CLOSE_OF_BUSINESS"));
211+
verify(deterministicIdempotencyKeyGenerator).generate(anyString(), contains("LOAN_CLOSE_OF_BUSINESS"));
214212
// Verify the key is stored in context for internal retry reuse
215213
Assertions.assertEquals("job-key",
216-
fineractRequestContextHolder.getAttribute(
217-
SynchronousCommandProcessingService.IDEMPOTENCY_KEY_ATTRIBUTE));
214+
fineractRequestContextHolder.getAttribute(SynchronousCommandProcessingService.IDEMPOTENCY_KEY_ATTRIBUTE));
218215

219216
}
220217

integration-tests/src/test/java/org/apache/fineract/integrationtests/IdempotencyTest.java

Lines changed: 0 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -154,58 +154,6 @@ public void shouldTheSecondRequestWithSameIdempotencyKeyWillFailureToo() {
154154
assertEquals((Map) body1.jsonPath().get(""), response2.getBody().jsonPath().get(""));
155155
}
156156

157-
// @Test
158-
// public void shouldReuseDeterministicIdempotencyKeyWhenHeaderMissing() {
159-
// ResponseSpecification updateResponseSpec = new ResponseSpecBuilder().expectStatusCode(204).build();
160-
// JobBusinessStepConfigData originalStepConfig = IdempotencyHelper.getConfiguredBusinessStepsByJobName(requestSpec,
161-
// responseSpec,
162-
// LOAN_JOB_NAME);
163-
//
164-
// try {
165-
// String requestBody = "{\"businessSteps\":[{\"stepName\":\"APPLY_CHARGE_TO_OVERDUE_LOANS\",\"order\":1}]}";
166-
// Response response = IdempotencyHelper.updateBusinessStepOrderWithoutIdempotencyKey(requestSpec,
167-
// updateResponseSpec,
168-
// LOAN_JOB_NAME, requestBody);
169-
// Response responseSecond = IdempotencyHelper.updateBusinessStepOrderWithoutIdempotencyKey(requestSpec,
170-
// updateResponseSpec,
171-
// LOAN_JOB_NAME, requestBody);
172-
//
173-
// assertEquals(response.getBody().asString(), responseSecond.getBody().asString());
174-
// assertNull(response.header(AbstractIdempotentCommandException.IDEMPOTENT_CACHE_HEADER));
175-
// assertNotNull(responseSecond.header(AbstractIdempotentCommandException.IDEMPOTENT_CACHE_HEADER));
176-
// } finally {
177-
// restoreOriginalStepConfig(updateResponseSpec, originalStepConfig);
178-
// }
179-
// }
180-
181-
// @Test
182-
// public void shouldReuseDeterministicIdempotencyKeyForReorderedJsonWhenHeaderMissing() {
183-
// ResponseSpecification updateResponseSpec = new ResponseSpecBuilder().expectStatusCode(204).build();
184-
// JobBusinessStepConfigData originalStepConfig = IdempotencyHelper.getConfiguredBusinessStepsByJobName(requestSpec,
185-
// responseSpec,
186-
// LOAN_JOB_NAME);
187-
//
188-
// try {
189-
// String firstRequestBody = "{\"businessSteps\":[{\"stepName\":\"APPLY_CHARGE_TO_OVERDUE_LOANS\",\"order\":1},"
190-
// + "{\"stepName\":\"LOAN_DELINQUENCY_CLASSIFICATION\",\"order\":2}]}";
191-
// String secondRequestBody = "{\"businessSteps\":[{\"order\":1,\"stepName\":\"APPLY_CHARGE_TO_OVERDUE_LOANS\"},"
192-
// + "{\"order\":2,\"stepName\":\"LOAN_DELINQUENCY_CLASSIFICATION\"}]}";
193-
//
194-
// Response response = IdempotencyHelper.updateBusinessStepOrderWithoutIdempotencyKey(requestSpec,
195-
// updateResponseSpec,
196-
// LOAN_JOB_NAME, firstRequestBody);
197-
// Response responseSecond = IdempotencyHelper.updateBusinessStepOrderWithoutIdempotencyKey(requestSpec,
198-
// updateResponseSpec,
199-
// LOAN_JOB_NAME, secondRequestBody);
200-
//
201-
// assertEquals(response.getBody().asString(), responseSecond.getBody().asString());
202-
// assertNull(response.header(AbstractIdempotentCommandException.IDEMPOTENT_CACHE_HEADER));
203-
// assertNotNull(responseSecond.header(AbstractIdempotentCommandException.IDEMPOTENT_CACHE_HEADER));
204-
// } finally {
205-
// restoreOriginalStepConfig(updateResponseSpec, originalStepConfig);
206-
// }
207-
// }
208-
209157
@Test
210158
public void shouldCacheFailedRequestWhenHeaderMissing() {
211159
ResponseSpecification responseSpecForError = new ResponseSpecBuilder().expectStatusCode(400).build();

0 commit comments

Comments
 (0)