/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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.apache.ambari.logsearch.story; import org.apache.ambari.logsearch.domain.StoryDataRegistry; import org.apache.ambari.logsearch.steps.LogSearchDockerSteps; import org.apache.ambari.logsearch.steps.LogSearchUISteps; import org.jbehave.core.configuration.Configuration; import org.jbehave.core.Embeddable; import org.jbehave.core.embedder.executors.SameThreadExecutors; import org.jbehave.core.junit.JUnitStories; import org.jbehave.core.reporters.StoryReporterBuilder; import org.jbehave.core.steps.InjectableStepsFactory; import org.jbehave.core.steps.InstanceStepsFactory; import org.jbehave.web.selenium.RemoteWebDriverProvider; import org.jbehave.web.selenium.SeleniumConfiguration; import org.jbehave.web.selenium.SeleniumContext; import org.jbehave.web.selenium.WebDriverProvider; import org.jbehave.web.selenium.WebDriverScreenshotOnFailure; import org.openqa.selenium.Platform; import org.openqa.selenium.remote.DesiredCapabilities; import java.util.Arrays; import java.util.List; import static org.jbehave.core.io.CodeLocations.codeLocationFromClass; import static org.jbehave.core.reporters.Format.CONSOLE; import static org.jbehave.core.reporters.Format.HTML; import static org.jbehave.core.reporters.Format.TXT; import static org.jbehave.core.reporters.Format.XML; public class LogSearchUIStories extends JUnitStories { private WebDriverProvider driverProvider; private SeleniumContext context; private static final String UI_STORIES_LOCATION_PROPERTY = "ui.stories.location"; private static final String STORY_SUFFIX = ".ui.story"; public LogSearchUIStories() { String dockerHost = System.getProperty("docker.host") != null ? System.getProperty("docker.host") : "localhost"; System.setProperty("REMOTE_WEBDRIVER_URL", String.format("http://%s:4444/wd/hub", dockerHost)); DesiredCapabilities capability = DesiredCapabilities.firefox(); capability.setPlatform(Platform.LINUX); capability.setVersion("45.8.0"); driverProvider = new RemoteWebDriverProvider(capability); StoryDataRegistry.INSTANCE.setWebDriverProvider(driverProvider); context = new SeleniumContext(); configuredEmbedder().useExecutorService(new SameThreadExecutors().create(configuredEmbedder().embedderControls())); } @Override public Configuration configuration() { Class<? extends Embeddable> embeddableClass = this.getClass(); return new SeleniumConfiguration() .useSeleniumContext(context) .useWebDriverProvider(driverProvider) .useStoryLoader(LogSearchStoryLocator.getStoryLoader(UI_STORIES_LOCATION_PROPERTY, this.getClass())) .useStoryReporterBuilder(new StoryReporterBuilder() .withCodeLocation(codeLocationFromClass(embeddableClass)) .withDefaultFormats() .withFormats(CONSOLE, TXT, HTML, XML)); } @Override public InjectableStepsFactory stepsFactory() { Configuration configuration = configuration(); return new InstanceStepsFactory(configuration, new LogSearchDockerSteps(), new LogSearchUISteps(driverProvider), new WebDriverScreenshotOnFailure(driverProvider, configuration.storyReporterBuilder())); } @Override protected List<String> storyPaths() { return LogSearchStoryLocator.findStories(UI_STORIES_LOCATION_PROPERTY, STORY_SUFFIX, this.getClass()); } }