/** * 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.camel.itest.springboot; import java.util.HashMap; import java.util.HashSet; import java.util.TreeSet; /** * Builder for the {@code ITestConfig} that enforces defaults values. */ public class ITestConfigBuilder { public static final String CONFIG_PREFIX = "itest.springboot."; private ITestConfig config; public ITestConfigBuilder() { this.config = new ITestConfig(); } public ITestConfigBuilder(ITestConfig config) { this.config = config; } public ITestConfigBuilder module(String module) { config.setModuleName(module); return this; } public ITestConfigBuilder mavenGroup(String mavenGroup) { config.setMavenGroup(mavenGroup); return this; } public ITestConfigBuilder mavenVersion(String mavenVersion) { config.setMavenVersion(mavenVersion); return this; } public ITestConfigBuilder modulesPath(String path) { config.setModulesPath(path); return this; } public ITestConfigBuilder basePath(String basePath) { config.setModuleBasePath(basePath); return this; } public ITestConfigBuilder unitTestExpectedNumber(int number) { config.setUnitTestsExpectedNumber(number); return this; } public ITestConfigBuilder unitTestBasePackage(String pack) { config.setUnitTestBasePackage(pack); return this; } public ITestConfigBuilder unitTestInclusionPattern(String pattern) { config.setUnitTestInclusionPattern(pattern); return this; } public ITestConfigBuilder unitTestExclusionPattern(String pattern) { config.setUnitTestExclusionPattern(pattern); return this; } public ITestConfigBuilder autostart(Boolean autostart) { config.setAutoStartComponent(autostart); return this; } public ITestConfigBuilder resource(String file, String dest) { if (config.getResources() == null) { config.setResources(new HashMap<String, String>()); } config.getResources().put(file, dest); return this; } public ITestConfigBuilder dependency(String dependencyCanonicalForm) { if (config.getAdditionalDependencies() == null) { config.setAdditionalDependencies(new HashSet<String>()); } config.getAdditionalDependencies().add(dependencyCanonicalForm); return this; } public ITestConfigBuilder exclusion(String exclusionCanonicalForm) { if (exclusionCanonicalForm.split(":").length != 2) { throw new IllegalArgumentException("Expected exclusion in the form groupId:artifactId, got: " + exclusionCanonicalForm); } if (config.getMavenExclusions() == null) { config.setMavenExclusions(new HashSet<String>()); } config.getMavenExclusions().add(exclusionCanonicalForm); return this; } public ITestConfigBuilder resource(String file) { return resource(file, file); } public ITestConfigBuilder disableJmx(String name) { if (config.getJmxDisabledNames() == null) { config.setJmxDisabledNames(new TreeSet<String>()); } config.getJmxDisabledNames().add(name); return this; } public ITestConfigBuilder systemProperty(String name, String value) { if (config.getSystemProperties() == null) { config.setSystemProperties(new HashMap<String, String>()); } config.getSystemProperties().put(name, value); return this; } public ITestConfigBuilder customLog(Boolean value) { config.setUseCustomLog(value); return this; } public ITestConfigBuilder ignoreLibraryMismatch(String libraryPrefix) { if (config.getIgnoreLibraryMismatch() == null) { config.setIgnoreLibraryMismatch(new HashSet<String>()); } config.getIgnoreLibraryMismatch().add(libraryPrefix); return this; } public ITestConfigBuilder testLibraryVersion(String groupIdArtifactId, String version) { if (config.getTestLibraryVersions() == null) { config.setTestLibraryVersions(new HashMap<>()); } config.getTestLibraryVersions().put(groupIdArtifactId, version); return this; } public ITestConfigBuilder includeTestDependencies(Boolean includeTestDependencies) { config.setIncludeTestDependencies(includeTestDependencies); return this; } public ITestConfigBuilder unitTestsEnabled(Boolean unitTestsEnabled) { config.setUnitTestEnabled(unitTestsEnabled); return this; } public ITestConfig build() { // Checking conditions if (config.getModuleName() == null) { fail("ModuleName is required"); } // Set the defaults if (config.getUnitTestEnabled() == null) { config.setUnitTestEnabled(booleanPropertyOr("unitTestEnabled", true)); } if (config.getMavenGroup() == null) { config.setMavenGroup(propertyOr("mavenGroup", "org.apache.camel")); } if (config.getMavenVersion() == null) { config.setMavenVersion(propertyOr("mavenVersion", null)); } if (config.getMavenOfflineResolution() == null) { config.setMavenOfflineResolution(booleanPropertyOr("mavenOfflineResolution", false)); } if (config.getUnitTestInclusionPattern() == null) { config.setUnitTestInclusionPattern(propertyOr("unitTestInclusionPattern", "^.*Test$")); // All tests } if (config.getUnitTestExclusionPattern() == null) { config.setUnitTestExclusionPattern(propertyOr("unitTestExclusionPattern", ".*(\\.integration\\..*|IntegrationTest$)")); // Integration test } if (config.getIncludeTestDependencies() == null) { config.setIncludeTestDependencies(booleanPropertyOr("includeTestDependencies", config.getUnitTestEnabled())); } if (config.getIncludeProvidedDependencies() == null) { config.setIncludeProvidedDependencies(booleanPropertyOr("includeProvidedDependencies", false)); } if (config.getModulesPath() == null) { config.setModulesPath(propertyOr("modulesPath", "../../components/")); } if (config.getModuleBasePath() == null) { config.setModuleBasePath(config.getModulesPath() + config.getModuleName()); } if (config.getUnitTestBasePackage() == null) { config.setUnitTestBasePackage(propertyOr("unitTestBasePackage", "org.apache.camel")); } if (config.getAutoStartComponent() == null) { config.setAutoStartComponent(booleanPropertyOr("autostartComponent", true)); } if (config.getResources() == null) { config.setResources(new HashMap<>()); } if (config.getAdditionalDependencies() == null) { config.setAdditionalDependencies(new HashSet<>()); } if (config.getMavenExclusions() == null) { config.setMavenExclusions(new HashSet<>()); } if (config.getJmxDisabledNames() == null) { config.setJmxDisabledNames(new HashSet<>()); } if (config.getSystemProperties() == null) { config.setSystemProperties(new HashMap<>()); } if (config.getUseCustomLog() == null) { config.setUseCustomLog(booleanPropertyOr("useCustomLog", true)); } if (config.getIgnoreLibraryMismatch() == null) { config.setIgnoreLibraryMismatch(new HashSet<>()); } if (config.getTestLibraryVersions() == null) { config.setTestLibraryVersions(new HashMap<>()); } return config; } private void fail(String msg) { throw new IllegalStateException("Configuration is not complete: " + msg); } private String propertyOr(String name, String defaultVal) { String res = System.getProperty(CONFIG_PREFIX + name); if (res == null) { res = defaultVal; } return res; } private Boolean booleanPropertyOr(String name, Boolean defaultVal) { String prop = propertyOr(name, null); Boolean res = defaultVal; if (prop != null) { res = Boolean.valueOf(prop); } return res; } }