diff --git a/source/src/main/java/org/cerberus/core/crud/dao/impl/RobotExecutorDAO.java b/source/src/main/java/org/cerberus/core/crud/dao/impl/RobotExecutorDAO.java index 62631c06e..72f39d9fd 100644 --- a/source/src/main/java/org/cerberus/core/crud/dao/impl/RobotExecutorDAO.java +++ b/source/src/main/java/org/cerberus/core/crud/dao/impl/RobotExecutorDAO.java @@ -269,8 +269,8 @@ public AnswerList readByVariousByCriteria(List robot, Str public Answer create(RobotExecutor object) { MessageEvent msg = null; StringBuilder query = new StringBuilder(); - query.append("INSERT INTO robotexecutor (`robot`, `executor`, `isactive`, `rank`, `host`, `port`, `HostUser`, `HostPassword`, `deviceudid`, `devicename`, `deviceport`, `isdevicelockunlock`, `ExecutorProxyServiceHost`, `ExecutorProxyServicePort`, `ExecutorBrowserProxyHost`, `ExecutorBrowserProxyPort`, `executorproxytype`, `description`, `usrcreated`) "); - query.append("VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); + query.append("INSERT INTO robotexecutor (`robot`, `executor`, `isactive`, `rank`, `host`, `port`, `HostUser`, `HostPassword`, `deviceudid`, `devicename`, `deviceport`, `isdevicelockunlock`, `ExecutorProxyServiceHost`, `ExecutorProxyServicePort`, `ExecutorBrowserProxyHost`, `ExecutorBrowserProxyPort`, `ExecutorExtensionPort`, `executorproxytype`, `description`, `usrcreated`) "); + query.append("VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); // Debug message on SQL. if (LOG.isDebugEnabled()) { @@ -309,6 +309,7 @@ public Answer create(RobotExecutor object) { } else { preStat.setNull(i++, Types.INTEGER); } + preStat.setInt(i++, object.getExecutorExtensionPort()); preStat.setString(i++, object.getExecutorProxyType()); preStat.setString(i++, object.getDescription()); preStat.setString(i++, object.getUsrCreated()); @@ -367,7 +368,7 @@ public Answer delete(RobotExecutor object) { @Override public Answer update(String robot, String executor, RobotExecutor object) { MessageEvent msg = null; - final String query = "UPDATE robotexecutor SET `robot` = ?, `executor` = ?, description = ?, isactive = ?, `rank` = ?, `host` = ?, `port` = ?, `HostUser` = ?, `HostPassword` = ?, `deviceudid` = ?, `devicename` = ?, `deviceport` = ?, `isdevicelockunlock` = ?, `ExecutorProxyServiceHost` = ?, `ExecutorProxyServicePort` = ?, `ExecutorBrowserProxyHost` = ?, `ExecutorBrowserProxyPort` = ?, `executorproxytype` = ?, " + final String query = "UPDATE robotexecutor SET `robot` = ?, `executor` = ?, description = ?, isactive = ?, `rank` = ?, `host` = ?, `port` = ?, `HostUser` = ?, `HostPassword` = ?, `deviceudid` = ?, `devicename` = ?, `deviceport` = ?, `isdevicelockunlock` = ?, `ExecutorProxyServiceHost` = ?, `ExecutorProxyServicePort` = ?, `ExecutorBrowserProxyHost` = ?, `ExecutorBrowserProxyPort` = ?, `ExecutorExtensionPort` = ?, `executorproxytype` = ?, " + "dateModif = NOW(), usrModif= ? WHERE `robot` = ? and `executor` = ?"; // Debug message on SQL. @@ -409,6 +410,7 @@ public Answer update(String robot, String executor, RobotExecutor object) { } else { preStat.setNull(i++, Types.INTEGER); } + preStat.setInt(i++, object.getExecutorExtensionPort()); preStat.setString(i++, object.getExecutorProxyType()); preStat.setString(i++, object.getUsrModif()); preStat.setString(i++, robot); @@ -476,6 +478,7 @@ public RobotExecutor loadFromResultSet(ResultSet rs) throws SQLException { Integer executorProxyServicePort = rs.getInt("rbe.ExecutorProxyServicePort"); String executorBrowserProxyHost = rs.getString("rbe.ExecutorBrowserProxyHost"); Integer executorBrowserProxyPort = rs.getInt("rbe.ExecutorBrowserProxyPort"); + Integer executorExtensionPort = rs.getInt("rbe.ExecutorExtensionPort"); String executorProxyType = rs.getString("rbe.executorproxytype"); if(deviceport == 0) { deviceport=null; @@ -489,7 +492,7 @@ public RobotExecutor loadFromResultSet(ResultSet rs) throws SQLException { //TODO remove when working in test with mockito and autowired factoryRobotExecutor = new FactoryRobotExecutor(); - return factoryRobotExecutor.create(id, robot, executor, isActive, rank, host, port, hostUser, hostPassword, executorExtensionProxyPort, deviceudid, devicename, deviceport, isDevicelockunlock, executorProxyServiceHost, executorProxyServicePort, executorBrowserProxyHost, executorBrowserProxyPort, executorProxyType, description, usrCreated, dateCreated, usrModif, dateModif); + return factoryRobotExecutor.create(id, robot, executor, isActive, rank, host, port, hostUser, hostPassword, executorExtensionProxyPort, deviceudid, devicename, deviceport, isDevicelockunlock, executorProxyServiceHost, executorProxyServicePort, executorBrowserProxyHost, executorBrowserProxyPort, executorExtensionPort, executorProxyType, description, usrCreated, dateCreated, usrModif, dateModif); } @Override diff --git a/source/src/main/java/org/cerberus/core/crud/entity/RobotExecutor.java b/source/src/main/java/org/cerberus/core/crud/entity/RobotExecutor.java index 85500cd1f..ffb9606d9 100644 --- a/source/src/main/java/org/cerberus/core/crud/entity/RobotExecutor.java +++ b/source/src/main/java/org/cerberus/core/crud/entity/RobotExecutor.java @@ -55,6 +55,7 @@ public class RobotExecutor { private Integer executorProxyServicePort; private String executorBrowserProxyHost; private Integer executorBrowserProxyPort; + private Integer executorExtensionPort; private String UsrCreated; private Timestamp DateCreated; private String UsrModif; @@ -247,6 +248,14 @@ public void setExecutorBrowserProxyPort(Integer executorBrowserProxyPort) { this.executorBrowserProxyPort = executorBrowserProxyPort; } + public Integer getExecutorExtensionPort() { + return executorExtensionPort; + } + + public void setExecutorExtensionPort(Integer executorExtensionPort) { + this.executorExtensionPort = executorExtensionPort; + } + public String getExecutorProxyType() { return executorProxyType; } @@ -377,6 +386,9 @@ public boolean equals(Object obj) { if ((this.executorBrowserProxyPort == null) ? (other.executorBrowserProxyPort != null) : !this.executorBrowserProxyPort.equals(other.executorBrowserProxyPort)) { return false; } + if ((this.executorExtensionPort == null) ? (other.executorExtensionPort != null) : !this.executorExtensionPort.equals(other.executorExtensionPort)) { + return false; + } return true; } @@ -403,6 +415,7 @@ public JSONObject toJson(boolean secured) { result.put("executorProxyServicePort", this.getExecutorProxyServicePort()); result.put("executorBrowserProxyHost", this.getExecutorBrowserProxyHost()); result.put("executorBrowserProxyPort", this.getExecutorBrowserProxyPort()); + result.put("executorExtensionPort", this.getExecutorExtensionPort()); result.put("executorProxyType", this.getExecutorProxyType()); result.put("executor", this.getExecutor()); result.put("host", this.getHost()); diff --git a/source/src/main/java/org/cerberus/core/crud/factory/IFactoryRobotExecutor.java b/source/src/main/java/org/cerberus/core/crud/factory/IFactoryRobotExecutor.java index 2e8ad0a6c..6faa7cebc 100644 --- a/source/src/main/java/org/cerberus/core/crud/factory/IFactoryRobotExecutor.java +++ b/source/src/main/java/org/cerberus/core/crud/factory/IFactoryRobotExecutor.java @@ -47,6 +47,7 @@ public interface IFactoryRobotExecutor { * @param executorProxyServicePort * @param executorBrowserProxyHost * @param executorBrowserProxyPort + * @param executorExtensionPort * @param deviceUdid * @param UsrCreated * @param executorProxyType @@ -57,6 +58,6 @@ public interface IFactoryRobotExecutor { */ RobotExecutor create(Integer ID, String robot, String executor, boolean isActive, Integer rank, String host, String port, String hostUser, String hostPassword, Integer executorExtensionProxyPort, String deviceUdid, - String deviceName, Integer devicePort, boolean isDeviceLockUnlock, String executorProxyServiceHost, Integer executorProxyServicePort, String executorBrowserProxyHost, Integer executorBrowserProxyPort, String executorProxyType, + String deviceName, Integer devicePort, boolean isDeviceLockUnlock, String executorProxyServiceHost, Integer executorProxyServicePort, String executorBrowserProxyHost, Integer executorBrowserProxyPort, Integer executorExtensionPort, String executorProxyType, String description, String UsrCreated, Timestamp DateCreated, String UsrModif, Timestamp DateModif); } diff --git a/source/src/main/java/org/cerberus/core/crud/factory/impl/FactoryRobotExecutor.java b/source/src/main/java/org/cerberus/core/crud/factory/impl/FactoryRobotExecutor.java index d9f03d52b..a7911152a 100644 --- a/source/src/main/java/org/cerberus/core/crud/factory/impl/FactoryRobotExecutor.java +++ b/source/src/main/java/org/cerberus/core/crud/factory/impl/FactoryRobotExecutor.java @@ -32,7 +32,7 @@ public class FactoryRobotExecutor implements IFactoryRobotExecutor { @Override public RobotExecutor create(Integer ID, String robot, String executor, boolean isActive, Integer rank, String host, String port, String hostUser, String hostPassword, - Integer executorExtensionProxyPort, String deviceUdid, String deviceName, Integer devicePort, boolean isDeviceLockUnlock, String executorProxyServiceHost, Integer executorProxyServicePort, String executorBrowserProxyHost, Integer executorBrowserProxyPort, String executorProxyType, String description, + Integer executorExtensionProxyPort, String deviceUdid, String deviceName, Integer devicePort, boolean isDeviceLockUnlock, String executorProxyServiceHost, Integer executorProxyServicePort, String executorBrowserProxyHost, Integer executorBrowserProxyPort, Integer executorExtensionPort, String executorProxyType, String description, String UsrCreated, Timestamp DateCreated, String UsrModif, Timestamp DateModif) { RobotExecutor newRobot = new RobotExecutor(); newRobot.setID(ID); @@ -53,6 +53,7 @@ public RobotExecutor create(Integer ID, String robot, String executor, boolean i newRobot.setExecutorBrowserProxyHost(executorBrowserProxyHost); newRobot.setExecutorProxyType(executorProxyType); newRobot.setExecutorBrowserProxyPort(executorBrowserProxyPort); + newRobot.setExecutorExtensionPort(executorExtensionPort); newRobot.setDescription(description); newRobot.setUsrCreated(UsrCreated); newRobot.setDateCreated(DateCreated); diff --git a/source/src/main/java/org/cerberus/core/database/DocumentationDatabaseService.java b/source/src/main/java/org/cerberus/core/database/DocumentationDatabaseService.java index 7cc359fae..129b70226 100644 --- a/source/src/main/java/org/cerberus/core/database/DocumentationDatabaseService.java +++ b/source/src/main/java/org/cerberus/core/database/DocumentationDatabaseService.java @@ -805,6 +805,8 @@ public ArrayList getSqlDocumentation() { b.append(",('robotexecutor','executorBrowserProxyHost','','fa','میزبان پروکسی مرورگر', 'میزبانی که برای اتصال به سرویس پروکسی به مرورگر داده می شود. اگر خالی باشد، میزبان سرویس ربات پروکسی استفاده خواهد شد.',NULL)"); b.append(",('robotexecutor','executorBrowserProxyPort','','en','Browser Proxy Port','Port that will be used by the browser in order to connect to the proxy service. If 0, port will be determined randomly.',NULL)"); b.append(",('robotexecutor','executorBrowserProxyPort','','fa','درگاه پروکسی مرورگر','درگاهی که مرورگر برای اتصال به سرویس پروکسی از آن استفاده می کند. اگر 0 باشد، پورت به صورت تصادفی تعیین می شود.',NULL)"); + b.append(",('robotexecutor','executorExtensionPort','','en','Extension Port', 'Port that will be used in order to connect to the Cerberus Robot Extension. If 0, port will be the node port.',NULL)"); + b.append(",('robotexecutor','executorExtensionPort','','fr','Port de l\\'extension ', 'Port qui sera utilisé pour accéder à l\\'extension Cerberus. Si 0, le port sera celui du noeud.',NULL)"); b.append(",('robotexecutor','executorProxyType','','fr','Type de Proxy', 'Activer / Désactiver l\\'utilisation du proxy. L\\'utilisation du proxy permet de collecter des statistique et de controler le trafic réseau engendré par le navigateur.',NULL)"); b.append(",('robotexecutor','executorProxyType','','en','Proxy Type', 'Activate / Unactivate the usage of proxy service. Proxy service will allow to collect statistics and control the network traffic generated by the browser.',NULL)"); b.append(",('robotexecutor','executorProxyType','','fa','فعالسازی پروکسی', 'فعالسازی / غیرفعالسازی استفاده از پروکسی. سرویس پروکسی امکان جمع آوری آمار و کنترل ترافیک شبکه تولید شده توسط مرورگر را فراهم می کند.',NULL)"); diff --git a/source/src/main/java/org/cerberus/core/engine/entity/Session.java b/source/src/main/java/org/cerberus/core/engine/entity/Session.java index a8deb713e..e2739ce77 100644 --- a/source/src/main/java/org/cerberus/core/engine/entity/Session.java +++ b/source/src/main/java/org/cerberus/core/engine/entity/Session.java @@ -38,6 +38,7 @@ public class Session { private String nodeHost; private String nodePort; + private Integer executorExtensionPort; //Port where the cerberus robot extension is available on the node host private Integer executorExtensionProxyPort; // if >0, we use the proxy on host:proxyPort in order to connect to sikuli API (host is the host of the robot - ie the proxy should run on the same server as the robot server). private boolean started; @@ -99,6 +100,14 @@ public void setExecutorExtensionProxyPort(Integer executorExtensionProxyPort) { this.executorExtensionProxyPort = executorExtensionProxyPort; } + public Integer getExecutorExtensionPort() { + return executorExtensionPort; + } + + public void setExecutorExtensionPort(Integer executorExtensionPort) { + this.executorExtensionPort = executorExtensionPort; + } + public Integer getCerberus_selenium_highlightElement_default() { return cerberus_selenium_highlightElement_default; } diff --git a/source/src/main/java/org/cerberus/core/engine/execution/impl/RobotServerService.java b/source/src/main/java/org/cerberus/core/engine/execution/impl/RobotServerService.java index e7c9539f8..c9901e750 100644 --- a/source/src/main/java/org/cerberus/core/engine/execution/impl/RobotServerService.java +++ b/source/src/main/java/org/cerberus/core/engine/execution/impl/RobotServerService.java @@ -233,8 +233,11 @@ public void startServer(TestCaseExecution execution) throws CerberusException { if (execution.getRobotExecutorObj() != null) { LOG.debug("Session node proxy set : {}", execution.getRobotExecutorObj().getExecutorExtensionProxyPort()); session.setExecutorExtensionProxyPort(execution.getRobotExecutorObj().getExecutorExtensionProxyPort()); + LOG.debug("Extension port set: {}", execution.getRobotExecutorObj().getExecutorExtensionPort()); + session.setExecutorExtensionPort(execution.getRobotExecutorObj().getExecutorExtensionPort()); } else { session.setExecutorExtensionProxyPort(0); + session.setExecutorExtensionPort(0); } session.setConsoleLogs(new JSONArray()); diff --git a/source/src/main/java/org/cerberus/core/engine/queuemanagement/impl/ExecutionThreadPoolService.java b/source/src/main/java/org/cerberus/core/engine/queuemanagement/impl/ExecutionThreadPoolService.java index fc66ebcca..fce9ceb11 100644 --- a/source/src/main/java/org/cerberus/core/engine/queuemanagement/impl/ExecutionThreadPoolService.java +++ b/source/src/main/java/org/cerberus/core/engine/queuemanagement/impl/ExecutionThreadPoolService.java @@ -413,18 +413,18 @@ public void executeNextInQueue(boolean forceExecution) throws CerberusException // Application require a robot so we can get the list of executors. if (StringUtil.isEmptyOrNull(robot)) { robotExelist = new ArrayList<>(); - robotExelist.add(factoryRobotExecutor.create(0, "", "", true, 1, exe.getQueueRobotHost(), exe.getQueueRobotPort(), "", "", 0, "", "", null, false, "", 0, "", 0, "", "", "", null, "", null)); + robotExelist.add(factoryRobotExecutor.create(0, "", "", true, 1, exe.getQueueRobotHost(), exe.getQueueRobotPort(), "", "", 0, "", "", null, false, "", 0, "", 0, 0,"", "", "", null, "", null)); } else { robotExelist = robot_executor.get(robot); - if (robotExelist == null || robotExelist.size() < 1) { + if (robotExelist == null || robotExelist.isEmpty()) { robotExelist = new ArrayList<>(); - robotExelist.add(factoryRobotExecutor.create(0, "", "", true, 1, "", "", "", "", 0, "", "", null, false, "", 0, "", 0, "", "", "", null, "", null)); + robotExelist.add(factoryRobotExecutor.create(0, "", "", true, 1, "", "", "", "", 0, "", "", null, false, "", 0, "", 0, 0, "", "", "", null, "", null)); } } } else { // Application does not require a robot so we create a fake one with empty data. robotExelist = new ArrayList<>(); - robotExelist.add(factoryRobotExecutor.create(0, "", "", true, 1, "", "", "", "", 0, "", "", null, false, "", 0, "", 0, "", "", "", null, "", null)); + robotExelist.add(factoryRobotExecutor.create(0, "", "", true, 1, "", "", "", "", 0, "", "", null, false, "", 0, "", 0, 0,"", "", "", null, "", null)); } // Looping over every potential executor on the corresponding robot. diff --git a/source/src/main/java/org/cerberus/core/service/robotextension/impl/FilemanagementService.java b/source/src/main/java/org/cerberus/core/service/robotextension/impl/FilemanagementService.java index 7ed70fbfc..c94e997d5 100644 --- a/source/src/main/java/org/cerberus/core/service/robotextension/impl/FilemanagementService.java +++ b/source/src/main/java/org/cerberus/core/service/robotextension/impl/FilemanagementService.java @@ -65,6 +65,8 @@ public class FilemanagementService implements IFilemanagementService { public static final String FILEMANAGEMENT_UPLOADROBOTFILE = "upload"; public static final String FILEMANAGEMENT_GETROBOTFILE = "download"; + private static final String SIKULI_FILEMANAGEMENT_PATH = "/extra/ExecuteFilemanagementAction"; + private JSONObject generatePostParameters(String action, int nbFiles, String filename, String option, String contentBase64) throws JSONException, IOException, MalformedURLException, MimeTypeException { JSONObject result = new JSONObject(); @@ -96,8 +98,7 @@ public AnswerItem doFilemanagementAction(Session session, String act StringBuilder response = new StringBuilder(); URL url; - String host = StringUtil.cleanHostURL(session.getNodeHost()); - String urlToConnect = host + ":" + session.getNodePort() + "/extra/ExecuteFilemanagementAction"; + String urlToConnect = generateSikuliUrlOnNode(session, SIKULI_FILEMANAGEMENT_PATH); try { /** * Connect to ExecuteSikuliAction Servlet Through SeleniumServer @@ -293,4 +294,9 @@ public AnswerItem doFilemanagementActionGetRobotFile(Session session return ans; } + private String generateSikuliUrlOnNode(Session session, String path) { + int port = session.getExecutorExtensionPort() != 0 ? session.getExecutorExtensionPort() : Integer.parseInt(session.getNodePort()); + return String.format("%s:%d%s", StringUtil.cleanHostURL("127.0.0.1"), port, path); + } + } diff --git a/source/src/main/java/org/cerberus/core/service/robotextension/impl/SikuliService.java b/source/src/main/java/org/cerberus/core/service/robotextension/impl/SikuliService.java index c460c6175..d810d15d3 100644 --- a/source/src/main/java/org/cerberus/core/service/robotextension/impl/SikuliService.java +++ b/source/src/main/java/org/cerberus/core/service/robotextension/impl/SikuliService.java @@ -97,6 +97,8 @@ public class SikuliService implements ISikuliService { public static final String SIKULI_IDENTIFIER_PICTURE = "picture"; public static final String SIKULI_IDENTIFIER_TEXT = "text"; + private static final String SIKULI_EXECUTEACTION_PATH = "/extra/ExecuteSikuliAction"; + private JSONObject generatePostParameters(String action, String locator, String locator2, String text, String text2, long defaultWait, String minSimilarity, Integer highlightElement, String typeDelay) throws JSONException, IOException, MalformedURLException, MimeTypeException { JSONObject result = new JSONObject(); @@ -242,8 +244,7 @@ public boolean isSikuliServerReachableOnRobot(Session session) { PrintStream os = null; URL url; - String host = StringUtil.cleanHostURL(session.getHost()); - String urlToConnect = host + ":" + session.getPort() + "/extra/ExecuteSikuliAction"; + String urlToConnect = generateSikuliUrlOnRobot(session, SIKULI_EXECUTEACTION_PATH); try { /** * Connect to ExecuteSikuliAction Servlet Through SeleniumServer @@ -283,8 +284,7 @@ public boolean isSikuliServerReachableOnNode(Session session) { PrintStream os = null; URL url; - String host = StringUtil.cleanHostURL(session.getNodeHost()); - String urlToConnect = host + ":" + session.getNodePort() + "/extra/ExecuteSikuliAction"; + String urlToConnect = generateSikuliUrlOnNode(session, SIKULI_EXECUTEACTION_PATH); try { /** * Connect to ExecuteSikuliAction Servlet Through SeleniumServer @@ -330,8 +330,7 @@ public AnswerItem doSikuliAction(Session session, String action, Str StringBuilder response = new StringBuilder(); URL url; - String host = StringUtil.cleanHostURL(session.getNodeHost()); - String urlToConnect = host + ":" + session.getNodePort() + "/extra/ExecuteSikuliAction"; + String urlToConnect = generateSikuliUrlOnNode(session, SIKULI_EXECUTEACTION_PATH); try { /** * Connect to ExecuteSikuliAction Servlet Through SeleniumServer @@ -858,4 +857,14 @@ public File takeScreenShotFile(Session session) { return image; } + private String generateSikuliUrlOnRobot(Session session, String path) { + int port = session.getExecutorExtensionPort() != 0 ? session.getExecutorExtensionPort() : Integer.parseInt(session.getPort()); + return String.format("%s:%d%s", StringUtil.cleanHostURL(session.getHost()), port, path); + } + + private String generateSikuliUrlOnNode(Session session, String path) { + int port = session.getExecutorExtensionPort() != 0 ? session.getExecutorExtensionPort() : Integer.parseInt(session.getNodePort()); + return String.format("%s:%d%s", StringUtil.cleanHostURL(session.getNodeHost()), port, path); + } + } diff --git a/source/src/main/java/org/cerberus/core/servlet/crud/testexecution/CreateRobot.java b/source/src/main/java/org/cerberus/core/servlet/crud/testexecution/CreateRobot.java index 0d4e5642b..d4a10789f 100644 --- a/source/src/main/java/org/cerberus/core/servlet/crud/testexecution/CreateRobot.java +++ b/source/src/main/java/org/cerberus/core/servlet/crud/testexecution/CreateRobot.java @@ -274,8 +274,11 @@ private List getExecutorsFromParameter(String robot, HttpServletR } } + //Front (json serialize) send string empty when user provides no value. So, need to check first if value is not an empty string to secure and affect 0. + Integer executorExtensionPort = (reJson.has("executorExtensionPort") && !reJson.get("executorExtensionPort").toString().isEmpty()) ? reJson.getInt("executorExtensionPort") : 0; + if (!delete) { - RobotExecutor reo = reFactory.create(i, robot, executor, isActive, rank, host, port, hostUser, hostPassword, 0, deviceUdid, deviceName, devicePort, false, executorProxyServiceHost, executorProxyServicePort, executorBrowserProxyHost, executorBrowserProxyPort, executorProxyType, description, "", null, "", null); + RobotExecutor reo = reFactory.create(i, robot, executor, isActive, rank, host, port, hostUser, hostPassword, 0, deviceUdid, deviceName, devicePort, false, executorProxyServiceHost, executorProxyServicePort, executorBrowserProxyHost, executorBrowserProxyPort, executorExtensionPort, executorProxyType, description, "", null, "", null); reList.add(reo); } } diff --git a/source/src/main/java/org/cerberus/core/servlet/crud/testexecution/UpdateRobot.java b/source/src/main/java/org/cerberus/core/servlet/crud/testexecution/UpdateRobot.java index 84f0a82cb..26ba95212 100644 --- a/source/src/main/java/org/cerberus/core/servlet/crud/testexecution/UpdateRobot.java +++ b/source/src/main/java/org/cerberus/core/servlet/crud/testexecution/UpdateRobot.java @@ -306,8 +306,11 @@ private List getExecutorsFromParameter(String robot, HttpServletR } } + //Front (json serialize) send string empty when user provides no value. So, need to check first if value is not an empty string to secure and affect 0. + Integer executorExtensionPort = (reJson.has("executorExtensionPort") && !reJson.get("executorExtensionPort").toString().isEmpty()) ? reJson.getInt("executorExtensionPort") : 0; + if (!delete) { - RobotExecutor reo = reFactory.create(i, robot, executor, isActive, rank, host, port, hostUser, hostPassword, 0, deviceUdid, deviceName, devicePort, isDeviceLockUnlock, executorProxyServiceHost, executorProxyServicePort, executorBrowserProxyHost, executorBrowserProxyPort, executorProxyType, description, "", null, "", null); + RobotExecutor reo = reFactory.create(i, robot, executor, isActive, rank, host, port, hostUser, hostPassword, 0, deviceUdid, deviceName, devicePort, isDeviceLockUnlock, executorProxyServiceHost, executorProxyServicePort, executorBrowserProxyHost, executorBrowserProxyPort, executorExtensionPort, executorProxyType, description, "", null, "", null); reList.add(reo); } } diff --git a/source/src/main/resources/database.sql b/source/src/main/resources/database.sql index bd51a6152..d59f52671 100644 --- a/source/src/main/resources/database.sql +++ b/source/src/main/resources/database.sql @@ -6616,4 +6616,7 @@ ALTER TABLE robotexecutor RENAME COLUMN executorProxyHost TO ExecutorBrowserProx ALTER TABLE robotexecutor RENAME COLUMN executorProxyPort TO ExecutorBrowserProxyPort; ALTER TABLE robotexecutor RENAME COLUMN NodeProxyPort TO ExecutorExtensionProxyPort; ALTER TABLE robotexecutor RENAME COLUMN host_user TO HostUser; -ALTER TABLE robotexecutor RENAME COLUMN host_password TO HostPassword; \ No newline at end of file +ALTER TABLE robotexecutor RENAME COLUMN host_password TO HostPassword; + +-- 1890 +ALTER TABLE robotexecutor ADD COLUMN ExecutorExtensionPort int DEFAULT NULL AFTER ExecutorBrowserProxyPort; \ No newline at end of file diff --git a/source/src/main/webapp/js/transversalobject/Robot.js b/source/src/main/webapp/js/transversalobject/Robot.js index f0648c1c0..5773cb7ba 100644 --- a/source/src/main/webapp/js/transversalobject/Robot.js +++ b/source/src/main/webapp/js/transversalobject/Robot.js @@ -636,6 +636,8 @@ function appendExecutorRow(tableBody, executor) { var executorProxyServicePortInput = $("").addClass("form-control input-sm").val(executor.executorProxyServicePort); var executorBrowserProxyHostInput = $("").addClass("form-control input-sm").val(executor.executorBrowserProxyHost); var executorBrowserProxyPortInput = $("").addClass("form-control input-sm").val(executor.executorBrowserProxyPort); + var executorExtensionPortInput = $("").addClass("form-control input-sm").val(executor.executorExtensionPort); + var selectProxyTypeLnk = getSelectInvariant('PROXYTYPE', false); var table = $("#" + tableBody); @@ -699,12 +701,14 @@ function appendExecutorRow(tableBody, executor) { var eeport = $("
").append("").append(executorProxyServicePortInput); var ephost = $("
").append("").append(executorBrowserProxyHostInput); var epport = $("
").append("").append(executorBrowserProxyPortInput); + var executorExtensionPortGroup = $("
").append("").append(executorExtensionPortInput); var drow1 = $("
").append(active).append(rank).append(expandName); var drow2 = $("
").append(host).append(port).append(hostUser).append(hostPassword); // var drow3 = $("
").append(hostUser).append(hostPassword); var drow4 = $("
").append(dudid).append(dname).append(dport).append(dLockUnlock); var drow5 = $("
").append(epType).append(eehost).append(eeport).append(ephost).append(epport); - var panelExtra = $("
").append(drow4).append(drow5); + var drow6 = $("
").append(executorExtensionPortGroup); + var panelExtra = $("
").append(drow4).append(drow5).append(drow6); var td3 = $("").append(drow1).append(drow2).append(panelExtra); @@ -762,6 +766,9 @@ function appendExecutorRow(tableBody, executor) { executorBrowserProxyPortInput.change(function () { executor.executorBrowserProxyPort = $(this).val(); }); + executorExtensionPortInput.change(function () { + executor.executorExtensionPort = $(this).val(); + }); hostInput.autocomplete({ source: getInvariantArray("ROBOTHOST", false), @@ -843,6 +850,7 @@ function addNewExecutorRow(tableBody) { executorProxyServicePort: 8093, executorBrowserProxyHost: "", executorBrowserProxyPort: 0, + executorExtensionPort: 0, executorProxyType: "NONE" }; appendExecutorRow(tableBody, newExecutor);