package org.apache.ambari.funtest.server.orm; /** * 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. */ import java.io.File; import java.util.Collections; import java.util.Properties; import java.util.Set; import java.util.concurrent.atomic.AtomicReference; import org.apache.ambari.server.configuration.Configuration; import org.apache.ambari.server.controller.ControllerModule; import com.google.inject.AbstractModule; public class InMemoryDefaultTestModule extends AbstractModule { /** * Saves all {@link ControllerModule} logic, but changes bean discovery mechanism. * In this implementation scan for {@link org.apache.ambari.server.EagerSingleton} * and {@link org.apache.ambari.server.StaticallyInject} and * {@link org.apache.ambari.server.AmbariService} annotations will not be run for every test. */ private static class BeanDefinitionsCachingTestControllerModule extends ControllerModule { // Access should be synchronised to allow concurrent test runs. private static final AtomicReference<Set<Class<?>>> matchedAnnotationClasses = new AtomicReference<>( null); public BeanDefinitionsCachingTestControllerModule(Properties properties) throws Exception { super(properties); } @Override protected Set<Class<?>> bindByAnnotation(Set<Class<?>> matchedClasses) { Set<Class<?>> newMatchedClasses = super.bindByAnnotation(matchedAnnotationClasses.get()); matchedAnnotationClasses.compareAndSet(null, Collections.unmodifiableSet(newMatchedClasses)); return null; } } Properties properties = new Properties(); @Override protected void configure() { String stacks = "src/test/resources/stacks"; String version = "src/test/resources/version"; String sharedResourcesDir = "src/test/resources/"; if (System.getProperty("os.name").contains("Windows")) { stacks = ClassLoader.getSystemClassLoader().getResource("stacks").getPath(); version = new File(new File(ClassLoader.getSystemClassLoader().getResource("").getPath()).getParent(), "version").getPath(); sharedResourcesDir = ClassLoader.getSystemClassLoader().getResource("").getPath(); } properties.setProperty(Configuration.SERVER_PERSISTENCE_TYPE.getKey(), "in-memory"); properties.setProperty(Configuration.METADATA_DIR_PATH.getKey(), stacks); properties.setProperty(Configuration.SERVER_VERSION_FILE.getKey(), version); properties.setProperty(Configuration.OS_VERSION.getKey(), "centos6"); properties.setProperty(Configuration.SHARED_RESOURCES_DIR.getKey(), sharedResourcesDir); try { install(new BeanDefinitionsCachingTestControllerModule(properties)); } catch (Exception e) { throw new RuntimeException(e); } } public Properties getProperties() { return properties; } }