/*
* Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license.
* See LICENSE in the project root for license information.
*/
package com.linkedin.flashback.matchrules;
import com.linkedin.flashback.serializable.RecordedHttpRequest;
/**
* Match rule to match http headers
* @author shfeng.
*/
public class MatchHeaders extends BaseMatchRule {
private final MatchRuleMapTransform _transform;
public MatchHeaders() {
this(null);
}
public MatchHeaders(MatchRuleMapTransform transform) {
if (transform != null) {
_transform = transform;
} else {
_transform = new MatchRuleIdentityTransform();
}
}
@Override
public boolean test(RecordedHttpRequest incomingRequest, RecordedHttpRequest expectedRequest) {
return _transform.transform(incomingRequest.getHeaders())
.equals(_transform.transform(expectedRequest.getHeaders()));
}
public String getMatchFailureDescriptionForRequests(RecordedHttpRequest incomingRequest, RecordedHttpRequest expectedRequest) {
StringBuilder resultBuilder = new StringBuilder("HTTP Headers Mismatch");
if (_transform instanceof MatchRuleBlacklistTransform) {
resultBuilder.append(" (with Blacklist)");
} else if (_transform instanceof MatchRuleWhitelistTransform) {
resultBuilder.append(" (with Whitelist)");
}
resultBuilder.append("%n")
.append(String.format("Incoming Headers: %s%n", _transform.transform(incomingRequest.getHeaders())))
.append(String.format("Expected Headers: %s%n", _transform.transform(expectedRequest.getHeaders())));
return resultBuilder.toString();
}
}