@@ -20,7 +20,7 @@ | |||
package org.sonar.ce.configuration; | |||
import org.picocontainer.Startable; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.utils.MessageException; | |||
import org.sonar.api.utils.log.Logger; | |||
import org.sonar.api.utils.log.Loggers; | |||
@@ -47,8 +47,8 @@ public class CeConfigurationImpl implements CeConfiguration, Startable { | |||
private final int workerCount; | |||
public CeConfigurationImpl(Settings settings) { | |||
String workerCountAsStr = settings.getString(CE_WORKERS_COUNT_PROPERTY); | |||
public CeConfigurationImpl(Configuration config) { | |||
String workerCountAsStr = config.get(CE_WORKERS_COUNT_PROPERTY).orElse(null); | |||
if (workerCountAsStr == null || workerCountAsStr.isEmpty()) { | |||
this.workerCount = DEFAULT_WORKER_COUNT; | |||
} else { | |||
@@ -72,8 +72,7 @@ public class CeConfigurationImpl implements CeConfiguration, Startable { | |||
return MessageException.of(format( | |||
"value '%s' of property %s is invalid. It must an integer strictly greater than 0.", | |||
workerCountAsStr, | |||
CE_WORKERS_COUNT_PROPERTY) | |||
); | |||
CE_WORKERS_COUNT_PROPERTY)); | |||
} | |||
@Override |
@@ -23,8 +23,7 @@ import java.util.Random; | |||
import org.junit.Rule; | |||
import org.junit.Test; | |||
import org.junit.rules.ExpectedException; | |||
import org.sonar.api.config.MapSettings; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.internal.MapSettings; | |||
import org.sonar.api.utils.MessageException; | |||
import static java.lang.Math.abs; | |||
@@ -36,32 +35,32 @@ public class CeConfigurationImplTest { | |||
@Rule | |||
public ExpectedException expectedException = ExpectedException.none(); | |||
private Settings settings = new MapSettings(); | |||
private MapSettings settings = new MapSettings(); | |||
@Test | |||
public void getWorkerCount_returns_1_when_worker_property_is_not_defined() { | |||
assertThat(new CeConfigurationImpl(settings).getWorkerCount()).isEqualTo(1); | |||
assertThat(new CeConfigurationImpl(settings.asConfig()).getWorkerCount()).isEqualTo(1); | |||
} | |||
@Test | |||
public void getWorkerCount_returns_1_when_worker_property_is_empty() { | |||
settings.setProperty(CE_WORKERS_COUNT_PROPERTY, ""); | |||
assertThat(new CeConfigurationImpl(settings).getWorkerCount()).isEqualTo(1); | |||
assertThat(new CeConfigurationImpl(settings.asConfig()).getWorkerCount()).isEqualTo(1); | |||
} | |||
@Test | |||
public void getWorkerCount_returns_1_when_worker_property_is_space_chars() { | |||
settings.setProperty(CE_WORKERS_COUNT_PROPERTY, " \n "); | |||
assertThat(new CeConfigurationImpl(settings).getWorkerCount()).isEqualTo(1); | |||
assertThat(new CeConfigurationImpl(settings.asConfig()).getWorkerCount()).isEqualTo(1); | |||
} | |||
@Test | |||
public void getWorkerCount_returns_1_when_worker_property_is_1() { | |||
settings.setProperty(CE_WORKERS_COUNT_PROPERTY, 1); | |||
assertThat(new CeConfigurationImpl(settings).getWorkerCount()).isEqualTo(1); | |||
assertThat(new CeConfigurationImpl(settings.asConfig()).getWorkerCount()).isEqualTo(1); | |||
} | |||
@Test | |||
@@ -69,7 +68,7 @@ public class CeConfigurationImplTest { | |||
int value = abs(new Random().nextInt()) + 2; | |||
settings.setProperty(CE_WORKERS_COUNT_PROPERTY, value); | |||
assertThat(new CeConfigurationImpl(settings).getWorkerCount()).isEqualTo(value); | |||
assertThat(new CeConfigurationImpl(settings.asConfig()).getWorkerCount()).isEqualTo(value); | |||
} | |||
@Test | |||
@@ -79,7 +78,7 @@ public class CeConfigurationImplTest { | |||
expectMessageException(value); | |||
new CeConfigurationImpl(settings); | |||
new CeConfigurationImpl(settings.asConfig()); | |||
} | |||
@Test | |||
@@ -89,7 +88,7 @@ public class CeConfigurationImplTest { | |||
expectMessageException(value); | |||
new CeConfigurationImpl(settings); | |||
new CeConfigurationImpl(settings.asConfig()); | |||
} | |||
@Test | |||
@@ -101,7 +100,7 @@ public class CeConfigurationImplTest { | |||
expectedException.expectMessage("value '" + value + "' of property " + CE_WORKERS_COUNT_PROPERTY + " is invalid. " + | |||
"It must an integer strictly greater than 0"); | |||
new CeConfigurationImpl(settings); | |||
new CeConfigurationImpl(settings.asConfig()); | |||
} | |||
private void expectMessageException(int value) { | |||
@@ -112,13 +111,13 @@ public class CeConfigurationImplTest { | |||
@Test | |||
public void getCleanCeTasksInitialDelay_returns_1() { | |||
assertThat(new CeConfigurationImpl(settings).getCleanCeTasksInitialDelay()) | |||
assertThat(new CeConfigurationImpl(settings.asConfig()).getCleanCeTasksInitialDelay()) | |||
.isEqualTo(1L); | |||
} | |||
@Test | |||
public void getCleanCeTasksDelay_returns_10() { | |||
assertThat(new CeConfigurationImpl(settings).getCleanCeTasksDelay()) | |||
assertThat(new CeConfigurationImpl(settings.asConfig()).getCleanCeTasksDelay()) | |||
.isEqualTo(10L); | |||
} | |||
} |
@@ -29,7 +29,7 @@ import java.util.Map; | |||
import java.util.Set; | |||
import java.util.concurrent.locks.Lock; | |||
import org.picocontainer.Startable; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.process.ProcessProperties; | |||
import static com.google.common.base.Preconditions.checkState; | |||
@@ -46,10 +46,10 @@ public class HazelcastClientWrapperImpl implements Startable, HazelcastClientWra | |||
@VisibleForTesting | |||
protected HazelcastInstance hzInstance; | |||
public HazelcastClientWrapperImpl(Settings settings) { | |||
boolean clusterEnabled = settings.getBoolean(ProcessProperties.CLUSTER_ENABLED); | |||
String clusterName = settings.getString(ProcessProperties.CLUSTER_NAME); | |||
String clusterLocalEndPoint = settings.getString(ProcessProperties.CLUSTER_LOCALENDPOINT); | |||
public HazelcastClientWrapperImpl(Configuration config) { | |||
boolean clusterEnabled = config.getBoolean(ProcessProperties.CLUSTER_ENABLED).orElse(false); | |||
String clusterName = config.get(ProcessProperties.CLUSTER_NAME).orElse(null); | |||
String clusterLocalEndPoint = config.get(ProcessProperties.CLUSTER_LOCALENDPOINT).orElse(null); | |||
checkState(clusterEnabled, "Cluster is not enabled"); | |||
checkState(isNotEmpty(clusterLocalEndPoint), "LocalEndPoint have not been set"); | |||
@@ -85,7 +85,7 @@ public class HazelcastClientWrapperImpl implements Startable, HazelcastClientWra | |||
} | |||
@Override | |||
public <K,V> Map<K,V> getReplicatedMap(String name) { | |||
public <K, V> Map<K, V> getReplicatedMap(String name) { | |||
return hzInstance.getReplicatedMap(name); | |||
} | |||
@@ -52,10 +52,11 @@ import org.sonar.ce.log.CeProcessLogging; | |||
import org.sonar.ce.platform.ComputeEngineExtensionInstaller; | |||
import org.sonar.ce.queue.CeQueueCleaner; | |||
import org.sonar.ce.queue.PurgeCeActivities; | |||
import org.sonar.ce.settings.ProjectSettingsFactory; | |||
import org.sonar.ce.settings.ProjectConfigurationFactory; | |||
import org.sonar.ce.taskprocessor.CeTaskProcessorModule; | |||
import org.sonar.ce.user.CeUserSession; | |||
import org.sonar.core.component.DefaultResourceTypes; | |||
import org.sonar.core.config.ConfigurationProvider; | |||
import org.sonar.core.config.CorePropertyDefinitions; | |||
import org.sonar.core.i18n.DefaultI18n; | |||
import org.sonar.core.i18n.RuleI18nManager; | |||
@@ -181,12 +182,10 @@ public class ComputeEngineContainerImpl implements ComputeEngineContainer { | |||
if (props.valueAsBoolean("sonar.cluster.enabled")) { | |||
this.level4.add( | |||
HazelcastClientWrapperImpl.class, | |||
CeDistributedInformationImpl.class | |||
); | |||
CeDistributedInformationImpl.class); | |||
} else { | |||
this.level4.add( | |||
StandaloneCeDistributedInformation.class | |||
); | |||
StandaloneCeDistributedInformation.class); | |||
} | |||
configureFromModules(this.level4); | |||
ServerExtensionInstaller extensionInstaller = this.level4.getComponentByType(ServerExtensionInstaller.class); | |||
@@ -225,6 +224,7 @@ public class ComputeEngineContainerImpl implements ComputeEngineContainer { | |||
Version apiVersion = ApiVersion.load(System2.INSTANCE); | |||
return new Object[] { | |||
ThreadLocalSettings.class, | |||
new ConfigurationProvider(), | |||
new SonarQubeVersion(apiVersion), | |||
SonarRuntimeImpl.forSonarQube(ApiVersion.load(System2.INSTANCE), SonarQubeSide.COMPUTE_ENGINE), | |||
CeProcessLogging.class, | |||
@@ -406,7 +406,7 @@ public class ComputeEngineContainerImpl implements ComputeEngineContainer { | |||
CeTaskProcessorModule.class, | |||
InternalPropertiesImpl.class, | |||
ProjectSettingsFactory.class, | |||
ProjectConfigurationFactory.class, | |||
// cleaning | |||
CeCleaningModule.class |
@@ -36,7 +36,6 @@ import java.util.HashMap; | |||
import java.util.HashSet; | |||
import java.util.List; | |||
import java.util.Map; | |||
import java.util.Properties; | |||
import java.util.Set; | |||
import java.util.concurrent.CountDownLatch; | |||
import java.util.concurrent.TimeUnit; | |||
@@ -51,7 +50,6 @@ import org.junit.rules.TestRule; | |||
import org.junit.rules.Timeout; | |||
import org.slf4j.LoggerFactory; | |||
import org.sonar.api.config.PropertyDefinitions; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.internal.MapSettings; | |||
import org.sonar.process.NetworkUtils; | |||
import org.sonar.process.ProcessProperties; | |||
@@ -74,8 +72,8 @@ public class HazelcastClientWrapperImplTest { | |||
int port = NetworkUtils.getNextAvailablePort(InetAddress.getLoopbackAddress()); | |||
hzCluster = HazelcastTestHelper.createHazelcastCluster("cluster_with_client", port); | |||
Settings settings = createClusterSettings("cluster_with_client", "localhost:" + port); | |||
hzClient = new HazelcastClientWrapperImpl(settings); | |||
MapSettings settings = createClusterSettings("cluster_with_client", "localhost:" + port); | |||
hzClient = new HazelcastClientWrapperImpl(settings.asConfig()); | |||
} | |||
@AfterClass | |||
@@ -94,8 +92,8 @@ public class HazelcastClientWrapperImplTest { | |||
@Test | |||
public void start_throws_ISE_if_LOCALENDPOINT_is_incorrect() { | |||
Settings settings = createClusterSettings("sonarqube", "\u4563\u1432\u1564"); | |||
HazelcastClientWrapperImpl hzClient = new HazelcastClientWrapperImpl(settings); | |||
MapSettings settings = createClusterSettings("sonarqube", "\u4563\u1432\u1564"); | |||
HazelcastClientWrapperImpl hzClient = new HazelcastClientWrapperImpl(settings.asConfig()); | |||
expectedException.expect(IllegalStateException.class); | |||
expectedException.expectMessage("Unable to connect to any address in the config! The following addresses were tried:"); | |||
@@ -105,56 +103,56 @@ public class HazelcastClientWrapperImplTest { | |||
@Test | |||
public void constructor_throws_ISE_if_LOCALENDPOINT_is_empty() { | |||
Settings settings = createClusterSettings("sonarqube", ""); | |||
MapSettings settings = createClusterSettings("sonarqube", ""); | |||
expectedException.expect(IllegalStateException.class); | |||
expectedException.expectMessage("LocalEndPoint have not been set"); | |||
new HazelcastClientWrapperImpl(settings); | |||
new HazelcastClientWrapperImpl(settings.asConfig()); | |||
} | |||
@Test | |||
public void constructor_throws_ISE_if_CLUSTER_ENABLED_is_false() { | |||
Settings settings = createClusterSettings("sonarqube", "localhost:9003"); | |||
MapSettings settings = createClusterSettings("sonarqube", "localhost:9003"); | |||
settings.setProperty(ProcessProperties.CLUSTER_ENABLED, false); | |||
expectedException.expect(IllegalStateException.class); | |||
expectedException.expectMessage("Cluster is not enabled"); | |||
new HazelcastClientWrapperImpl(settings); | |||
new HazelcastClientWrapperImpl(settings.asConfig()); | |||
} | |||
@Test | |||
public void constructor_throws_ISE_if_missing_CLUSTER_ENABLED() { | |||
Settings settings = createClusterSettings("sonarqube", "localhost:9003"); | |||
MapSettings settings = createClusterSettings("sonarqube", "localhost:9003"); | |||
settings.removeProperty(ProcessProperties.CLUSTER_ENABLED); | |||
expectedException.expect(IllegalStateException.class); | |||
expectedException.expectMessage("Cluster is not enabled"); | |||
new HazelcastClientWrapperImpl(settings); | |||
new HazelcastClientWrapperImpl(settings.asConfig()); | |||
} | |||
@Test | |||
public void constructor_throws_ISE_if_missing_CLUSTER_NAME() { | |||
Settings settings = createClusterSettings("sonarqube", "localhost:9003"); | |||
MapSettings settings = createClusterSettings("sonarqube", "localhost:9003"); | |||
settings.removeProperty(ProcessProperties.CLUSTER_NAME); | |||
expectedException.expect(IllegalStateException.class); | |||
expectedException.expectMessage("sonar.cluster.name is missing"); | |||
new HazelcastClientWrapperImpl(settings); | |||
new HazelcastClientWrapperImpl(settings.asConfig()); | |||
} | |||
@Test | |||
public void constructor_throws_ISE_if_missing_CLUSTER_LOCALENDPOINT() { | |||
Settings settings = createClusterSettings("sonarqube", "localhost:9003"); | |||
MapSettings settings = createClusterSettings("sonarqube", "localhost:9003"); | |||
settings.removeProperty(ProcessProperties.CLUSTER_LOCALENDPOINT); | |||
expectedException.expect(IllegalStateException.class); | |||
expectedException.expectMessage("LocalEndPoint have not been set"); | |||
new HazelcastClientWrapperImpl(settings); | |||
new HazelcastClientWrapperImpl(settings.asConfig()); | |||
} | |||
@Test | |||
@@ -162,9 +160,9 @@ public class HazelcastClientWrapperImplTest { | |||
int port = NetworkUtils.getNextAvailablePort(InetAddress.getLoopbackAddress()); | |||
// Launch a fake Hazelcast instance | |||
HazelcastInstance hzInstance = HazelcastTestHelper.createHazelcastCluster("client_must_connect_to_hazelcast", port); | |||
Settings settings = createClusterSettings("client_must_connect_to_hazelcast", "localhost:" + port); | |||
MapSettings settings = createClusterSettings("client_must_connect_to_hazelcast", "localhost:" + port); | |||
HazelcastClientWrapperImpl hazelcastClientWrapperImpl = new HazelcastClientWrapperImpl(settings); | |||
HazelcastClientWrapperImpl hazelcastClientWrapperImpl = new HazelcastClientWrapperImpl(settings.asConfig()); | |||
ClientListenerImpl clientListener = new ClientListenerImpl(); | |||
hzInstance.getClientService().addClientListener(clientListener); | |||
try { | |||
@@ -184,9 +182,8 @@ public class HazelcastClientWrapperImplTest { | |||
Set<String> setTest = new HashSet<>(); | |||
setTest.addAll( | |||
Arrays.asList(RandomStringUtils.randomAlphanumeric(10), RandomStringUtils.randomAlphanumeric(10)) | |||
); | |||
Map<String, Set<String>> replicatedMap = hzClient.getReplicatedMap("TEST1"); | |||
Arrays.asList(RandomStringUtils.randomAlphanumeric(10), RandomStringUtils.randomAlphanumeric(10))); | |||
Map<String, Set<String>> replicatedMap = hzClient.getReplicatedMap("TEST1"); | |||
replicatedMap.put("KEY1", ImmutableSet.copyOf(setTest)); | |||
assertThat(hzCluster.getReplicatedMap("TEST1")) | |||
.containsOnlyKeys("KEY1"); | |||
@@ -235,8 +232,7 @@ public class HazelcastClientWrapperImplTest { | |||
mapTest.put("a", Arrays.asList("123", "456")); | |||
hzCluster.getMap("TEST3").putAll(mapTest); | |||
assertThat(hzClient.getMap("TEST3")).containsExactly( | |||
entry("a", Arrays.asList("123", "456")) | |||
); | |||
entry("a", Arrays.asList("123", "456"))); | |||
} finally { | |||
hzClient.stop(); | |||
} | |||
@@ -272,8 +268,7 @@ public class HazelcastClientWrapperImplTest { | |||
} | |||
assertThat(memoryAppender.events).isNotEmpty(); | |||
memoryAppender.events.stream().forEach( | |||
e -> assertThat(e.getLoggerName()).startsWith("com.hazelcast") | |||
); | |||
e -> assertThat(e.getLoggerName()).startsWith("com.hazelcast")); | |||
} | |||
private class ClientListenerImpl implements ClientListener { | |||
@@ -290,12 +285,11 @@ public class HazelcastClientWrapperImplTest { | |||
} | |||
} | |||
private static Settings createClusterSettings(String name, String localEndPoint) { | |||
Properties properties = new Properties(); | |||
properties.setProperty(ProcessProperties.CLUSTER_NAME, name); | |||
properties.setProperty(ProcessProperties.CLUSTER_LOCALENDPOINT, localEndPoint); | |||
properties.setProperty(ProcessProperties.CLUSTER_ENABLED, "true"); | |||
return new MapSettings(new PropertyDefinitions()).addProperties(properties); | |||
private static MapSettings createClusterSettings(String name, String localEndPoint) { | |||
return new MapSettings(new PropertyDefinitions()) | |||
.setProperty(ProcessProperties.CLUSTER_NAME, name) | |||
.setProperty(ProcessProperties.CLUSTER_LOCALENDPOINT, localEndPoint) | |||
.setProperty(ProcessProperties.CLUSTER_ENABLED, "true"); | |||
} | |||
private class MemoryAppender<E> extends AppenderBase<E> { |
@@ -134,7 +134,7 @@ public class ComputeEngineContainerImplTest { | |||
); | |||
assertThat(picoContainer.getParent().getParent().getParent().getComponentAdapters()).hasSize( | |||
COMPONENTS_IN_LEVEL_1_AT_CONSTRUCTION | |||
+ 23 // level 1 | |||
+ 24 // level 1 | |||
+ 46 // content of DaoModule | |||
+ 3 // content of EsSearchModule | |||
+ 58 // content of CorePropertyDefinitions |
@@ -37,7 +37,7 @@ import org.dbunit.IDatabaseTester; | |||
import org.dbunit.dataset.datatype.IDataTypeFactory; | |||
import org.junit.AssumptionViolatedException; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.MapSettings; | |||
import org.sonar.api.config.internal.MapSettings; | |||
import org.sonar.api.utils.log.Logger; | |||
import org.sonar.api.utils.log.Loggers; | |||
import org.sonar.db.dialect.H2; |
@@ -23,7 +23,7 @@ import java.util.Properties; | |||
import org.apache.commons.dbcp.BasicDataSource; | |||
import org.junit.Test; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.MapSettings; | |||
import org.sonar.api.config.internal.MapSettings; | |||
import org.sonar.db.dialect.PostgreSql; | |||
import org.sonar.process.logging.LogbackHelper; | |||
@@ -26,7 +26,6 @@ import java.sql.SQLException; | |||
import java.util.NoSuchElementException; | |||
import org.junit.Rule; | |||
import org.junit.Test; | |||
import org.sonar.api.utils.System2; | |||
import static org.assertj.core.api.Assertions.assertThat; | |||
import static org.junit.Assert.fail; |
@@ -44,8 +44,8 @@ import static java.util.Collections.emptyList; | |||
import static java.util.Objects.requireNonNull; | |||
import static org.apache.commons.lang.StringUtils.isBlank; | |||
import static org.sonar.db.DaoDatabaseUtils.buildLikeValue; | |||
import static org.sonar.db.DaoDatabaseUtils.executeLargeInputs; | |||
import static org.sonar.db.DaoDatabaseUtils.executeLargeUpdates; | |||
import static org.sonar.db.DatabaseUtils.executeLargeInputs; | |||
import static org.sonar.db.DatabaseUtils.executeLargeUpdates; | |||
import static org.sonar.db.WildcardPosition.BEFORE_AND_AFTER; | |||
public class ComponentDao implements Dao { |
@@ -26,7 +26,6 @@ import org.sonar.core.util.stream.MoreCollectors; | |||
import org.sonar.db.Dao; | |||
import org.sonar.db.DatabaseUtils; | |||
import org.sonar.db.DbSession; | |||
import org.sonar.db.Pagination; | |||
import org.sonar.db.component.ComponentMapper; | |||
import static com.google.common.base.Preconditions.checkArgument; |
@@ -24,7 +24,7 @@ import java.util.Collection; | |||
import java.util.Date; | |||
import javax.annotation.CheckForNull; | |||
import org.apache.commons.lang.time.DateUtils; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.resources.Scopes; | |||
import org.sonar.api.utils.System2; | |||
import org.sonar.core.config.PurgeConstants; | |||
@@ -46,12 +46,12 @@ public class PurgeConfiguration { | |||
this.disabledComponentUuids = disabledComponentUuids; | |||
} | |||
public static PurgeConfiguration newDefaultPurgeConfiguration(Settings settings, IdUuidPair idUuidPair, Collection<String> disabledComponentUuids) { | |||
public static PurgeConfiguration newDefaultPurgeConfiguration(Configuration config, IdUuidPair idUuidPair, Collection<String> disabledComponentUuids) { | |||
String[] scopes = new String[] {Scopes.FILE}; | |||
if (settings.getBoolean(PurgeConstants.PROPERTY_CLEAN_DIRECTORY)) { | |||
if (config.getBoolean(PurgeConstants.PROPERTY_CLEAN_DIRECTORY).orElse(false)) { | |||
scopes = new String[] {Scopes.DIRECTORY, Scopes.FILE}; | |||
} | |||
return new PurgeConfiguration(idUuidPair, scopes, settings.getInt(PurgeConstants.DAYS_BEFORE_DELETING_CLOSED_ISSUES), System2.INSTANCE, disabledComponentUuids); | |||
return new PurgeConfiguration(idUuidPair, scopes, config.getInt(PurgeConstants.DAYS_BEFORE_DELETING_CLOSED_ISSUES).get(), System2.INSTANCE, disabledComponentUuids); | |||
} | |||
public IdUuidPair rootProjectIdUuid() { |
@@ -23,7 +23,7 @@ import com.google.common.annotations.VisibleForTesting; | |||
import com.google.common.base.Joiner; | |||
import java.util.ArrayList; | |||
import java.util.List; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.utils.DateUtils; | |||
import org.sonar.api.utils.log.Logger; | |||
import org.sonar.api.utils.log.Loggers; | |||
@@ -34,8 +34,6 @@ import org.sonar.db.purge.PurgeDao; | |||
import org.sonar.db.purge.PurgeProfiler; | |||
import org.sonar.db.purge.PurgeableAnalysisDto; | |||
import static org.sonar.core.util.stream.MoreCollectors.toList; | |||
public class DefaultPeriodCleaner { | |||
private static final Logger LOG = Loggers.get(DefaultPeriodCleaner.class); | |||
@@ -47,8 +45,8 @@ public class DefaultPeriodCleaner { | |||
this.profiler = profiler; | |||
} | |||
public void clean(DbSession session, String rootUuid, Settings settings) { | |||
doClean(rootUuid, new Filters(settings).all(), session); | |||
public void clean(DbSession session, String rootUuid, Configuration config) { | |||
doClean(rootUuid, new Filters(config).all(), session); | |||
} | |||
@VisibleForTesting |
@@ -24,17 +24,17 @@ import java.util.Calendar; | |||
import java.util.Date; | |||
import java.util.List; | |||
import org.apache.commons.lang.time.DateUtils; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.core.config.PurgeConstants; | |||
class Filters { | |||
private final List<Filter> all = Lists.newArrayList(); | |||
Filters(Settings settings) { | |||
Date dateToStartKeepingOneSnapshotByDay = getDateFromHours(settings, PurgeConstants.HOURS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_DAY); | |||
Date dateToStartKeepingOneSnapshotByWeek = getDateFromWeeks(settings, PurgeConstants.WEEKS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_WEEK); | |||
Date dateToStartKeepingOneSnapshotByMonth = getDateFromWeeks(settings, PurgeConstants.WEEKS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_MONTH); | |||
Date dateToStartDeletingAllSnapshots = getDateFromWeeks(settings, PurgeConstants.WEEKS_BEFORE_DELETING_ALL_SNAPSHOTS); | |||
Filters(Configuration config) { | |||
Date dateToStartKeepingOneSnapshotByDay = getDateFromHours(config, PurgeConstants.HOURS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_DAY); | |||
Date dateToStartKeepingOneSnapshotByWeek = getDateFromWeeks(config, PurgeConstants.WEEKS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_WEEK); | |||
Date dateToStartKeepingOneSnapshotByMonth = getDateFromWeeks(config, PurgeConstants.WEEKS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_MONTH); | |||
Date dateToStartDeletingAllSnapshots = getDateFromWeeks(config, PurgeConstants.WEEKS_BEFORE_DELETING_ALL_SNAPSHOTS); | |||
all.add(new KeepOneFilter(dateToStartKeepingOneSnapshotByWeek, dateToStartKeepingOneSnapshotByDay, Calendar.DAY_OF_YEAR, "day")); | |||
all.add(new KeepOneFilter(dateToStartKeepingOneSnapshotByMonth, dateToStartKeepingOneSnapshotByWeek, Calendar.WEEK_OF_YEAR, "week")); | |||
@@ -42,13 +42,13 @@ class Filters { | |||
all.add(new DeleteAllFilter(dateToStartDeletingAllSnapshots)); | |||
} | |||
static Date getDateFromWeeks(Settings settings, String propertyKey) { | |||
int weeks = settings.getInt(propertyKey); | |||
static Date getDateFromWeeks(Configuration config, String propertyKey) { | |||
int weeks = config.getInt(propertyKey).get(); | |||
return DateUtils.addWeeks(new Date(), -weeks); | |||
} | |||
static Date getDateFromHours(Settings settings, String propertyKey) { | |||
int hours = settings.getInt(propertyKey); | |||
static Date getDateFromHours(Configuration config, String propertyKey) { | |||
int hours = config.getInt(propertyKey).get(); | |||
return DateUtils.addHours(new Date(), -hours); | |||
} | |||
@@ -32,7 +32,7 @@ import org.sonar.db.RowNotFoundException; | |||
import org.sonar.db.organization.OrganizationDto; | |||
import static com.google.common.base.Preconditions.checkNotNull; | |||
import static java.util.Optional.*; | |||
import static java.util.Optional.ofNullable; | |||
import static org.sonar.db.DatabaseUtils.executeLargeInputs; | |||
public class RuleDao implements Dao { |
@@ -30,8 +30,8 @@ import org.apache.commons.lang.StringUtils; | |||
import org.apache.ibatis.session.RowBounds; | |||
import org.sonar.api.utils.System2; | |||
import org.sonar.db.Dao; | |||
import org.sonar.db.DbSession; | |||
import org.sonar.db.DaoDatabaseUtils; | |||
import org.sonar.db.DbSession; | |||
import org.sonar.db.WildcardPosition; | |||
import static org.sonar.db.DatabaseUtils.executeLargeInputs; |
@@ -21,7 +21,7 @@ package org.sonar.db; | |||
import org.junit.Test; | |||
import static org.mockito.Mockito.anyBoolean; | |||
import static org.mockito.Matchers.anyBoolean; | |||
import static org.mockito.Mockito.mock; | |||
import static org.mockito.Mockito.never; | |||
import static org.mockito.Mockito.times; |
@@ -53,8 +53,8 @@ import static org.assertj.guava.api.Assertions.assertThat; | |||
import static org.sonar.db.component.ComponentTesting.newDirectory; | |||
import static org.sonar.db.component.ComponentTesting.newFileDto; | |||
import static org.sonar.db.component.ComponentTesting.newModuleDto; | |||
import static org.sonar.db.component.ComponentTesting.newProjectCopy; | |||
import static org.sonar.db.component.ComponentTesting.newPrivateProjectDto; | |||
import static org.sonar.db.component.ComponentTesting.newProjectCopy; | |||
import static org.sonar.db.component.ComponentTesting.newSubView; | |||
import static org.sonar.db.component.ComponentTesting.newView; | |||
import static org.sonar.db.component.ComponentTreeQuery.Strategy.CHILDREN; |
@@ -19,14 +19,13 @@ | |||
*/ | |||
package org.sonar.db.duplication; | |||
import java.util.List; | |||
import org.junit.Rule; | |||
import org.junit.Test; | |||
import org.sonar.api.utils.System2; | |||
import org.sonar.db.DbSession; | |||
import org.sonar.db.DbTester; | |||
import java.util.List; | |||
import static java.util.Collections.singletonList; | |||
import static org.assertj.core.api.Assertions.assertThat; | |||
@@ -22,12 +22,13 @@ package org.sonar.db.purge; | |||
import java.util.Collections; | |||
import java.util.Date; | |||
import org.junit.Test; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.MapSettings; | |||
import org.sonar.api.config.PropertyDefinitions; | |||
import org.sonar.api.config.internal.MapSettings; | |||
import org.sonar.api.resources.Scopes; | |||
import org.sonar.api.utils.DateUtils; | |||
import org.sonar.api.utils.System2; | |||
import org.sonar.core.config.PurgeConstants; | |||
import org.sonar.core.config.PurgeProperties; | |||
import static org.assertj.core.api.Assertions.assertThat; | |||
@@ -55,12 +56,12 @@ public class PurgeConfigurationTest { | |||
@Test | |||
public void do_not_delete_directory_by_default() { | |||
Settings settings = new MapSettings(); | |||
MapSettings settings = new MapSettings(new PropertyDefinitions(PurgeProperties.all())); | |||
settings.setProperty(PurgeConstants.PROPERTY_CLEAN_DIRECTORY, false); | |||
settings.setProperty(PurgeConstants.DAYS_BEFORE_DELETING_CLOSED_ISSUES, 5); | |||
Date now = new Date(); | |||
PurgeConfiguration underTest = PurgeConfiguration.newDefaultPurgeConfiguration(settings, new IdUuidPair(42L, "any-uuid"), Collections.emptyList()); | |||
PurgeConfiguration underTest = PurgeConfiguration.newDefaultPurgeConfiguration(settings.asConfig(), new IdUuidPair(42L, "any-uuid"), Collections.emptyList()); | |||
assertThat(underTest.scopesWithoutHistoricalData()).contains(Scopes.FILE) | |||
.doesNotContain(Scopes.DIRECTORY); | |||
@@ -69,10 +70,10 @@ public class PurgeConfigurationTest { | |||
@Test | |||
public void delete_directory_if_in_settings() { | |||
Settings settings = new MapSettings(); | |||
MapSettings settings = new MapSettings(new PropertyDefinitions(PurgeProperties.all())); | |||
settings.setProperty(PurgeConstants.PROPERTY_CLEAN_DIRECTORY, true); | |||
PurgeConfiguration underTest = PurgeConfiguration.newDefaultPurgeConfiguration(settings, new IdUuidPair(42L, "any-uuid"), Collections.emptyList()); | |||
PurgeConfiguration underTest = PurgeConfiguration.newDefaultPurgeConfiguration(settings.asConfig(), new IdUuidPair(42L, "any-uuid"), Collections.emptyList()); | |||
assertThat(underTest.scopesWithoutHistoricalData()).contains(Scopes.DIRECTORY, Scopes.FILE); | |||
} |
@@ -33,8 +33,8 @@ import org.sonar.db.purge.PurgeDao; | |||
import org.sonar.db.purge.PurgeProfiler; | |||
import org.sonar.db.purge.PurgeableAnalysisDto; | |||
import static org.mockito.Mockito.anyListOf; | |||
import static org.mockito.Mockito.eq; | |||
import static org.mockito.Matchers.anyListOf; | |||
import static org.mockito.Matchers.eq; | |||
import static org.mockito.Mockito.mock; | |||
import static org.mockito.Mockito.times; | |||
import static org.mockito.Mockito.when; |
@@ -33,6 +33,7 @@ import org.sonar.db.DbSession; | |||
import org.sonar.db.DbTester; | |||
import static java.util.Arrays.asList; | |||
import static org.assertj.core.api.AssertionsForClassTypes.assertThat; | |||
import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; | |||
public class QProfileChangeDaoTest { |
@@ -19,14 +19,14 @@ | |||
*/ | |||
package org.sonar.db.user; | |||
import static org.assertj.core.api.Assertions.assertThat; | |||
import java.util.Arrays; | |||
import java.util.Collections; | |||
import org.junit.Rule; | |||
import org.junit.Test; | |||
import org.junit.rules.ExpectedException; | |||
import static org.assertj.core.api.Assertions.assertThat; | |||
public class UserDtoTest { | |||
@Rule |
@@ -26,7 +26,7 @@ import java.util.Optional; | |||
import okhttp3.OkHttpClient; | |||
import okhttp3.RequestBody; | |||
import org.apache.commons.io.IOUtils; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.utils.log.LoggerLevel; | |||
import org.sonar.process.DefaultProcessCommands; | |||
import org.sonar.process.systeminfo.protobuf.ProtobufSystemInfo; | |||
@@ -45,8 +45,8 @@ public class CeHttpClient { | |||
private final File ipcSharedDir; | |||
public CeHttpClient(Settings props) { | |||
this.ipcSharedDir = new File(props.getString(PROPERTY_SHARED_PATH)); | |||
public CeHttpClient(Configuration config) { | |||
this.ipcSharedDir = new File(config.get(PROPERTY_SHARED_PATH).get()); | |||
} | |||
/** |
@@ -20,25 +20,27 @@ | |||
package org.sonar.ce.settings; | |||
import org.sonar.api.ce.ComputeEngineSide; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.internal.ConfigurationBridge; | |||
import org.sonar.db.DbClient; | |||
@ComputeEngineSide | |||
public class ProjectSettingsFactory { | |||
public class ProjectConfigurationFactory { | |||
private final Settings globalSettings; | |||
private final DbClient dbClient; | |||
public ProjectSettingsFactory(Settings globalSettings, DbClient dbClient) { | |||
public ProjectConfigurationFactory(Settings globalSettings, DbClient dbClient) { | |||
this.globalSettings = globalSettings; | |||
this.dbClient = dbClient; | |||
} | |||
public Settings newProjectSettings(String projectKey) { | |||
public Configuration newProjectConfiguration(String projectKey) { | |||
Settings projectSettings = new ProjectSettings(globalSettings); | |||
dbClient.propertiesDao() | |||
.selectProjectProperties(projectKey) | |||
.forEach(property -> projectSettings.setProperty(property.getKey(), property.getValue())); | |||
return projectSettings; | |||
return new ConfigurationBridge(projectSettings); | |||
} | |||
} |
@@ -20,19 +20,18 @@ | |||
package org.sonar.server.app; | |||
import java.io.File; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.process.DefaultProcessCommands; | |||
import org.sonar.process.ProcessCommands; | |||
import static com.google.common.base.Preconditions.checkArgument; | |||
import static org.sonar.process.ProcessEntryPoint.PROPERTY_PROCESS_INDEX; | |||
import static org.sonar.process.ProcessEntryPoint.PROPERTY_SHARED_PATH; | |||
public class ProcessCommandWrapperImpl implements ProcessCommandWrapper { | |||
private final Settings settings; | |||
private final Configuration config; | |||
public ProcessCommandWrapperImpl(Settings settings) { | |||
this.settings = settings; | |||
public ProcessCommandWrapperImpl(Configuration config) { | |||
this.config = config; | |||
} | |||
@Override | |||
@@ -87,14 +86,10 @@ public class ProcessCommandWrapperImpl implements ProcessCommandWrapper { | |||
} | |||
private int nonNullAsInt(String key) { | |||
String s = settings.getString(key); | |||
checkArgument(s != null, "Property %s is not set", key); | |||
return Integer.parseInt(s); | |||
return config.getInt(key).orElseThrow(() -> new IllegalArgumentException(String.format("Property %s is not set", key))); | |||
} | |||
private File nonNullValueAsFile(String key) { | |||
String s = settings.getString(key); | |||
checkArgument(s != null, "Property %s is not set", key); | |||
return new File(s); | |||
return new File(config.get(key).orElseThrow(() -> new IllegalArgumentException(String.format("Property %s is not set", key)))); | |||
} | |||
} |
@@ -29,7 +29,7 @@ import javax.annotation.Nullable; | |||
import javax.servlet.http.Cookie; | |||
import javax.servlet.http.HttpServletRequest; | |||
import javax.servlet.http.HttpServletResponse; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.server.ServerSide; | |||
import org.sonar.api.utils.System2; | |||
import org.sonar.db.DbClient; | |||
@@ -70,11 +70,11 @@ public class JwtHttpHandler { | |||
private final int sessionTimeoutInSeconds; | |||
private final JwtCsrfVerifier jwtCsrfVerifier; | |||
public JwtHttpHandler(System2 system2, DbClient dbClient, Settings settings, JwtSerializer jwtSerializer, JwtCsrfVerifier jwtCsrfVerifier) { | |||
public JwtHttpHandler(System2 system2, DbClient dbClient, Configuration config, JwtSerializer jwtSerializer, JwtCsrfVerifier jwtCsrfVerifier) { | |||
this.jwtSerializer = jwtSerializer; | |||
this.dbClient = dbClient; | |||
this.system2 = system2; | |||
this.sessionTimeoutInSeconds = getSessionTimeoutInSeconds(settings); | |||
this.sessionTimeoutInSeconds = getSessionTimeoutInSeconds(config); | |||
this.jwtCsrfVerifier = jwtCsrfVerifier; | |||
} | |||
@@ -176,14 +176,9 @@ public class JwtHttpHandler { | |||
} | |||
} | |||
private static int getSessionTimeoutInSeconds(Settings settings) { | |||
int minutes; | |||
if (settings.hasKey(SESSION_TIMEOUT_IN_MINUTES_PROPERTY)) { | |||
minutes = settings.getInt(SESSION_TIMEOUT_IN_MINUTES_PROPERTY); | |||
checkArgument(minutes > 0, "Property %s must be strictly positive. Got %s", SESSION_TIMEOUT_IN_MINUTES_PROPERTY, minutes); | |||
} else { | |||
minutes = SESSION_TIMEOUT_DEFAULT_VALUE_IN_MINUTES; | |||
} | |||
private static int getSessionTimeoutInSeconds(Configuration config) { | |||
int minutes = config.getInt(SESSION_TIMEOUT_IN_MINUTES_PROPERTY).orElse(SESSION_TIMEOUT_DEFAULT_VALUE_IN_MINUTES); | |||
checkArgument(minutes > 0, "Property %s must be strictly positive. Got %s", SESSION_TIMEOUT_IN_MINUTES_PROPERTY, minutes); | |||
checkArgument(minutes <= MAX_SESSION_TIMEOUT_IN_MINUTES, "Property %s must not be greater than 3 months (%s minutes). Got %s minutes", | |||
SESSION_TIMEOUT_IN_MINUTES_PROPERTY, MAX_SESSION_TIMEOUT_IN_MINUTES, minutes); | |||
return minutes * 60; |
@@ -35,16 +35,16 @@ import javax.annotation.concurrent.Immutable; | |||
import javax.crypto.SecretKey; | |||
import javax.crypto.spec.SecretKeySpec; | |||
import org.sonar.api.Startable; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.server.ServerSide; | |||
import org.sonar.api.utils.System2; | |||
import org.sonar.core.util.UuidFactory; | |||
import org.sonar.server.authentication.event.AuthenticationEvent.Source; | |||
import org.sonar.server.authentication.event.AuthenticationException; | |||
import static com.google.common.base.Preconditions.checkNotNull; | |||
import static io.jsonwebtoken.impl.crypto.MacProvider.generateKey; | |||
import static java.util.Objects.requireNonNull; | |||
import static org.sonar.server.authentication.event.AuthenticationEvent.Source; | |||
/** | |||
* This class can be used to encode or decode a JWT token | |||
@@ -56,14 +56,14 @@ public class JwtSerializer implements Startable { | |||
private static final SignatureAlgorithm SIGNATURE_ALGORITHM = SignatureAlgorithm.HS256; | |||
private final Settings settings; | |||
private final Configuration config; | |||
private final System2 system2; | |||
private final UuidFactory uuidFactory; | |||
private SecretKey secretKey; | |||
public JwtSerializer(Settings settings, System2 system2, UuidFactory uuidFactory) { | |||
this.settings = settings; | |||
public JwtSerializer(Configuration config, System2 system2, UuidFactory uuidFactory) { | |||
this.config = config; | |||
this.system2 = system2; | |||
this.uuidFactory = uuidFactory; | |||
} | |||
@@ -75,11 +75,11 @@ public class JwtSerializer implements Startable { | |||
@Override | |||
public void start() { | |||
String encodedKey = settings.getString(SECRET_KEY_PROPERTY); | |||
if (encodedKey == null) { | |||
this.secretKey = generateSecretKey(); | |||
Optional<String> encodedKey = config.get(SECRET_KEY_PROPERTY); | |||
if (encodedKey.isPresent()) { | |||
this.secretKey = decodeSecretKeyProperty(encodedKey.get()); | |||
} else { | |||
this.secretKey = decodeSecretKeyProperty(encodedKey); | |||
this.secretKey = generateSecretKey(); | |||
} | |||
} | |||
@@ -25,7 +25,7 @@ import java.util.Locale; | |||
import java.util.Optional; | |||
import javax.servlet.http.HttpServletRequest; | |||
import org.sonar.api.Startable; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.security.Authenticator; | |||
import org.sonar.api.security.ExternalGroupsProvider; | |||
import org.sonar.api.security.ExternalUsersProvider; | |||
@@ -38,20 +38,20 @@ import org.sonar.api.utils.log.Logger; | |||
import org.sonar.api.utils.log.Loggers; | |||
import org.sonar.db.user.UserDto; | |||
import org.sonar.server.authentication.event.AuthenticationEvent; | |||
import org.sonar.server.authentication.event.AuthenticationEvent.Source; | |||
import org.sonar.server.authentication.event.AuthenticationException; | |||
import org.sonar.server.user.SecurityRealmFactory; | |||
import static java.util.Objects.requireNonNull; | |||
import static org.apache.commons.lang.StringUtils.isEmpty; | |||
import static org.apache.commons.lang.StringUtils.trimToNull; | |||
import static org.sonar.server.authentication.event.AuthenticationEvent.Source; | |||
import static org.sonar.server.user.ExternalIdentity.SQ_AUTHORITY; | |||
public class RealmAuthenticator implements Startable { | |||
private static final Logger LOG = Loggers.get(RealmAuthenticator.class); | |||
private final Settings settings; | |||
private final Configuration config; | |||
private final SecurityRealmFactory securityRealmFactory; | |||
private final UserIdentityAuthenticator userIdentityAuthenticator; | |||
private final AuthenticationEvent authenticationEvent; | |||
@@ -61,9 +61,9 @@ public class RealmAuthenticator implements Startable { | |||
private ExternalUsersProvider externalUsersProvider; | |||
private ExternalGroupsProvider externalGroupsProvider; | |||
public RealmAuthenticator(Settings settings, SecurityRealmFactory securityRealmFactory, | |||
public RealmAuthenticator(Configuration config, SecurityRealmFactory securityRealmFactory, | |||
UserIdentityAuthenticator userIdentityAuthenticator, AuthenticationEvent authenticationEvent) { | |||
this.settings = settings; | |||
this.config = config; | |||
this.securityRealmFactory = securityRealmFactory; | |||
this.userIdentityAuthenticator = userIdentityAuthenticator; | |||
this.authenticationEvent = authenticationEvent; | |||
@@ -142,7 +142,7 @@ public class RealmAuthenticator implements Startable { | |||
} | |||
private String getLogin(String userLogin) { | |||
if (settings.getBoolean("sonar.authenticator.downcase")) { | |||
if (config.getBoolean("sonar.authenticator.downcase").orElse(false)) { | |||
return userLogin.toLowerCase(Locale.ENGLISH); | |||
} | |||
return userLogin; |
@@ -32,7 +32,7 @@ import javax.annotation.CheckForNull; | |||
import javax.servlet.http.HttpServletRequest; | |||
import javax.servlet.http.HttpServletResponse; | |||
import org.sonar.api.Startable; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.server.authentication.Display; | |||
import org.sonar.api.server.authentication.IdentityProvider; | |||
import org.sonar.api.server.authentication.UserIdentity; | |||
@@ -41,12 +41,11 @@ import org.sonar.api.utils.log.Logger; | |||
import org.sonar.api.utils.log.Loggers; | |||
import org.sonar.db.user.UserDto; | |||
import org.sonar.server.authentication.event.AuthenticationEvent; | |||
import org.sonar.server.authentication.event.AuthenticationEvent.Source; | |||
import org.sonar.server.authentication.event.AuthenticationException; | |||
import org.sonar.server.exceptions.BadRequestException; | |||
import static org.apache.commons.lang.StringUtils.defaultIfBlank; | |||
import static org.apache.commons.lang.time.DateUtils.addMinutes; | |||
import static org.sonar.server.authentication.event.AuthenticationEvent.Source; | |||
import static org.sonar.server.user.ExternalIdentity.SQ_AUTHORITY; | |||
public class SsoAuthenticator implements Startable { | |||
@@ -82,7 +81,7 @@ public class SsoAuthenticator implements Startable { | |||
REFRESH_INTERVAL_PARAM, REFRESH_INTERVAL_DEFAULT_VALUE); | |||
private final System2 system2; | |||
private final Settings settings; | |||
private final Configuration config; | |||
private final UserIdentityAuthenticator userIdentityAuthenticator; | |||
private final JwtHttpHandler jwtHttpHandler; | |||
private final AuthenticationEvent authenticationEvent; | |||
@@ -90,10 +89,10 @@ public class SsoAuthenticator implements Startable { | |||
private boolean enabled = false; | |||
private Map<String, String> settingsByKey = new HashMap<>(); | |||
public SsoAuthenticator(System2 system2, Settings settings, UserIdentityAuthenticator userIdentityAuthenticator, | |||
public SsoAuthenticator(System2 system2, Configuration config, UserIdentityAuthenticator userIdentityAuthenticator, | |||
JwtHttpHandler jwtHttpHandler, AuthenticationEvent authenticationEvent) { | |||
this.system2 = system2; | |||
this.settings = settings; | |||
this.config = config; | |||
this.userIdentityAuthenticator = userIdentityAuthenticator; | |||
this.jwtHttpHandler = jwtHttpHandler; | |||
this.authenticationEvent = authenticationEvent; | |||
@@ -101,11 +100,11 @@ public class SsoAuthenticator implements Startable { | |||
@Override | |||
public void start() { | |||
if (settings.getBoolean(ENABLE_PARAM)) { | |||
if (config.getBoolean(ENABLE_PARAM).orElse(false)) { | |||
LOG.info("SSO Authentication enabled"); | |||
enabled = true; | |||
DEFAULT_VALUES_BY_SETTING_KEYS.entrySet() | |||
.forEach(entry -> settingsByKey.put(entry.getKey(), defaultIfBlank(settings.getString(entry.getKey()), DEFAULT_VALUES_BY_SETTING_KEYS.get(entry.getKey())))); | |||
.forEach(entry -> settingsByKey.put(entry.getKey(), config.get(entry.getKey()).orElse(DEFAULT_VALUES_BY_SETTING_KEYS.get(entry.getKey())))); | |||
} | |||
} | |||
@@ -24,10 +24,13 @@ import java.util.Optional; | |||
import java.util.Set; | |||
import javax.servlet.http.HttpServletRequest; | |||
import javax.servlet.http.HttpServletResponse; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.server.ServerSide; | |||
import org.sonar.api.web.ServletFilter.UrlPattern; | |||
import org.sonar.db.user.UserDto; | |||
import org.sonar.server.authentication.event.AuthenticationEvent; | |||
import org.sonar.server.authentication.event.AuthenticationEvent.Method; | |||
import org.sonar.server.authentication.event.AuthenticationEvent.Source; | |||
import org.sonar.server.authentication.event.AuthenticationException; | |||
import org.sonar.server.user.ThreadLocalUserSession; | |||
import org.sonar.server.user.UserSession; | |||
@@ -35,11 +38,8 @@ import org.sonar.server.user.UserSessionFactory; | |||
import static java.net.HttpURLConnection.HTTP_UNAUTHORIZED; | |||
import static org.sonar.api.CoreProperties.CORE_FORCE_AUTHENTICATION_PROPERTY; | |||
import static org.sonar.api.web.ServletFilter.UrlPattern; | |||
import static org.sonar.api.web.ServletFilter.UrlPattern.Builder.staticResourcePatterns; | |||
import static org.sonar.server.authentication.AuthenticationError.handleAuthenticationError; | |||
import static org.sonar.server.authentication.event.AuthenticationEvent.Method; | |||
import static org.sonar.server.authentication.event.AuthenticationEvent.Source; | |||
import static org.sonar.server.authentication.ws.LoginAction.LOGIN_URL; | |||
import static org.sonar.server.authentication.ws.LogoutAction.LOGOUT_URL; | |||
import static org.sonar.server.authentication.ws.ValidateAction.VALIDATE_URL; | |||
@@ -70,7 +70,7 @@ public class UserSessionInitializer { | |||
.excludes(SKIPPED_URLS) | |||
.build(); | |||
private final Settings settings; | |||
private final Configuration config; | |||
private final JwtHttpHandler jwtHttpHandler; | |||
private final BasicAuthenticator basicAuthenticator; | |||
private final SsoAuthenticator ssoAuthenticator; | |||
@@ -78,10 +78,10 @@ public class UserSessionInitializer { | |||
private final AuthenticationEvent authenticationEvent; | |||
private final UserSessionFactory userSessionFactory; | |||
public UserSessionInitializer(Settings settings, JwtHttpHandler jwtHttpHandler, BasicAuthenticator basicAuthenticator, | |||
public UserSessionInitializer(Configuration config, JwtHttpHandler jwtHttpHandler, BasicAuthenticator basicAuthenticator, | |||
SsoAuthenticator ssoAuthenticator, ThreadLocalUserSession threadLocalSession, AuthenticationEvent authenticationEvent, | |||
UserSessionFactory userSessionFactory) { | |||
this.settings = settings; | |||
this.config = config; | |||
this.jwtHttpHandler = jwtHttpHandler; | |||
this.basicAuthenticator = basicAuthenticator; | |||
this.ssoAuthenticator = ssoAuthenticator; | |||
@@ -127,7 +127,7 @@ public class UserSessionInitializer { | |||
threadLocalSession.set(session); | |||
request.setAttribute(ACCESS_LOG_LOGIN, session.getLogin()); | |||
} else { | |||
if (settings.getBoolean(CORE_FORCE_AUTHENTICATION_PROPERTY)) { | |||
if (config.getBoolean(CORE_FORCE_AUTHENTICATION_PROPERTY).orElse(false)) { | |||
throw AuthenticationException.newBuilder() | |||
.setSource(Source.local(Method.BASIC)) | |||
.setMessage("User must be authenticated") |
@@ -29,7 +29,7 @@ import javax.servlet.ServletRequest; | |||
import javax.servlet.ServletResponse; | |||
import javax.servlet.http.HttpServletRequest; | |||
import javax.servlet.http.HttpServletResponse; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.server.ws.WebService; | |||
import org.sonar.api.utils.text.JsonWriter; | |||
import org.sonar.api.web.ServletFilter; | |||
@@ -48,12 +48,12 @@ public class ValidateAction extends ServletFilter implements AuthenticationWsAct | |||
private static final String VALIDATE_ACTION = "validate"; | |||
public static final String VALIDATE_URL = "/" + AUTHENTICATION_CONTROLLER + "/" + VALIDATE_ACTION; | |||
private final Settings settings; | |||
private final Configuration config; | |||
private final JwtHttpHandler jwtHttpHandler; | |||
private final BasicAuthenticator basicAuthenticator; | |||
public ValidateAction(Settings settings, BasicAuthenticator basicAuthenticator, JwtHttpHandler jwtHttpHandler) { | |||
this.settings = settings; | |||
public ValidateAction(Configuration config, BasicAuthenticator basicAuthenticator, JwtHttpHandler jwtHttpHandler) { | |||
this.config = config; | |||
this.basicAuthenticator = basicAuthenticator; | |||
this.jwtHttpHandler = jwtHttpHandler; | |||
} | |||
@@ -97,7 +97,7 @@ public class ValidateAction extends ServletFilter implements AuthenticationWsAct | |||
if (user.isPresent()) { | |||
return true; | |||
} | |||
return !settings.getBoolean(CORE_FORCE_AUTHENTICATION_PROPERTY); | |||
return !config.getBoolean(CORE_FORCE_AUTHENTICATION_PROPERTY).orElse(false); | |||
} catch (AuthenticationException e) { | |||
return false; | |||
} |
@@ -19,7 +19,7 @@ | |||
*/ | |||
package org.sonar.server.component.index; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.server.es.DefaultIndexSettingsElement; | |||
import org.sonar.server.es.IndexDefinition; | |||
import org.sonar.server.es.IndexType; | |||
@@ -42,17 +42,17 @@ public class ComponentIndexDefinition implements IndexDefinition { | |||
static final DefaultIndexSettingsElement[] NAME_ANALYZERS = {SORTABLE_ANALYZER, SEARCH_PREFIX_ANALYZER, SEARCH_PREFIX_CASE_INSENSITIVE_ANALYZER, SEARCH_GRAMS_ANALYZER}; | |||
private final Settings settings; | |||
private final Configuration config; | |||
public ComponentIndexDefinition(Settings settings) { | |||
this.settings = settings; | |||
public ComponentIndexDefinition(Configuration config) { | |||
this.config = config; | |||
} | |||
@Override | |||
public void define(IndexDefinitionContext context) { | |||
NewIndex index = context.create(INDEX_TYPE_COMPONENT.getIndex()); | |||
index.refreshHandledByIndexer(); | |||
index.configureShards(settings, DEFAULT_NUMBER_OF_SHARDS); | |||
index.configureShards(config, DEFAULT_NUMBER_OF_SHARDS); | |||
NewIndex.NewIndexType mapping = index.createType(INDEX_TYPE_COMPONENT.getType()) | |||
.requireProjectAuthorization(); |
@@ -22,7 +22,7 @@ package org.sonar.server.computation.dbcleaner; | |||
import java.util.Collection; | |||
import org.sonar.api.CoreProperties; | |||
import org.sonar.api.ce.ComputeEngineSide; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.server.ServerSide; | |||
import org.sonar.api.utils.TimeUtils; | |||
import org.sonar.api.utils.log.Logger; | |||
@@ -54,22 +54,22 @@ public class ProjectCleaner { | |||
this.purgeListener = purgeListener; | |||
} | |||
public ProjectCleaner purge(DbSession session, IdUuidPair idUuidPair, Settings projectSettings, Collection<String> disabledComponentUuids) { | |||
public ProjectCleaner purge(DbSession session, IdUuidPair idUuidPair, Configuration projectConfig, Collection<String> disabledComponentUuids) { | |||
long start = System.currentTimeMillis(); | |||
profiler.reset(); | |||
PurgeConfiguration configuration = newDefaultPurgeConfiguration(projectSettings, idUuidPair, disabledComponentUuids); | |||
PurgeConfiguration configuration = newDefaultPurgeConfiguration(projectConfig, idUuidPair, disabledComponentUuids); | |||
cleanHistoricalData(session, configuration.rootProjectIdUuid().getUuid(), projectSettings); | |||
cleanHistoricalData(session, configuration.rootProjectIdUuid().getUuid(), projectConfig); | |||
doPurge(session, configuration); | |||
session.commit(); | |||
logProfiling(start, projectSettings); | |||
logProfiling(start, projectConfig); | |||
return this; | |||
} | |||
private void logProfiling(long start, Settings settings) { | |||
if (settings.getBoolean(CoreProperties.PROFILING_LOG_PROPERTY)) { | |||
private void logProfiling(long start, Configuration config) { | |||
if (config.getBoolean(CoreProperties.PROFILING_LOG_PROPERTY).orElse(false)) { | |||
long duration = System.currentTimeMillis() - start; | |||
LOG.info("\n -------- Profiling for purge: " + TimeUtils.formatDuration(duration) + " --------\n"); | |||
profiler.dump(duration, LOG); | |||
@@ -77,9 +77,9 @@ public class ProjectCleaner { | |||
} | |||
} | |||
private void cleanHistoricalData(DbSession session, String rootUuid, Settings settings) { | |||
private void cleanHistoricalData(DbSession session, String rootUuid, Configuration config) { | |||
try { | |||
periodCleaner.clean(session, rootUuid, settings); | |||
periodCleaner.clean(session, rootUuid, config); | |||
} catch (Exception e) { | |||
// purge errors must no fail the batch | |||
LOG.error("Fail to clean historical data [uuid=" + rootUuid + "]", e); |
@@ -32,22 +32,23 @@ import javax.annotation.Nullable; | |||
import org.sonar.api.ce.measure.Component; | |||
import org.sonar.api.ce.measure.Issue; | |||
import org.sonar.api.ce.measure.Measure; | |||
import org.sonar.api.ce.measure.MeasureComputer.MeasureComputerContext; | |||
import org.sonar.api.ce.measure.MeasureComputer.MeasureComputerDefinition; | |||
import org.sonar.api.ce.measure.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.core.issue.DefaultIssue; | |||
import org.sonar.server.computation.task.projectanalysis.component.SettingsRepository; | |||
import org.sonar.server.computation.task.projectanalysis.component.ConfigurationRepository; | |||
import org.sonar.server.computation.task.projectanalysis.issue.ComponentIssuesRepository; | |||
import org.sonar.server.computation.task.projectanalysis.measure.MeasureRepository; | |||
import org.sonar.server.computation.task.projectanalysis.metric.Metric; | |||
import org.sonar.server.computation.task.projectanalysis.metric.MetricRepository; | |||
import static com.google.common.base.Preconditions.checkArgument; | |||
import static org.sonar.api.ce.measure.MeasureComputer.MeasureComputerContext; | |||
import static org.sonar.api.ce.measure.MeasureComputer.MeasureComputerDefinition; | |||
import static org.sonar.server.computation.task.projectanalysis.measure.Measure.newMeasureBuilder; | |||
public class MeasureComputerContextImpl implements MeasureComputerContext { | |||
private final SettingsRepository settings; | |||
private final ConfigurationRepository config; | |||
private final MeasureRepository measureRepository; | |||
private final MetricRepository metricRepository; | |||
@@ -58,9 +59,9 @@ public class MeasureComputerContextImpl implements MeasureComputerContext { | |||
private MeasureComputerDefinition definition; | |||
private Set<String> allowedMetrics; | |||
public MeasureComputerContextImpl(org.sonar.server.computation.task.projectanalysis.component.Component component, SettingsRepository settings, | |||
public MeasureComputerContextImpl(org.sonar.server.computation.task.projectanalysis.component.Component component, ConfigurationRepository config, | |||
MeasureRepository measureRepository, MetricRepository metricRepository, ComponentIssuesRepository componentIssuesRepository) { | |||
this.settings = settings; | |||
this.config = config; | |||
this.internalComponent = component; | |||
this.measureRepository = measureRepository; | |||
this.metricRepository = metricRepository; | |||
@@ -96,7 +97,7 @@ public class MeasureComputerContextImpl implements MeasureComputerContext { | |||
@Override | |||
@CheckForNull | |||
public String getString(String key) { | |||
return getComponentSettings().getString(key); | |||
return getComponentSettings().get(key).orElse(null); | |||
} | |||
@Override | |||
@@ -106,8 +107,8 @@ public class MeasureComputerContextImpl implements MeasureComputerContext { | |||
}; | |||
} | |||
private org.sonar.api.config.Settings getComponentSettings() { | |||
return settings.getSettings(internalComponent); | |||
private Configuration getComponentSettings() { | |||
return config.getConfiguration(internalComponent); | |||
} | |||
@Override | |||
@@ -187,11 +188,12 @@ public class MeasureComputerContextImpl implements MeasureComputerContext { | |||
component.getKey(), | |||
Component.Type.valueOf(component.getType().name()), | |||
component.getType() == org.sonar.server.computation.task.projectanalysis.component.Component.Type.FILE | |||
? new ComponentImpl.FileAttributesImpl(component.getFileAttributes().getLanguageKey(), component.getFileAttributes().isUnitTest()) : null); | |||
? new ComponentImpl.FileAttributesImpl(component.getFileAttributes().getLanguageKey(), component.getFileAttributes().isUnitTest()) | |||
: null); | |||
} | |||
private class ComponentToMeasure implements Function<org.sonar.server.computation.task.projectanalysis.component.Component, | |||
Optional<org.sonar.server.computation.task.projectanalysis.measure.Measure>> { | |||
private class ComponentToMeasure | |||
implements Function<org.sonar.server.computation.task.projectanalysis.component.Component, Optional<org.sonar.server.computation.task.projectanalysis.measure.Measure>> { | |||
private final Metric metric; | |||
@@ -19,14 +19,14 @@ | |||
*/ | |||
package org.sonar.server.computation.task.projectanalysis.component; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
/** | |||
* Repository of component settings. | |||
*/ | |||
public interface SettingsRepository { | |||
public interface ConfigurationRepository { | |||
/** | |||
* Returns the settings for the specified Component. | |||
* Returns the configuration for the specified Component. | |||
*/ | |||
Settings getSettings(Component component); | |||
Configuration getConfiguration(Component component); | |||
} |
@@ -21,35 +21,35 @@ package org.sonar.server.computation.task.projectanalysis.component; | |||
import java.util.Collection; | |||
import java.util.Map; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.ce.settings.ProjectSettingsFactory; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.ce.settings.ProjectConfigurationFactory; | |||
import org.sonar.server.util.cache.CacheLoader; | |||
import org.sonar.server.util.cache.MemoryCache; | |||
/** | |||
* Repository of component settings implementation based on a memory cache. | |||
*/ | |||
public class SettingsRepositoryImpl implements SettingsRepository { | |||
public class ConfigurationRepositoryImpl implements ConfigurationRepository { | |||
private final ProjectSettingsFactory projectSettingsFactory; | |||
private final MemoryCache<String, Settings> cache = new MemoryCache<>(new CacheLoader<String, Settings>() { | |||
private final ProjectConfigurationFactory projectConfigurationFactory; | |||
private final MemoryCache<String, Configuration> cache = new MemoryCache<>(new CacheLoader<String, Configuration>() { | |||
@Override | |||
public Settings load(String key) { | |||
return projectSettingsFactory.newProjectSettings(key); | |||
public Configuration load(String key) { | |||
return projectConfigurationFactory.newProjectConfiguration(key); | |||
} | |||
@Override | |||
public Map<String, Settings> loadAll(Collection<? extends String> keys) { | |||
public Map<String, Configuration> loadAll(Collection<? extends String> keys) { | |||
throw new UnsupportedOperationException("loadAll is not supported"); | |||
} | |||
}); | |||
public SettingsRepositoryImpl(ProjectSettingsFactory projectSettingsFactory) { | |||
this.projectSettingsFactory = projectSettingsFactory; | |||
public ConfigurationRepositoryImpl(ProjectConfigurationFactory projectSettingsFactory) { | |||
this.projectConfigurationFactory = projectSettingsFactory; | |||
} | |||
@Override | |||
public Settings getSettings(Component component){ | |||
public Configuration getConfiguration(Component component) { | |||
return cache.get(component.getKey()); | |||
} | |||
@@ -35,7 +35,7 @@ import org.sonar.server.computation.task.projectanalysis.batch.BatchReportDirect | |||
import org.sonar.server.computation.task.projectanalysis.batch.BatchReportReaderImpl; | |||
import org.sonar.server.computation.task.projectanalysis.component.DbIdsRepositoryImpl; | |||
import org.sonar.server.computation.task.projectanalysis.component.DisabledComponentsHolderImpl; | |||
import org.sonar.server.computation.task.projectanalysis.component.SettingsRepositoryImpl; | |||
import org.sonar.server.computation.task.projectanalysis.component.ConfigurationRepositoryImpl; | |||
import org.sonar.server.computation.task.projectanalysis.component.TreeRootHolderImpl; | |||
import org.sonar.server.computation.task.projectanalysis.duplication.CrossProjectDuplicationStatusHolderImpl; | |||
import org.sonar.server.computation.task.projectanalysis.duplication.DuplicationRepositoryImpl; | |||
@@ -166,7 +166,7 @@ public final class ProjectAnalysisTaskContainerPopulator implements ContainerPop | |||
LanguageRepositoryImpl.class, | |||
MeasureRepositoryImpl.class, | |||
EventRepositoryImpl.class, | |||
SettingsRepositoryImpl.class, | |||
ConfigurationRepositoryImpl.class, | |||
DbIdsRepositoryImpl.class, | |||
DisabledComponentsHolderImpl.class, | |||
QualityGateServiceImpl.class, |
@@ -27,7 +27,7 @@ import java.util.HashMap; | |||
import java.util.List; | |||
import java.util.Map; | |||
import javax.annotation.Nonnull; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.utils.log.Logger; | |||
import org.sonar.api.utils.log.Loggers; | |||
import org.sonar.duplications.block.Block; | |||
@@ -52,13 +52,13 @@ public class IntegrateCrossProjectDuplications { | |||
private static final int MAX_CLONE_GROUP_PER_FILE = 100; | |||
private static final int MAX_CLONE_PART_PER_GROUP = 100; | |||
private final Settings settings; | |||
private final Configuration config; | |||
private final DuplicationRepository duplicationRepository; | |||
private Map<String, NumberOfUnitsNotLessThan> numberOfUnitsByLanguage = new HashMap<>(); | |||
public IntegrateCrossProjectDuplications(Settings settings, DuplicationRepository duplicationRepository) { | |||
this.settings = settings; | |||
public IntegrateCrossProjectDuplications(Configuration config, DuplicationRepository duplicationRepository) { | |||
this.config = config; | |||
this.duplicationRepository = duplicationRepository; | |||
} | |||
@@ -96,8 +96,7 @@ public class IntegrateCrossProjectDuplications { | |||
if (!Iterables.isEmpty(duplicates)) { | |||
duplicationRepository.add( | |||
file, | |||
new Duplication(new TextBlock(originPart.getStartLine(), originPart.getEndLine()), duplicates) | |||
); | |||
new Duplication(new TextBlock(originPart.getStartLine(), originPart.getEndLine()), duplicates)); | |||
} | |||
} | |||
@@ -123,11 +122,7 @@ public class IntegrateCrossProjectDuplications { | |||
if (languageKey.equalsIgnoreCase(JAVA_KEY)) { | |||
return 0; | |||
} | |||
int minimumTokens = settings.getInt("sonar.cpd." + languageKey + ".minimumTokens"); | |||
if (minimumTokens == 0) { | |||
return 100; | |||
} | |||
return minimumTokens; | |||
return config.getInt("sonar.cpd." + languageKey + ".minimumTokens").orElse(100); | |||
} | |||
private static class NumberOfUnitsNotLessThan implements Predicate<CloneGroup> { |
@@ -27,7 +27,7 @@ import org.sonar.db.DbClient; | |||
import org.sonar.db.DbSession; | |||
import org.sonar.db.user.UserDto; | |||
import org.sonar.server.computation.task.projectanalysis.analysis.AnalysisMetadataHolder; | |||
import org.sonar.server.computation.task.projectanalysis.component.SettingsRepository; | |||
import org.sonar.server.computation.task.projectanalysis.component.ConfigurationRepository; | |||
import org.sonar.server.computation.task.projectanalysis.component.TreeRootHolder; | |||
import static org.sonar.api.CoreProperties.DEFAULT_ISSUE_ASSIGNEE; | |||
@@ -42,16 +42,16 @@ public class DefaultAssignee { | |||
private final DbClient dbClient; | |||
private final TreeRootHolder treeRootHolder; | |||
private final SettingsRepository settingsRepository; | |||
private final ConfigurationRepository configRepository; | |||
private final AnalysisMetadataHolder analysisMetadataHolder; | |||
private boolean loaded = false; | |||
private String login = null; | |||
public DefaultAssignee(DbClient dbClient, TreeRootHolder treeRootHolder, SettingsRepository settingsRepository, AnalysisMetadataHolder analysisMetadataHolder) { | |||
public DefaultAssignee(DbClient dbClient, TreeRootHolder treeRootHolder, ConfigurationRepository configRepository, AnalysisMetadataHolder analysisMetadataHolder) { | |||
this.dbClient = dbClient; | |||
this.treeRootHolder = treeRootHolder; | |||
this.settingsRepository = settingsRepository; | |||
this.configRepository = configRepository; | |||
this.analysisMetadataHolder = analysisMetadataHolder; | |||
} | |||
@@ -60,7 +60,7 @@ public class DefaultAssignee { | |||
if (loaded) { | |||
return login; | |||
} | |||
String configuredLogin = settingsRepository.getSettings(treeRootHolder.getRoot()).getString(DEFAULT_ISSUE_ASSIGNEE); | |||
String configuredLogin = configRepository.getConfiguration(treeRootHolder.getRoot()).get(DEFAULT_ISSUE_ASSIGNEE).orElse(null); | |||
if (!Strings.isNullOrEmpty(configuredLogin) && isValidLogin(configuredLogin)) { | |||
this.login = configuredLogin; | |||
} |
@@ -24,18 +24,17 @@ import java.util.ArrayList; | |||
import java.util.Iterator; | |||
import java.util.List; | |||
import org.sonar.api.ce.ComputeEngineSide; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.utils.log.Logger; | |||
import org.sonar.api.utils.log.Loggers; | |||
import org.sonar.core.issue.DefaultIssue; | |||
import org.sonar.server.computation.task.projectanalysis.component.Component; | |||
import org.sonar.server.computation.task.projectanalysis.component.SettingsRepository; | |||
import org.sonar.server.computation.task.projectanalysis.component.ConfigurationRepository; | |||
import org.sonar.server.computation.task.projectanalysis.component.TreeRootHolder; | |||
import static com.google.common.base.Preconditions.checkArgument; | |||
import static com.google.common.base.Strings.isNullOrEmpty; | |||
import static java.lang.String.format; | |||
import static org.apache.commons.lang.StringUtils.defaultIfBlank; | |||
import static org.sonar.core.config.IssueExclusionProperties.PATTERNS_MULTICRITERIA_EXCLUSION_KEY; | |||
import static org.sonar.core.config.IssueExclusionProperties.PATTERNS_MULTICRITERIA_INCLUSION_KEY; | |||
import static org.sonar.core.config.IssueExclusionProperties.RESOURCE_KEY; | |||
@@ -50,10 +49,10 @@ public class IssueFilter { | |||
private final List<IssuePattern> exclusionPatterns; | |||
private final List<IssuePattern> inclusionPatterns; | |||
public IssueFilter(TreeRootHolder treeRootHolder, SettingsRepository settingsRepository) { | |||
Settings settings = settingsRepository.getSettings(treeRootHolder.getRoot()); | |||
this.exclusionPatterns = loadPatterns(PATTERNS_MULTICRITERIA_EXCLUSION_KEY, settings); | |||
this.inclusionPatterns = loadPatterns(PATTERNS_MULTICRITERIA_INCLUSION_KEY, settings); | |||
public IssueFilter(TreeRootHolder treeRootHolder, ConfigurationRepository configRepository) { | |||
Configuration config = configRepository.getConfiguration(treeRootHolder.getRoot()); | |||
this.exclusionPatterns = loadPatterns(PATTERNS_MULTICRITERIA_EXCLUSION_KEY, config); | |||
this.inclusionPatterns = loadPatterns(PATTERNS_MULTICRITERIA_INCLUSION_KEY, config); | |||
} | |||
public boolean accept(DefaultIssue issue, Component component) { | |||
@@ -108,14 +107,14 @@ public class IssueFilter { | |||
} | |||
} | |||
private static List<IssuePattern> loadPatterns(String propertyKey, Settings settings) { | |||
private static List<IssuePattern> loadPatterns(String propertyKey, Configuration settings) { | |||
List<IssuePattern> patterns = new ArrayList<>(); | |||
String patternConf = defaultIfBlank(settings.getString(propertyKey), ""); | |||
String patternConf = settings.get(propertyKey).orElse(""); | |||
for (String id : Splitter.on(",").omitEmptyStrings().split(patternConf)) { | |||
String propPrefix = propertyKey + "." + id + "."; | |||
String componentPathPattern = settings.getString(propPrefix + RESOURCE_KEY); | |||
String componentPathPattern = settings.get(propPrefix + RESOURCE_KEY).orElse(null); | |||
checkArgument(!isNullOrEmpty(componentPathPattern), format("File path pattern cannot be empty. Please check '%s' settings", propertyKey)); | |||
String ruleKeyPattern = settings.getString(propPrefix + RULE_KEY); | |||
String ruleKeyPattern = settings.get(propPrefix + RULE_KEY).orElse(null); | |||
checkArgument(!isNullOrEmpty(ruleKeyPattern), format("Rule key pattern cannot be empty. Please check '%s' settings", propertyKey)); | |||
patterns.add(new IssuePattern(componentPathPattern, ruleKeyPattern)); | |||
} |
@@ -23,7 +23,7 @@ import org.sonar.api.ce.measure.MeasureComputer; | |||
import org.sonar.api.utils.log.Logger; | |||
import org.sonar.api.utils.log.Loggers; | |||
import org.sonar.server.computation.task.projectanalysis.component.CrawlerDepthLimit; | |||
import org.sonar.server.computation.task.projectanalysis.component.SettingsRepository; | |||
import org.sonar.server.computation.task.projectanalysis.component.ConfigurationRepository; | |||
import org.sonar.server.computation.task.projectanalysis.component.TypeAwareVisitorAdapter; | |||
import org.sonar.server.computation.task.projectanalysis.issue.ComponentIssuesRepository; | |||
import org.sonar.server.computation.task.projectanalysis.api.measurecomputer.MeasureComputerContextImpl; | |||
@@ -40,12 +40,12 @@ public class MeasureComputersVisitor extends TypeAwareVisitorAdapter { | |||
private final MetricRepository metricRepository; | |||
private final MeasureRepository measureRepository; | |||
private final SettingsRepository settings; | |||
private final ConfigurationRepository settings; | |||
private final MeasureComputersHolder measureComputersHolder; | |||
private final ComponentIssuesRepository componentIssuesRepository; | |||
public MeasureComputersVisitor(MetricRepository metricRepository, MeasureRepository measureRepository, SettingsRepository settings, | |||
public MeasureComputersVisitor(MetricRepository metricRepository, MeasureRepository measureRepository, ConfigurationRepository settings, | |||
MeasureComputersHolder measureComputersHolder, ComponentIssuesRepository componentIssuesRepository) { | |||
super(CrawlerDepthLimit.reportMaxDepth(FILE).withViewsMaxDepth(SUBVIEW), POST_ORDER); | |||
this.metricRepository = metricRepository; |
@@ -24,7 +24,7 @@ import java.util.Map; | |||
import javax.annotation.CheckForNull; | |||
import javax.annotation.Nullable; | |||
import javax.annotation.concurrent.Immutable; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.utils.MessageException; | |||
import static java.lang.String.format; | |||
@@ -38,32 +38,30 @@ import static org.sonar.api.CoreProperties.RATING_GRID_DEF_VALUES; | |||
public class RatingSettings { | |||
private final Settings settings; | |||
private final Configuration config; | |||
private final Map<String, LanguageSpecificConfiguration> languageSpecificConfigurationByLanguageKey; | |||
public RatingSettings(Settings settings) { | |||
this.settings = settings; | |||
this.languageSpecificConfigurationByLanguageKey = buildLanguageSpecificConfigurationByLanguageKey(settings); | |||
public RatingSettings(Configuration config) { | |||
this.config = config; | |||
this.languageSpecificConfigurationByLanguageKey = buildLanguageSpecificConfigurationByLanguageKey(config); | |||
} | |||
private static Map<String, LanguageSpecificConfiguration> buildLanguageSpecificConfigurationByLanguageKey(Settings settings) { | |||
private static Map<String, LanguageSpecificConfiguration> buildLanguageSpecificConfigurationByLanguageKey(Configuration config) { | |||
ImmutableMap.Builder<String, LanguageSpecificConfiguration> builder = ImmutableMap.builder(); | |||
String[] languageConfigIndexes = settings.getStringArray(LANGUAGE_SPECIFIC_PARAMETERS); | |||
String[] languageConfigIndexes = config.getStringArray(LANGUAGE_SPECIFIC_PARAMETERS); | |||
for (String languageConfigIndex : languageConfigIndexes) { | |||
String languagePropertyKey = LANGUAGE_SPECIFIC_PARAMETERS + "." + languageConfigIndex + "." + LANGUAGE_SPECIFIC_PARAMETERS_LANGUAGE_KEY; | |||
String languageKey = settings.getString(languagePropertyKey); | |||
if (languageKey == null) { | |||
throw MessageException.of("Technical debt configuration is corrupted. At least one language specific parameter has no Language key. " + | |||
"Contact your administrator to update this configuration in the global administration section of SonarQube."); | |||
} | |||
builder.put(languageKey, LanguageSpecificConfiguration.create(settings, languageConfigIndex)); | |||
String languageKey = config.get(languagePropertyKey) | |||
.orElseThrow(() -> MessageException.of("Technical debt configuration is corrupted. At least one language specific parameter has no Language key. " + | |||
"Contact your administrator to update this configuration in the global administration section of SonarQube.")); | |||
builder.put(languageKey, LanguageSpecificConfiguration.create(config, languageConfigIndex)); | |||
} | |||
return builder.build(); | |||
} | |||
public RatingGrid getRatingGrid() { | |||
try { | |||
String[] ratingGrades = settings.getStringArray(RATING_GRID); | |||
String[] ratingGrades = config.getStringArray(RATING_GRID); | |||
double[] grid = new double[4]; | |||
for (int i = 0; i < 4; i++) { | |||
grid[i] = Double.parseDouble(ratingGrades[i]); | |||
@@ -72,7 +70,7 @@ public class RatingSettings { | |||
} catch (Exception e) { | |||
throw new IllegalArgumentException("The rating grid is incorrect. Expected something similar to '" | |||
+ RATING_GRID_DEF_VALUES + "' and got '" | |||
+ settings.getString(RATING_GRID) + "'", e); | |||
+ config.get(RATING_GRID).get() + "'", e); | |||
} | |||
} | |||
@@ -93,10 +91,10 @@ public class RatingSettings { | |||
private long getDefaultDevelopmentCost() { | |||
try { | |||
return Long.parseLong(settings.getString(DEVELOPMENT_COST)); | |||
return Long.parseLong(config.get(DEVELOPMENT_COST).get()); | |||
} catch (NumberFormatException e) { | |||
throw new IllegalArgumentException("The value of the development cost property '" + DEVELOPMENT_COST | |||
+ "' is incorrect. Expected long but got '" + settings.getString(DEVELOPMENT_COST) + "'", e); | |||
+ "' is incorrect. Expected long but got '" + config.get(DEVELOPMENT_COST).get() + "'", e); | |||
} | |||
} | |||
@@ -117,13 +115,13 @@ public class RatingSettings { | |||
this.metricKey = metricKey; | |||
} | |||
static LanguageSpecificConfiguration create(Settings settings, String configurationId) { | |||
static LanguageSpecificConfiguration create(Configuration config, String configurationId) { | |||
String configurationPrefix = LANGUAGE_SPECIFIC_PARAMETERS + "." + configurationId + "."; | |||
String language = settings.getString(configurationPrefix + LANGUAGE_SPECIFIC_PARAMETERS_LANGUAGE_KEY); | |||
String manDays = settings.getString(configurationPrefix + LANGUAGE_SPECIFIC_PARAMETERS_MAN_DAYS_KEY); | |||
String metric = settings.getString(configurationPrefix + LANGUAGE_SPECIFIC_PARAMETERS_SIZE_METRIC_KEY); | |||
String language = config.get(configurationPrefix + LANGUAGE_SPECIFIC_PARAMETERS_LANGUAGE_KEY).orElse(null); | |||
String manDays = config.get(configurationPrefix + LANGUAGE_SPECIFIC_PARAMETERS_MAN_DAYS_KEY).orElse(null); | |||
String metric = config.get(configurationPrefix + LANGUAGE_SPECIFIC_PARAMETERS_SIZE_METRIC_KEY).orElse(null); | |||
return new LanguageSpecificConfiguration(language, manDays, metric); | |||
} |
@@ -21,14 +21,14 @@ package org.sonar.server.computation.task.projectanalysis.step; | |||
import com.google.common.base.Optional; | |||
import javax.annotation.CheckForNull; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.db.DbClient; | |||
import org.sonar.db.DbSession; | |||
import org.sonar.db.component.ComponentDto; | |||
import org.sonar.server.computation.task.projectanalysis.analysis.AnalysisMetadataHolder; | |||
import org.sonar.server.computation.task.projectanalysis.component.Component; | |||
import org.sonar.server.computation.task.projectanalysis.component.ConfigurationRepository; | |||
import org.sonar.server.computation.task.projectanalysis.component.DepthTraversalTypeAwareCrawler; | |||
import org.sonar.server.computation.task.projectanalysis.component.SettingsRepository; | |||
import org.sonar.server.computation.task.projectanalysis.component.TreeRootHolder; | |||
import org.sonar.server.computation.task.projectanalysis.component.TypeAwareVisitorAdapter; | |||
import org.sonar.server.computation.task.projectanalysis.period.Period; | |||
@@ -52,15 +52,15 @@ import static org.sonar.server.computation.task.projectanalysis.component.Crawle | |||
public class LoadPeriodsStep implements ComputationStep { | |||
private final DbClient dbClient; | |||
private final SettingsRepository settingsRepository; | |||
private final ConfigurationRepository configRepository; | |||
private final TreeRootHolder treeRootHolder; | |||
private final AnalysisMetadataHolder analysisMetadataHolder; | |||
private final PeriodHolderImpl periodsHolder; | |||
public LoadPeriodsStep(DbClient dbClient, SettingsRepository settingsRepository, TreeRootHolder treeRootHolder, AnalysisMetadataHolder analysisMetadataHolder, | |||
public LoadPeriodsStep(DbClient dbClient, ConfigurationRepository settingsRepository, TreeRootHolder treeRootHolder, AnalysisMetadataHolder analysisMetadataHolder, | |||
PeriodHolderImpl periodsHolder) { | |||
this.dbClient = dbClient; | |||
this.settingsRepository = settingsRepository; | |||
this.configRepository = settingsRepository; | |||
this.treeRootHolder = treeRootHolder; | |||
this.analysisMetadataHolder = analysisMetadataHolder; | |||
this.periodsHolder = periodsHolder; | |||
@@ -100,8 +100,8 @@ public class LoadPeriodsStep implements ComputationStep { | |||
PeriodResolver periodResolver = new PeriodResolver(dbClient, session, projectDto.get().uuid(), analysisMetadataHolder.getAnalysisDate(), | |||
isReportType ? projectOrView.getReportAttributes().getVersion() : null); | |||
Settings settings = settingsRepository.getSettings(projectOrView); | |||
Period period = periodResolver.resolve(settings); | |||
Configuration config = configRepository.getConfiguration(projectOrView); | |||
Period period = periodResolver.resolve(config); | |||
// SONAR-4700 Add a past snapshot only if it exists | |||
if (period != null) { | |||
return period; |
@@ -21,13 +21,13 @@ package org.sonar.server.computation.task.projectanalysis.step; | |||
import com.google.common.base.Optional; | |||
import org.apache.commons.lang.StringUtils; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.utils.log.Logger; | |||
import org.sonar.api.utils.log.Loggers; | |||
import org.sonar.server.computation.task.projectanalysis.component.Component; | |||
import org.sonar.server.computation.task.projectanalysis.component.ConfigurationRepository; | |||
import org.sonar.server.computation.task.projectanalysis.component.CrawlerDepthLimit; | |||
import org.sonar.server.computation.task.projectanalysis.component.DepthTraversalTypeAwareCrawler; | |||
import org.sonar.server.computation.task.projectanalysis.component.SettingsRepository; | |||
import org.sonar.server.computation.task.projectanalysis.component.TreeRootHolder; | |||
import org.sonar.server.computation.task.projectanalysis.component.TypeAwareVisitorAdapter; | |||
import org.sonar.server.computation.task.projectanalysis.qualitygate.MutableQualityGateHolder; | |||
@@ -47,14 +47,14 @@ public class LoadQualityGateStep implements ComputationStep { | |||
private static final String PROPERTY_QUALITY_GATE = "sonar.qualitygate"; | |||
private final TreeRootHolder treeRootHolder; | |||
private final SettingsRepository settingsRepository; | |||
private final ConfigurationRepository configRepository; | |||
private final QualityGateService qualityGateService; | |||
private final MutableQualityGateHolder qualityGateHolder; | |||
public LoadQualityGateStep(TreeRootHolder treeRootHolder, SettingsRepository settingsRepository, | |||
QualityGateService qualityGateService, MutableQualityGateHolder qualityGateHolder) { | |||
public LoadQualityGateStep(TreeRootHolder treeRootHolder, ConfigurationRepository settingsRepository, | |||
QualityGateService qualityGateService, MutableQualityGateHolder qualityGateHolder) { | |||
this.treeRootHolder = treeRootHolder; | |||
this.settingsRepository = settingsRepository; | |||
this.configRepository = settingsRepository; | |||
this.qualityGateService = qualityGateService; | |||
this.qualityGateHolder = qualityGateHolder; | |||
} | |||
@@ -72,10 +72,10 @@ public class LoadQualityGateStep implements ComputationStep { | |||
private void executeForProject(Component project) { | |||
String projectKey = project.getKey(); | |||
Settings settings = settingsRepository.getSettings(project); | |||
String qualityGateSetting = settings.getString(PROPERTY_QUALITY_GATE); | |||
Configuration config = configRepository.getConfiguration(project); | |||
String qualityGateSetting = config.get(PROPERTY_QUALITY_GATE).orElse(null); | |||
if (qualityGateSetting == null || StringUtils.isBlank(qualityGateSetting)) { | |||
if (StringUtils.isBlank(qualityGateSetting)) { | |||
LOGGER.debug("No quality gate is configured for project " + projectKey); | |||
qualityGateHolder.setNoQualityGate(); | |||
return; |
@@ -25,7 +25,7 @@ import java.util.List; | |||
import javax.annotation.CheckForNull; | |||
import javax.annotation.Nullable; | |||
import org.apache.commons.lang.StringUtils; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.utils.DateUtils; | |||
import org.sonar.api.utils.log.Logger; | |||
import org.sonar.api.utils.log.Loggers; | |||
@@ -65,8 +65,8 @@ public class PeriodResolver { | |||
} | |||
@CheckForNull | |||
public Period resolve(Settings settings) { | |||
String propertyValue = getPropertyValue(settings); | |||
public Period resolve(Configuration config) { | |||
String propertyValue = getPropertyValue(config); | |||
if (StringUtils.isBlank(propertyValue)) { | |||
return null; | |||
} | |||
@@ -207,7 +207,7 @@ public class PeriodResolver { | |||
return DateUtils.formatDate(Date.from(new Date(date).toInstant().truncatedTo(ChronoUnit.SECONDS))); | |||
} | |||
private static String getPropertyValue(Settings settings) { | |||
return settings.getString(LEAK_PERIOD); | |||
private static String getPropertyValue(Configuration config) { | |||
return config.get(LEAK_PERIOD).get(); | |||
} | |||
} |
@@ -26,7 +26,7 @@ import org.sonar.server.computation.task.projectanalysis.component.Component; | |||
import org.sonar.server.computation.task.projectanalysis.component.DbIdsRepository; | |||
import org.sonar.server.computation.task.projectanalysis.component.DepthTraversalTypeAwareCrawler; | |||
import org.sonar.server.computation.task.projectanalysis.component.DisabledComponentsHolder; | |||
import org.sonar.server.computation.task.projectanalysis.component.SettingsRepository; | |||
import org.sonar.server.computation.task.projectanalysis.component.ConfigurationRepository; | |||
import org.sonar.server.computation.task.projectanalysis.component.TreeRootHolder; | |||
import org.sonar.server.computation.task.projectanalysis.component.TypeAwareVisitorAdapter; | |||
import org.sonar.server.computation.dbcleaner.ProjectCleaner; | |||
@@ -43,16 +43,16 @@ public class PurgeDatastoresStep implements ComputationStep { | |||
private final DbClient dbClient; | |||
private final DbIdsRepository dbIdsRepository; | |||
private final TreeRootHolder treeRootHolder; | |||
private final SettingsRepository settingsRepository; | |||
private final ConfigurationRepository configRepository; | |||
private final DisabledComponentsHolder disabledComponentsHolder; | |||
public PurgeDatastoresStep(DbClient dbClient, ProjectCleaner projectCleaner, DbIdsRepository dbIdsRepository, TreeRootHolder treeRootHolder, | |||
SettingsRepository settingsRepository, DisabledComponentsHolder disabledComponentsHolder) { | |||
ConfigurationRepository configRepository, DisabledComponentsHolder disabledComponentsHolder) { | |||
this.projectCleaner = projectCleaner; | |||
this.dbClient = dbClient; | |||
this.dbIdsRepository = dbIdsRepository; | |||
this.treeRootHolder = treeRootHolder; | |||
this.settingsRepository = settingsRepository; | |||
this.configRepository = configRepository; | |||
this.disabledComponentsHolder = disabledComponentsHolder; | |||
} | |||
@@ -75,7 +75,7 @@ public class PurgeDatastoresStep implements ComputationStep { | |||
private void execute(Component root) { | |||
try (DbSession dbSession = dbClient.openSession(true)) { | |||
IdUuidPair idUuidPair = new IdUuidPair(dbIdsRepository.getComponentId(root), root.getUuid()); | |||
projectCleaner.purge(dbSession, idUuidPair, settingsRepository.getSettings(root), disabledComponentsHolder.getUuids()); | |||
projectCleaner.purge(dbSession, idUuidPair, configRepository.getConfiguration(root), disabledComponentsHolder.getUuids()); | |||
dbSession.commit(); | |||
} | |||
} |
@@ -24,12 +24,12 @@ import java.util.Arrays; | |||
import java.util.List; | |||
import java.util.Optional; | |||
import org.sonar.api.ce.posttask.PostProjectAnalysisTask; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.utils.log.Logger; | |||
import org.sonar.api.utils.log.Loggers; | |||
import org.sonar.core.config.WebhookProperties; | |||
import org.sonar.core.util.stream.MoreCollectors; | |||
import org.sonar.server.computation.task.projectanalysis.component.SettingsRepository; | |||
import org.sonar.server.computation.task.projectanalysis.component.ConfigurationRepository; | |||
import org.sonar.server.computation.task.projectanalysis.component.TreeRootHolder; | |||
import static java.lang.String.format; | |||
@@ -40,15 +40,15 @@ public class WebhookPostTask implements PostProjectAnalysisTask { | |||
private static final Logger LOGGER = Loggers.get(WebhookPostTask.class); | |||
private final TreeRootHolder rootHolder; | |||
private final SettingsRepository settingsRepository; | |||
private final ConfigurationRepository configRepository; | |||
private final WebhookPayloadFactory payloadFactory; | |||
private final WebhookCaller caller; | |||
private final WebhookDeliveryStorage deliveryStorage; | |||
public WebhookPostTask(TreeRootHolder rootHolder, SettingsRepository settingsRepository, WebhookPayloadFactory payloadFactory, | |||
public WebhookPostTask(TreeRootHolder rootHolder, ConfigurationRepository settingsRepository, WebhookPayloadFactory payloadFactory, | |||
WebhookCaller caller, WebhookDeliveryStorage deliveryStorage) { | |||
this.rootHolder = rootHolder; | |||
this.settingsRepository = settingsRepository; | |||
this.configRepository = settingsRepository; | |||
this.payloadFactory = payloadFactory; | |||
this.caller = caller; | |||
this.deliveryStorage = deliveryStorage; | |||
@@ -56,30 +56,30 @@ public class WebhookPostTask implements PostProjectAnalysisTask { | |||
@Override | |||
public void finished(ProjectAnalysis analysis) { | |||
Settings settings = settingsRepository.getSettings(rootHolder.getRoot()); | |||
Configuration config = configRepository.getConfiguration(rootHolder.getRoot()); | |||
Iterable<String> webhookProps = Iterables.concat( | |||
getWebhookProperties(settings, WebhookProperties.GLOBAL_KEY), | |||
getWebhookProperties(settings, WebhookProperties.PROJECT_KEY)); | |||
getWebhookProperties(config, WebhookProperties.GLOBAL_KEY), | |||
getWebhookProperties(config, WebhookProperties.PROJECT_KEY)); | |||
if (!Iterables.isEmpty(webhookProps)) { | |||
process(settings, analysis, webhookProps); | |||
process(config, analysis, webhookProps); | |||
deliveryStorage.purge(analysis.getProject().getUuid()); | |||
} | |||
} | |||
private static List<String> getWebhookProperties(Settings settings, String propertyKey) { | |||
String[] webhookIds = settings.getStringArray(propertyKey); | |||
private static List<String> getWebhookProperties(Configuration config, String propertyKey) { | |||
String[] webhookIds = config.getStringArray(propertyKey); | |||
return Arrays.stream(webhookIds) | |||
.map(webhookId -> format("%s.%s", propertyKey, webhookId)) | |||
.limit(MAX_WEBHOOKS_PER_TYPE) | |||
.collect(MoreCollectors.toList(webhookIds.length)); | |||
} | |||
private void process(Settings settings, ProjectAnalysis analysis, Iterable<String> webhookProperties) { | |||
private void process(Configuration config, ProjectAnalysis analysis, Iterable<String> webhookProperties) { | |||
WebhookPayload payload = payloadFactory.create(analysis); | |||
for (String webhookProp : webhookProperties) { | |||
String name = settings.getString(format("%s.%s", webhookProp, WebhookProperties.NAME_FIELD)); | |||
String url = settings.getString(format("%s.%s", webhookProp, WebhookProperties.URL_FIELD)); | |||
String name = config.get(format("%s.%s", webhookProp, WebhookProperties.NAME_FIELD)).orElse(null); | |||
String url = config.get(format("%s.%s", webhookProp, WebhookProperties.URL_FIELD)).orElse(null); | |||
// as webhooks are defined as property sets, we can't ensure validity of fields on creation. | |||
if (name != null && url != null) { | |||
Webhook webhook = new Webhook(analysis.getProject().getUuid(), analysis.getCeTask().getId(), name, url); |
@@ -29,7 +29,7 @@ import org.elasticsearch.common.transport.InetSocketTransportAddress; | |||
import org.elasticsearch.common.transport.TransportAddress; | |||
import org.picocontainer.injectors.ProviderAdapter; | |||
import org.sonar.api.ce.ComputeEngineSide; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.server.ServerSide; | |||
import org.sonar.api.utils.log.Logger; | |||
import org.sonar.api.utils.log.Loggers; | |||
@@ -43,25 +43,25 @@ public class EsClientProvider extends ProviderAdapter { | |||
private EsClient cache; | |||
public EsClient provide(Settings settings) { | |||
public EsClient provide(Configuration config) { | |||
if (cache == null) { | |||
TransportClient nativeClient; | |||
org.elasticsearch.common.settings.Settings.Builder esSettings = org.elasticsearch.common.settings.Settings.builder(); | |||
// mandatory property defined by bootstrap process | |||
esSettings.put("cluster.name", settings.getString(ProcessProperties.CLUSTER_NAME)); | |||
esSettings.put("cluster.name", config.get(ProcessProperties.CLUSTER_NAME).get()); | |||
boolean clusterEnabled = settings.getBoolean(ProcessProperties.CLUSTER_ENABLED); | |||
if (clusterEnabled && settings.getBoolean(ProcessProperties.CLUSTER_SEARCH_DISABLED)) { | |||
boolean clusterEnabled = config.getBoolean(ProcessProperties.CLUSTER_ENABLED).orElse(false); | |||
if (clusterEnabled && config.getBoolean(ProcessProperties.CLUSTER_SEARCH_DISABLED).orElse(false)) { | |||
esSettings.put("client.transport.sniff", true); | |||
nativeClient = TransportClient.builder().settings(esSettings).build(); | |||
Arrays.stream(settings.getStringArray(ProcessProperties.CLUSTER_SEARCH_HOSTS)) | |||
Arrays.stream(config.getStringArray(ProcessProperties.CLUSTER_SEARCH_HOSTS)) | |||
.map(HostAndPort::fromString) | |||
.forEach(h -> addHostToClient(h, nativeClient)); | |||
LOGGER.info("Connected to remote Elasticsearch: [{}]", displayedAddresses(nativeClient)); | |||
} else { | |||
nativeClient = TransportClient.builder().settings(esSettings).build(); | |||
HostAndPort host = HostAndPort.fromParts(settings.getString(ProcessProperties.SEARCH_HOST), settings.getInt(ProcessProperties.SEARCH_PORT)); | |||
HostAndPort host = HostAndPort.fromParts(config.get(ProcessProperties.SEARCH_HOST).get(), config.getInt(ProcessProperties.SEARCH_PORT).get()); | |||
addHostToClient(host, nativeClient); | |||
LOGGER.info("Connected to local Elasticsearch: [{}]", displayedAddresses(nativeClient)); | |||
} |
@@ -24,6 +24,7 @@ import com.google.common.collect.Maps; | |||
import java.util.Map; | |||
import org.elasticsearch.common.settings.Settings; | |||
import org.picocontainer.Startable; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.server.ServerSide; | |||
/** | |||
@@ -87,11 +88,11 @@ public class IndexDefinitions implements Startable { | |||
private final Map<String, Index> byKey = Maps.newHashMap(); | |||
private final IndexDefinition[] defs; | |||
private final org.sonar.api.config.Settings settings; | |||
private final Configuration config; | |||
public IndexDefinitions(IndexDefinition[] defs, org.sonar.api.config.Settings settings) { | |||
public IndexDefinitions(IndexDefinition[] defs, Configuration config) { | |||
this.defs = defs; | |||
this.settings = settings; | |||
this.config = config; | |||
} | |||
public Map<String, Index> getIndices() { | |||
@@ -103,7 +104,7 @@ public class IndexDefinitions implements Startable { | |||
// collect definitions | |||
IndexDefinition.IndexDefinitionContext context = new IndexDefinition.IndexDefinitionContext(); | |||
if (!settings.getBoolean("sonar.internal.es.disableIndexes")) { | |||
if (!config.getBoolean("sonar.internal.es.disableIndexes").orElse(false)) { | |||
for (IndexDefinition definition : defs) { | |||
definition.define(context); | |||
} |
@@ -27,7 +27,7 @@ import org.elasticsearch.action.admin.indices.open.OpenIndexAction; | |||
import org.elasticsearch.client.Client; | |||
import org.elasticsearch.common.settings.Settings.Builder; | |||
import org.elasticsearch.common.unit.TimeValue; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.utils.log.Logger; | |||
import org.sonar.api.utils.log.Loggers; | |||
import org.sonar.api.utils.log.Profiler; | |||
@@ -41,12 +41,12 @@ public class IndexerStartupTask { | |||
private static final String SETTING_PREFIX_INITIAL_INDEXING_FINISHED = "sonarqube_initial_indexing_finished."; | |||
private final EsClient esClient; | |||
private final Settings settings; | |||
private final Configuration config; | |||
private final StartupIndexer[] indexers; | |||
public IndexerStartupTask(EsClient esClient, Settings settings, StartupIndexer... indexers) { | |||
public IndexerStartupTask(EsClient esClient, Configuration config, StartupIndexer... indexers) { | |||
this.esClient = esClient; | |||
this.settings = settings; | |||
this.config = config; | |||
this.indexers = indexers; | |||
} | |||
@@ -58,7 +58,7 @@ public class IndexerStartupTask { | |||
} | |||
private boolean indexesAreEnabled() { | |||
return !settings.getBoolean("sonar.internal.es.disableIndexes"); | |||
return !config.getBoolean("sonar.internal.es.disableIndexes").orElse(false); | |||
} | |||
private void indexEmptyTypes(StartupIndexer indexer) { |
@@ -32,6 +32,7 @@ import javax.annotation.CheckForNull; | |||
import org.apache.commons.lang.StringUtils; | |||
import org.elasticsearch.cluster.metadata.IndexMetaData; | |||
import org.elasticsearch.common.settings.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.process.ProcessProperties; | |||
import org.sonar.server.permission.index.AuthorizationTypeSupport; | |||
@@ -77,17 +78,12 @@ public class NewIndex { | |||
return types; | |||
} | |||
public void configureShards(org.sonar.api.config.Settings settings, int defaultNbOfShards) { | |||
boolean clusterMode = settings.getBoolean(ProcessProperties.CLUSTER_ENABLED); | |||
int shards = settings.getInt(format("sonar.search.%s.shards", indexName)); | |||
if (shards == 0) { | |||
shards = defaultNbOfShards; | |||
} | |||
public void configureShards(Configuration config, int defaultNbOfShards) { | |||
boolean clusterMode = config.getBoolean(ProcessProperties.CLUSTER_ENABLED).orElse(false); | |||
int shards = config.getInt(format("sonar.search.%s.shards", indexName)).orElse(defaultNbOfShards); | |||
int replicas = config.getInt(ProcessProperties.SEARCH_REPLICAS).orElse(clusterMode ? 1 : 0); | |||
int replicas = settings.getInt(ProcessProperties.SEARCH_REPLICAS); | |||
if (replicas == 0 && settings.getString(ProcessProperties.SEARCH_REPLICAS) == null) { | |||
replicas = clusterMode ? 1 : 0; | |||
} | |||
getSettings().put(IndexMetaData.SETTING_NUMBER_OF_SHARDS, shards); | |||
getSettings().put(IndexMetaData.SETTING_NUMBER_OF_REPLICAS, replicas); | |||
} |
@@ -19,7 +19,7 @@ | |||
*/ | |||
package org.sonar.server.issue.index; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.server.es.IndexDefinition; | |||
import org.sonar.server.es.IndexType; | |||
import org.sonar.server.es.NewIndex; | |||
@@ -74,10 +74,10 @@ public class IssueIndexDefinition implements IndexDefinition { | |||
*/ | |||
public static final String FIELD_ISSUE_TECHNICAL_UPDATED_AT = "updatedAt"; | |||
private final Settings settings; | |||
private final Configuration config; | |||
public IssueIndexDefinition(Settings settings) { | |||
this.settings = settings; | |||
public IssueIndexDefinition(Configuration config) { | |||
this.config = config; | |||
} | |||
@Override | |||
@@ -85,7 +85,7 @@ public class IssueIndexDefinition implements IndexDefinition { | |||
NewIndex index = context.create(INDEX_TYPE_ISSUE.getIndex()); | |||
index.refreshHandledByIndexer(); | |||
index.configureShards(settings, 5); | |||
index.configureShards(config, 5); | |||
NewIndex.NewIndexType type = index.createType(INDEX_TYPE_ISSUE.getType()); | |||
type.requireProjectAuthorization(); |
@@ -19,7 +19,7 @@ | |||
*/ | |||
package org.sonar.server.measure.index; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.server.es.IndexDefinition; | |||
import org.sonar.server.es.IndexType; | |||
import org.sonar.server.es.NewIndex; | |||
@@ -41,17 +41,17 @@ public class ProjectMeasuresIndexDefinition implements IndexDefinition { | |||
public static final String FIELD_MEASURES_VALUE = "value"; | |||
public static final String FIELD_LANGUAGES = "languages"; | |||
private final Settings settings; | |||
private final Configuration config; | |||
public ProjectMeasuresIndexDefinition(Settings settings) { | |||
this.settings = settings; | |||
public ProjectMeasuresIndexDefinition(Configuration settings) { | |||
this.config = settings; | |||
} | |||
@Override | |||
public void define(IndexDefinitionContext context) { | |||
NewIndex index = context.create(INDEX_TYPE_PROJECT_MEASURES.getIndex()); | |||
index.refreshHandledByIndexer(); | |||
index.configureShards(settings, 5); | |||
index.configureShards(config, 5); | |||
NewIndex.NewIndexType mapping = index.createType(INDEX_TYPE_PROJECT_MEASURES.getType()) | |||
.requireProjectAuthorization(); |
@@ -27,7 +27,7 @@ import java.util.concurrent.TimeUnit; | |||
import org.picocontainer.Startable; | |||
import org.sonar.api.Properties; | |||
import org.sonar.api.Property; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.notifications.Notification; | |||
import org.sonar.api.server.ServerSide; | |||
import org.sonar.api.utils.log.Logger; | |||
@@ -62,9 +62,9 @@ public class NotificationDaemon implements Startable { | |||
private ScheduledExecutorService executorService; | |||
private boolean stopping = false; | |||
public NotificationDaemon(Settings settings, DefaultNotificationManager manager, NotificationService service) { | |||
this.delayInSeconds = settings.getLong(PROPERTY_DELAY); | |||
this.delayBeforeReportingStatusInSeconds = settings.getLong(PROPERTY_DELAY_BEFORE_REPORTING_STATUS); | |||
public NotificationDaemon(Configuration config, DefaultNotificationManager manager, NotificationService service) { | |||
this.delayInSeconds = config.getLong(PROPERTY_DELAY).get(); | |||
this.delayBeforeReportingStatusInSeconds = config.getLong(PROPERTY_DELAY_BEFORE_REPORTING_STATUS).get(); | |||
this.manager = manager; | |||
this.service = service; | |||
} |
@@ -26,7 +26,7 @@ import java.util.Map; | |||
import java.util.Optional; | |||
import java.util.function.Consumer; | |||
import javax.annotation.Nullable; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.utils.System2; | |||
import org.sonar.core.config.CorePropertyDefinitions; | |||
import org.sonar.core.util.UuidFactory; | |||
@@ -68,20 +68,20 @@ public class OrganizationCreationImpl implements OrganizationCreation { | |||
private final System2 system2; | |||
private final UuidFactory uuidFactory; | |||
private final OrganizationValidation organizationValidation; | |||
private final Settings settings; | |||
private final Configuration config; | |||
private final BuiltInQProfileRepository builtInQProfileRepository; | |||
private final DefaultGroupCreator defaultGroupCreator; | |||
private final UserIndexer userIndexer; | |||
public OrganizationCreationImpl(DbClient dbClient, System2 system2, UuidFactory uuidFactory, | |||
OrganizationValidation organizationValidation, Settings settings, UserIndexer userIndexer, | |||
OrganizationValidation organizationValidation, Configuration config, UserIndexer userIndexer, | |||
BuiltInQProfileRepository builtInQProfileRepository, | |||
DefaultGroupCreator defaultGroupCreator) { | |||
this.dbClient = dbClient; | |||
this.system2 = system2; | |||
this.uuidFactory = uuidFactory; | |||
this.organizationValidation = organizationValidation; | |||
this.settings = settings; | |||
this.config = config; | |||
this.userIndexer = userIndexer; | |||
this.builtInQProfileRepository = builtInQProfileRepository; | |||
this.defaultGroupCreator = defaultGroupCreator; | |||
@@ -170,7 +170,7 @@ public class OrganizationCreationImpl implements OrganizationCreation { | |||
} | |||
private boolean isCreatePersonalOrgEnabled() { | |||
return settings.getBoolean(CorePropertyDefinitions.ORGANIZATIONS_CREATE_PERSONAL_ORG); | |||
return config.getBoolean(CorePropertyDefinitions.ORGANIZATIONS_CREATE_PERSONAL_ORG).orElse(false); | |||
} | |||
private void validate(NewOrganization newOrganization) { |
@@ -21,7 +21,7 @@ package org.sonar.server.organization.ws; | |||
import javax.annotation.CheckForNull; | |||
import javax.annotation.Nullable; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.server.ws.Request; | |||
import org.sonar.api.server.ws.Response; | |||
import org.sonar.api.server.ws.WebService; | |||
@@ -44,7 +44,7 @@ import static org.sonar.server.ws.WsUtils.writeProtobuf; | |||
public class CreateAction implements OrganizationsWsAction { | |||
private static final String ACTION = "create"; | |||
private final Settings settings; | |||
private final Configuration config; | |||
private final UserSession userSession; | |||
private final DbClient dbClient; | |||
private final OrganizationsWsSupport wsSupport; | |||
@@ -52,9 +52,9 @@ public class CreateAction implements OrganizationsWsAction { | |||
private final OrganizationCreation organizationCreation; | |||
private final OrganizationFlags organizationFlags; | |||
public CreateAction(Settings settings, UserSession userSession, DbClient dbClient, OrganizationsWsSupport wsSupport, | |||
public CreateAction(Configuration config, UserSession userSession, DbClient dbClient, OrganizationsWsSupport wsSupport, | |||
OrganizationValidation organizationValidation, OrganizationCreation organizationCreation, OrganizationFlags organizationFlags) { | |||
this.settings = settings; | |||
this.config = config; | |||
this.userSession = userSession; | |||
this.dbClient = dbClient; | |||
this.wsSupport = wsSupport; | |||
@@ -87,7 +87,7 @@ public class CreateAction implements OrganizationsWsAction { | |||
@Override | |||
public void handle(Request request, Response response) throws Exception { | |||
if (settings.getBoolean(CorePropertyDefinitions.ORGANIZATIONS_ANYONE_CAN_CREATE)) { | |||
if (config.getBoolean(CorePropertyDefinitions.ORGANIZATIONS_ANYONE_CAN_CREATE).orElse(false)) { | |||
userSession.checkLoggedIn(); | |||
} else { | |||
userSession.checkIsSystemAdministrator(); |
@@ -21,14 +21,12 @@ package org.sonar.server.platform; | |||
import java.io.File; | |||
import org.picocontainer.Startable; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.utils.log.Logger; | |||
import org.sonar.api.utils.log.Loggers; | |||
import org.sonar.process.ProcessProperties; | |||
import org.sonar.server.app.TomcatContexts; | |||
import static java.util.Objects.requireNonNull; | |||
public class ServerFileSystemImpl implements ServerFileSystem, org.sonar.api.platform.ServerFileSystem, Startable { | |||
private static final Logger LOGGER = Loggers.get(ServerFileSystemImpl.class); | |||
@@ -38,10 +36,10 @@ public class ServerFileSystemImpl implements ServerFileSystem, org.sonar.api.pla | |||
private final File dataDir; | |||
private final File deployDir; | |||
public ServerFileSystemImpl(Settings settings) { | |||
this.homeDir = new File(requireNonNull(settings.getString(ProcessProperties.PATH_HOME))); | |||
this.tempDir = new File(requireNonNull(settings.getString(ProcessProperties.PATH_TEMP))); | |||
this.dataDir = new File(requireNonNull(settings.getString(ProcessProperties.PATH_DATA))); | |||
public ServerFileSystemImpl(Configuration config) { | |||
this.homeDir = new File(config.get(ProcessProperties.PATH_HOME).get()); | |||
this.tempDir = new File(config.get(ProcessProperties.PATH_TEMP).get()); | |||
this.dataDir = new File(config.get(ProcessProperties.PATH_DATA).get()); | |||
this.deployDir = new File(this.dataDir, TomcatContexts.WEB_DEPLOY_PATH_RELATIVE_TO_DATA_DIR); | |||
} | |||
@@ -19,38 +19,33 @@ | |||
*/ | |||
package org.sonar.server.platform; | |||
import com.google.common.base.Optional; | |||
import java.util.Optional; | |||
import org.sonar.api.CoreProperties; | |||
import org.sonar.api.config.Settings; | |||
import static com.google.common.base.Optional.fromNullable; | |||
import org.sonar.api.config.Configuration; | |||
public class ServerIdLoader { | |||
private final Settings settings; | |||
private final Configuration config; | |||
private final ServerIdGenerator idGenerator; | |||
public ServerIdLoader(Settings settings, ServerIdGenerator idGenerator) { | |||
this.settings = settings; | |||
public ServerIdLoader(Configuration config, ServerIdGenerator idGenerator) { | |||
this.config = config; | |||
this.idGenerator = idGenerator; | |||
} | |||
public Optional<String> getRaw() { | |||
return fromNullable(settings.getString(CoreProperties.PERMANENT_SERVER_ID)); | |||
return config.get(CoreProperties.PERMANENT_SERVER_ID); | |||
} | |||
public Optional<ServerId> get() { | |||
Optional<String> rawId = getRaw(); | |||
if (!rawId.isPresent()) { | |||
return Optional.absent(); | |||
} | |||
String organization = settings.getString(CoreProperties.ORGANISATION); | |||
String ipAddress = settings.getString(CoreProperties.SERVER_ID_IP_ADDRESS); | |||
boolean validated = organization != null | |||
&& ipAddress != null | |||
&& idGenerator.validate(organization, ipAddress, rawId.get()); | |||
return Optional.of(new ServerId(rawId.get(), validated)); | |||
return getRaw().map(rawId -> { | |||
Optional<String> organization = config.get(CoreProperties.ORGANISATION); | |||
Optional<String> ipAddress = config.get(CoreProperties.SERVER_ID_IP_ADDRESS); | |||
boolean validated = organization.isPresent() | |||
&& ipAddress.isPresent() | |||
&& idGenerator.validate(organization.get(), ipAddress.get(), rawId); | |||
return new ServerId(rawId, validated); | |||
}); | |||
} | |||
} |
@@ -24,7 +24,7 @@ import java.util.Date; | |||
import org.sonar.api.CoreProperties; | |||
import org.sonar.api.SonarRuntime; | |||
import org.sonar.api.ce.ComputeEngineSide; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.platform.Server; | |||
import org.sonar.api.server.ServerSide; | |||
@@ -32,14 +32,14 @@ import org.sonar.api.server.ServerSide; | |||
@ServerSide | |||
public class ServerImpl extends Server { | |||
private final Settings settings; | |||
private final Configuration config; | |||
private final StartupMetadata state; | |||
private final ServerFileSystem fs; | |||
private final UrlSettings urlSettings; | |||
private final SonarRuntime runtime; | |||
public ServerImpl(Settings settings, StartupMetadata state, ServerFileSystem fs, UrlSettings urlSettings, SonarRuntime runtime) { | |||
this.settings = settings; | |||
public ServerImpl(Configuration config, StartupMetadata state, ServerFileSystem fs, UrlSettings urlSettings, SonarRuntime runtime) { | |||
this.config = config; | |||
this.state = state; | |||
this.fs = fs; | |||
this.urlSettings = urlSettings; | |||
@@ -48,12 +48,12 @@ public class ServerImpl extends Server { | |||
@Override | |||
public String getId() { | |||
return settings.getString(CoreProperties.SERVER_ID); | |||
return config.get(CoreProperties.SERVER_ID).get(); | |||
} | |||
@Override | |||
public String getPermanentServerId() { | |||
return settings.getString(CoreProperties.PERMANENT_SERVER_ID); | |||
return config.get(CoreProperties.PERMANENT_SERVER_ID).orElse(null); | |||
} | |||
@Override |
@@ -25,12 +25,12 @@ import com.google.common.annotations.VisibleForTesting; | |||
import java.io.File; | |||
import org.slf4j.LoggerFactory; | |||
import org.sonar.api.ce.ComputeEngineSide; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.server.ServerSide; | |||
import org.sonar.api.utils.log.LoggerLevel; | |||
import org.sonar.api.utils.log.Loggers; | |||
import org.sonar.process.logging.LogbackHelper; | |||
import org.sonar.process.ProcessProperties; | |||
import org.sonar.process.logging.LogbackHelper; | |||
import org.sonar.server.app.ServerProcessLogging; | |||
@ServerSide | |||
@@ -38,16 +38,16 @@ import org.sonar.server.app.ServerProcessLogging; | |||
public class ServerLogging { | |||
private final LogbackHelper helper; | |||
private final Settings settings; | |||
private final Configuration config; | |||
public ServerLogging(Settings settings) { | |||
this(new LogbackHelper(), settings); | |||
public ServerLogging(Configuration config) { | |||
this(new LogbackHelper(), config); | |||
} | |||
@VisibleForTesting | |||
ServerLogging(LogbackHelper helper, Settings settings) { | |||
ServerLogging(LogbackHelper helper, Configuration config) { | |||
this.helper = helper; | |||
this.settings = settings; | |||
this.config = config; | |||
} | |||
public void changeLevel(ServerProcessLogging serverProcessLogging, LoggerLevel level) { | |||
@@ -64,7 +64,7 @@ public class ServerLogging { | |||
* The directory that contains log files. May not exist. | |||
*/ | |||
public File getLogsDir() { | |||
return new File(settings.getString(ProcessProperties.PATH_LOGS)); | |||
return new File(config.get(ProcessProperties.PATH_LOGS).get()); | |||
} | |||
} |
@@ -20,10 +20,9 @@ | |||
package org.sonar.server.platform; | |||
import org.sonar.api.ce.ComputeEngineSide; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.server.ServerSide; | |||
import static org.apache.commons.lang.StringUtils.defaultIfBlank; | |||
import static org.apache.commons.lang.StringUtils.isEmpty; | |||
import static org.apache.commons.lang.StringUtils.isNotEmpty; | |||
import static org.sonar.api.CoreProperties.SERVER_BASE_URL; | |||
@@ -37,19 +36,19 @@ public class UrlSettings { | |||
private static final int DEFAULT_HTTP_PORT = 80; | |||
private static final String ALL_IPS_HOST = "0.0.0.0"; | |||
private final Settings settings; | |||
private final Configuration config; | |||
// cached, so can't change at runtime | |||
private final String contextPath; | |||
public UrlSettings(Settings settings) { | |||
this.settings = settings; | |||
this.contextPath = defaultIfBlank(settings.getString(PROPERTY_CONTEXT), "") | |||
public UrlSettings(Configuration config) { | |||
this.config = config; | |||
this.contextPath = config.get(PROPERTY_CONTEXT).orElse("") | |||
// Remove trailing slashes | |||
.replaceFirst("(\\/+)$", ""); | |||
} | |||
public String getBaseUrl() { | |||
String url = settings.getString(SERVER_BASE_URL); | |||
String url = config.get(SERVER_BASE_URL).orElse(""); | |||
if (isEmpty(url)) { | |||
url = computeBaseUrl(); | |||
} | |||
@@ -61,7 +60,7 @@ public class UrlSettings { | |||
} | |||
public boolean isDev() { | |||
return settings.getBoolean("sonar.web.dev"); | |||
return config.getBoolean("sonar.web.dev").orElse(false); | |||
} | |||
public boolean isSecured() { | |||
@@ -69,9 +68,9 @@ public class UrlSettings { | |||
} | |||
private String computeBaseUrl() { | |||
String host = settings.getString("sonar.web.host"); | |||
int port = settings.getInt("sonar.web.port"); | |||
String context = settings.getString("sonar.web.context"); | |||
String host = config.get("sonar.web.host").orElse(""); | |||
int port = config.getInt("sonar.web.port").orElse(0); | |||
String context = config.get("sonar.web.context").orElse(""); | |||
StringBuilder res = new StringBuilder(); | |||
res.append("http://"); |
@@ -19,7 +19,7 @@ | |||
*/ | |||
package org.sonar.server.platform.cluster; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.utils.log.Loggers; | |||
import org.sonar.process.ProcessProperties; | |||
@@ -30,10 +30,10 @@ public class ClusterImpl implements Cluster { | |||
private final boolean enabled; | |||
private final boolean startupLeader; | |||
public ClusterImpl(Settings settings) { | |||
this.enabled = settings.getBoolean(ProcessProperties.CLUSTER_ENABLED); | |||
public ClusterImpl(Configuration config) { | |||
this.enabled = config.getBoolean(ProcessProperties.CLUSTER_ENABLED).orElse(false); | |||
if (this.enabled) { | |||
this.startupLeader = settings.getBoolean(CLUSTER_WEB_LEADER); | |||
this.startupLeader = config.getBoolean(CLUSTER_WEB_LEADER).orElse(false); | |||
Loggers.get(ClusterImpl.class).info("Cluster enabled (startup {})", startupLeader ? "leader" : "follower"); | |||
} else { | |||
this.startupLeader = true; |
@@ -27,7 +27,7 @@ import org.apache.commons.lang.StringUtils; | |||
import org.h2.Driver; | |||
import org.h2.tools.Server; | |||
import org.picocontainer.Startable; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.utils.System2; | |||
import org.sonar.api.utils.log.Logger; | |||
import org.sonar.api.utils.log.Loggers; | |||
@@ -46,12 +46,12 @@ import static org.sonar.process.ProcessProperties.PATH_DATA; | |||
public class EmbeddedDatabase implements Startable { | |||
private static final Logger LOG = Loggers.get(EmbeddedDatabase.class); | |||
private final Settings settings; | |||
private final Configuration config; | |||
private final System2 system2; | |||
private Server server; | |||
public EmbeddedDatabase(Settings settings, System2 system2) { | |||
this.settings = settings; | |||
public EmbeddedDatabase(Configuration config, System2 system2) { | |||
this.config = config; | |||
this.system2 = system2; | |||
} | |||
@@ -101,13 +101,13 @@ public class EmbeddedDatabase implements Startable { | |||
} | |||
private String getRequiredSetting(String property) { | |||
String value = settings.getString(property); | |||
String value = config.get(property).orElse(""); | |||
checkArgument(isNotEmpty(value), "Missing property %s", property); | |||
return value; | |||
} | |||
private String getSetting(String name, String defaultValue) { | |||
return StringUtils.defaultIfBlank(settings.getString(name), defaultValue); | |||
return StringUtils.defaultIfBlank(config.get(name).orElse(""), defaultValue); | |||
} | |||
private static void createDatabase(File dbHome, String user, String password) throws SQLException { |
@@ -21,7 +21,7 @@ package org.sonar.server.platform.db; | |||
import com.google.common.annotations.VisibleForTesting; | |||
import org.picocontainer.Startable; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.database.DatabaseProperties; | |||
import org.sonar.api.utils.System2; | |||
@@ -31,19 +31,19 @@ public class EmbeddedDatabaseFactory implements Startable { | |||
private static final String URL_PREFIX = "jdbc:h2:tcp:"; | |||
private final Settings settings; | |||
private final Configuration config; | |||
private final System2 system2; | |||
private EmbeddedDatabase embeddedDatabase; | |||
public EmbeddedDatabaseFactory(Settings settings, System2 system2) { | |||
this.settings = settings; | |||
public EmbeddedDatabaseFactory(Configuration config, System2 system2) { | |||
this.config = config; | |||
this.system2 = system2; | |||
} | |||
@Override | |||
public void start() { | |||
if (embeddedDatabase == null) { | |||
String jdbcUrl = settings.getString(DatabaseProperties.PROP_URL); | |||
String jdbcUrl = config.get(DatabaseProperties.PROP_URL).get(); | |||
if (startsWith(jdbcUrl, URL_PREFIX)) { | |||
embeddedDatabase = createEmbeddedDatabase(); | |||
embeddedDatabase.start(); | |||
@@ -61,6 +61,6 @@ public class EmbeddedDatabaseFactory implements Startable { | |||
@VisibleForTesting | |||
EmbeddedDatabase createEmbeddedDatabase() { | |||
return new EmbeddedDatabase(settings, system2); | |||
return new EmbeddedDatabase(config, system2); | |||
} | |||
} |
@@ -20,7 +20,6 @@ | |||
package org.sonar.server.platform.monitoring; | |||
import com.google.common.base.Joiner; | |||
import com.google.common.base.Optional; | |||
import java.io.File; | |||
import java.util.LinkedHashMap; | |||
import java.util.List; | |||
@@ -28,14 +27,13 @@ import java.util.Map; | |||
import javax.annotation.CheckForNull; | |||
import javax.annotation.Nullable; | |||
import org.sonar.api.CoreProperties; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.platform.Server; | |||
import org.sonar.api.security.SecurityRealm; | |||
import org.sonar.api.server.authentication.IdentityProvider; | |||
import org.sonar.core.util.stream.MoreCollectors; | |||
import org.sonar.process.ProcessProperties; | |||
import org.sonar.server.authentication.IdentityProviderRepository; | |||
import org.sonar.server.platform.ServerId; | |||
import org.sonar.server.platform.ServerIdLoader; | |||
import org.sonar.server.platform.ServerLogging; | |||
import org.sonar.server.user.SecurityRealmFactory; | |||
@@ -46,17 +44,17 @@ public class SonarQubeMonitor extends BaseMonitorMBean implements SonarQubeMonit | |||
static final String BRANDING_FILE_PATH = "web/WEB-INF/classes/com/sonarsource/branding"; | |||
private final Settings settings; | |||
private final Configuration config; | |||
private final SecurityRealmFactory securityRealmFactory; | |||
private final IdentityProviderRepository identityProviderRepository; | |||
private final Server server; | |||
private final ServerLogging serverLogging; | |||
private final ServerIdLoader serverIdLoader; | |||
public SonarQubeMonitor(Settings settings, SecurityRealmFactory securityRealmFactory, | |||
public SonarQubeMonitor(Configuration config, SecurityRealmFactory securityRealmFactory, | |||
IdentityProviderRepository identityProviderRepository, Server server, ServerLogging serverLogging, | |||
ServerIdLoader serverIdLoader) { | |||
this.settings = settings; | |||
this.config = config; | |||
this.securityRealmFactory = securityRealmFactory; | |||
this.identityProviderRepository = identityProviderRepository; | |||
this.server = server; | |||
@@ -66,7 +64,7 @@ public class SonarQubeMonitor extends BaseMonitorMBean implements SonarQubeMonit | |||
@Override | |||
public String getServerId() { | |||
return serverIdLoader.getRaw().orNull(); | |||
return serverIdLoader.getRaw().orElse(null); | |||
} | |||
@Override | |||
@@ -103,7 +101,7 @@ public class SonarQubeMonitor extends BaseMonitorMBean implements SonarQubeMonit | |||
} | |||
private boolean getForceAuthentication() { | |||
return settings.getBoolean(CoreProperties.CORE_FORCE_AUTHENTICATION_PROPERTY); | |||
return config.getBoolean(CoreProperties.CORE_FORCE_AUTHENTICATION_PROPERTY).orElse(false); | |||
} | |||
private boolean isOfficialDistribution() { | |||
@@ -129,20 +127,19 @@ public class SonarQubeMonitor extends BaseMonitorMBean implements SonarQubeMonit | |||
addIfNotEmpty("External identity providers whose users are allowed to sign themselves up", getAllowsToSignUpEnabledIdentityProviders(), attributes); | |||
attributes.put("Force authentication", getForceAuthentication()); | |||
attributes.put("Official Distribution", isOfficialDistribution()); | |||
attributes.put("Home Dir", settings.getString(ProcessProperties.PATH_HOME)); | |||
attributes.put("Data Dir", settings.getString(ProcessProperties.PATH_DATA)); | |||
attributes.put("Temp Dir", settings.getString(ProcessProperties.PATH_TEMP)); | |||
attributes.put("Logs Dir", settings.getString(ProcessProperties.PATH_LOGS)); | |||
attributes.put("Home Dir", config.get(ProcessProperties.PATH_HOME).orElse(null)); | |||
attributes.put("Data Dir", config.get(ProcessProperties.PATH_DATA).orElse(null)); | |||
attributes.put("Temp Dir", config.get(ProcessProperties.PATH_TEMP).orElse(null)); | |||
attributes.put("Logs Dir", config.get(ProcessProperties.PATH_LOGS).orElse(null)); | |||
attributes.put("Logs Level", getLogLevel()); | |||
return attributes; | |||
} | |||
private void completeWithServerIdAttributes(Map<String, Object> attributes) { | |||
Optional<ServerId> serverId = serverIdLoader.get(); | |||
if (serverId.isPresent()) { | |||
attributes.put("Server ID", serverId.get().getId()); | |||
attributes.put("Server ID validated", serverId.get().isValid()); | |||
} | |||
serverIdLoader.get().ifPresent(serverId -> { | |||
attributes.put("Server ID", serverId.getId()); | |||
attributes.put("Server ID validated", serverId.isValid()); | |||
}); | |||
} | |||
private static void addIfNotNull(String key, @Nullable String value, Map<String, Object> attributes) { |
@@ -28,6 +28,7 @@ import org.sonar.api.internal.SonarRuntimeImpl; | |||
import org.sonar.api.utils.System2; | |||
import org.sonar.api.utils.Version; | |||
import org.sonar.api.utils.internal.TempFolderCleaner; | |||
import org.sonar.core.config.ConfigurationProvider; | |||
import org.sonar.core.config.CorePropertyDefinitions; | |||
import org.sonar.core.util.UuidFactoryImpl; | |||
import org.sonar.db.DaoModule; | |||
@@ -76,6 +77,7 @@ public class PlatformLevel1 extends PlatformLevel { | |||
new SonarQubeVersion(apiVersion), | |||
SonarRuntimeImpl.forSonarQube(apiVersion, SonarQubeSide.SERVER), | |||
ThreadLocalSettings.class, | |||
new ConfigurationProvider(), | |||
LogServerVersion.class, | |||
ProcessCommandWrapperImpl.class, | |||
RestartFlagHolderImpl.class, |
@@ -30,7 +30,7 @@ import org.sonar.api.rules.AnnotationRuleParser; | |||
import org.sonar.api.rules.XMLRuleParser; | |||
import org.sonar.api.server.rule.RulesDefinitionXmlLoader; | |||
import org.sonar.ce.CeModule; | |||
import org.sonar.ce.settings.ProjectSettingsFactory; | |||
import org.sonar.ce.settings.ProjectConfigurationFactory; | |||
import org.sonar.core.component.DefaultResourceTypes; | |||
import org.sonar.core.timemachine.Periods; | |||
import org.sonar.server.authentication.AuthenticationModule; | |||
@@ -508,7 +508,7 @@ public class PlatformLevel4 extends PlatformLevel { | |||
CeWsModule.class, | |||
InternalPropertiesImpl.class, | |||
ProjectSettingsFactory.class, | |||
ProjectConfigurationFactory.class, | |||
// UI | |||
NavigationWsModule.class, |
@@ -19,7 +19,7 @@ | |||
*/ | |||
package org.sonar.server.platform.ws; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.server.ws.Request; | |||
import org.sonar.api.server.ws.Response; | |||
import org.sonar.api.server.ws.WebService; | |||
@@ -38,14 +38,14 @@ public class RestartAction implements SystemWsAction { | |||
private static final Logger LOGGER = Loggers.get(RestartAction.class); | |||
private final UserSession userSession; | |||
private final Settings settings; | |||
private final Configuration config; | |||
private final Platform platform; | |||
private final ProcessCommandWrapper processCommandWrapper; | |||
private final RestartFlagHolder restartFlagHolder; | |||
public RestartAction(UserSession userSession, Settings settings, Platform platform, ProcessCommandWrapper processCommandWrapper, RestartFlagHolder restartFlagHolder) { | |||
public RestartAction(UserSession userSession, Configuration config, Platform platform, ProcessCommandWrapper processCommandWrapper, RestartFlagHolder restartFlagHolder) { | |||
this.userSession = userSession; | |||
this.settings = settings; | |||
this.config = config; | |||
this.platform = platform; | |||
this.processCommandWrapper = processCommandWrapper; | |||
this.restartFlagHolder = restartFlagHolder; | |||
@@ -62,7 +62,7 @@ public class RestartAction implements SystemWsAction { | |||
@Override | |||
public void handle(Request request, Response response) { | |||
if (settings.getBoolean("sonar.web.dev")) { | |||
if (config.getBoolean("sonar.web.dev").orElse(false)) { | |||
LOGGER.info("Fast restarting WebServer..."); | |||
restartFlagHolder.set(); | |||
try { |
@@ -29,7 +29,7 @@ import org.apache.commons.io.IOUtils; | |||
import org.sonar.api.Properties; | |||
import org.sonar.api.Property; | |||
import org.sonar.api.PropertyType; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.utils.UriReader; | |||
import org.sonar.api.utils.log.Loggers; | |||
import org.sonar.core.config.WebConstants; | |||
@@ -72,10 +72,10 @@ public class UpdateCenterClient { | |||
private UpdateCenter pluginCenter = null; | |||
private long lastRefreshDate = 0; | |||
public UpdateCenterClient(UriReader uriReader, Settings settings) throws URISyntaxException { | |||
public UpdateCenterClient(UriReader uriReader, Configuration config) throws URISyntaxException { | |||
this.uriReader = uriReader; | |||
this.uri = new URI(settings.getString(URL_PROPERTY)); | |||
this.isActivated = settings.getBoolean(WebConstants.SONAR_UPDATECENTER_ACTIVATE); | |||
this.uri = new URI(config.get(URL_PROPERTY).get()); | |||
this.isActivated = config.getBoolean(WebConstants.SONAR_UPDATECENTER_ACTIVATE).get(); | |||
Loggers.get(getClass()).info("Update center: " + uriReader.description(uri)); | |||
} | |||
@@ -23,7 +23,7 @@ import com.google.common.collect.ImmutableMap; | |||
import com.google.common.collect.ImmutableSet; | |||
import com.google.common.collect.ImmutableSortedMap; | |||
import java.util.Set; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.server.es.DefaultIndexSettings; | |||
import org.sonar.server.es.IndexDefinition; | |||
import org.sonar.server.es.IndexType; | |||
@@ -77,15 +77,15 @@ public class RuleIndexDefinition implements IndexDefinition { | |||
public static final String FIELD_ACTIVE_RULE_SEVERITY = "severity"; | |||
public static final String FIELD_ACTIVE_RULE_RULE_KEY = "ruleKey"; | |||
private final Settings settings; | |||
private final Configuration config; | |||
private final boolean enableSource; | |||
public RuleIndexDefinition(Settings settings) { | |||
this(settings, false); | |||
public RuleIndexDefinition(Configuration config) { | |||
this(config, false); | |||
} | |||
private RuleIndexDefinition(Settings settings, boolean enableSource) { | |||
this.settings = settings; | |||
private RuleIndexDefinition(Configuration config, boolean enableSource) { | |||
this.config = config; | |||
this.enableSource = enableSource; | |||
} | |||
@@ -93,8 +93,8 @@ public class RuleIndexDefinition implements IndexDefinition { | |||
* Keep the document sources in index so that indexer tests can verify content | |||
* of indexed documents. | |||
*/ | |||
public static RuleIndexDefinition createForTest(Settings settings) { | |||
return new RuleIndexDefinition(settings, true); | |||
public static RuleIndexDefinition createForTest(Configuration config) { | |||
return new RuleIndexDefinition(config, true); | |||
} | |||
@Override | |||
@@ -105,7 +105,7 @@ public class RuleIndexDefinition implements IndexDefinition { | |||
// Default nb of shards should be greater than 1 in order to | |||
// easily detect routing misconfiguration. | |||
// See https://jira.sonarsource.com/browse/SONAR-9489 | |||
index.configureShards(settings, 2); | |||
index.configureShards(config, 2); | |||
// Active rule type | |||
NewIndex.NewIndexType activeRuleMapping = index.createType(INDEX_TYPE_ACTIVE_RULE.getType()); |
@@ -20,7 +20,7 @@ | |||
package org.sonar.server.test.index; | |||
import com.google.common.collect.ImmutableMap; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.server.es.IndexDefinition; | |||
import org.sonar.server.es.IndexType; | |||
import org.sonar.server.es.NewIndex; | |||
@@ -41,10 +41,10 @@ public class TestIndexDefinition implements IndexDefinition { | |||
public static final String FIELD_COVERED_FILE_LINES = "coveredLines"; | |||
public static final String FIELD_UPDATED_AT = "updatedAt"; | |||
private final Settings settings; | |||
private final Configuration config; | |||
public TestIndexDefinition(Settings settings) { | |||
this.settings = settings; | |||
public TestIndexDefinition(Configuration config) { | |||
this.config = config; | |||
} | |||
@Override | |||
@@ -52,7 +52,7 @@ public class TestIndexDefinition implements IndexDefinition { | |||
NewIndex index = context.create(INDEX_TYPE_TEST.getIndex()); | |||
index.refreshHandledByIndexer(); | |||
index.configureShards(settings, 5); | |||
index.configureShards(config, 5); | |||
NewIndex.NewIndexType mapping = index.createType(INDEX_TYPE_TEST.getType()); | |||
mapping.setAttribute("_routing", ImmutableMap.of("required", true)); | |||
@@ -66,8 +66,7 @@ public class TestIndexDefinition implements IndexDefinition { | |||
mapping.stringFieldBuilder(FIELD_STACKTRACE).disableNorms().disableSearch().build(); | |||
mapping.setProperty(FIELD_COVERED_FILES, ImmutableMap.of("type", "nested", "properties", ImmutableMap.of( | |||
FIELD_COVERED_FILE_UUID, ImmutableMap.of("type", "string", "index", "not_analyzed"), | |||
FIELD_COVERED_FILE_LINES, ImmutableMap.of("type", "integer") | |||
))); | |||
FIELD_COVERED_FILE_LINES, ImmutableMap.of("type", "integer")))); | |||
mapping.createDateTimeField(FIELD_UPDATED_AT); | |||
} | |||
} |
@@ -21,7 +21,7 @@ package org.sonar.server.ui.ws; | |||
import com.google.common.collect.ImmutableSet; | |||
import java.util.Set; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.platform.Server; | |||
import org.sonar.api.resources.ResourceType; | |||
import org.sonar.api.resources.ResourceTypes; | |||
@@ -58,7 +58,7 @@ public class GlobalAction implements NavigationWsAction { | |||
RATING_GRID); | |||
private final PageRepository pageRepository; | |||
private final Settings settings; | |||
private final Configuration config; | |||
private final ResourceTypes resourceTypes; | |||
private final Server server; | |||
private final DbClient dbClient; | |||
@@ -66,10 +66,10 @@ public class GlobalAction implements NavigationWsAction { | |||
private final DefaultOrganizationProvider defaultOrganizationProvider; | |||
private final UserSession userSession; | |||
public GlobalAction(PageRepository pageRepository, Settings settings, ResourceTypes resourceTypes, Server server, | |||
DbClient dbClient, OrganizationFlags organizationFlags, DefaultOrganizationProvider defaultOrganizationProvider, UserSession userSession) { | |||
public GlobalAction(PageRepository pageRepository, Configuration config, ResourceTypes resourceTypes, Server server, | |||
DbClient dbClient, OrganizationFlags organizationFlags, DefaultOrganizationProvider defaultOrganizationProvider, UserSession userSession) { | |||
this.pageRepository = pageRepository; | |||
this.settings = settings; | |||
this.config = config; | |||
this.resourceTypes = resourceTypes; | |||
this.server = server; | |||
this.dbClient = dbClient; | |||
@@ -120,14 +120,14 @@ public class GlobalAction implements NavigationWsAction { | |||
private void writeSettings(JsonWriter json) { | |||
json.name("settings").beginObject(); | |||
for (String settingKey : SETTING_KEYS) { | |||
json.prop(settingKey, settings.getString(settingKey)); | |||
json.prop(settingKey, config.get(settingKey).orElse(null)); | |||
} | |||
json.endObject(); | |||
} | |||
private void writeDeprecatedLogoProperties(JsonWriter json) { | |||
json.prop("logoUrl", settings.getString(SONAR_LF_LOGO_URL)); | |||
json.prop("logoWidth", settings.getString(SONAR_LF_LOGO_WIDTH_PX)); | |||
json.prop("logoUrl", config.get(SONAR_LF_LOGO_URL).orElse(null)); | |||
json.prop("logoWidth", config.get(SONAR_LF_LOGO_WIDTH_PX).orElse(null)); | |||
} | |||
private void writeQualifiers(JsonWriter json) { |
@@ -19,7 +19,7 @@ | |||
*/ | |||
package org.sonar.server.ui.ws; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.server.ws.Request; | |||
import org.sonar.api.server.ws.Response; | |||
import org.sonar.api.server.ws.WebService.NewController; | |||
@@ -32,12 +32,12 @@ import org.sonar.server.user.UserSession; | |||
public class SettingsAction implements NavigationWsAction { | |||
private final PageRepository pageRepository; | |||
private final Settings settings; | |||
private final Configuration config; | |||
private final UserSession userSession; | |||
public SettingsAction(PageRepository pageRepository, Settings settings, UserSession userSession) { | |||
public SettingsAction(PageRepository pageRepository, Configuration config, UserSession userSession) { | |||
this.pageRepository = pageRepository; | |||
this.settings = settings; | |||
this.config = config; | |||
this.userSession = userSession; | |||
} | |||
@@ -60,7 +60,7 @@ public class SettingsAction implements NavigationWsAction { | |||
boolean isSysAdmin = userSession.isSystemAdministrator(); | |||
JsonWriter json = response.newJsonWriter().beginObject(); | |||
json.prop("showUpdateCenter", isSysAdmin && settings.getBoolean(WebConstants.SONAR_UPDATECENTER_ACTIVATE)); | |||
json.prop("showUpdateCenter", isSysAdmin && config.getBoolean(WebConstants.SONAR_UPDATECENTER_ACTIVATE).orElse(false)); | |||
json.name("extensions").beginArray(); | |||
if (isSysAdmin) { |
@@ -23,7 +23,7 @@ import javax.annotation.Nullable; | |||
import org.apache.commons.lang.StringUtils; | |||
import org.picocontainer.Startable; | |||
import org.sonar.api.CoreProperties; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.security.LoginPasswordAuthenticator; | |||
import org.sonar.api.security.SecurityRealm; | |||
import org.sonar.api.server.ServerSide; | |||
@@ -40,10 +40,10 @@ public class SecurityRealmFactory implements Startable { | |||
private final boolean ignoreStartupFailure; | |||
private final SecurityRealm realm; | |||
public SecurityRealmFactory(Settings settings, SecurityRealm[] realms, LoginPasswordAuthenticator[] authenticators) { | |||
ignoreStartupFailure = settings.getBoolean(CoreProperties.CORE_AUTHENTICATOR_IGNORE_STARTUP_FAILURE); | |||
String realmName = settings.getString(CoreProperties.CORE_AUTHENTICATOR_REALM); | |||
String className = settings.getString(CoreProperties.CORE_AUTHENTICATOR_CLASS); | |||
public SecurityRealmFactory(Configuration config, SecurityRealm[] realms, LoginPasswordAuthenticator[] authenticators) { | |||
ignoreStartupFailure = config.getBoolean(CoreProperties.CORE_AUTHENTICATOR_IGNORE_STARTUP_FAILURE).orElse(false); | |||
String realmName = config.get(CoreProperties.CORE_AUTHENTICATOR_REALM).orElse(null); | |||
String className = config.get(CoreProperties.CORE_AUTHENTICATOR_CLASS).orElse(null); | |||
SecurityRealm selectedRealm = null; | |||
if (!StringUtils.isEmpty(realmName)) { | |||
selectedRealm = selectRealm(realms, realmName); | |||
@@ -63,16 +63,16 @@ public class SecurityRealmFactory implements Startable { | |||
realm = selectedRealm; | |||
} | |||
public SecurityRealmFactory(Settings settings, LoginPasswordAuthenticator[] authenticators) { | |||
this(settings, new SecurityRealm[0], authenticators); | |||
public SecurityRealmFactory(Configuration config, LoginPasswordAuthenticator[] authenticators) { | |||
this(config, new SecurityRealm[0], authenticators); | |||
} | |||
public SecurityRealmFactory(Settings settings, SecurityRealm[] realms) { | |||
this(settings, realms, new LoginPasswordAuthenticator[0]); | |||
public SecurityRealmFactory(Configuration config, SecurityRealm[] realms) { | |||
this(config, realms, new LoginPasswordAuthenticator[0]); | |||
} | |||
public SecurityRealmFactory(Settings settings) { | |||
this(settings, new SecurityRealm[0], new LoginPasswordAuthenticator[0]); | |||
public SecurityRealmFactory(Configuration config) { | |||
this(config, new SecurityRealm[0], new LoginPasswordAuthenticator[0]); | |||
} | |||
@Override |
@@ -28,7 +28,7 @@ import java.util.Objects; | |||
import java.util.Random; | |||
import javax.annotation.Nullable; | |||
import org.apache.commons.codec.digest.DigestUtils; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.platform.NewUserHandler; | |||
import org.sonar.api.server.ServerSide; | |||
import org.sonar.api.utils.System2; | |||
@@ -78,10 +78,10 @@ public class UserUpdater { | |||
private final DefaultOrganizationProvider defaultOrganizationProvider; | |||
private final OrganizationCreation organizationCreation; | |||
private final DefaultGroupFinder defaultGroupFinder; | |||
private final Settings settings; | |||
private final Configuration config; | |||
public UserUpdater(NewUserNotifier newUserNotifier, DbClient dbClient, UserIndexer userIndexer, System2 system2, OrganizationFlags organizationFlags, | |||
DefaultOrganizationProvider defaultOrganizationProvider, OrganizationCreation organizationCreation, DefaultGroupFinder defaultGroupFinder, Settings settings) { | |||
DefaultOrganizationProvider defaultOrganizationProvider, OrganizationCreation organizationCreation, DefaultGroupFinder defaultGroupFinder, Configuration config) { | |||
this.newUserNotifier = newUserNotifier; | |||
this.dbClient = dbClient; | |||
this.userIndexer = userIndexer; | |||
@@ -90,7 +90,7 @@ public class UserUpdater { | |||
this.defaultOrganizationProvider = defaultOrganizationProvider; | |||
this.organizationCreation = organizationCreation; | |||
this.defaultGroupFinder = defaultGroupFinder; | |||
this.settings = settings; | |||
this.config = config; | |||
} | |||
public UserDto create(DbSession dbSession, NewUser newUser) { | |||
@@ -260,7 +260,7 @@ public class UserUpdater { | |||
} | |||
private void setOnboarded(UserDto userDto) { | |||
boolean showOnboarding = settings.getBoolean(ONBOARDING_TUTORIAL_SHOW_TO_NEW_USERS); | |||
boolean showOnboarding = config.getBoolean(ONBOARDING_TUTORIAL_SHOW_TO_NEW_USERS).orElse(false); | |||
userDto.setOnboarded(!showOnboarding); | |||
} | |||
@@ -19,7 +19,7 @@ | |||
*/ | |||
package org.sonar.server.user.index; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.server.es.IndexDefinition; | |||
import org.sonar.server.es.IndexType; | |||
import org.sonar.server.es.NewIndex; | |||
@@ -42,17 +42,17 @@ public class UserIndexDefinition implements IndexDefinition { | |||
public static final String FIELD_SCM_ACCOUNTS = "scmAccounts"; | |||
public static final String FIELD_ORGANIZATION_UUIDS = "organizationUuids"; | |||
private final Settings settings; | |||
private final Configuration config; | |||
public UserIndexDefinition(Settings settings) { | |||
this.settings = settings; | |||
public UserIndexDefinition(Configuration config) { | |||
this.config = config; | |||
} | |||
@Override | |||
public void define(IndexDefinitionContext context) { | |||
NewIndex index = context.create(INDEX_TYPE_USER.getIndex()); | |||
index.configureShards(settings, 1); | |||
index.configureShards(config, 1); | |||
// type "user" | |||
NewIndex.NewIndexType mapping = index.createType(INDEX_TYPE_USER.getType()); |
@@ -23,7 +23,7 @@ import okhttp3.OkHttpClient; | |||
import org.picocontainer.injectors.ProviderAdapter; | |||
import org.sonar.api.SonarRuntime; | |||
import org.sonar.api.ce.ComputeEngineSide; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.server.ServerSide; | |||
import org.sonar.process.ProcessProperties; | |||
import org.sonarqube.ws.client.OkHttpClientBuilder; | |||
@@ -52,15 +52,15 @@ public class OkHttpClientProvider extends ProviderAdapter { | |||
/** | |||
* @return a {@link OkHttpClient} singleton | |||
*/ | |||
public OkHttpClient provide(Settings settings, SonarRuntime runtime) { | |||
public OkHttpClient provide(Configuration config, SonarRuntime runtime) { | |||
if (okHttpClient == null) { | |||
OkHttpClientBuilder builder = new OkHttpClientBuilder(); | |||
builder.setConnectTimeoutMs(DEFAULT_CONNECT_TIMEOUT_IN_MS); | |||
builder.setReadTimeoutMs(DEFAULT_READ_TIMEOUT_IN_MS); | |||
// no need to define proxy URL as system-wide proxy is used and properly | |||
// configured by bootstrap process. | |||
builder.setProxyLogin(settings.getString(ProcessProperties.HTTP_PROXY_USER)); | |||
builder.setProxyPassword(settings.getString(ProcessProperties.HTTP_PROXY_PASSWORD)); | |||
builder.setProxyLogin(config.get(ProcessProperties.HTTP_PROXY_USER).orElse(null)); | |||
builder.setProxyPassword(config.get(ProcessProperties.HTTP_PROXY_PASSWORD).orElse(null)); | |||
builder.setUserAgent(format("SonarQube/%s", runtime.getApiVersion().toString())); | |||
okHttpClient = builder.build(); | |||
} |
@@ -19,7 +19,7 @@ | |||
*/ | |||
package org.sonar.server.view.index; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.server.es.IndexDefinition; | |||
import org.sonar.server.es.IndexType; | |||
import org.sonar.server.es.NewIndex; | |||
@@ -33,17 +33,17 @@ public class ViewIndexDefinition implements IndexDefinition { | |||
public static final String FIELD_UUID = "uuid"; | |||
public static final String FIELD_PROJECTS = "projects"; | |||
private final Settings settings; | |||
private final Configuration config; | |||
public ViewIndexDefinition(Settings settings) { | |||
this.settings = settings; | |||
public ViewIndexDefinition(Configuration config) { | |||
this.config = config; | |||
} | |||
@Override | |||
public void define(IndexDefinitionContext context) { | |||
NewIndex index = context.create(INDEX_TYPE_VIEW.getIndex()); | |||
index.configureShards(settings, 5); | |||
index.configureShards(config, 5); | |||
// type "view" | |||
NewIndex.NewIndexType mapping = index.createType(INDEX_TYPE_VIEW.getType()); |
@@ -30,7 +30,6 @@ import org.junit.Rule; | |||
import org.junit.Test; | |||
import org.junit.rules.ExpectedException; | |||
import org.junit.rules.TemporaryFolder; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.internal.MapSettings; | |||
import org.sonar.api.utils.log.LoggerLevel; | |||
import org.sonar.process.DefaultProcessCommands; | |||
@@ -56,9 +55,9 @@ public class CeHttpClientTest { | |||
@Before | |||
public void setUp() throws Exception { | |||
ipcSharedDir = temp.newFolder(); | |||
Settings settings = new MapSettings(); | |||
MapSettings settings = new MapSettings(); | |||
settings.setProperty(ProcessEntryPoint.PROPERTY_SHARED_PATH, ipcSharedDir.getAbsolutePath()); | |||
underTest = new CeHttpClient(settings); | |||
underTest = new CeHttpClient(settings.asConfig()); | |||
} | |||
@Test |
@@ -25,7 +25,6 @@ import org.junit.Rule; | |||
import org.junit.Test; | |||
import org.junit.rules.ExpectedException; | |||
import org.junit.rules.TemporaryFolder; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.internal.MapSettings; | |||
import org.sonar.process.DefaultProcessCommands; | |||
@@ -41,11 +40,11 @@ public class ProcessCommandWrapperImplTest { | |||
@Rule | |||
public ExpectedException expectedException = ExpectedException.none(); | |||
private Settings settings = new MapSettings(); | |||
private MapSettings settings = new MapSettings(); | |||
@Test | |||
public void requestSQRestart_throws_IAE_if_process_index_property_not_set() throws Exception { | |||
ProcessCommandWrapperImpl processCommandWrapper = new ProcessCommandWrapperImpl(settings); | |||
ProcessCommandWrapperImpl processCommandWrapper = new ProcessCommandWrapperImpl(settings.asConfig()); | |||
expectedException.expect(IllegalArgumentException.class); | |||
expectedException.expectMessage("Property process.index is not set"); | |||
@@ -56,7 +55,7 @@ public class ProcessCommandWrapperImplTest { | |||
@Test | |||
public void requestSQRestart_throws_IAE_if_process_shared_path_property_not_set() throws Exception { | |||
settings.setProperty(PROPERTY_PROCESS_INDEX, 1); | |||
ProcessCommandWrapperImpl processCommandWrapper = new ProcessCommandWrapperImpl(settings); | |||
ProcessCommandWrapperImpl processCommandWrapper = new ProcessCommandWrapperImpl(settings.asConfig()); | |||
expectedException.expect(IllegalArgumentException.class); | |||
expectedException.expectMessage("Property process.sharedDir is not set"); | |||
@@ -70,7 +69,7 @@ public class ProcessCommandWrapperImplTest { | |||
settings.setProperty(PROPERTY_SHARED_PATH, tmpDir.getAbsolutePath()); | |||
settings.setProperty(PROPERTY_PROCESS_INDEX, PROCESS_NUMBER); | |||
ProcessCommandWrapperImpl underTest = new ProcessCommandWrapperImpl(settings); | |||
ProcessCommandWrapperImpl underTest = new ProcessCommandWrapperImpl(settings.asConfig()); | |||
underTest.requestSQRestart(); | |||
try (DefaultProcessCommands processCommands = DefaultProcessCommands.secondary(tmpDir, PROCESS_NUMBER)) { | |||
@@ -81,7 +80,7 @@ public class ProcessCommandWrapperImplTest { | |||
@Test | |||
public void requestSQStop_throws_IAE_if_process_shared_path_property_not_set() throws Exception { | |||
settings.setProperty(PROPERTY_PROCESS_INDEX, 1); | |||
ProcessCommandWrapperImpl processCommandWrapper = new ProcessCommandWrapperImpl(settings); | |||
ProcessCommandWrapperImpl processCommandWrapper = new ProcessCommandWrapperImpl(settings.asConfig()); | |||
expectedException.expect(IllegalArgumentException.class); | |||
expectedException.expectMessage("Property process.sharedDir is not set"); | |||
@@ -95,7 +94,7 @@ public class ProcessCommandWrapperImplTest { | |||
settings.setProperty(PROPERTY_SHARED_PATH, tmpDir.getAbsolutePath()); | |||
settings.setProperty(PROPERTY_PROCESS_INDEX, PROCESS_NUMBER); | |||
ProcessCommandWrapperImpl underTest = new ProcessCommandWrapperImpl(settings); | |||
ProcessCommandWrapperImpl underTest = new ProcessCommandWrapperImpl(settings.asConfig()); | |||
underTest.requestStop(); | |||
try (DefaultProcessCommands processCommands = DefaultProcessCommands.secondary(tmpDir, PROCESS_NUMBER)) { | |||
@@ -106,7 +105,7 @@ public class ProcessCommandWrapperImplTest { | |||
@Test | |||
public void notifyOperational_throws_IAE_if_process_sharedDir_property_not_set() throws Exception { | |||
settings.setProperty(PROPERTY_PROCESS_INDEX, 1); | |||
ProcessCommandWrapperImpl processCommandWrapper = new ProcessCommandWrapperImpl(settings); | |||
ProcessCommandWrapperImpl processCommandWrapper = new ProcessCommandWrapperImpl(settings.asConfig()); | |||
expectedException.expect(IllegalArgumentException.class); | |||
expectedException.expectMessage("Property process.sharedDir is not set"); | |||
@@ -116,7 +115,7 @@ public class ProcessCommandWrapperImplTest { | |||
@Test | |||
public void notifyOperational_throws_IAE_if_process_index_property_not_set() throws Exception { | |||
ProcessCommandWrapperImpl processCommandWrapper = new ProcessCommandWrapperImpl(settings); | |||
ProcessCommandWrapperImpl processCommandWrapper = new ProcessCommandWrapperImpl(settings.asConfig()); | |||
expectedException.expect(IllegalArgumentException.class); | |||
expectedException.expectMessage("Property process.index is not set"); | |||
@@ -130,7 +129,7 @@ public class ProcessCommandWrapperImplTest { | |||
settings.setProperty(PROPERTY_SHARED_PATH, tmpDir.getAbsolutePath()); | |||
settings.setProperty(PROPERTY_PROCESS_INDEX, PROCESS_NUMBER); | |||
ProcessCommandWrapperImpl underTest = new ProcessCommandWrapperImpl(settings); | |||
ProcessCommandWrapperImpl underTest = new ProcessCommandWrapperImpl(settings.asConfig()); | |||
underTest.notifyOperational(); | |||
try (DefaultProcessCommands processCommands = DefaultProcessCommands.secondary(tmpDir, PROCESS_NUMBER)) { |
@@ -33,7 +33,6 @@ import org.junit.Rule; | |||
import org.junit.Test; | |||
import org.junit.rules.ExpectedException; | |||
import org.mockito.ArgumentCaptor; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.internal.MapSettings; | |||
import org.sonar.api.utils.System2; | |||
import org.sonar.db.DbClient; | |||
@@ -80,12 +79,12 @@ public class JwtHttpHandlerTest { | |||
private HttpServletResponse response = mock(HttpServletResponse.class); | |||
private HttpSession httpSession = mock(HttpSession.class); | |||
private System2 system2 = spy(System2.INSTANCE); | |||
private Settings settings = new MapSettings(); | |||
private MapSettings settings = new MapSettings(); | |||
private JwtSerializer jwtSerializer = mock(JwtSerializer.class); | |||
private JwtCsrfVerifier jwtCsrfVerifier = mock(JwtCsrfVerifier.class); | |||
private UserDto userDto = newUserDto().setLogin(USER_LOGIN); | |||
private JwtHttpHandler underTest = new JwtHttpHandler(system2, dbClient, settings, jwtSerializer, jwtCsrfVerifier); | |||
private JwtHttpHandler underTest = new JwtHttpHandler(system2, dbClient, settings.asConfig(), jwtSerializer, jwtCsrfVerifier); | |||
@Before | |||
public void setUp() throws Exception { | |||
@@ -125,7 +124,7 @@ public class JwtHttpHandlerTest { | |||
int sessionTimeoutInMinutes = 10; | |||
settings.setProperty("sonar.web.sessionTimeoutInMinutes", sessionTimeoutInMinutes); | |||
underTest = new JwtHttpHandler(system2, dbClient, settings, jwtSerializer, jwtCsrfVerifier); | |||
underTest = new JwtHttpHandler(system2, dbClient, settings.asConfig(), jwtSerializer, jwtCsrfVerifier); | |||
underTest.generateToken(userDto, request, response); | |||
verify(jwtSerializer).encode(jwtArgumentCaptor.capture()); | |||
@@ -137,7 +136,7 @@ public class JwtHttpHandlerTest { | |||
int firstSessionTimeoutInMinutes = 10; | |||
settings.setProperty("sonar.web.sessionTimeoutInMinutes", firstSessionTimeoutInMinutes); | |||
underTest = new JwtHttpHandler(system2, dbClient, settings, jwtSerializer, jwtCsrfVerifier); | |||
underTest = new JwtHttpHandler(system2, dbClient, settings.asConfig(), jwtSerializer, jwtCsrfVerifier); | |||
underTest.generateToken(userDto, request, response); | |||
// The property is updated, but it won't be taking into account | |||
@@ -155,7 +154,7 @@ public class JwtHttpHandlerTest { | |||
expectedException.expect(IllegalArgumentException.class); | |||
expectedException.expectMessage("Property sonar.web.sessionTimeoutInMinutes must be strictly positive. Got 0"); | |||
new JwtHttpHandler(system2, dbClient, settings, jwtSerializer, jwtCsrfVerifier); | |||
new JwtHttpHandler(system2, dbClient, settings.asConfig(), jwtSerializer, jwtCsrfVerifier); | |||
} | |||
@Test | |||
@@ -165,7 +164,7 @@ public class JwtHttpHandlerTest { | |||
expectedException.expect(IllegalArgumentException.class); | |||
expectedException.expectMessage("Property sonar.web.sessionTimeoutInMinutes must be strictly positive. Got -10"); | |||
new JwtHttpHandler(system2, dbClient, settings, jwtSerializer, jwtCsrfVerifier); | |||
new JwtHttpHandler(system2, dbClient, settings.asConfig(), jwtSerializer, jwtCsrfVerifier); | |||
} | |||
@Test | |||
@@ -175,7 +174,7 @@ public class JwtHttpHandlerTest { | |||
expectedException.expect(IllegalArgumentException.class); | |||
expectedException.expectMessage("Property sonar.web.sessionTimeoutInMinutes must not be greater than 3 months (129600 minutes). Got 172800 minutes"); | |||
new JwtHttpHandler(system2, dbClient, settings, jwtSerializer, jwtCsrfVerifier); | |||
new JwtHttpHandler(system2, dbClient, settings.asConfig(), jwtSerializer, jwtCsrfVerifier); | |||
} | |||
@Test |
@@ -32,16 +32,15 @@ import javax.crypto.spec.SecretKeySpec; | |||
import org.junit.Rule; | |||
import org.junit.Test; | |||
import org.junit.rules.ExpectedException; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.internal.MapSettings; | |||
import org.sonar.api.utils.DateUtils; | |||
import org.sonar.api.utils.System2; | |||
import org.sonar.core.util.UuidFactory; | |||
import org.sonar.core.util.UuidFactoryImpl; | |||
import org.sonar.server.authentication.JwtSerializer.JwtSession; | |||
import org.sonar.server.authentication.event.AuthenticationEvent.Source; | |||
import static org.assertj.core.api.Assertions.assertThat; | |||
import static org.sonar.server.authentication.JwtSerializer.JwtSession; | |||
import static org.sonar.server.authentication.event.AuthenticationEvent.Source; | |||
import static org.sonar.server.authentication.event.AuthenticationExceptionMatcher.authenticationException; | |||
public class JwtSerializerTest { | |||
@@ -52,10 +51,10 @@ public class JwtSerializerTest { | |||
@Rule | |||
public ExpectedException expectedException = ExpectedException.none(); | |||
private Settings settings = new MapSettings(); | |||
private MapSettings settings = new MapSettings(); | |||
private System2 system2 = System2.INSTANCE; | |||
private UuidFactory uuidFactory = UuidFactoryImpl.INSTANCE; | |||
private JwtSerializer underTest = new JwtSerializer(settings, system2, uuidFactory); | |||
private JwtSerializer underTest = new JwtSerializer(settings.asConfig(), system2, uuidFactory); | |||
@Test | |||
public void generate_token() throws Exception { |
@@ -25,7 +25,6 @@ import org.junit.Rule; | |||
import org.junit.Test; | |||
import org.junit.rules.ExpectedException; | |||
import org.mockito.ArgumentCaptor; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.internal.MapSettings; | |||
import org.sonar.api.security.Authenticator; | |||
import org.sonar.api.security.ExternalGroupsProvider; | |||
@@ -36,6 +35,7 @@ import org.sonar.api.server.authentication.IdentityProvider; | |||
import org.sonar.api.server.authentication.UserIdentity; | |||
import org.sonar.db.user.UserDto; | |||
import org.sonar.server.authentication.event.AuthenticationEvent; | |||
import org.sonar.server.authentication.event.AuthenticationEvent.Source; | |||
import org.sonar.server.user.SecurityRealmFactory; | |||
import static java.util.Arrays.asList; | |||
@@ -49,7 +49,6 @@ import static org.mockito.Mockito.verifyNoMoreInteractions; | |||
import static org.mockito.Mockito.verifyZeroInteractions; | |||
import static org.mockito.Mockito.when; | |||
import static org.sonar.db.user.UserTesting.newUserDto; | |||
import static org.sonar.server.authentication.event.AuthenticationEvent.Source; | |||
import static org.sonar.server.authentication.event.AuthenticationEvent.Method.BASIC; | |||
import static org.sonar.server.authentication.event.AuthenticationEvent.Method.BASIC_TOKEN; | |||
import static org.sonar.server.authentication.event.AuthenticationExceptionMatcher.authenticationException; | |||
@@ -69,7 +68,7 @@ public class RealmAuthenticatorTest { | |||
private ArgumentCaptor<IdentityProvider> identityProviderArgumentCaptor = ArgumentCaptor.forClass(IdentityProvider.class); | |||
private ArgumentCaptor<AuthenticationEvent.Source> sourceCaptor = ArgumentCaptor.forClass(Source.class); | |||
private Settings settings = new MapSettings(); | |||
private MapSettings settings = new MapSettings(); | |||
private SecurityRealmFactory securityRealmFactory = mock(SecurityRealmFactory.class); | |||
private SecurityRealm realm = mock(SecurityRealm.class); | |||
@@ -82,7 +81,7 @@ public class RealmAuthenticatorTest { | |||
private HttpServletRequest request = mock(HttpServletRequest.class); | |||
private RealmAuthenticator underTest = new RealmAuthenticator(settings, securityRealmFactory, userIdentityAuthenticator, authenticationEvent); | |||
private RealmAuthenticator underTest = new RealmAuthenticator(settings.asConfig(), securityRealmFactory, userIdentityAuthenticator, authenticationEvent); | |||
@Before | |||
public void setUp() throws Exception { |
@@ -31,7 +31,6 @@ import org.junit.Before; | |||
import org.junit.Rule; | |||
import org.junit.Test; | |||
import org.junit.rules.ExpectedException; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.internal.MapSettings; | |||
import org.sonar.api.utils.System2; | |||
import org.sonar.api.utils.internal.AlwaysIncreasingSystem2; | |||
@@ -40,6 +39,7 @@ import org.sonar.db.DbTester; | |||
import org.sonar.db.user.GroupDto; | |||
import org.sonar.db.user.UserDto; | |||
import org.sonar.server.authentication.event.AuthenticationEvent; | |||
import org.sonar.server.authentication.event.AuthenticationEvent.Source; | |||
import org.sonar.server.organization.DefaultOrganizationProvider; | |||
import org.sonar.server.organization.OrganizationCreation; | |||
import org.sonar.server.organization.TestDefaultOrganizationProvider; | |||
@@ -61,7 +61,6 @@ import static org.mockito.Mockito.verify; | |||
import static org.mockito.Mockito.verifyZeroInteractions; | |||
import static org.mockito.Mockito.when; | |||
import static org.sonar.db.user.UserTesting.newUserDto; | |||
import static org.sonar.server.authentication.event.AuthenticationEvent.Source; | |||
import static org.sonar.server.authentication.event.AuthenticationExceptionMatcher.authenticationException; | |||
public class SsoAuthenticatorTest { | |||
@@ -94,7 +93,7 @@ public class SsoAuthenticatorTest { | |||
private GroupDto sonarUsers; | |||
private System2 system2 = mock(System2.class); | |||
private Settings settings = new MapSettings(); | |||
private MapSettings settings = new MapSettings(); | |||
private OrganizationCreation organizationCreation = mock(OrganizationCreation.class); | |||
private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(db); | |||
private TestOrganizationFlags organizationFlags = TestOrganizationFlags.standalone(); | |||
@@ -102,14 +101,14 @@ public class SsoAuthenticatorTest { | |||
private UserIdentityAuthenticator userIdentityAuthenticator = new UserIdentityAuthenticator( | |||
db.getDbClient(), | |||
new UserUpdater(mock(NewUserNotifier.class), db.getDbClient(), mock(UserIndexer.class), System2.INSTANCE, organizationFlags, defaultOrganizationProvider, organizationCreation, | |||
new DefaultGroupFinder(db.getDbClient()), settings), | |||
new DefaultGroupFinder(db.getDbClient()), settings.asConfig()), | |||
defaultOrganizationProvider, organizationFlags, new DefaultGroupFinder(db.getDbClient())); | |||
private HttpServletResponse response = mock(HttpServletResponse.class); | |||
private JwtHttpHandler jwtHttpHandler = mock(JwtHttpHandler.class); | |||
private AuthenticationEvent authenticationEvent = mock(AuthenticationEvent.class); | |||
private SsoAuthenticator underTest = new SsoAuthenticator(system2, settings, userIdentityAuthenticator, jwtHttpHandler, authenticationEvent); | |||
private SsoAuthenticator underTest = new SsoAuthenticator(system2, settings.asConfig(), userIdentityAuthenticator, jwtHttpHandler, authenticationEvent); | |||
@Before | |||
public void setUp() throws Exception { |
@@ -33,6 +33,8 @@ import org.sonar.db.DbTester; | |||
import org.sonar.db.organization.OrganizationDto; | |||
import org.sonar.db.user.GroupDto; | |||
import org.sonar.db.user.UserDto; | |||
import org.sonar.server.authentication.event.AuthenticationEvent.Method; | |||
import org.sonar.server.authentication.event.AuthenticationEvent.Source; | |||
import org.sonar.server.organization.DefaultOrganizationProvider; | |||
import org.sonar.server.organization.OrganizationCreation; | |||
import org.sonar.server.organization.TestDefaultOrganizationProvider; | |||
@@ -48,8 +50,6 @@ import static org.assertj.core.api.Assertions.assertThat; | |||
import static org.mockito.Mockito.mock; | |||
import static org.sonar.core.config.CorePropertyDefinitions.ONBOARDING_TUTORIAL_SHOW_TO_NEW_USERS; | |||
import static org.sonar.db.user.UserTesting.newUserDto; | |||
import static org.sonar.server.authentication.event.AuthenticationEvent.Method; | |||
import static org.sonar.server.authentication.event.AuthenticationEvent.Source; | |||
import static org.sonar.server.authentication.event.AuthenticationExceptionMatcher.authenticationException; | |||
public class UserIdentityAuthenticatorTest { | |||
@@ -89,7 +89,7 @@ public class UserIdentityAuthenticatorTest { | |||
defaultOrganizationProvider, | |||
organizationCreation, | |||
new DefaultGroupFinder(db.getDbClient()), | |||
settings); | |||
settings.asConfig()); | |||
private UserIdentityAuthenticator underTest = new UserIdentityAuthenticator(db.getDbClient(), userUpdater, defaultOrganizationProvider, organizationFlags, | |||
new DefaultGroupFinder(db.getDbClient())); | |||
@@ -26,7 +26,6 @@ import org.junit.Before; | |||
import org.junit.Rule; | |||
import org.junit.Test; | |||
import org.mockito.ArgumentCaptor; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.internal.MapSettings; | |||
import org.sonar.api.server.authentication.BaseIdentityProvider; | |||
import org.sonar.api.utils.System2; | |||
@@ -35,6 +34,8 @@ import org.sonar.db.DbSession; | |||
import org.sonar.db.DbTester; | |||
import org.sonar.db.user.UserDto; | |||
import org.sonar.server.authentication.event.AuthenticationEvent; | |||
import org.sonar.server.authentication.event.AuthenticationEvent.Method; | |||
import org.sonar.server.authentication.event.AuthenticationEvent.Source; | |||
import org.sonar.server.authentication.event.AuthenticationException; | |||
import org.sonar.server.user.ServerUserSession; | |||
import org.sonar.server.user.TestUserSessionFactory; | |||
@@ -53,8 +54,6 @@ import static org.mockito.Mockito.verify; | |||
import static org.mockito.Mockito.verifyZeroInteractions; | |||
import static org.mockito.Mockito.when; | |||
import static org.sonar.db.user.UserTesting.newUserDto; | |||
import static org.sonar.server.authentication.event.AuthenticationEvent.Method; | |||
import static org.sonar.server.authentication.event.AuthenticationEvent.Source; | |||
public class UserSessionInitializerTest { | |||
@@ -75,11 +74,11 @@ public class UserSessionInitializerTest { | |||
private SsoAuthenticator ssoAuthenticator = mock(SsoAuthenticator.class); | |||
private AuthenticationEvent authenticationEvent = mock(AuthenticationEvent.class); | |||
private TestUserSessionFactory userSessionFactory = TestUserSessionFactory.standalone(); | |||
private Settings settings = new MapSettings(); | |||
private MapSettings settings = new MapSettings(); | |||
private UserDto user = newUserDto(); | |||
private UserSessionInitializer underTest = new UserSessionInitializer(settings, jwtHttpHandler, basicAuthenticator, | |||
private UserSessionInitializer underTest = new UserSessionInitializer(settings.asConfig(), jwtHttpHandler, basicAuthenticator, | |||
ssoAuthenticator, userSession, authenticationEvent, userSessionFactory); | |||
@Before |
@@ -27,7 +27,6 @@ import javax.servlet.http.HttpServletRequest; | |||
import javax.servlet.http.HttpServletResponse; | |||
import org.junit.Before; | |||
import org.junit.Test; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.internal.MapSettings; | |||
import org.sonar.server.authentication.BasicAuthenticator; | |||
import org.sonar.server.authentication.JwtHttpHandler; | |||
@@ -52,9 +51,9 @@ public class ValidateActionTest { | |||
BasicAuthenticator basicAuthenticator = mock(BasicAuthenticator.class); | |||
JwtHttpHandler jwtHttpHandler = mock(JwtHttpHandler.class); | |||
Settings settings = new MapSettings(); | |||
MapSettings settings = new MapSettings(); | |||
ValidateAction underTest = new ValidateAction(settings, basicAuthenticator, jwtHttpHandler); | |||
ValidateAction underTest = new ValidateAction(settings.asConfig(), basicAuthenticator, jwtHttpHandler); | |||
@Before | |||
public void setUp() throws Exception { |
@@ -70,7 +70,7 @@ public class IssuesActionTest { | |||
@Rule | |||
public DbTester db = DbTester.create(system2); | |||
@Rule | |||
public EsTester es = new EsTester(new IssueIndexDefinition(new MapSettings())); | |||
public EsTester es = new EsTester(new IssueIndexDefinition(new MapSettings().asConfig())); | |||
@Rule | |||
public UserSessionRule userSessionRule = UserSessionRule.standalone(); | |||
@@ -48,7 +48,7 @@ import static org.sonar.api.resources.Qualifiers.PROJECT; | |||
public abstract class ComponentIndexTest { | |||
@Rule | |||
public EsTester es = new EsTester(new ComponentIndexDefinition(new MapSettings())); | |||
public EsTester es = new EsTester(new ComponentIndexDefinition(new MapSettings().asConfig())); | |||
@Rule | |||
public DbTester db = DbTester.create(System2.INSTANCE); |
@@ -48,7 +48,7 @@ public class ComponentIndexerTest { | |||
private System2 system2 = System2.INSTANCE; | |||
@Rule | |||
public EsTester esTester = new EsTester(new ComponentIndexDefinition(new MapSettings())); | |||
public EsTester esTester = new EsTester(new ComponentIndexDefinition(new MapSettings().asConfig())); | |||
@Rule | |||
public DbTester dbTester = DbTester.create(system2); |
@@ -111,7 +111,7 @@ public class SearchProjectsActionTest { | |||
@Rule | |||
public UserSessionRule userSession = UserSessionRule.standalone(); | |||
@Rule | |||
public EsTester es = new EsTester(new ProjectMeasuresIndexDefinition(new MapSettings())); | |||
public EsTester es = new EsTester(new ProjectMeasuresIndexDefinition(new MapSettings().asConfig())); | |||
@Rule | |||
public DbTester db = DbTester.create(System2.INSTANCE); | |||
@@ -53,6 +53,8 @@ import org.sonar.server.ws.WsActionTester; | |||
import org.sonar.test.JsonAssert; | |||
import org.sonarqube.ws.MediaTypes; | |||
import org.sonarqube.ws.WsComponents.SuggestionsWsResponse; | |||
import org.sonarqube.ws.WsComponents.SuggestionsWsResponse.Category; | |||
import org.sonarqube.ws.WsComponents.SuggestionsWsResponse.Organization; | |||
import org.sonarqube.ws.WsComponents.SuggestionsWsResponse.Project; | |||
import org.sonarqube.ws.WsComponents.SuggestionsWsResponse.Suggestion; | |||
@@ -80,8 +82,6 @@ import static org.sonar.server.component.ws.SuggestionsAction.PARAM_MORE; | |||
import static org.sonar.server.component.ws.SuggestionsAction.PARAM_QUERY; | |||
import static org.sonar.server.component.ws.SuggestionsAction.PARAM_RECENTLY_BROWSED; | |||
import static org.sonar.server.component.ws.SuggestionsAction.SHORT_INPUT_WARNING; | |||
import static org.sonarqube.ws.WsComponents.SuggestionsWsResponse.Category; | |||
import static org.sonarqube.ws.WsComponents.SuggestionsWsResponse.Organization; | |||
public class SuggestionsActionTest { | |||
private static final String[] SUGGESTION_QUALIFIERS = Stream.of(SuggestionCategory.values()) | |||
@@ -91,7 +91,7 @@ public class SuggestionsActionTest { | |||
@Rule | |||
public DbTester db = DbTester.create(System2.INSTANCE); | |||
@Rule | |||
public EsTester es = new EsTester(new ComponentIndexDefinition(new MapSettings())); | |||
public EsTester es = new EsTester(new ComponentIndexDefinition(new MapSettings().asConfig())); | |||
@Rule | |||
public UserSessionRule userSessionRule = UserSessionRule.standalone(); | |||
public ResourceTypesRule resourceTypes = new ResourceTypesRule(); |
@@ -22,10 +22,12 @@ package org.sonar.server.computation.dbcleaner; | |||
import org.junit.Before; | |||
import org.junit.Test; | |||
import org.sonar.api.CoreProperties; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.config.PropertyDefinitions; | |||
import org.sonar.api.config.internal.MapSettings; | |||
import org.sonar.api.utils.log.Logger; | |||
import org.sonar.core.config.PurgeConstants; | |||
import org.sonar.core.config.PurgeProperties; | |||
import org.sonar.db.DbSession; | |||
import org.sonar.db.purge.IdUuidPair; | |||
import org.sonar.db.purge.PurgeConfiguration; | |||
@@ -35,9 +37,9 @@ import org.sonar.db.purge.PurgeProfiler; | |||
import org.sonar.db.purge.period.DefaultPeriodCleaner; | |||
import static java.util.Collections.emptyList; | |||
import static org.mockito.Matchers.any; | |||
import static org.mockito.Matchers.anyLong; | |||
import static org.mockito.Matchers.anyString; | |||
import static org.mockito.Mockito.any; | |||
import static org.mockito.Mockito.anyLong; | |||
import static org.mockito.Mockito.doThrow; | |||
import static org.mockito.Mockito.mock; | |||
import static org.mockito.Mockito.never; | |||
@@ -50,7 +52,7 @@ public class ProjectCleanerTest { | |||
private PurgeProfiler profiler = mock(PurgeProfiler.class); | |||
private DefaultPeriodCleaner periodCleaner = mock(DefaultPeriodCleaner.class); | |||
private PurgeListener purgeListener = mock(PurgeListener.class); | |||
private Settings settings = new MapSettings(); | |||
private MapSettings settings = new MapSettings(new PropertyDefinitions(PurgeProperties.all())); | |||
@Before | |||
public void before() { | |||
@@ -61,7 +63,7 @@ public class ProjectCleanerTest { | |||
public void no_profiling_when_property_is_false() { | |||
settings.setProperty(CoreProperties.PROFILING_LOG_PROPERTY, false); | |||
underTest.purge(mock(DbSession.class), mock(IdUuidPair.class), settings, emptyList()); | |||
underTest.purge(mock(DbSession.class), mock(IdUuidPair.class), settings.asConfig(), emptyList()); | |||
verify(profiler, never()).dump(anyLong(), any(Logger.class)); | |||
} | |||
@@ -70,7 +72,7 @@ public class ProjectCleanerTest { | |||
public void profiling_when_property_is_true() { | |||
settings.setProperty(CoreProperties.PROFILING_LOG_PROPERTY, true); | |||
underTest.purge(mock(DbSession.class), mock(IdUuidPair.class), settings, emptyList()); | |||
underTest.purge(mock(DbSession.class), mock(IdUuidPair.class), settings.asConfig(), emptyList()); | |||
verify(profiler).dump(anyLong(), any(Logger.class)); | |||
} | |||
@@ -79,9 +81,9 @@ public class ProjectCleanerTest { | |||
public void call_period_cleaner_index_client_and_purge_dao() { | |||
settings.setProperty(PurgeConstants.DAYS_BEFORE_DELETING_CLOSED_ISSUES, 5); | |||
underTest.purge(mock(DbSession.class), mock(IdUuidPair.class), settings, emptyList()); | |||
underTest.purge(mock(DbSession.class), mock(IdUuidPair.class), settings.asConfig(), emptyList()); | |||
verify(periodCleaner).clean(any(DbSession.class), anyString(), any(Settings.class)); | |||
verify(periodCleaner).clean(any(DbSession.class), anyString(), any(Configuration.class)); | |||
verify(dao).purge(any(DbSession.class), any(PurgeConfiguration.class), any(PurgeListener.class), any(PurgeProfiler.class)); | |||
} | |||
@@ -89,17 +91,17 @@ public class ProjectCleanerTest { | |||
public void if_dao_purge_fails_it_should_not_interrupt_program_execution() { | |||
doThrow(RuntimeException.class).when(dao).purge(any(DbSession.class), any(PurgeConfiguration.class), any(PurgeListener.class), any(PurgeProfiler.class)); | |||
underTest.purge(mock(DbSession.class), mock(IdUuidPair.class), settings, emptyList()); | |||
underTest.purge(mock(DbSession.class), mock(IdUuidPair.class), settings.asConfig(), emptyList()); | |||
verify(dao).purge(any(DbSession.class), any(PurgeConfiguration.class), any(PurgeListener.class), any(PurgeProfiler.class)); | |||
} | |||
@Test | |||
public void if_profiler_cleaning_fails_it_should_not_interrupt_program_execution() { | |||
doThrow(RuntimeException.class).when(periodCleaner).clean(any(DbSession.class), anyString(), any(Settings.class)); | |||
doThrow(RuntimeException.class).when(periodCleaner).clean(any(DbSession.class), anyString(), any(Configuration.class)); | |||
underTest.purge(mock(DbSession.class), mock(IdUuidPair.class), settings, emptyList()); | |||
underTest.purge(mock(DbSession.class), mock(IdUuidPair.class), settings.asConfig(), emptyList()); | |||
verify(periodCleaner).clean(any(DbSession.class), anyString(), any(Settings.class)); | |||
verify(periodCleaner).clean(any(DbSession.class), anyString(), any(Configuration.class)); | |||
} | |||
} |
@@ -33,7 +33,7 @@ import org.sonar.api.measures.CoreMetrics; | |||
import org.sonar.api.rule.RuleKey; | |||
import org.sonar.api.utils.Duration; | |||
import org.sonar.core.issue.DefaultIssue; | |||
import org.sonar.server.computation.task.projectanalysis.component.SettingsRepository; | |||
import org.sonar.server.computation.task.projectanalysis.component.ConfigurationRepository; | |||
import org.sonar.server.computation.task.projectanalysis.component.TreeRootHolderRule; | |||
import org.sonar.server.computation.task.projectanalysis.issue.ComponentIssuesRepositoryRule; | |||
import org.sonar.server.computation.task.projectanalysis.measure.Measure; | |||
@@ -95,7 +95,7 @@ public class MeasureComputerContextImplTest { | |||
@Rule | |||
public ComponentIssuesRepositoryRule componentIssuesRepository = new ComponentIssuesRepositoryRule(treeRootHolder); | |||
SettingsRepository settingsRepository = mock(SettingsRepository.class); | |||
ConfigurationRepository settingsRepository = mock(ConfigurationRepository.class); | |||
@Test | |||
public void get_component() throws Exception { | |||
@@ -105,9 +105,9 @@ public class MeasureComputerContextImplTest { | |||
@Test | |||
public void get_string_settings() throws Exception { | |||
org.sonar.api.config.Settings serverSettings = new MapSettings(); | |||
MapSettings serverSettings = new MapSettings(); | |||
serverSettings.setProperty("prop", "value"); | |||
when(settingsRepository.getSettings(FILE_1)).thenReturn(serverSettings); | |||
when(settingsRepository.getConfiguration(FILE_1)).thenReturn(serverSettings.asConfig()); | |||
MeasureComputerContextImpl underTest = newContext(FILE_1_REF); | |||
assertThat(underTest.getSettings().getString("prop")).isEqualTo("value"); | |||
@@ -116,9 +116,9 @@ public class MeasureComputerContextImplTest { | |||
@Test | |||
public void get_string_array_settings() throws Exception { | |||
org.sonar.api.config.Settings serverSettings = new MapSettings(); | |||
MapSettings serverSettings = new MapSettings(); | |||
serverSettings.setProperty("prop", "1,3.4,8,50"); | |||
when(settingsRepository.getSettings(FILE_1)).thenReturn(serverSettings); | |||
when(settingsRepository.getConfiguration(FILE_1)).thenReturn(serverSettings.asConfig()); | |||
MeasureComputerContextImpl underTest = newContext(FILE_1_REF); | |||
assertThat(underTest.getSettings().getStringArray("prop")).containsExactly("1", "3.4", "8", "50"); |
@@ -23,10 +23,10 @@ import org.junit.After; | |||
import org.junit.Before; | |||
import org.junit.Rule; | |||
import org.junit.Test; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
import org.sonar.api.config.internal.MapSettings; | |||
import org.sonar.api.utils.System2; | |||
import org.sonar.ce.settings.ProjectSettingsFactory; | |||
import org.sonar.ce.settings.ProjectConfigurationFactory; | |||
import org.sonar.db.DbClient; | |||
import org.sonar.db.DbSession; | |||
import org.sonar.db.DbTester; | |||
@@ -37,8 +37,7 @@ import org.sonar.db.property.PropertyDto; | |||
import static org.assertj.core.api.Assertions.assertThat; | |||
import static org.sonar.server.computation.task.projectanalysis.component.Component.Type.PROJECT; | |||
public class SettingsRepositoryTest { | |||
public class ConfigurationRepositoryTest { | |||
private static final Component ROOT = ReportComponent.builder(PROJECT, 1).setKey("ROOT").build(); | |||
@@ -51,13 +50,13 @@ public class SettingsRepositoryTest { | |||
MapSettings globalSettings; | |||
SettingsRepository underTest; | |||
ConfigurationRepository underTest; | |||
@Before | |||
public void createDao() { | |||
globalSettings = new MapSettings(); | |||
session = dbClient.openSession(false); | |||
underTest = new SettingsRepositoryImpl(new ProjectSettingsFactory(globalSettings, dbClient)); | |||
underTest = new ConfigurationRepositoryImpl(new ProjectConfigurationFactory(globalSettings, dbClient)); | |||
} | |||
@After | |||
@@ -69,9 +68,9 @@ public class SettingsRepositoryTest { | |||
public void get_project_settings_from_global_settings() { | |||
globalSettings.setProperty("key", "value"); | |||
Settings settings = underTest.getSettings(ROOT); | |||
Configuration config = underTest.getConfiguration(ROOT); | |||
assertThat(settings.getString("key")).isEqualTo("value"); | |||
assertThat(config.get("key")).hasValue("value"); | |||
} | |||
@Test | |||
@@ -81,19 +80,19 @@ public class SettingsRepositoryTest { | |||
dbClient.propertiesDao().saveProperty(session, new PropertyDto().setResourceId(project.getId()).setKey("key").setValue("value")); | |||
session.commit(); | |||
Settings settings = underTest.getSettings(ROOT); | |||
Configuration config = underTest.getConfiguration(ROOT); | |||
assertThat(settings.getString("key")).isEqualTo("value"); | |||
assertThat(config.get("key")).hasValue("value"); | |||
} | |||
@Test | |||
public void call_twice_get_project_settings() { | |||
globalSettings.setProperty("key", "value"); | |||
Settings settings = underTest.getSettings(ROOT); | |||
assertThat(settings.getString("key")).isEqualTo("value"); | |||
Configuration config = underTest.getConfiguration(ROOT); | |||
assertThat(config.get("key")).hasValue("value"); | |||
settings = underTest.getSettings(ROOT); | |||
assertThat(settings.getString("key")).isEqualTo("value"); | |||
config = underTest.getConfiguration(ROOT); | |||
assertThat(config.get("key")).hasValue("value"); | |||
} | |||
} |
@@ -19,22 +19,22 @@ | |||
*/ | |||
package org.sonar.server.computation.task.projectanalysis.component; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.Configuration; | |||
/** | |||
* Implementation of {@link SettingsRepository} that always return the | |||
* same mutable {@link Settings}, whatever the component. | |||
* Implementation of {@link ConfigurationRepository} that always return the | |||
* same {@link Configuration}, whatever the component. | |||
*/ | |||
public class TestSettingsRepository implements SettingsRepository { | |||
public class TestSettingsRepository implements ConfigurationRepository { | |||
private final Settings settings; | |||
private final Configuration config; | |||
public TestSettingsRepository(Settings settings) { | |||
this.settings = settings; | |||
public TestSettingsRepository(Configuration config) { | |||
this.config = config; | |||
} | |||
@Override | |||
public Settings getSettings(Component component) { | |||
return settings; | |||
public Configuration getConfiguration(Component component) { | |||
return config; | |||
} | |||
} |
@@ -25,7 +25,6 @@ import java.util.Collection; | |||
import java.util.Collections; | |||
import org.junit.Rule; | |||
import org.junit.Test; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.internal.MapSettings; | |||
import org.sonar.api.utils.log.LogTester; | |||
import org.sonar.api.utils.log.LoggerLevel; | |||
@@ -59,9 +58,9 @@ public class IntegrateCrossProjectDuplicationsTest { | |||
static final String OTHER_FILE_KEY = "OTHER_FILE_KEY"; | |||
Settings settings = new MapSettings(); | |||
MapSettings settings = new MapSettings(); | |||
IntegrateCrossProjectDuplications underTest = new IntegrateCrossProjectDuplications(settings, duplicationRepository); | |||
IntegrateCrossProjectDuplications underTest = new IntegrateCrossProjectDuplications(settings.asConfig(), duplicationRepository); | |||
@Test | |||
public void add_duplications_from_two_blocks() { | |||
@@ -81,8 +80,7 @@ public class IntegrateCrossProjectDuplicationsTest { | |||
.setIndexInFile(1) | |||
.setLines(32, 45) | |||
.setUnit(5, 20) | |||
.build() | |||
); | |||
.build()); | |||
Collection<Block> duplicatedBlocks = asList( | |||
new Block.Builder() | |||
@@ -102,8 +100,7 @@ public class IntegrateCrossProjectDuplicationsTest { | |||
assertThat(duplicationRepository.getDuplications(ORIGIN_FILE)) | |||
.containsExactly( | |||
crossProjectDuplication(new TextBlock(30, 45), OTHER_FILE_KEY, new TextBlock(40, 55)) | |||
); | |||
crossProjectDuplication(new TextBlock(30, 45), OTHER_FILE_KEY, new TextBlock(40, 55))); | |||
} | |||
@Test | |||
@@ -118,8 +115,7 @@ public class IntegrateCrossProjectDuplicationsTest { | |||
.setIndexInFile(0) | |||
.setLines(30, 45) | |||
.setUnit(0, 10) | |||
.build() | |||
); | |||
.build()); | |||
Collection<Block> duplicatedBlocks = singletonList( | |||
new Block.Builder() | |||
@@ -127,15 +123,13 @@ public class IntegrateCrossProjectDuplicationsTest { | |||
.setBlockHash(new ByteArray("a8998353e96320ec")) | |||
.setIndexInFile(0) | |||
.setLines(40, 55) | |||
.build() | |||
); | |||
.build()); | |||
underTest.computeCpd(ORIGIN_FILE, originBlocks, duplicatedBlocks); | |||
assertThat(duplicationRepository.getDuplications(ORIGIN_FILE)) | |||
.containsExactly( | |||
crossProjectDuplication(new TextBlock(30, 45), OTHER_FILE_KEY, new TextBlock(40, 55)) | |||
); | |||
crossProjectDuplication(new TextBlock(30, 45), OTHER_FILE_KEY, new TextBlock(40, 55))); | |||
} | |||
@Test | |||
@@ -157,8 +151,7 @@ public class IntegrateCrossProjectDuplicationsTest { | |||
.setIndexInFile(0) | |||
.setLines(46, 60) | |||
.setUnit(0, 10) | |||
.build() | |||
); | |||
.build()); | |||
Collection<Block> duplicatedBlocks = singletonList( | |||
new Block.Builder() | |||
@@ -166,8 +159,7 @@ public class IntegrateCrossProjectDuplicationsTest { | |||
.setBlockHash(new ByteArray("a8998353e96320ed")) | |||
.setIndexInFile(0) | |||
.setLines(40, 55) | |||
.build() | |||
); | |||
.build()); | |||
underTest.computeCpd(ORIGIN_FILE, originBlocks, duplicatedBlocks); | |||
@@ -186,8 +178,7 @@ public class IntegrateCrossProjectDuplicationsTest { | |||
.setIndexInFile(0) | |||
.setLines(30, 45) | |||
.setUnit(0, 4) | |||
.build() | |||
); | |||
.build()); | |||
Collection<Block> duplicatedBlocks = singletonList( | |||
new Block.Builder() | |||
@@ -195,8 +186,7 @@ public class IntegrateCrossProjectDuplicationsTest { | |||
.setBlockHash(new ByteArray("a8998353e96320ec")) | |||
.setIndexInFile(0) | |||
.setLines(40, 55) | |||
.build() | |||
); | |||
.build()); | |||
underTest.computeCpd(ORIGIN_FILE, originBlocks, duplicatedBlocks); | |||
@@ -214,8 +204,7 @@ public class IntegrateCrossProjectDuplicationsTest { | |||
.setIndexInFile(0) | |||
.setLines(30, 45) | |||
.setUnit(0, 10) | |||
.build() | |||
); | |||
.build()); | |||
underTest.computeCpd(ORIGIN_FILE, originBlocks, Collections.<Block>emptyList()); | |||
@@ -237,8 +226,7 @@ public class IntegrateCrossProjectDuplicationsTest { | |||
.setIndexInFile(0) | |||
.setLines(30, 45) | |||
.setUnit(0, 0) | |||
.build() | |||
); | |||
.build()); | |||
Collection<Block> duplicatedBlocks = singletonList( | |||
new Block.Builder() | |||
@@ -246,15 +234,13 @@ public class IntegrateCrossProjectDuplicationsTest { | |||
.setBlockHash(new ByteArray("a8998353e96320ec")) | |||
.setIndexInFile(0) | |||
.setLines(40, 55) | |||
.build() | |||
); | |||
.build()); | |||
underTest.computeCpd(javaFile, originBlocks, duplicatedBlocks); | |||
assertThat(duplicationRepository.getDuplications(ORIGIN_FILE)) | |||
.containsExactly( | |||
crossProjectDuplication(new TextBlock(30, 45), OTHER_FILE_KEY, new TextBlock(40, 55)) | |||
); | |||
crossProjectDuplication(new TextBlock(30, 45), OTHER_FILE_KEY, new TextBlock(40, 55))); | |||
} | |||
@Test | |||
@@ -268,8 +254,7 @@ public class IntegrateCrossProjectDuplicationsTest { | |||
.setIndexInFile(0) | |||
.setLines(30, 45) | |||
.setUnit(0, 100) | |||
.build() | |||
); | |||
.build()); | |||
Collection<Block> duplicatedBlocks = singletonList( | |||
new Block.Builder() | |||
@@ -277,15 +262,13 @@ public class IntegrateCrossProjectDuplicationsTest { | |||
.setBlockHash(new ByteArray("a8998353e96320ec")) | |||
.setIndexInFile(0) | |||
.setLines(40, 55) | |||
.build() | |||
); | |||
.build()); | |||
underTest.computeCpd(ORIGIN_FILE, originBlocks, duplicatedBlocks); | |||
assertThat(duplicationRepository.getDuplications(ORIGIN_FILE)) | |||
.containsExactly( | |||
crossProjectDuplication(new TextBlock(30, 45), OTHER_FILE_KEY, new TextBlock(40, 55)) | |||
); | |||
crossProjectDuplication(new TextBlock(30, 45), OTHER_FILE_KEY, new TextBlock(40, 55))); | |||
} | |||
@Test | |||
@@ -306,8 +289,7 @@ public class IntegrateCrossProjectDuplicationsTest { | |||
duplicatedBlocks.add( | |||
blockBuilder | |||
.setResourceId(randomAlphanumeric(16)) | |||
.build() | |||
); | |||
.build()); | |||
} | |||
underTest.computeCpd(ORIGIN_FILE, originBlocks, duplicatedBlocks); | |||
@@ -341,8 +323,7 @@ public class IntegrateCrossProjectDuplicationsTest { | |||
blockBuilder | |||
.setResourceId("resource" + i) | |||
.setBlockHash(new ByteArray(hash)) | |||
.build() | |||
); | |||
.build()); | |||
} | |||
underTest.computeCpd(ORIGIN_FILE, originBlocks, duplicatedBlocks); |
@@ -23,14 +23,13 @@ import org.junit.Before; | |||
import org.junit.Rule; | |||
import org.junit.Test; | |||
import org.sonar.api.CoreProperties; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.config.internal.MapSettings; | |||
import org.sonar.db.DbTester; | |||
import org.sonar.db.organization.OrganizationDto; | |||
import org.sonar.db.user.UserDto; | |||
import org.sonar.server.computation.task.projectanalysis.analysis.AnalysisMetadataHolderImpl; | |||
import org.sonar.server.computation.task.projectanalysis.analysis.Organization; | |||
import org.sonar.server.computation.task.projectanalysis.component.SettingsRepository; | |||
import org.sonar.server.computation.task.projectanalysis.component.ConfigurationRepository; | |||
import org.sonar.server.computation.task.projectanalysis.component.TestSettingsRepository; | |||
import org.sonar.server.computation.task.projectanalysis.component.TreeRootHolderRule; | |||
@@ -48,8 +47,8 @@ public class DefaultAssigneeTest { | |||
@Rule | |||
public TreeRootHolderRule rootHolder = new TreeRootHolderRule().setRoot(DUMB_PROJECT); | |||
private Settings settings = new MapSettings(); | |||
private SettingsRepository settingsRepository = new TestSettingsRepository(settings); | |||
private MapSettings settings = new MapSettings(); | |||
private ConfigurationRepository settingsRepository = new TestSettingsRepository(settings.asConfig()); | |||
private AnalysisMetadataHolderImpl analysisMetadataHolder = new AnalysisMetadataHolderImpl(); | |||
private OrganizationDto organizationDto; | |||