use of com.endava.cats.model.FuzzingData in project cats by Endava.
the class BaseSecurityChecksHeadersFuzzer method process.
private void process(FuzzingData data, Set<CatsHeader> headers) {
String headerValue = headers.stream().filter(header -> header.getName().equalsIgnoreCase(targetHeaderName())).findFirst().orElse(CatsHeader.builder().build()).getValue();
testCaseListener.addScenario(log, "Send a happy flow request with a [{}] {} header, value [{}]", typeOfHeader(), targetHeaderName(), headerValue);
testCaseListener.addExpectedResult(log, "Should get a {} response code", getExpectedResponseCode());
CatsResponse response = serviceCaller.call(ServiceData.builder().relativePath(data.getPath()).headers(new ArrayList<>(headers)).payload(data.getPayload()).queryParams(data.getQueryParams()).httpMethod(data.getMethod()).build());
testCaseListener.reportResult(log, data, response, ResponseCodeFamily.FOURXX_MT);
}
use of com.endava.cats.model.FuzzingData 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.FuzzingData 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.FuzzingData 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());
}
use of com.endava.cats.model.FuzzingData in project cats by Endava.
the class TestCaseListenerTest method shouldReportWarnWhenResponseCode400IsExpectedAndResponseBodyMatchesButFuzzedFieldNotPresent.
@Test
void shouldReportWarnWhenResponseCode400IsExpectedAndResponseBodyMatchesButFuzzedFieldNotPresent() {
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", "400"));
Mockito.when(data.getResponses()).thenReturn(ImmutableMap.of("400", Collections.singletonList("{'test':'4'}"), "200", Collections.singletonList("{'other':'2'}")));
Mockito.when(response.responseCodeAsString()).thenReturn("400");
Mockito.when(response.getFuzzedField()).thenReturn("someField");
spyListener.createAndExecuteTest(logger, fuzzer, () -> spyListener.reportResult(logger, data, response, ResponseCodeFamily.FOURXX));
Mockito.verify(executionStatisticsListener, Mockito.times(1)).increaseWarns();
Mockito.verify(spyListener, Mockito.times(1)).reportWarn(logger, "Response does NOT match expected result. Response code [{}] is documented, but response body does NOT matches the corresponding schema.", response.responseCodeAsString());
}
Aggregations