/** * Sahi - Web Automation and Test Tool * * Copyright 2006 V Narayan Raman * * 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 net.sf.sahi.command; import net.sf.sahi.config.Configuration; import net.sf.sahi.issue.JiraIssueCreator; import net.sf.sahi.report.ConsoleReporter; import net.sf.sahi.report.HtmlReporter; import net.sf.sahi.report.JunitReporter; import net.sf.sahi.report.TM6Reporter; import net.sf.sahi.request.HttpRequest; import net.sf.sahi.response.HttpResponse; import net.sf.sahi.response.NoCacheHttpResponse; import net.sf.sahi.response.SimpleHttpResponse; import net.sf.sahi.session.Session; import net.sf.sahi.session.Status; import net.sf.sahi.test.SahiTestSuite; import net.sf.sahi.util.BrowserType; import net.sf.sahi.util.BrowserTypesLoader; import org.apache.log4j.Logger; import java.io.IOException; public class Suite { private static Logger logger = Logger.getLogger(Suite.class); public void startSingleSession(final HttpRequest request) throws Exception { final SahiTestSuite suite = getSuite(request); suite.launchBrowserForSingleSession(); } public SimpleHttpResponse executeTestInSingleSession(final HttpRequest request) throws Exception { Session session = request.session(); final SahiTestSuite suite = session.getSuite(); String initJS = request.getParameter("initJS"); logger.debug("Setting initJS" + initJS); suite.setInitJS(initJS); Status status = suite.executeTestForSingleSession(request.getParameter("testName"), request.getParameter("startURL")); return new SimpleHttpResponse(status.getName()); } public void stopSingleSession(final HttpRequest request) { Session session = request.session(); final SahiTestSuite suite = session.getSuite(); suite.killBrowserForSingleSession(true); } public void start(final HttpRequest request) { final SahiTestSuite suite = getSuite(request); suite.loadScripts(); runSuite(suite); } public void startPreconfiguredBrowser(final HttpRequest request) { final SahiTestSuite suite = getPreconfiguredBrowserSuite(request); suite.loadScripts(); runSuite(suite); } private SahiTestSuite getSuite(final HttpRequest request) { if (request.getParameter("browserType") != null) { return getPreconfiguredBrowserSuite(request); } Session session = request.session(); String suitePath = request.getParameter("suite"); String base = request.getParameter("base"); String browser = request.getParameter("browser"); String browserOption = request.getParameter("browserOption"); String browserProcessName = request.getParameter("browserProcessName"); String threads = request.getParameter("threads"); boolean isSingleSession = "true".equals(request.getParameter("useSingleSession")); boolean useSystemProxy = "true".equals(request.getParameter("useSystemProxy")); final SahiTestSuite suite = prepareSuite(suitePath, base, browser, session.id(), browserOption, browserProcessName, threads, useSystemProxy, isSingleSession, request); return suite; } private SahiTestSuite getPreconfiguredBrowserSuite(final HttpRequest request) { SahiTestSuite suite = null; BrowserTypesLoader browserLoader = new BrowserTypesLoader(); BrowserType browserType = browserLoader.getBrowserType(request); Session session = request.session(); String suitePath = request.getParameter("suite"); String base = request.getParameter("base"); boolean isSingleSession = "true".equals(request.getParameter("useSingleSession")); final int threads = getThreads(request.getParameter("threads"), browserType.capacity()); // launches browser with pre configured browser settings if (browserType != null) { suite = prepareSuite(suitePath, base, browserType.path(), session.id(), browserType.options(), browserType.processName(), ("" + threads), browserType.useSystemProxy(), isSingleSession, request); } return suite; } private int getThreads(String threadsStr, int capacity) { int threads = 1; try { threads = Integer.parseInt(threadsStr); } catch (Exception e) { } return (threads < capacity) ? threads : capacity; } public void runSuite(final SahiTestSuite suite) { new Thread() { @Override public void run() { suite.run(); } }.start(); } public SahiTestSuite prepareSuite(String suitePath, String base, String browser, String sessionId, String browserOption, String browserProcessName, String threadCapacity, boolean useSystemProxy, boolean isSingleSession, HttpRequest request) { final SahiTestSuite suite = new SahiTestSuite(net.sf.sahi.config.Configuration.getAbsoluteUserPath(suitePath), base, browser, sessionId, browserOption, browserProcessName, isSingleSession); int threads = 1; try { threads = Integer.parseInt(threadCapacity); } catch (Exception e) { } suite.setAvailableThreads(threads); suite.setUseSystemProxy(useSystemProxy); try { net.sf.sahi.config.Configuration.copyProfiles(); } catch (IOException e) { e.printStackTrace(); } if (request != null) { suite.setExtraInfo(request.getParameter("extraInfo")); suite.setInitJS(request.getParameter("initJS")); setReporters(suite, request); setIssueCreators(suite, request); } return suite; } private void setIssueCreators(final SahiTestSuite suite, final HttpRequest request) { String propFile = request.getParameter("jira"); if (propFile != null) { suite.addIssueCreator(new JiraIssueCreator(propFile)); } } public HttpResponse status(final HttpRequest request) { Session session = request.session(); Status status = session.getStatus(); if (status == null) status = Status.FAILURE; return new NoCacheHttpResponse(status.getName()); } private void setReporters(final SahiTestSuite suite, final HttpRequest request) { final String defaultLogDir = Configuration.appendLogsRoot(suite.getLogFolderName()); String logDir = request.getParameter("junit"); if (logDir != null) { logDir = getLogDir(defaultLogDir, logDir); suite.setJunitLogDir(logDir); suite.addReporter(new JunitReporter(logDir)); } logDir = request.getParameter("html"); if (logDir != null) { logDir = getLogDir(defaultLogDir, logDir); suite.setHtmlLogDir(logDir); suite.addReporter(new HtmlReporter(logDir)); } if (request.getParameter("console") != null) { suite.addReporter(new ConsoleReporter()); } logDir = request.getParameter("tm6"); if (logDir != null) { logDir = getLogDir(defaultLogDir, logDir); suite.setTM6LogDir(logDir); suite.addReporter(new TM6Reporter(logDir)); } } private String getLogDir(final String defaultLogDir, String logDir) { return logDir.equals("") ? defaultLogDir : net.sf.sahi.config.Configuration.getAbsoluteUserPath(logDir); } public void kill(final HttpRequest request) { Session session = request.session(); SahiTestSuite suite = SahiTestSuite.getSuite(session.id()); if (suite != null) suite.kill(); } }