use of com.endava.cats.model.CatsResponse in project cats by Endava.
the class BypassAuthenticationFuzzer method process.
private void process(FuzzingData data) {
testCaseListener.addScenario(LOGGER, "Send a happy flow bypassing authentication");
testCaseListener.addExpectedResult(LOGGER, "Should get a 403 or 401 response code");
Set<String> authenticationHeaders = this.getAuthenticationHeaderProvided(data);
if (!authenticationHeaders.isEmpty()) {
ServiceData serviceData = ServiceData.builder().relativePath(data.getPath()).headers(data.getHeaders()).httpMethod(data.getMethod()).payload(data.getPayload()).skippedHeaders(authenticationHeaders).queryParams(data.getQueryParams()).build();
CatsResponse response = serviceCaller.call(serviceData);
testCaseListener.reportResult(LOGGER, data, response, ResponseCodeFamily.FOURXX_AA);
} else {
testCaseListener.skipTest(LOGGER, "No authentication header provided.");
}
}
use of com.endava.cats.model.CatsResponse in project cats by Endava.
the class RemoveFieldsFuzzer method process.
private void process(FuzzingData data, List<String> required, Set<String> subset) {
String finalJsonPayload = this.getFuzzedJsonWithFieldsRemove(data.getPayload(), subset);
if (!JsonUtils.equalAsJson(finalJsonPayload, data.getPayload())) {
testCaseListener.addScenario(LOGGER, "Remove the following fields from request: {}", subset);
boolean hasRequiredFieldsRemove = this.hasRequiredFieldsRemove(required, subset);
testCaseListener.addExpectedResult(LOGGER, "Should return [{}] response code as required fields [{}] removed", ResponseCodeFamily.getExpectedWordingBasedOnRequiredFields(hasRequiredFieldsRemove));
CatsResponse response = serviceCaller.call(ServiceData.builder().relativePath(data.getPath()).headers(data.getHeaders()).payload(finalJsonPayload).queryParams(data.getQueryParams()).httpMethod(data.getMethod()).build());
testCaseListener.reportResult(LOGGER, data, response, ResponseCodeFamily.getResultCodeBasedOnRequiredFieldsRemoved(hasRequiredFieldsRemove));
} else {
testCaseListener.skipTest(LOGGER, "Field is from a different ANY_OF or ONE_OF payload");
}
}
use of com.endava.cats.model.CatsResponse in project cats by Endava.
the class TestCaseListenerTest method shouldReportInfoWhenResponseCode200IsExpectedAndResponseBodyIsArray.
@Test
void shouldReportInfoWhenResponseCode200IsExpectedAndResponseBodyIsArray() {
FuzzingData data = Mockito.mock(FuzzingData.class);
CatsResponse response = Mockito.mock(CatsResponse.class);
TestCaseListener spyListener = Mockito.spy(testCaseListener);
Mockito.when(response.getBody()).thenReturn("[{'test':1},{'test':2}]");
Mockito.when(data.getResponseCodes()).thenReturn(Sets.newHashSet("200", "400"));
Mockito.when(data.getResponses()).thenReturn(ImmutableMap.of("400", Collections.singletonList("{'test':'4'}"), "200", Collections.singletonList("{'other':'2'}")));
Mockito.when(response.responseCodeAsString()).thenReturn("400");
spyListener.createAndExecuteTest(logger, fuzzer, () -> spyListener.reportResult(logger, data, response, ResponseCodeFamily.FOURXX));
Mockito.verify(executionStatisticsListener, Mockito.times(1)).increaseSuccess();
Mockito.verify(spyListener, Mockito.times(1)).reportInfo(logger, "Response matches expected result. Response code [{}] is documented and response body matches the corresponding schema.", response.responseCodeAsString());
}
use of com.endava.cats.model.CatsResponse in project cats by Endava.
the class TestCaseListenerTest method shouldReportInfoWhenResponseCodeNotNecessarilyDocumentedIsExpectedAndResponseBodyMatchesButFuzzedFieldNotPresent.
@ParameterizedTest
@CsvSource({ "406,FOURXX_MT", "415,FOURXX_MT", "400,FOURXX" })
void shouldReportInfoWhenResponseCodeNotNecessarilyDocumentedIsExpectedAndResponseBodyMatchesButFuzzedFieldNotPresent(String responseCode, ResponseCodeFamily family) {
FuzzingData data = Mockito.mock(FuzzingData.class);
CatsResponse response = Mockito.mock(CatsResponse.class);
TestCaseListener spyListener = Mockito.spy(testCaseListener);
Mockito.when(response.getBody()).thenReturn("{'test':1}");
Mockito.when(data.getResponseCodes()).thenReturn(Sets.newHashSet("200", "4xx"));
Mockito.when(data.getResponses()).thenReturn(new TreeMap<>(ImmutableMap.of("4xx", Collections.singletonList("{'test':'4'}"), "200", Collections.singletonList("{'other':'2'}"))));
Mockito.when(response.responseCodeAsString()).thenReturn(responseCode);
Mockito.when(response.getFuzzedField()).thenReturn("test");
spyListener.createAndExecuteTest(logger, fuzzer, () -> spyListener.reportResult(logger, data, response, family));
Mockito.verify(executionStatisticsListener, Mockito.times(1)).increaseSuccess();
Mockito.verify(spyListener, Mockito.times(1)).reportInfo(logger, "Response matches expected result. Response code [{}] is documented and response body matches the corresponding schema.", response.responseCodeAsString());
}
use of com.endava.cats.model.CatsResponse in project cats by Endava.
the class TestCaseListenerTest method shouldReportInfoWhenResponseCodeIsExpectedAndResponseBodyAndDocumentedResponsesAreArrays.
@ParameterizedTest
@CsvSource(value = { "[]|[{'test':'4'},{'test':'4'}]", "[{'test':1},{'test':2}]|{'test':'4'}" }, delimiter = '|')
void shouldReportInfoWhenResponseCodeIsExpectedAndResponseBodyAndDocumentedResponsesAreArrays(String returnedBody, String documentedResponses) {
FuzzingData data = Mockito.mock(FuzzingData.class);
CatsResponse response = Mockito.mock(CatsResponse.class);
TestCaseListener spyListener = Mockito.spy(testCaseListener);
Mockito.when(response.getBody()).thenReturn(returnedBody);
Mockito.when(data.getResponseCodes()).thenReturn(Sets.newHashSet("200", "400"));
Mockito.when(data.getResponses()).thenReturn(ImmutableMap.of("400", Collections.singletonList(documentedResponses), "200", Collections.singletonList("{'other':'2'}")));
Mockito.when(response.responseCodeAsString()).thenReturn("400");
spyListener.createAndExecuteTest(logger, fuzzer, () -> spyListener.reportResult(logger, data, response, ResponseCodeFamily.FOURXX));
Mockito.verify(executionStatisticsListener, Mockito.times(1)).increaseSuccess();
Mockito.verify(spyListener, Mockito.times(1)).reportInfo(logger, "Response matches expected result. Response code [{}] is documented and response body matches the corresponding schema.", response.responseCodeAsString());
}
Aggregations