diff --git a/pom.xml b/pom.xml
index 5a78efc..1393d53 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
com.quantum
quantum-support
- 1.14
+ 1.15-alpha
UTF-8
diff --git a/resources/cacerts b/resources/cacerts
new file mode 100644
index 0000000..7b86e7d
Binary files /dev/null and b/resources/cacerts differ
diff --git a/src/main/java/com/quantum/listeners/PerfectoDriverListener.java b/src/main/java/com/quantum/listeners/PerfectoDriverListener.java
index ba4e917..b57d04d 100644
--- a/src/main/java/com/quantum/listeners/PerfectoDriverListener.java
+++ b/src/main/java/com/quantum/listeners/PerfectoDriverListener.java
@@ -33,11 +33,18 @@
import java.util.concurrent.TimeUnit;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
import org.openqa.selenium.Capabilities;
import org.openqa.selenium.MutableCapabilities;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.DriverCommand;
+import org.testng.Assert;
+import org.testng.TestNGException;
+import com.google.common.base.Strings;
+import com.qmetry.qaf.automation.core.AutomationError;
import com.qmetry.qaf.automation.core.ConfigurationManager;
import com.qmetry.qaf.automation.ui.webdriver.CommandTracker;
import com.qmetry.qaf.automation.ui.webdriver.QAFExtendedWebDriver;
@@ -48,6 +55,15 @@
import com.quantum.utils.ConsoleUtils;
import com.quantum.utils.DeviceUtils;
import com.quantum.utils.ReportUtils;
+import com.quantum.utils.RestAPIUtils;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.xml.sax.InputSource;
+
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathFactory;
+import java.io.StringReader;
public class PerfectoDriverListener extends QAFWebDriverCommandAdapter {
@Override
@@ -103,6 +119,33 @@ public void beforeInitialize(Capabilities desiredCapabilities) {
if (tags != null) {
((DesiredCapabilities) desiredCapabilities).setCapability("report.tags", tags);
}
+
+ if(null != ConfigurationManager.getBundle().getString("driver_availability_check") &&
+ ConfigurationManager.getBundle().getString("driver_availability_check").toLowerCase().equals("yes") &&
+ !Strings.isNullOrEmpty(((DesiredCapabilities)desiredCapabilities).getCapability("deviceName").toString()))
+ {
+ try {
+ RestAPIUtils.loadMyCert();
+ String res=RestAPIUtils.retrieveDeviceInfo(((DesiredCapabilities) desiredCapabilities).getCapability("deviceName").toString());
+ DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
+
+ DocumentBuilder builder = domFactory.newDocumentBuilder();
+ Document dDoc = builder.parse(new InputSource((new StringReader(res))));
+
+ XPath xPath = XPathFactory.newInstance().newXPath();
+ Node ndInuse = (Node) xPath.evaluate("handset/inUse", dDoc, XPathConstants.NODE);
+ Node ndavailable = (Node) xPath.evaluate("handset/available", dDoc, XPathConstants.NODE);
+ Node ndStatus = (Node) xPath.evaluate("handset/status", dDoc, XPathConstants.NODE);
+ if (!Boolean.valueOf(ndavailable.getTextContent()) || Boolean.valueOf(ndInuse.getTextContent())
+ || !ndStatus.getTextContent().toLowerCase().trim().equals("connected"))
+// throw new AutomationError("Device is unavailable or having error...");
+ Assert.fail("Device is unavailable or having error...");
+ }
+ catch(Exception e)
+ {
+ //ignore other exceptions
+ }
+ }
}
diff --git a/src/main/java/com/quantum/utils/RestAPIUtils.java b/src/main/java/com/quantum/utils/RestAPIUtils.java
new file mode 100644
index 0000000..a6a69e7
--- /dev/null
+++ b/src/main/java/com/quantum/utils/RestAPIUtils.java
@@ -0,0 +1,159 @@
+package com.quantum.utils;
+
+
+import com.qmetry.qaf.automation.core.ConfigurationManager;
+import com.qmetry.qaf.automation.ui.webdriver.QAFExtendedWebDriver;
+import com.quantum.utils.ConsoleUtils;
+import com.quantum.utils.DriverUtils;
+
+import org.apache.commons.lang3.StringUtils;
+import org.testng.Assert;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.net.Authenticator;
+import java.net.HttpURLConnection;
+import java.net.InetSocketAddress;
+import java.net.PasswordAuthentication;
+import java.net.Proxy;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.security.KeyStore;
+import java.util.HashMap;
+import java.util.Map;
+
+public class RestAPIUtils {
+
+ public static void exeRestCmd(String cmd,String subcmd,Map params) throws Exception {
+ QAFExtendedWebDriver d=DriverUtils.getDriver();
+ Map actions=new HashMap();
+
+ actions.put("command", cmd);
+ actions.put("subcommand", subcmd);
+
+ params.put("deviceId",d.getCapabilities().getCapability("deviceName").toString());
+ String svcStr="executions/"+d.getCapabilities().getCapability("executionId").toString();
+ String res=exeRestOps("command",svcStr,actions,params);
+ ConsoleUtils.logWarningBlocks("Step result:" +res);
+ Assert.assertTrue(res.toLowerCase().contains("success"),res);
+
+ }
+
+ public static String retrieveDeviceInfo(String deviceId) throws Exception {
+// QAFExtendedWebDriver d=DriverUtils.getDriver();
+ Map actions=new HashMap();
+ Map params=new HashMap();
+
+ String svcStr="handsets/"+deviceId;
+
+ return exeRestOps("info",svcStr,actions,params);
+
+ }
+ public static String exeRestOps(String Ops,String serviceStr,Map actions,Map params) throws Exception {
+
+
+ String cloudServer =
+ new URL(ConfigurationManager.getBundle().getString("remote.server")).getHost();
+ String securityToken = ConfigurationManager.getBundle().getString("perfecto.capabilities.securityToken") ;
+ String user = ConfigurationManager.getBundle().getString("perfecto.capabilities.user") ;
+ String password = ConfigurationManager.getBundle().getString("perfecto.capabilities.password") ;
+ String authStr;
+ String actionStr;
+ String paramStr;
+
+
+ if ( null ==securityToken || securityToken.trim().isEmpty())
+ authStr="&user=" + user
+ + "&password=" + password;
+ else
+ authStr="&securityToken=" + securityToken;
+
+ actionStr="";
+ for (Map.Entry et:actions.entrySet())
+ {
+ actionStr=actionStr+"&"+et.getKey()+"="+et.getValue();
+
+ }
+
+
+ paramStr="";
+ for (Map.Entry et:params.entrySet())
+ {
+ paramStr=paramStr+"¶m." + et.getKey()+"="+URLEncoder.encode(et.getValue(), "UTF-8");
+
+ }
+
+ String url = "https://"
+ + cloudServer
+ + "/services/"
+ + serviceStr
+ + "?operation=" +Ops
+ + authStr
+ + actionStr
+ + paramStr;
+
+
+ URL obj = new URL(url);
+ Proxy proxy=getProxy();
+ HttpURLConnection con=null;
+
+ con = proxy!=null?
+ (HttpURLConnection) obj.openConnection(proxy):
+ (HttpURLConnection) obj.openConnection();
+
+ con.setRequestMethod("GET");
+
+ BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
+ String inputLine;
+ StringBuffer response = new StringBuffer();
+
+ while ((inputLine = in.readLine()) != null) {
+ response.append(inputLine);
+ }
+ in.close();
+
+ return response.toString();
+ }
+
+ private static Proxy getProxy() {
+ Proxy proxy = null;
+
+ if (ConfigurationManager.getBundle().getString("proxyHost") != null
+ && !ConfigurationManager.getBundle().getString("proxyHost").toString().equals("")) {
+
+ String authUser=
+ (ConfigurationManager.getBundle().getString("proxyDomain")+"").trim()!=""?
+ ConfigurationManager.getBundle().getString("proxyUser")+"":
+ ConfigurationManager.getBundle().getString("proxyDomain")+""
+ +"\\"+ ConfigurationManager.getBundle().getString("proxyUser")+"";
+ String authPass=
+ ConfigurationManager.getBundle().getString("proxyPassword")+"";
+
+ Authenticator authenticator = new Authenticator() {
+ protected PasswordAuthentication getPasswordAuthentication() {
+ return (new PasswordAuthentication(authUser,authPass.toCharArray()));
+ }
+ };
+
+ Authenticator.setDefault(authenticator);
+
+ proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(ConfigurationManager.getBundle().getString("proxyHost").toString(),
+ Integer.parseInt(
+ ConfigurationManager.getBundle().getString("proxyPort").toString())
+ ));
+
+ }
+ return proxy;
+ }
+
+
+
+ public static void loadMyCert() throws Exception {
+ KeyStore keyStore = KeyStore.getInstance("JKS");
+
+ System.setProperty("javax.net.ssl.trustStore", "resources/cacerts");
+ }
+
+}
+
+