Details
diff --git a/src/main/java/br/ufrgs/inf/prosoft/requestssimulator/requests/GetRequest.java b/src/main/java/br/ufrgs/inf/prosoft/requestssimulator/requests/GetRequest.java
index ff4163b..ce1a787 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/requestssimulator/requests/GetRequest.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/requestssimulator/requests/GetRequest.java
@@ -32,9 +32,11 @@ public class GetRequest extends Request {
@Override
public void fire() {
+ HttpURLConnection httpURLConnection = null;
try {
URL url = new URL(getURL());
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+ httpURLConnection = connection;
connection.setRequestMethod("GET");
forEachHeader((key, value) -> {
value = fillPropertyVariable(value);
@@ -50,11 +52,16 @@ public class GetRequest extends Request {
} else {
Logger.getGlobal().log(Level.SEVERE, "error {0} on {1} {2}", new Object[]{responseCode, getMethod(), getURL()});
}
- connection.disconnect();
} catch (MalformedURLException ex) {
Logger.getGlobal().log(Level.SEVERE, "Malormed URL");
} catch (IOException ex) {
Logger.getGlobal().log(Level.SEVERE, "IOException");
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ } finally {
+ if (httpURLConnection != null) {
+ httpURLConnection.disconnect();
+ }
}
}
}
diff --git a/src/main/java/br/ufrgs/inf/prosoft/requestssimulator/requests/MultipartRequest.java b/src/main/java/br/ufrgs/inf/prosoft/requestssimulator/requests/MultipartRequest.java
index 907d7ad..0118c71 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/requestssimulator/requests/MultipartRequest.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/requestssimulator/requests/MultipartRequest.java
@@ -90,6 +90,8 @@ public class MultipartRequest extends Request {
}
} catch (IOException e) {
Logger.getGlobal().log(Level.SEVERE, "IOException");
+ } catch (Exception ex) {
+ ex.printStackTrace();
}
}
}
diff --git a/src/main/java/br/ufrgs/inf/prosoft/requestssimulator/requests/PostRequest.java b/src/main/java/br/ufrgs/inf/prosoft/requestssimulator/requests/PostRequest.java
index d3c1f4a..2af7b03 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/requestssimulator/requests/PostRequest.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/requestssimulator/requests/PostRequest.java
@@ -30,7 +30,7 @@ public class PostRequest extends Request {
this.data = data;
}
- protected PostRequest(RequestPlan requestPlan, Session session, String URL, String headers, String data) {
+ protected PostRequest(RequestPlan requestPlan, Session session, String URL, String data, String headers) {
super(requestPlan, session, URL, headers);
this.data = data;
}
@@ -41,18 +41,20 @@ public class PostRequest extends Request {
@Override
public void fire() {
+ HttpURLConnection httpURLConnection = null;
try {
URL url = new URL(getURL());
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+ httpURLConnection = connection;
connection.setRequestMethod("POST");
- connection.setDoOutput(true);
- try (OutputStream outputStream = connection.getOutputStream()) {
- outputStream.write(this.data.getBytes());
- }
forEachHeader((key, value) -> {
value = fillPropertyVariable(value);
connection.setRequestProperty(key, value);
});
+ connection.setDoOutput(true);
+ try (OutputStream outputStream = connection.getOutputStream()) {
+ outputStream.write(this.data.getBytes());
+ }
int responseCode = connection.getResponseCode();
if (responseCode < 400) {
Logger.getGlobal().log(Level.INFO, "{0} {1}", new Object[]{getMethod(), getURL()});
@@ -63,11 +65,16 @@ public class PostRequest extends Request {
} else {
Logger.getGlobal().log(Level.SEVERE, "error {0} on {1} {2}", new Object[]{responseCode, getMethod(), getURL()});
}
- connection.disconnect();
} catch (MalformedURLException ex) {
Logger.getGlobal().log(Level.SEVERE, "Malormed URL");
} catch (IOException ex) {
Logger.getGlobal().log(Level.SEVERE, "IOException");
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ } finally {
+ if (httpURLConnection != null) {
+ httpURLConnection.disconnect();
+ }
}
}
}
diff --git a/src/main/java/br/ufrgs/inf/prosoft/requestssimulator/requests/Request.java b/src/main/java/br/ufrgs/inf/prosoft/requestssimulator/requests/Request.java
index 7e32525..38ba8ec 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/requestssimulator/requests/Request.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/requestssimulator/requests/Request.java
@@ -6,6 +6,7 @@
package br.ufrgs.inf.prosoft.requestssimulator.requests;
import br.ufrgs.inf.prosoft.requestssimulator.Session;
+import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import java.util.HashMap;
@@ -54,11 +55,15 @@ public abstract class Request {
public void forEachHeader(BiConsumer<? super String, ? super String> forEach) {
Map<String, String> headers = new HashMap<>();
- if (this.headers != null) {
+ if (this.headers != null && !this.headers.isEmpty()) {
String[] headerPairs = this.headers.split("; ");
for (String headerPair : headerPairs) {
String[] pair = headerPair.split(": ");
- headers.put(pair[0], pair[1]);
+ if (pair.length > 1) {
+ headers.put(pair[0], pair[1]);
+ } else {
+ Logger.getGlobal().log(Level.SEVERE, "invalid header pair {0}", headerPair);
+ }
}
}
headers.forEach(forEach);
@@ -69,6 +74,13 @@ public abstract class Request {
}
protected void processResponse(String response) {
+ if (response == null || response.isEmpty()) {
+ Logger.getGlobal().log(Level.SEVERE, "empty response");
+ return;
+ }
+ if (!this.requestPlan.storeFields()) {
+ return;
+ }
this.requestPlan.forEachStoreField(new Consumer<String>() {
private final JsonParser jsonParser;
@@ -76,12 +88,17 @@ public abstract class Request {
{
this.jsonParser = new JsonParser();
- this.jsonObject = jsonParser.parse(response).getAsJsonObject();
+ this.jsonObject = this.jsonParser.parse(response).getAsJsonObject();
}
@Override
public void accept(String storeField) {
- String storedValue = jsonObject.get(storeField).getAsString();
+ JsonElement jsonElement = this.jsonObject.get(storeField);
+ if (jsonElement == null) {
+ Logger.getGlobal().log(Level.SEVERE, "field {0} not present", storeField);
+ return;
+ }
+ String storedValue = jsonElement.getAsString();
storeValue(storeField, storedValue);
}
});
@@ -111,7 +128,6 @@ public abstract class Request {
public final JsonObject toJsonObject() {
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("reference", this.requestPlan.getReference());
- jsonObject.addProperty("method", getMethod());
jsonObject.addProperty("URL", getURL());
jsonObject.addProperty("headers", getHeaders());
if (this instanceof PostRequest) {
diff --git a/src/main/java/br/ufrgs/inf/prosoft/requestssimulator/requests/RequestPlan.java b/src/main/java/br/ufrgs/inf/prosoft/requestssimulator/requests/RequestPlan.java
index 8609d59..2b37d44 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/requestssimulator/requests/RequestPlan.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/requestssimulator/requests/RequestPlan.java
@@ -119,6 +119,10 @@ public class RequestPlan {
return this;
}
+ protected boolean storeFields() {
+ return this.storeFields != null && !this.storeFields.isEmpty();
+ }
+
protected void forEachStoreField(Consumer<? super String> forEach) {
this.storeFields.forEach(forEach);
}
@@ -169,11 +173,11 @@ public class RequestPlan {
public Request bind(Request request, Session session) {
if (request instanceof GetRequest) {
- return new GetRequest(this, session, request.getURL());
+ return new GetRequest(this, session, request.getURL(), request.getHeaders());
}
if (request instanceof PostRequest) {
PostRequest postRequest = (PostRequest) request;
- return new PostRequest(this, session, postRequest.getURL(), postRequest.getHeaders(), postRequest.getData());
+ return new PostRequest(this, session, postRequest.getURL(), postRequest.getData(), postRequest.getHeaders());
}
MultipartRequest multipartRequest = (MultipartRequest) request;
return new MultipartRequest(this, session, multipartRequest.getURL(), multipartRequest.getHeaders(), multipartRequest.getForms());