-
Notifications
You must be signed in to change notification settings - Fork 12
HTTP GET and POST
Roman Jakubco edited this page Jan 11, 2018
·
2 revisions
Prerequisite
This service is configured to respond to GET requests that are defined using the forGet(String url)
method with the following:
-
Custom status code
Defined by the CUSTOM_STATUS_CODE variable.
Value: 258 in this example -
Predefined String response body
Defined by the RESPONSE_BODY_GET variable
Create GET request:
private static final String URL = "http://www.ca.com/portfolio";
private static String RESPONSE_BODY_GET = "Response body from virtualized service.";
private static int CUSTOM_STATUS_CODE = 258;
@Rule
public VirtualServerRule vs = new VirtualServerRule();
@Test
public void testSimpleHttpGetWithResponseCodeAndStringBody() throws IOException {
forGet(URL).doReturn(
aMessage(CUSTOM_STATUS_CODE)
.withStringBody(RESPONSE_BODY_GET)
);
HttpGet httpGet = new HttpGet(URL);
HttpClient httpClient = HttpClientBuilder.create().build();
HttpResponse httpResponse = httpClient.execute(httpGet);
assertEquals(CUSTOM_STATUS_CODE, httpResponse.getStatusLine().getStatusCode());
BufferedReader reader = new BufferedReader(
new InputStreamReader(httpResponse.getEntity().getContent()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = reader.readLine()) != null) {
response.append(inputLine);
}
reader.close();
assertEquals(response.toString(), RESPONSE_BODY_GET);
}
This service is configured to respond to POST requests as defined using the forPost(String url)
method. This message has the following arguments:
-
Predefined String response body
Defined by RESPONSE_BODY_POST variable.
Note: This variable includes two parameters which will be replaced by the following post request arguments in the response:- ${argument.id}
Value: 5 - ${argument.filter}
Value: ALL
- ${argument.id}
Create POST request:
private static final String URL = "http://www.ca.com/portfolio";
private static String RESPONSE_BODY_POST =
"Response for id ${argument.id} with configured filter for ${argument.filter}.";
private static int CUSTOM_STATUS_CODE = 258;
@Rule
public VirtualServerRule vs = new VirtualServerRule();
@Test
public void testSimpleHttpPost() throws IOException {
forPost(URL).doReturn(
okMessage()
.withStringBody(RESPONSE_BODY_POST)
.withContentType(HttpConstants.PLAIN_TEXT)
.enableMagicStrings()
);
HttpPost httpPost = new HttpPost(URL);
List parameters = new ArrayList(2);
parameters.add(new BasicNameValuePair("id", "5"));
parameters.add(new BasicNameValuePair("filter", "ALL"));
httpPost.setEntity(new UrlEncodedFormEntity(parameters));
HttpClient httpClient = HttpClientBuilder.create().build();
HttpResponse httpResponse = httpClient.execute(httpPost);
BufferedReader reader = new BufferedReader(
new InputStreamReader(httpResponse.getEntity().getContent()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = reader.readLine()) != null) {
response.append(inputLine);
}
reader.close();
assertTrue(response.toString().contains("Response for id 5"));
assertTrue(response.toString().contains("filter for ALL."));
}
For a complete example see: GETandPostExample