org.surfnet.oaaas.selenium.SeleniumSupport.java Source code

Java tutorial

Introduction

Here is the source code for org.surfnet.oaaas.selenium.SeleniumSupport.java

Source

/*
 * Copyright 2012 SURFnet bv, The Netherlands
 *
 * 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 org.surfnet.oaaas.selenium;

import org.apache.http.localserver.LocalTestServer;
import org.codehaus.jackson.map.ObjectMapper;
import org.junit.BeforeClass;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
import org.surfnet.oaaas.auth.OAuth2Validator;
import org.surfnet.oaaas.auth.ObjectMapperProvider;
import org.surfnet.oaaas.it.AbstractAuthorizationServerTest;

import java.util.concurrent.TimeUnit;

import static org.junit.Assert.assertThat;
import static org.junit.matchers.JUnitMatchers.containsString;

/**
 *
 *
 */
public abstract class SeleniumSupport extends AbstractAuthorizationServerTest {

    private static WebDriver driver;

    private AuthorizationCodeRequestHandler authorizationCodeRequestHandler;

    private LocalTestServer oauthClientServer;

    private ObjectMapper mapper = new ObjectMapper();

    @BeforeClass
    public static void initializeOnce() {
        if (driver != null) {
            driver.close();
            driver.quit();
            driver = null;
        }
        if ("firefox".equals(System.getProperty("selenium.webdriver", "firefox"))) {
            initFirefoxDriver();
        } else {
            initHtmlUnitDriver();
        }

    }

    protected String startAuthorizationCallbackServer(String clientId, String secret) throws Exception {
        this.oauthClientServer = new LocalTestServer(null, null);
        oauthClientServer.start();
        // report how to access the server
        String oauthClientBaseUri = String.format("http://%s:%d",
                oauthClientServer.getServiceAddress().getHostName(),
                oauthClientServer.getServiceAddress().getPort());

        String accessTokenRedirectUri = oauthClientBaseUri + "/codeCatcher";

        authorizationCodeRequestHandler = new AuthorizationCodeRequestHandler(accessTokenRedirectUri, baseUrl(),
                clientId, secret, OAuth2Validator.GRANT_TYPE_AUTHORIZATION_CODE);
        oauthClientServer.register("/codeCatcher", authorizationCodeRequestHandler);
        return accessTokenRedirectUri;
    }

    protected AuthorizationCodeRequestHandler getAuthorizationCodeRequestHandler() {
        return authorizationCodeRequestHandler;
    }

    private static void initHtmlUnitDriver() {
        initDriver(new HtmlUnitDriver());
    }

    private static void initFirefoxDriver() {
        initDriver(new FirefoxDriver());
    }

    private static void initDriver(WebDriver remoteWebDriver) {
        SeleniumSupport.driver = remoteWebDriver;
        SeleniumSupport.driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        Runtime.getRuntime().addShutdownHook(new Thread() {
            @Override
            public void run() {
                if (driver != null) {
                    driver.quit();
                }
            }
        });
    }

    /**
     * @return the webDriver
     */
    protected WebDriver getWebDriver() {
        return driver;
    }

    public void restartBrowserSession() {
        initializeOnce();
    }

    protected void login(WebDriver webdriver, boolean consent) {
        // Login end user.
        webdriver.findElement(By.name("j_username")).sendKeys("enduser");
        webdriver.findElement(By.name("j_password")).sendKeys("enduserpass");
        webdriver.findElement(By.xpath("//form")).submit();
        if (consent) {
            consent(webdriver);
        }
    }

    private void consent(WebDriver webdriver) {
        // consent form
        assertThat(webdriver.getPageSource(), containsString("Grant permission"));
        webdriver.findElement(By.id("user_oauth_approval")).click();
    }

    /**
     * @return the oauthClientServer
     */
    public LocalTestServer getOauthClientServer() {
        return oauthClientServer;
    }

    /**
     * @return the mapper
     */
    public ObjectMapper getMapper() {
        return mapper;
    }

}