package com.griddynamics.jagger.engine.e1.collector;
import com.griddynamics.jagger.coordinator.NodeContext;
import com.griddynamics.jagger.invoker.v2.JHttpEndpoint;
import com.griddynamics.jagger.invoker.v2.JHttpQuery;
import com.griddynamics.jagger.invoker.v2.JHttpResponse;
import java.util.Set;
import java.util.regex.Pattern;
import static com.google.common.collect.Sets.newHashSet;
/**
* Validates JHttpResponse status code.
* If {@link JHttpResponseStatusValidator#validStatusCodesRegexp} is not null, it will be used for validation, otherwise
* {@link JHttpResponseStatusValidator#validStatusCodes} is used.
*
* @ingroup Main_Validators_group
* @ingroup Main_Http_group */
public class JHttpResponseStatusValidator extends ResponseValidator<JHttpQuery, JHttpEndpoint, JHttpResponse> {
private Set<Integer> validStatusCodes = newHashSet();
private Pattern validStatusCodesRegexp;
public JHttpResponseStatusValidator(String taskId, String sessionId, NodeContext kernelContext) {
super(taskId, sessionId, kernelContext);
}
@Override
public String getName() {
return "Default Http Response Status Validator";
}
/**
* Validates JHttpResponse status code.<p>
* If {@link JHttpResponseStatusValidator#validStatusCodesRegexp} is not empty, it will be used for validation, otherwise
* {@link JHttpResponseStatusValidator#validStatusCodes} is used.
*
* @param query - the query of current invocation
* @param endpoint - the endpoint of current invocation
* @param result - the result of invocation
* @param duration - the duration of invocation
* @return true if response code is valid, false otherwise.
*/
@Override
public boolean validate(JHttpQuery query, JHttpEndpoint endpoint, JHttpResponse result, long duration) {
if (validStatusCodesRegexp != null) {
return validStatusCodesRegexp.matcher(result.getStatus().toString()).matches();
}
return validStatusCodes.contains(result.getStatus().value());
}
public Set<Integer> getValidStatusCodes() {
return validStatusCodes;
}
public void setValidStatusCodes(Set<Integer> validStatusCodes) {
this.validStatusCodes = validStatusCodes;
}
public Pattern getValidStatusCodesRegexp() {
return validStatusCodesRegexp;
}
public void setValidStatusCodesRegexp(Pattern validStatusCodesRegexp) {
this.validStatusCodesRegexp = validStatusCodesRegexp;
}
}