/* * Copyright 2012-2014 eBay Software Foundation and selendroid committers. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ package io.selendroid.standalone.server.support; import io.selendroid.server.common.SelendroidResponse; import java.io.File; import java.io.IOException; import java.util.Properties; public class SelendroidDeviceServerStub extends NanoHTTPD { private final TestSessionListener testSessionListener; private int port; public SelendroidDeviceServerStub(int port, TestSessionListener testSessionListener) throws IOException { super(port, new File(".")); this.port = port; System.out.println("SelendroidDeviceServerStub is started on the following port: " + port); this.testSessionListener = testSessionListener; } public int getPort() { return port; } public Response serve(String uri, String method, Properties header, Properties params, Properties files) { if (this.testSessionListener == null) { throw new IllegalStateException("Server must have one test session listener registered."); } try { if (uri.endsWith("/wd/hub/status") && isGet(method)) { return respond(testSessionListener.status(params)); } else if (uri.endsWith("/wd/hub/session") && isPost(method)) { return respond(testSessionListener.createSession(params)); } else if (uri.endsWith("/wd/hub/session/:sessionId") && isDelete(method)) { return respond(testSessionListener.deleteSession(params)); } else if (uri.endsWith(testSessionListener.uriMapping)) { return respond(testSessionListener.executeSelendroidRequest(params)); } } catch (Exception e) { e.printStackTrace(); } return new Response(HTTP_INTERNALERROR, MIME_PLAINTEXT, "ERROR OCCURRED"); } private boolean isGet(String method) { return "GET".equals(method); } private boolean isPost(String method) { return "POST".equals(method); } private boolean isDelete(String method) { return "DELETE".equals(method); } private Response respond(SelendroidResponse response) { return new Response(HTTP_OK, "application/json", response.render()); } }