private JsonObject getResponse(HttpServletRequest request) throws IOException { JsonObject requestJSON = null; if (request.getInputStream() != null) { BufferedReader rd = new BufferedReader(new InputStreamReader(request.getInputStream())); StringBuilder s = new StringBuilder(); String line; while ((line = rd.readLine()) != null) { s.append(line); } rd.close(); String json = s.toString(); if (!"".equals(json)) { requestJSON = new JsonParser().parse(json).getAsJsonObject(); } } JsonObject res = new JsonObject(); res.addProperty("success", false); // the id can be specified via a param, or in the json request. String session; if (requestJSON == null) { session = request.getParameter("session"); } else { if (!requestJSON.has("session")) { res.addProperty( "msg", "you need to specify at least a session or internalKey when call the test slot status service."); return res; } session = requestJSON.get("session").getAsString(); } TestSession testSession = getRegistry().getSession(ExternalSessionKey.fromString(session)); if (testSession == null) { res.addProperty( "msg", "Cannot find test slot running session " + session + " in the registry."); return res; } res.addProperty("msg", "slot found !"); res.remove("success"); res.addProperty("success", true); res.addProperty("session", testSession.getExternalKey().getKey()); res.addProperty("internalKey", testSession.getInternalKey()); res.addProperty("inactivityTime", testSession.getInactivityTime()); RemoteProxy p = testSession.getSlot().getProxy(); res.addProperty("proxyId", p.getId()); return res; }
private Object getValueByReflection(RemoteProxy proxy, String method) { Class<?>[] argsClass = new Class[] {}; try { Method m = proxy.getClass().getDeclaredMethod(method, argsClass); return m.invoke(proxy); } catch (Throwable e) { throw new RuntimeException(e.getClass() + " - " + e.getMessage()); } }
@Test public void defaultToRemoteProxy() { GridNodeConfiguration nodeConfiguration = new GridNodeConfiguration(); new JCommander(nodeConfiguration, "-role", "webdriver", "-host", "localhost"); RegistrationRequest res = RegistrationRequest.build(nodeConfiguration); res.getCapabilities().clear(); RegistrationRequest req = res; Map<String, Object> app1 = new HashMap<>(); GridNodeConfiguration config = new GridNodeConfiguration(); app1.put(CapabilityType.APPLICATION_NAME, "app1"); req.addDesiredCapability(app1); req.setConfiguration(config); // requires Custom1 & Custom1 set in config to work. RemoteProxy p = BaseRemoteProxy.getNewInstance(req, registry); assertEquals(BaseRemoteProxy.class, p.getClass()); }
public String renderSummary() { StringBuilder builder = new StringBuilder(); builder.append("<fieldset>"); builder.append("<legend>").append(proxy.getClass().getSimpleName()).append("</legend>"); builder.append("listening on ").append(proxy.getRemoteHost()); if (proxy.getTimeOut() > 0) { int inSec = proxy.getTimeOut() / 1000; builder.append("test session time out after ").append(inSec).append(" sec."); } builder .append("<br>Supports up to <b>") .append(proxy.getMaxNumberOfConcurrentTestSessions()) .append("</b> concurrent tests from : </u><br>"); for (TestSlot slot : proxy.getTestSlots()) { builder.append( slot.getCapabilities().containsKey(BROWSER) ? slot.getCapabilities().get(BROWSER) : slot.getCapabilities().get(APP)); builder.append("protocol:" + slot.getProtocol() + "<br>"); TestSession session = slot.getSession(); builder.append(session == null ? "(free)" : "(busy, session " + session + ")"); builder.append("<br>"); } builder.append("</fieldset>"); return builder.toString(); }
@Test public void existing() { Map<String, Object> app1 = new HashMap<>(); GridNodeConfiguration config = new GridNodeConfiguration(); app1.put(CapabilityType.APPLICATION_NAME, "app1"); config.proxy = "org.openqa.grid.plugin.MyRemoteProxy"; config.custom.put("Custom1", "A"); config.custom.put("Custom2", "B"); RegistrationRequest req = new RegistrationRequest(); req.addDesiredCapability(app1); req.setConfiguration(config); RemoteProxy p = BaseRemoteProxy.getNewInstance(req, registry); assertEquals(p.getClass(), MyRemoteProxy.class); MyRemoteProxy myRemoteProxy = (MyRemoteProxy) p; assertEquals("A", myRemoteProxy.getCustom1()); assertEquals("B", myRemoteProxy.getCustom2()); assertEquals("A", myRemoteProxy.getConfig().custom.get("Custom1")); assertEquals("B", myRemoteProxy.getConfig().custom.get("Custom2")); }
private JSONObject getResponse(HttpServletRequest request) throws IOException, JSONException { JSONObject requestJSON = null; if (request.getInputStream() != null) { BufferedReader rd = new BufferedReader(new InputStreamReader(request.getInputStream())); StringBuilder s = new StringBuilder(); String line; while ((line = rd.readLine()) != null) { s.append(line); } rd.close(); String json = s.toString(); if (json != null && !"".equals(json)) { requestJSON = new JSONObject(json); } } JSONObject res = new JSONObject(); res.put("success", false); // the id can be specified via a param, or in the json request. String id; if (requestJSON == null) { id = request.getParameter("id"); } else { if (!requestJSON.has("id")) { res.put("msg", "you need to specify at least an id when call the node status service."); return res; } else { id = requestJSON.getString("id"); } } // see RegistrationRequest.ensureBackwardCompatibility() try { URL u = new URL(id); id = "http://" + u.getHost() + ":" + u.getPort(); } catch (MalformedURLException ignore) { } // id is defined from here. RemoteProxy proxy = getRegistry().getProxyById(id); if (proxy == null) { res.put("msg", "Cannot find proxy with ID =" + id + " in the registry."); return res; } else { res.put("msg", "proxy found !"); res.put("success", true); res.put("id", proxy.getId()); res.put("request", proxy.getOriginalRegistrationRequest().getAssociatedJSON()); // maybe the request was for more info if (requestJSON != null) { // use basic (= no objects ) reflexion to get the extra stuff // requested. List<String> methods = getExtraMethodsRequested(requestJSON); List<String> errors = new ArrayList<String>(); for (String method : methods) { try { Object o = getValueByReflection(proxy, method); res.put(method, o); } catch (Throwable t) { errors.add(t.getMessage()); } } if (!errors.isEmpty()) { res.put("success", false); res.put("errors", errors.toString()); } } return res; } }