
io.blitz.curl.Sprint Maven / Gradle / Ivy
package io.blitz.curl;
import io.blitz.curl.exception.ValidationException;
import io.blitz.curl.sprint.ISprintListener;
import io.blitz.curl.sprint.Request;
import io.blitz.curl.sprint.Response;
import io.blitz.curl.sprint.SprintResult;
import io.blitz.curl.sprint.Step;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;
/**
* Used to generate a Sprint Test.
*
* Sprinting is a simple HTTP (or SSL) request to a page in your app or
* your RESTful API.
*
*
* Sprint sprint = new Sprint("[email protected]", "my-bitz-api-key");
* Collection steps = new ArrayList();
* steps.add(new TestStep(new URL("http://your.cool.app")));
* sprint.setSteps(steps);
* sprint.addListener(new ISprintListener() {
* public boolean onStatus(SprintResult result) {
* //do something...
* }
* public void onComplete(SprintResult result) {
* //do something...
* }
* });
* sprint.execute();
*
* @author ghermeto
* @version 0.1.0
* @see io.blitz.curl.AbstractTest
*/
public class Sprint extends AbstractTest {
public Sprint(String username, String apiKey) {
setCredentials(username, apiKey);
}
public Sprint(String username, String apiKey, String host, Integer port) {
setCredentials(username, apiKey, host, port);
}
/**
* Verifies the Sprint requirements. Should throw a
* ValidationException
if the URL field is not set.
* @throws ValidationException
*/
@Override
public void checkRequirements() throws ValidationException {
if (getSteps() == null) {
throw new ValidationException("At least one step is required");
}
for (TestStep step : getSteps()) {
if(step.getUrl() == null) {
throw new ValidationException("Url is required");
}
}
}
/**
* Should return a SprintResult
object populated with the
* successful response from the server.
* @param result the deserialized result from the JSON response
* @return a successful sprint result object
* @see SprintResult
*/
protected SprintResult createSuccessResult(Map result) {
String region = (String) result.get("region");
Number duration = (Number) result.get("duration");
Double durationDbl = (duration != null) ? parseDouble(duration) : null;
Collection steps = new ArrayList();
Collection> list = (Collection>) result.get("steps");
if (list != null) {
for(Object obj : list) {
Map item = (Map) obj;
Number itemDuration = (Number) item.get("duration");
Number itemConnect = (Number) item.get("connect");
//assemble the request object
Request request = null;
if(item.containsKey("request")) {
Map req =
(Map) item.get("request");
String line = (String) req.get("line");
String method = (String) req.get("method");
String url = (String) req.get("url");
String content = (String) req.get("content");
Map headers = (req.containsKey("headers")) ?
(Map) req.get("headers") : null;
request = new Request(line, method, url, headers, content);
}
//assemble the response object
Response response = null;
if(item.containsKey("response")) {
Map res =
(Map) item.get("response");
String line = (String) res.get("line");
Number status = (Number) res.get("status");
String message = (String) res.get("message");
String content = (String) res.get("content");
Map headers = (res.containsKey("headers")) ?
(Map) res.get("headers") : null;
response = new Response(line, (status!=null) ? parseInt(status) : null,
message, headers, content);
}
Double itemDurationDbl = (itemDuration != null) ?
parseDouble(itemDuration) : null;
Double itemConnectDbl = (itemConnect != null) ?
parseDouble(itemConnect) : null;
Step step = new Step(itemDurationDbl, itemConnectDbl, request, response);
steps.add(step);
}
}
return new SprintResult(region, durationDbl, steps);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy