Skip to content

Commit b67988d

Browse files
authored
Merge pull request #31 from reportportal/develop
Release
2 parents be91484 + bb6211f commit b67988d

File tree

7 files changed

+124
-84
lines changed

7 files changed

+124
-84
lines changed

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ jobs:
5454
java-version: '8'
5555

5656
- name: Setup git credentials
57-
uses: oleksiyrudenko/gha-git-credentials@v2.1.1
57+
uses: oleksiyrudenko/gha-git-credentials@v2-latest
5858
with:
5959
name: 'reportportal.io'
6060

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
# Changelog
22

33
## [Unreleased]
4+
### Added
5+
- RestAssured blacklisted headers support, by @HardNorth
6+
### Changed
7+
- Client version updated on [5.2.23](https://github.com/reportportal/client-java/releases/tag/5.2.23), by @HardNorth
8+
- `utils-java-formatting` dependency version updated on [5.2.4](https://github.com/reportportal/utils-java-formatting/releases/tag/5.2.4), by @HardNorth
49

510
## [5.3.4]
611
### Changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ repositories {
3737
}
3838

3939
dependencies {
40-
api 'com.epam.reportportal:utils-java-formatting:5.2.3'
40+
api 'com.epam.reportportal:utils-java-formatting:5.2.4'
4141
compileOnly "com.epam.reportportal:client-java:${client_version}"
4242
implementation 'com.google.code.findbugs:jsr305:3.0.2'
4343
implementation 'commons-codec:commons-codec:1.15'

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ description=Report Portal logger for REST Assured
33
junit5_version=5.6.3
44
junit5_runner_version=1.6.3
55
mockito_version=4.5.1
6-
client_version=5.2.13
6+
client_version=5.2.23
77
scripts_url=https://raw.githubusercontent.com/reportportal/gradle-scripts
88
scripts_branch=master
99
excludeTests=

src/main/java/com/epam/reportportal/restassured/ReportPortalRestAssuredLoggingFilter.java

Lines changed: 39 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
import com.epam.reportportal.listeners.LogLevel;
2727
import com.epam.reportportal.restassured.support.HttpEntityFactory;
2828
import com.epam.reportportal.service.ReportPortal;
29+
import io.restassured.config.LogConfig;
30+
import io.restassured.config.RestAssuredConfig;
2931
import io.restassured.filter.FilterContext;
3032
import io.restassured.filter.OrderedFilter;
3133
import io.restassured.response.Response;
@@ -39,6 +41,9 @@
3941
import java.util.function.Function;
4042
import java.util.function.Predicate;
4143

44+
import static com.epam.reportportal.formatting.http.Constants.REMOVED_TAG;
45+
import static java.util.Optional.ofNullable;
46+
4247
/**
4348
* REST Assured Request/Response logging filter for Report Portal.
4449
* <p>
@@ -78,16 +83,9 @@ public class ReportPortalRestAssuredLoggingFilter extends AbstractHttpFormatter<
7883
* URI "as is"
7984
*/
8085
public ReportPortalRestAssuredLoggingFilter(int filterOrder, @Nonnull LogLevel defaultLogLevel,
81-
@Nullable Function<Header, String> headerConvertFunction,
82-
@Nullable Function<Header, String> partHeaderConvertFunction,
83-
@Nullable Function<Cookie, String> cookieConvertFunction,
84-
@Nullable Function<String, String> uriConverterFunction) {
85-
super(defaultLogLevel,
86-
headerConvertFunction,
87-
partHeaderConvertFunction,
88-
cookieConvertFunction,
89-
uriConverterFunction
90-
);
86+
@Nullable Function<Header, String> headerConvertFunction, @Nullable Function<Header, String> partHeaderConvertFunction,
87+
@Nullable Function<Cookie, String> cookieConvertFunction, @Nullable Function<String, String> uriConverterFunction) {
88+
super(defaultLogLevel, headerConvertFunction, partHeaderConvertFunction, cookieConvertFunction, uriConverterFunction);
9189
order = filterOrder;
9290
}
9391

@@ -106,10 +104,10 @@ public ReportPortalRestAssuredLoggingFilter(int filterOrder, @Nonnull LogLevel d
106104
* formats Cookies with <code>toString</code> method
107105
*/
108106
public ReportPortalRestAssuredLoggingFilter(int filterOrder, @Nonnull LogLevel defaultLogLevel,
109-
@Nullable Function<Header, String> headerConvertFunction,
110-
@Nullable Function<Header, String> partHeaderConvertFunction,
107+
@Nullable Function<Header, String> headerConvertFunction, @Nullable Function<Header, String> partHeaderConvertFunction,
111108
@Nullable Function<Cookie, String> cookieConvertFunction) {
112-
this(filterOrder,
109+
this(
110+
filterOrder,
113111
defaultLogLevel,
114112
headerConvertFunction,
115113
partHeaderConvertFunction,
@@ -131,14 +129,8 @@ public ReportPortalRestAssuredLoggingFilter(int filterOrder, @Nonnull LogLevel d
131129
* @param partHeaderConvertFunction the same as fot HTTP Headers, but for parts in Multipart request
132130
*/
133131
public ReportPortalRestAssuredLoggingFilter(int filterOrder, @Nonnull LogLevel defaultLogLevel,
134-
@Nullable Function<Header, String> headerConvertFunction,
135-
@Nullable Function<Header, String> partHeaderConvertFunction) {
136-
this(filterOrder,
137-
defaultLogLevel,
138-
headerConvertFunction,
139-
partHeaderConvertFunction,
140-
DefaultCookieConverter.INSTANCE
141-
);
132+
@Nullable Function<Header, String> headerConvertFunction, @Nullable Function<Header, String> partHeaderConvertFunction) {
133+
this(filterOrder, defaultLogLevel, headerConvertFunction, partHeaderConvertFunction, DefaultCookieConverter.INSTANCE);
142134
}
143135

144136
/**
@@ -159,14 +151,31 @@ public int getOrder() {
159151
}
160152

161153
@Override
162-
public Response filter(FilterableRequestSpecification requestSpec, FilterableResponseSpecification responseSpec,
163-
FilterContext ctx) {
164-
if (requestFilters.stream().anyMatch(f -> f.test(requestSpec))) {
154+
public Response filter(FilterableRequestSpecification requestSpec, FilterableResponseSpecification responseSpec, FilterContext ctx) {
155+
if (requestSpec == null || requestFilters.stream().anyMatch(f -> f.test(requestSpec))) {
165156
return ctx.next(requestSpec, responseSpec);
166157
}
167-
emitLog(HttpEntityFactory.createHttpRequestFormatter(requestSpec,
158+
159+
Set<String> blacklistedHeaders = ofNullable(requestSpec.getConfig()).map(RestAssuredConfig::getLogConfig)
160+
.map(LogConfig::blacklistedHeaders)
161+
.filter(headers -> !headers.isEmpty())
162+
.orElse(null);
163+
Function<Header, String> myHeaderConverter = headerConverter;
164+
if (blacklistedHeaders != null) {
165+
myHeaderConverter = header -> {
166+
if (!blacklistedHeaders.contains(header.getName())) {
167+
return headerConverter.apply(header);
168+
}
169+
Header newHeader = header.clone();
170+
newHeader.setValue(REMOVED_TAG);
171+
return headerConverter.apply(newHeader);
172+
};
173+
}
174+
175+
emitLog(HttpEntityFactory.createHttpRequestFormatter(
176+
requestSpec,
168177
uriConverter,
169-
headerConverter,
178+
myHeaderConverter,
170179
cookieConverter,
171180
contentPrettiers,
172181
partHeaderConverter,
@@ -176,7 +185,8 @@ public Response filter(FilterableRequestSpecification requestSpec, FilterableRes
176185
if (response == null) {
177186
ReportPortal.emitLog(NULL_RESPONSE, logLevel, Calendar.getInstance().getTime());
178187
} else {
179-
emitLog(HttpEntityFactory.createHttpResponseFormatter(response,
188+
emitLog(HttpEntityFactory.createHttpResponseFormatter(
189+
response,
180190
headerConverter,
181191
cookieConverter,
182192
contentPrettiers,
@@ -191,14 +201,12 @@ public ReportPortalRestAssuredLoggingFilter setBodyTypeMap(@Nonnull Map<String,
191201
return this;
192202
}
193203

194-
public ReportPortalRestAssuredLoggingFilter setContentPrettiers(
195-
@Nonnull Map<String, Function<String, String>> contentPrettiers) {
204+
public ReportPortalRestAssuredLoggingFilter setContentPrettiers(@Nonnull Map<String, Function<String, String>> contentPrettiers) {
196205
this.contentPrettiers = Collections.unmodifiableMap(new HashMap<>(contentPrettiers));
197206
return this;
198207
}
199208

200-
public ReportPortalRestAssuredLoggingFilter addRequestFilter(
201-
@Nonnull Predicate<FilterableRequestSpecification> requestFilter) {
209+
public ReportPortalRestAssuredLoggingFilter addRequestFilter(@Nonnull Predicate<FilterableRequestSpecification> requestFilter) {
202210
requestFilters.add(requestFilter);
203211
return this;
204212
}

src/main/java/com/epam/reportportal/restassured/support/HttpEntityFactory.java

Lines changed: 23 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -68,51 +68,49 @@ private static List<HttpPartFormatter> toParts(@Nonnull FilterableRequestSpecifi
6868
TypeAwareByteSource file = Utils.getFile((File) body);
6969
byte[] data = file.read();
7070
if (partType == HttpPartFormatter.PartType.TEXT) {
71-
content = ofNullable(data).map(d -> {
72-
try {
73-
return new String(d, ofNullable(it.getCharset()).orElse(StandardCharsets.UTF_8.name()));
74-
} catch (UnsupportedEncodingException e) {
75-
throw new IllegalStateException(e);
76-
}
77-
}).orElse("");
71+
try {
72+
content = new String(data, ofNullable(it.getCharset()).orElse(StandardCharsets.UTF_8.name()));
73+
} catch (UnsupportedEncodingException e) {
74+
throw new IllegalStateException(e);
75+
}
7876
} else {
7977
content = data;
8078
}
8179
} else {
8280
content = body;
8381
}
8482
HttpPartFormatter.Builder partBuilder = new HttpPartFormatter.Builder(partType, partMimeType, content);
85-
ofNullable(it.getHeaders()).ifPresent(headers -> headers.forEach((key, value) -> partBuilder.addHeader(
86-
new Header(key, value))));
83+
ofNullable(it.getHeaders()).ifPresent(headers -> headers.forEach((key, value) -> partBuilder.addHeader(new Header(
84+
key,
85+
value
86+
))));
8787
partBuilder.controlName(it.getControlName());
8888
partBuilder.charset(it.getCharset());
8989
partBuilder.fileName(it.getFileName());
9090
partBuilder.headerConverter(partHeaderConverter);
9191
return partBuilder.build();
9292
} catch (IOException e) {
93-
ReportPortal.emitLog("Unable to read file: " + e.getMessage(),
94-
"ERROR",
95-
Calendar.getInstance().getTime()
96-
);
93+
ReportPortal.emitLog("Unable to read file: " + e.getMessage(), "ERROR", Calendar.getInstance().getTime());
9794
return null;
9895
}
9996
}).filter(Objects::nonNull).collect(Collectors.toList())).orElse(Collections.emptyList());
10097
}
10198

10299
@Nonnull
103-
public static HttpRequestFormatter createHttpRequestFormatter(
104-
@Nonnull FilterableRequestSpecification requestSpecification,
100+
public static HttpRequestFormatter createHttpRequestFormatter(@Nonnull FilterableRequestSpecification requestSpecification,
105101
@Nullable Function<String, String> uriConverter, @Nullable Function<Header, String> headerConverter,
106-
@Nullable Function<Cookie, String> cookieConverter,
107-
@Nullable Map<String, Function<String, String>> prettiers,
102+
@Nullable Function<Cookie, String> cookieConverter, @Nullable Map<String, Function<String, String>> prettiers,
108103
@Nullable Function<Header, String> partHeaderConverter, @Nonnull Map<String, BodyType> bodyTypeMap) {
109-
HttpRequestFormatter.Builder builder = new HttpRequestFormatter.Builder(requestSpecification.getMethod(),
104+
HttpRequestFormatter.Builder builder = new HttpRequestFormatter.Builder(
105+
requestSpecification.getMethod(),
110106
requestSpecification.getURI()
111107
);
112-
ofNullable(requestSpecification.getHeaders()).ifPresent(headers -> headers.forEach(h -> builder.addHeader(h.getName(),
108+
ofNullable(requestSpecification.getHeaders()).ifPresent(headers -> headers.forEach(h -> builder.addHeader(
109+
h.getName(),
113110
h.getValue()
114111
)));
115-
ofNullable(requestSpecification.getCookies()).ifPresent(cookies -> cookies.forEach(c -> builder.addCookie(c.getName(),
112+
ofNullable(requestSpecification.getCookies()).ifPresent(cookies -> cookies.forEach(c -> builder.addCookie(
113+
c.getName(),
116114
c.getValue(),
117115
c.getComment(),
118116
c.getPath(),
@@ -124,10 +122,7 @@ public static HttpRequestFormatter createHttpRequestFormatter(
124122
c.getVersion(),
125123
c.getSameSite()
126124
)));
127-
builder.uriConverter(uriConverter)
128-
.headerConverter(headerConverter)
129-
.cookieConverter(cookieConverter)
130-
.prettiers(prettiers);
125+
builder.uriConverter(uriConverter).headerConverter(headerConverter).cookieConverter(cookieConverter).prettiers(prettiers);
131126
String mimeType = getMimeType(requestSpecification.getContentType());
132127
BodyType bodyType = getBodyType(requestSpecification.getContentType(), bodyTypeMap);
133128
switch (bodyType) {
@@ -150,13 +145,10 @@ public static HttpRequestFormatter createHttpRequestFormatter(
150145
public static HttpResponseFormatter createHttpResponseFormatter(@Nonnull Response response,
151146
@Nullable Function<Header, String> headerConverter, @Nullable Function<Cookie, String> cookieConverter,
152147
@Nullable Map<String, Function<String, String>> prettiers, @Nonnull Map<String, BodyType> bodyTypeMap) {
153-
HttpResponseFormatter.Builder builder = new HttpResponseFormatter.Builder(response.statusCode(),
154-
response.getStatusLine()
155-
);
156-
ofNullable(response.getHeaders()).ifPresent(headers -> headers.forEach(h -> builder.addHeader(h.getName(),
157-
h.getValue()
158-
)));
159-
ofNullable(response.getDetailedCookies()).ifPresent(cookies -> cookies.forEach(c -> builder.addCookie(c.getName(),
148+
HttpResponseFormatter.Builder builder = new HttpResponseFormatter.Builder(response.statusCode(), response.getStatusLine());
149+
ofNullable(response.getHeaders()).ifPresent(headers -> headers.forEach(h -> builder.addHeader(h.getName(), h.getValue())));
150+
ofNullable(response.getDetailedCookies()).ifPresent(cookies -> cookies.forEach(c -> builder.addCookie(
151+
c.getName(),
160152
c.getValue(),
161153
c.getComment(),
162154
c.getPath(),

0 commit comments

Comments
 (0)