From 5c435a1e760d4c51dbea0fea84dc439d1b157707 Mon Sep 17 00:00:00 2001 From: jackdperfecto Date: Mon, 18 Jun 2018 12:22:34 -0400 Subject: [PATCH 1/7] added RestAPIUtils class and added pre check in PerfectoDriverListener before launch the driver --- .../java/com/quantum/utils/RestAPIUtils.java | 108 ++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 src/main/java/com/quantum/utils/RestAPIUtils.java 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..1b996b9 --- /dev/null +++ b/src/main/java/com/quantum/utils/RestAPIUtils.java @@ -0,0 +1,108 @@ +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.testng.Assert; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +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()+"="+et.getValue(); + + } + + String url = "https://" + + cloudServer + + "/services/" + + serviceStr + + "?operation=" +Ops + + authStr + + actionStr + + paramStr; + //+ "¶m.deviceId="+d.getCapabilities().getCapability("deviceName").toString(); + + + URL obj = new URL(url); + HttpURLConnection con = (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(); + //JSONObject jObj = new JSONObject(response.toString()); + +// ConsoleUtils.logWarningBlocks("Step result:" +response.toString()); +// Assert.assertTrue(response.toString().toLowerCase().contains("success"),response.toString()); + + return response.toString(); + } +} From d705601111aad491459fcc3f7677d2a13931f392 Mon Sep 17 00:00:00 2001 From: jackdperfecto Date: Mon, 18 Jun 2018 12:26:44 -0400 Subject: [PATCH 2/7] added pre check in PerfectoDriverListener before launch the driver --- .../listeners/PerfectoDriverListener.java | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/main/java/com/quantum/listeners/PerfectoDriverListener.java b/src/main/java/com/quantum/listeners/PerfectoDriverListener.java index ba4e917..46aaec6 100644 --- a/src/main/java/com/quantum/listeners/PerfectoDriverListener.java +++ b/src/main/java/com/quantum/listeners/PerfectoDriverListener.java @@ -33,11 +33,17 @@ 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.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 +54,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 +118,31 @@ public void beforeInitialize(Capabilities desiredCapabilities) { if (tags != null) { ((DesiredCapabilities) desiredCapabilities).setCapability("report.tags", tags); } + if(!Strings.isNullOrEmpty(((DesiredCapabilities)desiredCapabilities).getCapability("deviceName").toString())) + { + try { + 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(ndInuse.getTextContent()) || !Boolean.valueOf(ndavailable.getTextContent()) + ||ndStatus.getTextContent()!="Connected") + throw new AutomationError("Device is unavailable or having error..."); + }catch (AutomationError se) + { + throw se; + } + catch(Exception e) + { + //ignore + } + } } From 521b53f8fc0ce24505241e13c182cfcbe0151a09 Mon Sep 17 00:00:00 2001 From: jackdperfecto Date: Mon, 18 Jun 2018 12:50:57 -0400 Subject: [PATCH 3/7] Replace threwing automation error when device is unavailable with Assert.Fail --- .../quantum/listeners/PerfectoDriverListener.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/quantum/listeners/PerfectoDriverListener.java b/src/main/java/com/quantum/listeners/PerfectoDriverListener.java index 46aaec6..af701ff 100644 --- a/src/main/java/com/quantum/listeners/PerfectoDriverListener.java +++ b/src/main/java/com/quantum/listeners/PerfectoDriverListener.java @@ -40,6 +40,7 @@ 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; @@ -131,16 +132,14 @@ public void beforeInitialize(Capabilities desiredCapabilities) { 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(ndInuse.getTextContent()) || !Boolean.valueOf(ndavailable.getTextContent()) - ||ndStatus.getTextContent()!="Connected") - throw new AutomationError("Device is unavailable or having error..."); - }catch (AutomationError se) - { - throw se; + if (!Boolean.valueOf(ndavailable.getTextContent()) || Boolean.valueOf(ndInuse.getTextContent()) + || ndStatus.getTextContent()!="Connected") +// throw new AutomationError("Device is unavailable or having error..."); + Assert.fail("Device is unavailable or having error..."); } catch(Exception e) { - //ignore + //ignore other exceptions } } From fc6810ed7f318c9190666a85b043d7d6d96023f0 Mon Sep 17 00:00:00 2001 From: jackdperfecto Date: Mon, 18 Jun 2018 12:51:24 -0400 Subject: [PATCH 4/7] Change ArtifactId to 1.15-alpha --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From 779e82260e830bdbebf927ff8086028517c4917b Mon Sep 17 00:00:00 2001 From: jackdperfecto Date: Tue, 19 Jun 2018 16:52:33 -0400 Subject: [PATCH 5/7] added a switch to the driver_availability_check feature if driver_availability_check=yes is set in applications.properties then invoke this checkup if driver_availability_check is not set, or set to anything but yes, then ignore the checkup --- .../java/com/quantum/listeners/PerfectoDriverListener.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/quantum/listeners/PerfectoDriverListener.java b/src/main/java/com/quantum/listeners/PerfectoDriverListener.java index af701ff..bbde5f6 100644 --- a/src/main/java/com/quantum/listeners/PerfectoDriverListener.java +++ b/src/main/java/com/quantum/listeners/PerfectoDriverListener.java @@ -119,7 +119,10 @@ public void beforeInitialize(Capabilities desiredCapabilities) { if (tags != null) { ((DesiredCapabilities) desiredCapabilities).setCapability("report.tags", tags); } - if(!Strings.isNullOrEmpty(((DesiredCapabilities)desiredCapabilities).getCapability("deviceName").toString())) + + 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 { String res=RestAPIUtils.retrieveDeviceInfo(((DesiredCapabilities) desiredCapabilities).getCapability("deviceName").toString()); @@ -133,7 +136,7 @@ public void beforeInitialize(Capabilities desiredCapabilities) { 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()!="Connected") + || !ndStatus.getTextContent().toLowerCase().trim().equals("connected")) // throw new AutomationError("Device is unavailable or having error..."); Assert.fail("Device is unavailable or having error..."); } From 4f636902e25db5465c52ef215105a4b7c23d353f Mon Sep 17 00:00:00 2001 From: jackdperfecto Date: Thu, 21 Jun 2018 16:27:07 -0400 Subject: [PATCH 6/7] URLEcode Parameters before submitting to RestApi --- src/main/java/com/quantum/utils/RestAPIUtils.java | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/quantum/utils/RestAPIUtils.java b/src/main/java/com/quantum/utils/RestAPIUtils.java index 1b996b9..64ad3f6 100644 --- a/src/main/java/com/quantum/utils/RestAPIUtils.java +++ b/src/main/java/com/quantum/utils/RestAPIUtils.java @@ -12,6 +12,7 @@ import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; +import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; @@ -64,14 +65,15 @@ public static String exeRestOps(String Ops,String serviceStr,Map actionStr=""; for (Map.Entry et:actions.entrySet()) { - actionStr=actionStr+"&" + et.getKey()+"="+et.getValue(); + actionStr=actionStr+"&"+et.getKey()+"="+et.getValue(); } + paramStr=""; for (Map.Entry et:params.entrySet()) { - paramStr=paramStr+"¶m." + et.getKey()+"="+et.getValue(); + paramStr=paramStr+"¶m." + et.getKey()+"="+URLEncoder.encode(et.getValue(), "UTF-8"); } @@ -83,9 +85,8 @@ public static String exeRestOps(String Ops,String serviceStr,Map + authStr + actionStr + paramStr; - //+ "¶m.deviceId="+d.getCapabilities().getCapability("deviceName").toString(); + - URL obj = new URL(url); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); con.setRequestMethod("GET"); @@ -98,11 +99,7 @@ public static String exeRestOps(String Ops,String serviceStr,Map response.append(inputLine); } in.close(); - //JSONObject jObj = new JSONObject(response.toString()); - -// ConsoleUtils.logWarningBlocks("Step result:" +response.toString()); -// Assert.assertTrue(response.toString().toLowerCase().contains("success"),response.toString()); - + return response.toString(); } } From 8ef5fcef76ab2fee897faa7a0fcf9eac1c98a950 Mon Sep 17 00:00:00 2001 From: jackdperfecto Date: Tue, 30 Oct 2018 15:32:24 -0400 Subject: [PATCH 7/7] 1. Added Proxy handling to RestAPIUtils class 2. Added LoadCert() to RestAPIUtils to over come the building slaves/Agents which does not have proper Perfecto.com cert 3. Added a keystore to resources folder to allow loadcert to activate Perfecto.com cert to the httpclient to use when sending http requests to perfecto RestApis --- resources/cacerts | Bin 0 -> 114728 bytes .../listeners/PerfectoDriverListener.java | 3 +- .../java/com/quantum/utils/RestAPIUtils.java | 56 +++++++++++++++++- 3 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 resources/cacerts diff --git a/resources/cacerts b/resources/cacerts new file mode 100644 index 0000000000000000000000000000000000000000..7b86e7dc754dcff244865d6d423223cd8d280252 GIT binary patch literal 114728 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 literal 0 HcmV?d00001 diff --git a/src/main/java/com/quantum/listeners/PerfectoDriverListener.java b/src/main/java/com/quantum/listeners/PerfectoDriverListener.java index bbde5f6..b57d04d 100644 --- a/src/main/java/com/quantum/listeners/PerfectoDriverListener.java +++ b/src/main/java/com/quantum/listeners/PerfectoDriverListener.java @@ -120,11 +120,12 @@ public void beforeInitialize(Capabilities desiredCapabilities) { ((DesiredCapabilities) desiredCapabilities).setCapability("report.tags", tags); } - if(null!=ConfigurationManager.getBundle().getString("driver_availability_check") && + 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(); diff --git a/src/main/java/com/quantum/utils/RestAPIUtils.java b/src/main/java/com/quantum/utils/RestAPIUtils.java index 64ad3f6..a6a69e7 100644 --- a/src/main/java/com/quantum/utils/RestAPIUtils.java +++ b/src/main/java/com/quantum/utils/RestAPIUtils.java @@ -6,13 +6,19 @@ 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; @@ -88,7 +94,13 @@ public static String exeRestOps(String Ops,String serviceStr,Map URL obj = new URL(url); - HttpURLConnection con = (HttpURLConnection) obj.openConnection(); + 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())); @@ -102,4 +114,46 @@ public static String exeRestOps(String Ops,String serviceStr,Map 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"); + } + } + +