Skip to content

Commit 6ff650c

Browse files
feat(rest-assured): add support for headers blacklist (via #1007)
1 parent ed837de commit 6ff650c

File tree

2 files changed

+70
-14
lines changed

2 files changed

+70
-14
lines changed

allure-rest-assured/src/main/java/io/qameta/allure/restassured/AllureRestAssured.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,11 @@
2828
import io.restassured.specification.FilterableResponseSpecification;
2929

3030
import java.util.HashMap;
31+
import java.util.HashSet;
3132
import java.util.Map;
3233
import java.util.Objects;
34+
import java.util.Set;
35+
import java.util.TreeSet;
3336

3437
import static io.qameta.allure.attachment.http.HttpRequestAttachment.Builder.create;
3538
import static io.qameta.allure.attachment.http.HttpResponseAttachment.Builder.create;
@@ -40,6 +43,8 @@
4043
*/
4144
public class AllureRestAssured implements OrderedFilter {
4245

46+
private static final String HIDDEN_PLACEHOLDER = "[ BLACKLISTED ]";
47+
4348
private String requestTemplatePath = "http-request.ftl";
4449
private String responseTemplatePath = "http-response.ftl";
4550
private String requestAttachmentName = "Request";
@@ -89,10 +94,14 @@ public Response filter(final FilterableRequestSpecification requestSpec,
8994
final FilterContext filterContext) {
9095
final Prettifier prettifier = new Prettifier();
9196
final String url = requestSpec.getURI();
97+
98+
final Set<String> hiddenHeaders = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
99+
hiddenHeaders.addAll(Objects.requireNonNull(requestSpec.getConfig().getLogConfig().blacklistedHeaders()));
100+
92101
final HttpRequestAttachment.Builder requestAttachmentBuilder = create(requestAttachmentName, url)
93102
.setMethod(requestSpec.getMethod())
94-
.setHeaders(toMapConverter(requestSpec.getHeaders()))
95-
.setCookies(toMapConverter(requestSpec.getCookies()));
103+
.setHeaders(toMapConverter(requestSpec.getHeaders(), hiddenHeaders))
104+
.setCookies(toMapConverter(requestSpec.getCookies(), new HashSet<>()));
96105

97106
if (Objects.nonNull(requestSpec.getBody())) {
98107
requestAttachmentBuilder.setBody(prettifier.getPrettifiedBodyIfPossible(requestSpec));
@@ -116,7 +125,7 @@ public Response filter(final FilterableRequestSpecification requestSpec,
116125

117126
final HttpResponseAttachment responseAttachment = create(attachmentName)
118127
.setResponseCode(response.getStatusCode())
119-
.setHeaders(toMapConverter(response.getHeaders()))
128+
.setHeaders(toMapConverter(response.getHeaders(), hiddenHeaders))
120129
.setBody(prettifier.getPrettifiedBodyIfPossible(response, response.getBody()))
121130
.build();
122131

@@ -128,9 +137,10 @@ public Response filter(final FilterableRequestSpecification requestSpec,
128137
return response;
129138
}
130139

131-
private static Map<String, String> toMapConverter(final Iterable<? extends NameAndValue> items) {
140+
private static Map<String, String> toMapConverter(final Iterable<? extends NameAndValue> items,
141+
final Set<String> toHide) {
132142
final Map<String, String> result = new HashMap<>();
133-
items.forEach(h -> result.put(h.getName(), h.getValue()));
143+
items.forEach(h -> result.put(h.getName(), toHide.contains(h.getName()) ? HIDDEN_PLACEHOLDER : h.getValue()));
134144
return result;
135145
}
136146

allure-rest-assured/src/test/java/io/qameta/allure/restassured/AllureRestAssuredTest.java

Lines changed: 55 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,21 @@
2424
import io.qameta.allure.model.TestResult;
2525
import io.qameta.allure.test.AllureResults;
2626
import io.restassured.RestAssured;
27+
import io.restassured.config.LogConfig;
28+
import io.restassured.config.RestAssuredConfig;
2729
import io.restassured.http.ContentType;
30+
import io.restassured.specification.RequestSpecification;
31+
import java.nio.charset.StandardCharsets;
2832
import org.junit.jupiter.api.Test;
2933
import org.junit.jupiter.api.extension.ExtensionContext;
3034
import org.junit.jupiter.params.ParameterizedTest;
3135
import org.junit.jupiter.params.provider.Arguments;
3236
import org.junit.jupiter.params.provider.ArgumentsProvider;
3337
import org.junit.jupiter.params.provider.ArgumentsSource;
3438

35-
import java.util.ArrayList;
3639
import java.util.Collection;
3740
import java.util.List;
41+
import java.util.Map;
3842
import java.util.stream.Collectors;
3943
import java.util.stream.Stream;
4044

@@ -55,10 +59,27 @@ public Stream<? extends Arguments> provideArguments(ExtensionContext context) {
5559
}
5660
}
5761

62+
class HiddenHeadersArgumentProvider implements ArgumentsProvider {
63+
@Override
64+
public Stream<? extends Arguments> provideArguments(ExtensionContext context) {
65+
66+
final String hiddenHeader = "Authorization";
67+
final String header = "Accept";
68+
final String headerValue = "value";
69+
70+
final Map<String, String> headers = Map.of(hiddenHeader, headerValue, header, headerValue);
71+
final List<String> expectedHeaders = List.of(hiddenHeader + ": [ BLACKLISTED ]", header + ": " + headerValue);
72+
73+
return Stream.of(
74+
arguments(headers, hiddenHeader, expectedHeaders, new AllureRestAssured()),
75+
arguments(headers, hiddenHeader.toUpperCase(), expectedHeaders, new AllureRestAssured())
76+
);
77+
}
78+
}
79+
5880
/**
5981
* @author charlie (Dmitry Baev).
6082
*/
61-
@SuppressWarnings("unchecked")
6283
class AllureRestAssuredTest {
6384

6485
@ParameterizedTest
@@ -72,7 +93,7 @@ void shouldCreateAttachment(final List<String> attachmentNames, final AllureRest
7293
.map(TestResult::getAttachments)
7394
.flatMap(Collection::stream)
7495
.map(Attachment::getName))
75-
.isEqualTo(attachmentNames);
96+
.containsExactlyElementsOf(attachmentNames);
7697
}
7798

7899
@Test
@@ -122,21 +143,46 @@ void shouldCatchAttachmentBody(final List<String> attachmentNames, final AllureR
122143
.collect(Collectors.toList());
123144

124145
assertThat(actualAttachments)
125-
.flatExtracting(Attachment::getName)
126-
.isEqualTo(attachmentNames)
146+
.map(Attachment::getName)
147+
.containsExactlyElementsOf(attachmentNames)
127148
.doesNotContainNull();
128149

129150
assertThat(actualAttachments)
130-
.flatExtracting(Attachment::getSource)
131-
.containsExactlyInAnyOrderElementsOf(new ArrayList<>(results.getAttachments().keySet()))
151+
.map(Attachment::getSource)
152+
.containsExactlyInAnyOrderElementsOf(results.getAttachments().keySet())
132153
.doesNotContainNull();
133154
}
134155

156+
@ParameterizedTest
157+
@ArgumentsSource(HiddenHeadersArgumentProvider.class)
158+
void shouldHideHeadersInAttachments(final Map<String, String> headers,
159+
final String hiddenHeader,
160+
final List<String> expectedValues,
161+
final AllureRestAssured filter) {
162+
163+
final ResponseDefinitionBuilder responseBuilder = WireMock.aResponse().withStatus(200);
164+
headers.forEach(responseBuilder::withHeader);
165+
166+
RestAssured.config = new RestAssuredConfig().logConfig(LogConfig.logConfig().blacklistHeaders(List.of(hiddenHeader)));
167+
RestAssured.replaceFiltersWith(filter);
168+
169+
final AllureResults results = executeWithStub(responseBuilder, RestAssured.with().headers(headers));
170+
171+
assertThat(results.getAttachments().values())
172+
.hasSize(2)
173+
.map(at -> new String(at, StandardCharsets.UTF_8))
174+
.allSatisfy(at -> expectedValues.forEach(ev -> assertThat(at).contains(ev)));
175+
}
176+
135177
protected final AllureResults execute() {
136178
return executeWithStub(WireMock.aResponse().withBody("some body"));
137179
}
138180

139181
protected final AllureResults executeWithStub(ResponseDefinitionBuilder responseBuilder) {
182+
return executeWithStub(responseBuilder, RestAssured.given());
183+
}
184+
185+
protected final AllureResults executeWithStub(ResponseDefinitionBuilder responseBuilder, RequestSpecification spec) {
140186
final WireMockServer server = new WireMockServer(WireMockConfiguration.options().dynamicPort());
141187
final int statusCode = responseBuilder.build().getStatus();
142188

@@ -146,13 +192,13 @@ protected final AllureResults executeWithStub(ResponseDefinitionBuilder response
146192

147193
WireMock.stubFor(WireMock.get(WireMock.urlEqualTo("/hello?Allure=Form")).willReturn(responseBuilder));
148194
try {
149-
RestAssured.given()
150-
.contentType(ContentType.URLENC)
195+
spec.contentType(ContentType.URLENC)
151196
.formParams("Allure", "Form")
152197
.get(server.url("/hello")).then().statusCode(statusCode);
153198
} finally {
154199
server.stop();
155200
RestAssured.replaceFiltersWith(ImmutableList.of());
201+
RestAssured.config = new RestAssuredConfig();
156202
}
157203
});
158204
}

0 commit comments

Comments
 (0)