use of org.apache.commons.httpclient.HttpMethod in project cloudstack by apache.
the class ApiCommand method verifyEvents.
public static boolean verifyEvents(String fileName, String level, String host, String account) {
boolean result = false;
HashMap<String, Integer> expectedEvents = new HashMap<String, Integer>();
HashMap<String, Integer> actualEvents = new HashMap<String, Integer>();
String key = "";
File file = new File(fileName);
if (file.exists()) {
Properties pro = new Properties();
try {
// get expected events
FileInputStream in = new FileInputStream(file);
pro.load(in);
Enumeration<?> en = pro.propertyNames();
while (en.hasMoreElements()) {
key = (String) en.nextElement();
expectedEvents.put(key, Integer.parseInt(pro.getProperty(key)));
}
// get actual events
String url = host + "/?command=listEvents&account=" + account + "&level=" + level + "&domainid=1&pagesize=100";
s_logger.info("Getting events with the following url " + url);
HttpClient client = new HttpClient();
HttpMethod method = new GetMethod(url);
int responseCode = client.executeMethod(method);
if (responseCode == 200) {
InputStream is = method.getResponseBodyAsStream();
ArrayList<HashMap<String, String>> eventValues = UtilsForTest.parseMulXML(is, new String[] { "event" });
for (int i = 0; i < eventValues.size(); i++) {
HashMap<String, String> element = eventValues.get(i);
if (element.get("level").equals(level)) {
if (actualEvents.containsKey(element.get("type")) == true) {
actualEvents.put(element.get("type"), actualEvents.get(element.get("type")) + 1);
} else {
actualEvents.put(element.get("type"), 1);
}
}
}
}
method.releaseConnection();
// compare actual events with expected events
// compare expected result and actual result
Iterator<?> iterator = expectedEvents.keySet().iterator();
Integer expected;
Integer actual;
int fail = 0;
while (iterator.hasNext()) {
expected = null;
actual = null;
String type = iterator.next().toString();
expected = expectedEvents.get(type);
actual = actualEvents.get(type);
if (actual == null) {
s_logger.error("Event of type " + type + " and level " + level + " is missing in the listEvents response. Expected number of these events is " + expected);
fail++;
} else if (expected.compareTo(actual) != 0) {
fail++;
s_logger.info("Amount of events of " + type + " type and level " + level + " is incorrect. Expected number of these events is " + expected + ", actual number is " + actual);
}
}
if (fail == 0) {
result = true;
}
} catch (Exception ex) {
s_logger.error(ex);
}
} else {
s_logger.info("File " + fileName + " not found");
}
return result;
}
use of org.apache.commons.httpclient.HttpMethod in project cloudstack by apache.
the class ApiCommand method verifyEvents.
public static boolean verifyEvents(HashMap<String, Integer> expectedEvents, String level, String host, String parameters) {
boolean result = false;
HashMap<String, Integer> actualEvents = new HashMap<String, Integer>();
try {
// get actual events
String url = host + "/?command=listEvents&" + parameters;
HttpClient client = new HttpClient();
HttpMethod method = new GetMethod(url);
int responseCode = client.executeMethod(method);
if (responseCode == 200) {
InputStream is = method.getResponseBodyAsStream();
ArrayList<HashMap<String, String>> eventValues = UtilsForTest.parseMulXML(is, new String[] { "event" });
for (int i = 0; i < eventValues.size(); i++) {
HashMap<String, String> element = eventValues.get(i);
if (element.get("level").equals(level)) {
if (actualEvents.containsKey(element.get("type")) == true) {
actualEvents.put(element.get("type"), actualEvents.get(element.get("type")) + 1);
} else {
actualEvents.put(element.get("type"), 1);
}
}
}
}
method.releaseConnection();
} catch (Exception ex) {
s_logger.error(ex);
}
// compare actual events with expected events
Iterator<?> iterator = expectedEvents.keySet().iterator();
Integer expected;
Integer actual;
int fail = 0;
while (iterator.hasNext()) {
expected = null;
actual = null;
String type = iterator.next().toString();
expected = expectedEvents.get(type);
actual = actualEvents.get(type);
if (actual == null) {
s_logger.error("Event of type " + type + " and level " + level + " is missing in the listEvents response. Expected number of these events is " + expected);
fail++;
} else if (expected.compareTo(actual) != 0) {
fail++;
s_logger.info("Amount of events of " + type + " type and level " + level + " is incorrect. Expected number of these events is " + expected + ", actual number is " + actual);
}
}
if (fail == 0) {
result = true;
}
return result;
}
use of org.apache.commons.httpclient.HttpMethod in project cloudstack by apache.
the class ApiCommand method sendCommand.
// Send api command to the server
public void sendCommand(HttpClient client, Connection conn) {
if (TestCaseEngine.s_printUrl == true) {
s_logger.info("url is " + this.command);
}
if (this.getCommandType() == CommandType.SCRIPT) {
try {
s_logger.info("Executing command " + this.command);
Runtime rtime = Runtime.getRuntime();
Process child = rtime.exec(this.command);
Thread.sleep(10000);
int retCode = child.waitFor();
if (retCode != 0) {
this.responseCode = retCode;
} else {
this.responseCode = 200;
}
} catch (Exception ex) {
s_logger.error("Unable to execute a command " + this.command, ex);
}
} else if (this.getCommandType() == CommandType.MYSQL) {
try {
Statement stmt = conn.createStatement();
this.result = stmt.executeQuery(this.command);
this.responseCode = 200;
} catch (Exception ex) {
this.responseCode = 400;
s_logger.error("Unable to execute mysql query " + this.command, ex);
}
} else {
HttpMethod method = new GetMethod(this.command);
try {
this.responseCode = client.executeMethod(method);
if (this.responseCode == 200) {
InputStream is = method.getResponseBodyAsStream();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(is);
doc.getDocumentElement().normalize();
if (!(this.isAsync)) {
this.responseBody = doc.getDocumentElement();
} else {
// get async job result
Element jobTag = (Element) doc.getDocumentElement().getElementsByTagName("jobid").item(0);
String jobId = jobTag.getTextContent();
Element responseBodyAsyncEl = queryAsyncJobResult(jobId);
if (responseBodyAsyncEl == null) {
s_logger.error("Can't get a async result");
} else {
this.responseBody = responseBodyAsyncEl;
// get status of the job
Element jobStatusTag = (Element) responseBodyAsyncEl.getElementsByTagName("jobstatus").item(0);
String jobStatus = jobStatusTag.getTextContent();
if (!jobStatus.equals("1")) {
// Need to modify with different error codes for jobAsync
// results
// set fake response code by now
this.responseCode = 400;
}
}
}
}
if (TestCaseEngine.s_printUrl == true) {
s_logger.info("Response code is " + this.responseCode);
}
} catch (Exception ex) {
s_logger.error("Command " + command + " failed with exception " + ex.getMessage());
} finally {
method.releaseConnection();
}
}
}
use of org.apache.commons.httpclient.HttpMethod in project cloudstack by apache.
the class PerformanceWithAPI method CreateForwardingRule.
private static int CreateForwardingRule(User myUser, String privateIp, String publicIp, String publicPort, String privatePort) throws IOException {
String encodedPrivateIp = URLEncoder.encode("" + privateIp, "UTF-8");
String encodedPublicIp = URLEncoder.encode("" + publicIp, "UTF-8");
String encodedPrivatePort = URLEncoder.encode("" + privatePort, "UTF-8");
String encodedPublicPort = URLEncoder.encode("" + publicPort, "UTF-8");
String encodedApiKey = URLEncoder.encode(myUser.getApiKey(), "UTF-8");
int responseCode = 500;
String requestToSign = "apiKey=" + encodedApiKey + "&command=createOrUpdateIpForwardingRule&privateIp=" + encodedPrivateIp + "&privatePort=" + encodedPrivatePort + "&protocol=tcp&publicIp=" + encodedPublicIp + "&publicPort=" + encodedPublicPort;
requestToSign = requestToSign.toLowerCase();
s_logger.info("Request to sign is " + requestToSign);
String signature = TestClientWithAPI.signRequest(requestToSign, myUser.getSecretKey());
String encodedSignature = URLEncoder.encode(signature, "UTF-8");
String url = myUser.getDeveloperServer() + "?command=createOrUpdateIpForwardingRule" + "&publicIp=" + encodedPublicIp + "&publicPort=" + encodedPublicPort + "&privateIp=" + encodedPrivateIp + "&privatePort=" + encodedPrivatePort + "&protocol=tcp&apiKey=" + encodedApiKey + "&signature=" + encodedSignature;
s_logger.info("Trying to create IP forwarding rule: " + url);
HttpClient client = new HttpClient();
HttpMethod method = new GetMethod(url);
responseCode = client.executeMethod(method);
s_logger.info("create ip forwarding rule response code: " + responseCode);
if (responseCode == 200) {
s_logger.info("The rule is created successfully");
} else if (responseCode == 500) {
InputStream is = method.getResponseBodyAsStream();
Map<String, String> errorInfo = TestClientWithAPI.getSingleValueFromXML(is, new String[] { "errorCode", "description" });
s_logger.error("create ip forwarding rule (linux) test failed with errorCode: " + errorInfo.get("errorCode") + " and description: " + errorInfo.get("description"));
} else {
s_logger.error("internal error processing request: " + method.getStatusText());
}
return responseCode;
}
use of org.apache.commons.httpclient.HttpMethod in project cloudstack by apache.
the class User method retrievePublicIp.
public void retrievePublicIp(long zoneId) throws IOException {
String encodedApiKey = URLEncoder.encode(this.apiKey, "UTF-8");
String encodedZoneId = URLEncoder.encode("" + zoneId, "UTF-8");
String requestToSign = "apiKey=" + encodedApiKey + "&command=associateIpAddress" + "&zoneId=" + encodedZoneId;
requestToSign = requestToSign.toLowerCase();
String signature = TestClientWithAPI.signRequest(requestToSign, this.secretKey);
String encodedSignature = URLEncoder.encode(signature, "UTF-8");
String url = this.developerServer + "?command=associateIpAddress" + "&apiKey=" + encodedApiKey + "&zoneId=" + encodedZoneId + "&signature=" + encodedSignature;
HttpClient client = new HttpClient();
HttpMethod method = new GetMethod(url);
int responseCode = client.executeMethod(method);
if (responseCode == 200) {
InputStream is = method.getResponseBodyAsStream();
Map<String, String> values = TestClientWithAPI.getSingleValueFromXML(is, new String[] { "ipaddress" });
this.getPublicIp().add(values.get("ipaddress"));
s_logger.info("Ip address is " + values.get("ipaddress"));
} else if (responseCode == 500) {
InputStream is = method.getResponseBodyAsStream();
Map<String, String> errorInfo = TestClientWithAPI.getSingleValueFromXML(is, new String[] { "errorcode", "description" });
s_logger.error("associate ip test failed with errorCode: " + errorInfo.get("errorCode") + " and description: " + errorInfo.get("description"));
} else {
s_logger.error("internal error processing request: " + method.getStatusText());
}
}
Aggregations