io.selendroid.server.BaseTest.java Source code

Java tutorial

Introduction

Here is the source code for io.selendroid.server.BaseTest.java

Source

/*
 * 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.server;

import io.netty.handler.codec.http.HttpMethod;
import io.selendroid.server.ServerInstrumentation;
import io.selendroid.server.common.exceptions.SelendroidException;
import io.selendroid.server.handlers.SessionAndIdExtractionTestHandler;
import io.selendroid.server.handlers.SessionAndPayloadExtractionTestHandler;
import io.selendroid.server.internal.Capabilities;

import org.apache.commons.io.IOUtils;
import org.apache.http.HttpHost;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicHttpEntityEnclosingRequest;
import org.json.JSONException;
import org.json.JSONObject;
import org.junit.After;
import org.junit.Before;

import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

public class BaseTest {
    public static final int port = 38055;
    public static final String host = "127.0.0.1";
    protected AndroidServer server;
    public static final String ANY_STRING = "ANY-STRING";

    @Before
    public void setup() throws Exception {
        ServerInstrumentation instrumentation = mock(ServerInstrumentation.class);
        when(instrumentation.getServerVersion()).thenReturn("0.2");
        server = new AndroidServer(instrumentation, port);
        server.start();
    }

    public Capabilities getCapabilities() {
        return Capabilities.android(ANY_STRING, ANY_STRING, ANY_STRING);
    }

    public HttpClient getHttpClient() {
        return new DefaultHttpClient();
    }

    public HttpResponse executeRequestWithPayload(String url, HttpMethod method, String payload) throws Exception {
        BasicHttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest(method.name(), url);
        request.setEntity(new StringEntity(payload, "UTF-8"));
        return executeRequest((HttpRequest) request);
    }

    private HttpResponse executeRequest(HttpRequest request) throws Exception {
        try {
            return getHttpClient().execute(new HttpHost(host, port), request);
        } catch (Throwable t) {
            Thread.sleep(1000);
        }
        return getHttpClient().execute(new HttpHost(host, port), request);
    }

    public JSONObject parseJsonResponse(HttpResponse response) throws Exception {
        return new JSONObject(IOUtils.toString(response.getEntity().getContent()));
    }

    public HttpResponse executeRequest(String url, HttpMethod method) throws Exception {
        HttpRequestBase request;
        if (HttpMethod.GET.equals(method)) {
            request = new HttpGet(url);
        } else if (HttpMethod.POST.equals(method)) {
            request = new HttpPost(url);
        } else if (HttpMethod.DELETE.equals(method)) {
            request = new HttpDelete(url);
        } else {
            throw new RuntimeException("Provided HttpMethod not supported");
        }
        return executeRequest(request);
    }

    @After
    public void tearDown() {
        if (server != null) {
            server.stop();
        }
    }

    /** Configuring AndroidServlet to use special test handler. */
    public class AndroidTestServlet extends AndroidServlet {
        public AndroidTestServlet() {
            super(null, null);
        }

        @Override
        protected void init() {
            register(getHandler, new SessionAndPayloadExtractionTestHandler("/wd/hub/session/:sessionId/element"));
            register(postHandler,
                    new SessionAndIdExtractionTestHandler("/wd/hub/session/:sessionId/element/:id/click"));
        }
    }

    protected HttpResponse executeCreateSessionRequest() throws Exception {
        String url = "http://" + host + ":" + port + "/wd/hub/session";
        return executeRequestWithPayload(url, HttpMethod.POST, getCapabilityPayload().toString());
    }

    protected JSONObject getCapabilityPayload() {
        Capabilities desiredCapabilities = getCapabilities();
        JSONObject payload = new JSONObject();

        try {
            payload.put("desiredCapabilities", new JSONObject(desiredCapabilities.asMap()));
        } catch (JSONException e) {
            throw new SelendroidException(e);
        }
        return payload;
    }
}