Browse Source

SONAR-13214 Remove org.sonar.api.config.Settings from the API

tags/8.3.0.34182
Julien HENRY 4 years ago
parent
commit
a5e56c8d40
87 changed files with 208 additions and 252 deletions
  1. 5
    6
      plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/Xoo.java
  2. 1
    0
      plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/XooPlugin.java
  3. 1
    8
      plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/extensions/XooProjectBuilder.java
  4. 1
    1
      plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/rule/ChecksSensor.java
  5. 1
    1
      plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/rule/CreateIssueByInternalKeySensor.java
  6. 1
    1
      plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/rule/HasTagSensor.java
  7. 3
    3
      plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/rule/OneIssuePerLineSensor.java
  8. 1
    1
      plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/rule/RandomAccessSensor.java
  9. 10
    14
      server/sonar-auth-ldap/src/main/java/org/sonar/auth/ldap/LdapContextFactory.java
  10. 5
    5
      server/sonar-auth-ldap/src/main/java/org/sonar/auth/ldap/LdapGroupMapping.java
  11. 19
    19
      server/sonar-auth-ldap/src/main/java/org/sonar/auth/ldap/LdapSettingsManager.java
  12. 7
    7
      server/sonar-auth-ldap/src/main/java/org/sonar/auth/ldap/LdapUserMapping.java
  13. 2
    2
      server/sonar-auth-ldap/src/test/java/org/sonar/auth/ldap/KerberosTest.java
  14. 5
    5
      server/sonar-auth-ldap/src/test/java/org/sonar/auth/ldap/LdapAuthenticatorTest.java
  15. 4
    4
      server/sonar-auth-ldap/src/test/java/org/sonar/auth/ldap/LdapAutoDiscoveryWarningLogTest.java
  16. 2
    2
      server/sonar-auth-ldap/src/test/java/org/sonar/auth/ldap/LdapGroupMappingTest.java
  17. 6
    6
      server/sonar-auth-ldap/src/test/java/org/sonar/auth/ldap/LdapGroupsProviderTest.java
  18. 2
    2
      server/sonar-auth-ldap/src/test/java/org/sonar/auth/ldap/LdapRealmTest.java
  19. 3
    3
      server/sonar-auth-ldap/src/test/java/org/sonar/auth/ldap/LdapReferralsTest.java
  20. 1
    1
      server/sonar-auth-ldap/src/test/java/org/sonar/auth/ldap/LdapSearchTest.java
  21. 11
    12
      server/sonar-auth-ldap/src/test/java/org/sonar/auth/ldap/LdapSettingsManagerTest.java
  22. 3
    3
      server/sonar-auth-ldap/src/test/java/org/sonar/auth/ldap/LdapUserMappingTest.java
  23. 3
    3
      server/sonar-auth-ldap/src/test/java/org/sonar/auth/ldap/LdapUsersProviderTest.java
  24. 1
    1
      server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/analysis/ProjectConfigurationFactory.java
  25. 1
    1
      server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/filter/IssueFilterTest.java
  26. 2
    1
      server/sonar-ce-task/src/main/java/org/sonar/ce/task/setting/SettingsLoader.java
  27. 1
    1
      server/sonar-db-core/src/main/java/org/sonar/db/DefaultDatabase.java
  28. 1
    1
      server/sonar-db-core/src/testFixtures/java/org/sonar/db/CoreTestDb.java
  29. 1
    1
      server/sonar-db-dao/src/test/java/org/sonar/db/createdb/CreateDb.java
  30. 1
    1
      server/sonar-db-dao/src/testFixtures/java/org/sonar/db/OrchestratorSettingsUtils.java
  31. 1
    1
      server/sonar-db-dao/src/testFixtures/java/org/sonar/db/SQDatabase.java
  32. 1
    1
      server/sonar-db-dao/src/testFixtures/java/org/sonar/db/TestDbImpl.java
  33. 1
    1
      server/sonar-server-common/src/main/java/org/sonar/server/config/ConfigurationProvider.java
  34. 1
    1
      server/sonar-server-common/src/main/java/org/sonar/server/setting/ChildSettings.java
  35. 2
    2
      server/sonar-server-common/src/main/java/org/sonar/server/setting/ThreadLocalSettings.java
  36. 1
    1
      server/sonar-webserver-api/src/main/java/org/sonar/server/setting/ProjectConfigurationLoaderImpl.java
  37. 1
    1
      server/sonar-webserver-core/src/main/java/org/sonar/server/platform/PersistentSettings.java
  38. 1
    1
      server/sonar-webserver-core/src/main/java/org/sonar/server/platform/monitoring/SettingsSection.java
  39. 1
    1
      server/sonar-webserver-core/src/test/java/org/sonar/server/notification/NotificationMediumTest.java
  40. 1
    1
      server/sonar-webserver-core/src/test/java/org/sonar/server/platform/PersistentSettingsTest.java
  41. 1
    1
      server/sonar-webserver-core/src/test/java/org/sonar/server/platform/monitoring/SettingsSectionTest.java
  42. 1
    1
      server/sonar-webserver-webapi/src/main/java/org/sonar/server/setting/ws/CheckSecretKeyAction.java
  43. 2
    2
      server/sonar-webserver-webapi/src/main/java/org/sonar/server/setting/ws/EncryptAction.java
  44. 1
    1
      server/sonar-webserver-webapi/src/main/java/org/sonar/server/setting/ws/GenerateSecretKeyAction.java
  45. 1
    1
      server/sonar-webserver-webapi/src/test/java/org/sonar/server/setting/ws/CheckSecretKeyActionTest.java
  46. 1
    1
      server/sonar-webserver-webapi/src/test/java/org/sonar/server/setting/ws/EncryptActionTest.java
  47. 1
    1
      server/sonar-webserver-webapi/src/test/java/org/sonar/server/setting/ws/GenerateSecretKeyActionTest.java
  48. 3
    5
      sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/sensor/internal/SensorContextTester.java
  49. 1
    1
      sonar-plugin-api-impl/src/main/java/org/sonar/api/config/internal/AesCipher.java
  50. 1
    1
      sonar-plugin-api-impl/src/main/java/org/sonar/api/config/internal/Base64Cipher.java
  51. 1
    1
      sonar-plugin-api-impl/src/main/java/org/sonar/api/config/internal/Cipher.java
  52. 0
    1
      sonar-plugin-api-impl/src/main/java/org/sonar/api/config/internal/ConfigurationBridge.java
  53. 1
    1
      sonar-plugin-api-impl/src/main/java/org/sonar/api/config/internal/Encryption.java
  54. 0
    2
      sonar-plugin-api-impl/src/main/java/org/sonar/api/config/internal/MapSettings.java
  55. 4
    1
      sonar-plugin-api-impl/src/main/java/org/sonar/api/config/internal/Settings.java
  56. 8
    9
      sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/sensor/internal/SensorContextTesterTest.java
  57. 12
    14
      sonar-plugin-api-impl/src/test/java/org/sonar/api/config/internal/AesCipherTest.java
  58. 1
    1
      sonar-plugin-api-impl/src/test/java/org/sonar/api/config/internal/EncryptionTest.java
  59. 0
    1
      sonar-plugin-api-impl/src/test/java/org/sonar/api/config/internal/MapSettingsTest.java
  60. 0
    0
      sonar-plugin-api-impl/src/test/resources/org/sonar/api/config/internal/AesCipherTest/aes_secret_key.txt
  61. 0
    0
      sonar-plugin-api-impl/src/test/resources/org/sonar/api/config/internal/AesCipherTest/bad_secret_key.txt
  62. 0
    0
      sonar-plugin-api-impl/src/test/resources/org/sonar/api/config/internal/AesCipherTest/non_trimmed_secret_key.txt
  63. 0
    0
      sonar-plugin-api-impl/src/test/resources/org/sonar/api/config/internal/AesCipherTest/other_secret_key.txt
  64. 0
    1
      sonar-plugin-api/build.gradle
  65. 7
    4
      sonar-plugin-api/src/main/java/org/sonar/api/batch/bootstrap/ProjectBuilder.java
  66. 8
    1
      sonar-plugin-api/src/main/java/org/sonar/api/batch/bootstrap/internal/ProjectBuilderContext.java
  67. 0
    7
      sonar-plugin-api/src/main/java/org/sonar/api/batch/postjob/PostJobContext.java
  68. 0
    7
      sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/SensorContext.java
  69. 9
    11
      sonar-plugin-api/src/test/java/org/sonar/api/batch/bootstrap/ProjectBuilderTest.java
  70. 1
    1
      sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/GlobalConfiguration.java
  71. 1
    1
      sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/RawScannerProperties.java
  72. 1
    1
      sonar-scanner-engine/src/main/java/org/sonar/scanner/config/DefaultConfiguration.java
  73. 1
    9
      sonar-scanner-engine/src/main/java/org/sonar/scanner/postjob/DefaultPostJobContext.java
  74. 1
    1
      sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ModuleConfiguration.java
  75. 1
    1
      sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/MutableModuleSettings.java
  76. 1
    1
      sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/MutableProjectSettings.java
  77. 7
    4
      sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ProjectBuildersExecutor.java
  78. 1
    1
      sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ProjectConfiguration.java
  79. 3
    4
      sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/ModuleSensorContext.java
  80. 1
    9
      sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/ProjectSensorContext.java
  81. 1
    1
      sonar-scanner-engine/src/test/java/org/sonar/scanner/config/DefaultConfigurationTest.java
  82. 1
    1
      sonar-scanner-engine/src/test/java/org/sonar/scanner/genericcoverage/GenericCoverageSensorTest.java
  83. 1
    1
      sonar-scanner-engine/src/test/java/org/sonar/scanner/genericcoverage/GenericTestExecutionSensorTest.java
  84. 1
    1
      sonar-scanner-engine/src/test/java/org/sonar/scanner/platform/DefaultServerTest.java
  85. 1
    7
      sonar-scanner-engine/src/test/java/org/sonar/scanner/postjob/DefaultPostJobContextTest.java
  86. 3
    2
      sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/ProjectBuildersExecutorTest.java
  87. 1
    2
      sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/ModuleSensorContextTest.java

+ 5
- 6
plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/Xoo.java View File

*/ */
package org.sonar.xoo; package org.sonar.xoo;


import java.util.Arrays;
import org.sonar.api.config.Settings;
import org.sonar.api.config.Configuration;
import org.sonar.api.resources.Language; import org.sonar.api.resources.Language;


public class Xoo implements Language { public class Xoo implements Language {
public static final String FILE_SUFFIXES_KEY = "sonar.xoo.file.suffixes"; public static final String FILE_SUFFIXES_KEY = "sonar.xoo.file.suffixes";
public static final String DEFAULT_FILE_SUFFIXES = ".xoo"; public static final String DEFAULT_FILE_SUFFIXES = ".xoo";


private final Settings settings;
private final Configuration config;


public Xoo(Settings settings) {
this.settings = settings;
public Xoo(Configuration config) {
this.config = config;
} }


@Override @Override


@Override @Override
public String[] getFileSuffixes() { public String[] getFileSuffixes() {
return Arrays.stream(settings.getStringArray(FILE_SUFFIXES_KEY)).filter(s -> s != null && !s.trim().isEmpty()).toArray(String[]::new);
return config.getStringArray(FILE_SUFFIXES_KEY);
} }
} }

+ 1
- 0
plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/XooPlugin.java View File

.description("Comma-separated list of suffixes for files to analyze. To not filter, leave the list empty.") .description("Comma-separated list of suffixes for files to analyze. To not filter, leave the list empty.")
.subCategory("General") .subCategory("General")
.onQualifiers(Qualifiers.PROJECT) .onQualifiers(Qualifiers.PROJECT)
.multiValues(true)
.build(), .build(),
// Used by DuplicationsTest and IssueFilterOnCommonRulesTest. If not declared it is not returned by api/settings // Used by DuplicationsTest and IssueFilterOnCommonRulesTest. If not declared it is not returned by api/settings
PropertyDefinition.builder("sonar.cpd.xoo.minimumTokens") PropertyDefinition.builder("sonar.cpd.xoo.minimumTokens")

+ 1
- 8
plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/extensions/XooProjectBuilder.java View File

import java.io.File; import java.io.File;
import org.sonar.api.batch.bootstrap.ProjectBuilder; import org.sonar.api.batch.bootstrap.ProjectBuilder;
import org.sonar.api.batch.bootstrap.ProjectDefinition; import org.sonar.api.batch.bootstrap.ProjectDefinition;
import org.sonar.api.config.Settings;


public class XooProjectBuilder extends ProjectBuilder { public class XooProjectBuilder extends ProjectBuilder {


private Settings settings;

public XooProjectBuilder(Settings settings) {
this.settings = settings;
}

@Override @Override
public void build(Context context) { public void build(Context context) {
if (!settings.getBoolean("sonar.xoo.enableProjectBuilder")) {
if (!context.config().getBoolean("sonar.xoo.enableProjectBuilder").orElse(false)) {
return; return;
} }
ProjectDefinition root = context.projectReactor().getRoot(); ProjectDefinition root = context.projectReactor().getRoot();

+ 1
- 1
plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/rule/ChecksSensor.java View File

@Override @Override
public void execute(SensorContext context) { public void execute(SensorContext context) {
Checks<Check> checks = checkFactory.create(XooRulesDefinition.XOO_REPOSITORY); Checks<Check> checks = checkFactory.create(XooRulesDefinition.XOO_REPOSITORY);
checks.addAnnotatedChecks(Check.ALL);
checks.addAnnotatedChecks((Object[]) Check.ALL);
FilePredicates p = context.fileSystem().predicates(); FilePredicates p = context.fileSystem().predicates();
for (InputFile file : context.fileSystem().inputFiles(p.and(p.hasLanguages(Xoo.KEY), p.hasType(Type.MAIN)))) { for (InputFile file : context.fileSystem().inputFiles(p.and(p.hasLanguages(Xoo.KEY), p.hasType(Type.MAIN)))) {
for (Check check : checks.all()) { for (Check check : checks.all()) {

+ 1
- 1
plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/rule/CreateIssueByInternalKeySensor.java View File



private static void createIssues(InputFile file, SensorContext context) { private static void createIssues(InputFile file, SensorContext context) {
ActiveRule rule = context.activeRules().findByInternalKey(XooRulesDefinition.XOO_REPOSITORY, ActiveRule rule = context.activeRules().findByInternalKey(XooRulesDefinition.XOO_REPOSITORY,
context.settings().getString(INTERNAL_KEY_PROPERTY));
context.config().get(INTERNAL_KEY_PROPERTY).orElse(null));
if (rule != null) { if (rule != null) {
NewIssue newIssue = context.newIssue(); NewIssue newIssue = context.newIssue();
newIssue newIssue

+ 1
- 1
plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/rule/HasTagSensor.java View File

NewIssue newIssue = context.newIssue(); NewIssue newIssue = context.newIssue();
newIssue newIssue
.forRule(ruleKey) .forRule(ruleKey)
.gap(context.settings().getDouble(EFFORT_TO_FIX_PROPERTY))
.gap(context.config().getDouble(EFFORT_TO_FIX_PROPERTY).orElse(null))
.at(newIssue.newLocation() .at(newIssue.newLocation()
.on(inputFile) .on(inputFile)
.at(inputFile.newRange(lineCounter[0], startIndex, lineCounter[0], startIndex + tag.length()))) .at(inputFile.newRange(lineCounter[0], startIndex, lineCounter[0], startIndex + tag.length())))

+ 3
- 3
plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/rule/OneIssuePerLineSensor.java View File



private void createIssues(InputFile file, SensorContext context, String repo) { private void createIssues(InputFile file, SensorContext context, String repo) {
RuleKey ruleKey = RuleKey.of(repo, RULE_KEY); RuleKey ruleKey = RuleKey.of(repo, RULE_KEY);
String severity = context.settings().getString(FORCE_SEVERITY_PROPERTY);
String severity = context.config().get(FORCE_SEVERITY_PROPERTY).orElse(null);
for (int line = 1; line <= file.lines(); line++) { for (int line = 1; line <= file.lines(); line++) {
NewIssue newIssue = context.newIssue(); NewIssue newIssue = context.newIssue();
newIssue newIssue
.message("This issue is generated on each line")) .message("This issue is generated on each line"))
.overrideSeverity(severity != null ? Severity.valueOf(severity) : null); .overrideSeverity(severity != null ? Severity.valueOf(severity) : null);
if (context.getSonarQubeVersion().isGreaterThanOrEqual(Version.create(5, 5))) { if (context.getSonarQubeVersion().isGreaterThanOrEqual(Version.create(5, 5))) {
newIssue.gap(context.settings().getDouble(EFFORT_TO_FIX_PROPERTY));
newIssue.gap(context.config().getDouble(EFFORT_TO_FIX_PROPERTY).orElse(null));
} else { } else {
newIssue.gap(context.settings().getDouble(EFFORT_TO_FIX_PROPERTY));
newIssue.gap(context.config().getDouble(EFFORT_TO_FIX_PROPERTY).orElse(null));
} }
newIssue.save(); newIssue.save();
} }

+ 1
- 1
plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/rule/RandomAccessSensor.java View File



@Override @Override
public void execute(SensorContext context) { public void execute(SensorContext context) {
File f = new File(context.settings().getString(SONAR_XOO_RANDOM_ACCESS_ISSUE_PATHS));
File f = new File(context.config().get(SONAR_XOO_RANDOM_ACCESS_ISSUE_PATHS).orElseThrow(() -> new IllegalStateException("Required property")));
FileSystem fs = context.fileSystem(); FileSystem fs = context.fileSystem();
FilePredicates p = fs.predicates(); FilePredicates p = fs.predicates();
try { try {

+ 10
- 14
server/sonar-auth-ldap/src/main/java/org/sonar/auth/ldap/LdapContextFactory.java View File

import javax.security.auth.login.LoginContext; import javax.security.auth.login.LoginContext;
import javax.security.auth.login.LoginException; import javax.security.auth.login.LoginException;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.sonar.api.config.Settings;
import org.sonar.api.utils.log.Logger; import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers; import org.sonar.api.utils.log.Loggers;


private final String realm; private final String realm;
private final String referral; private final String referral;


public LdapContextFactory(Settings settings, String settingsPrefix, String ldapUrl) {
this.authentication = StringUtils.defaultString(settings.getString(settingsPrefix + ".authentication"), DEFAULT_AUTHENTICATION);
this.factory = StringUtils.defaultString(settings.getString(settingsPrefix + ".contextFactoryClass"), DEFAULT_FACTORY);
this.realm = settings.getString(settingsPrefix + ".realm");
public LdapContextFactory(org.sonar.api.config.Configuration config, String settingsPrefix, String ldapUrl) {
this.authentication = StringUtils.defaultString(config.get(settingsPrefix + ".authentication").orElse(null), DEFAULT_AUTHENTICATION);
this.factory = StringUtils.defaultString(config.get(settingsPrefix + ".contextFactoryClass").orElse(null), DEFAULT_FACTORY);
this.realm = config.get(settingsPrefix + ".realm").orElse(null);
this.providerUrl = ldapUrl; this.providerUrl = ldapUrl;
this.startTLS = settings.getBoolean(settingsPrefix + ".StartTLS");
this.username = settings.getString(settingsPrefix + ".bindDn");
this.password = settings.getString(settingsPrefix + ".bindPassword");
this.referral = getReferralsMode(settings, settingsPrefix + ".followReferrals");
this.startTLS = config.getBoolean(settingsPrefix + ".StartTLS").orElse(false);
this.username = config.get(settingsPrefix + ".bindDn").orElse(null);
this.password = config.get(settingsPrefix + ".bindPassword").orElse(null);
this.referral = getReferralsMode(config, settingsPrefix + ".followReferrals");
} }


/** /**
return referral; return referral;
} }


private static String getReferralsMode(Settings settings, String followReferralsSettingKey) {
if (settings.hasKey(followReferralsSettingKey)) {
return settings.getBoolean(followReferralsSettingKey) ? REFERRALS_FOLLOW_MODE : REFERRALS_IGNORE_MODE;
}
private static String getReferralsMode(org.sonar.api.config.Configuration config, String followReferralsSettingKey) {
// By default follow referrals // By default follow referrals
return REFERRALS_FOLLOW_MODE;
return config.getBoolean(followReferralsSettingKey).orElse(true) ? REFERRALS_FOLLOW_MODE : REFERRALS_IGNORE_MODE;
} }


@Override @Override

+ 5
- 5
server/sonar-auth-ldap/src/main/java/org/sonar/auth/ldap/LdapGroupMapping.java View File

import javax.naming.directory.Attribute; import javax.naming.directory.Attribute;
import javax.naming.directory.SearchResult; import javax.naming.directory.SearchResult;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.sonar.api.config.Settings;
import org.sonar.api.config.Configuration;


/** /**
* @author Evgeny Mandrikov * @author Evgeny Mandrikov
/** /**
* Constructs mapping from Sonar settings. * Constructs mapping from Sonar settings.
*/ */
public LdapGroupMapping(Settings settings, String settingsPrefix) {
this.baseDn = settings.getString(settingsPrefix + ".group.baseDn");
this.idAttribute = StringUtils.defaultString(settings.getString(settingsPrefix + ".group.idAttribute"), DEFAULT_ID_ATTRIBUTE);
public LdapGroupMapping(Configuration config, String settingsPrefix) {
this.baseDn = config.get(settingsPrefix + ".group.baseDn").orElse(null);
this.idAttribute = StringUtils.defaultString(config.get(settingsPrefix + ".group.idAttribute").orElse(null), DEFAULT_ID_ATTRIBUTE);


String req = StringUtils.defaultString(settings.getString(settingsPrefix + ".group.request"), DEFAULT_REQUEST);
String req = StringUtils.defaultString(config.get(settingsPrefix + ".group.request").orElse(null), DEFAULT_REQUEST);
this.requiredUserAttributes = StringUtils.substringsBetween(req, "{", "}"); this.requiredUserAttributes = StringUtils.substringsBetween(req, "{", "}");
for (int i = 0; i < requiredUserAttributes.length; i++) { for (int i = 0; i < requiredUserAttributes.length; i++) {
req = StringUtils.replace(req, "{" + requiredUserAttributes[i] + "}", "{" + i + "}"); req = StringUtils.replace(req, "{" + requiredUserAttributes[i] + "}", "{" + i + "}");

+ 19
- 19
server/sonar-auth-ldap/src/main/java/org/sonar/auth/ldap/LdapSettingsManager.java View File

import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.sonar.api.config.Settings;
import org.sonar.api.config.Configuration;
import org.sonar.api.server.ServerSide; import org.sonar.api.server.ServerSide;
import org.sonar.api.utils.log.Logger; import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers; import org.sonar.api.utils.log.Loggers;
private static final String LDAP_SERVERS_PROPERTY = "ldap.servers"; private static final String LDAP_SERVERS_PROPERTY = "ldap.servers";
private static final String LDAP_PROPERTY_PREFIX = "ldap"; private static final String LDAP_PROPERTY_PREFIX = "ldap";
private static final String DEFAULT_LDAP_SERVER_KEY = "<default>"; private static final String DEFAULT_LDAP_SERVER_KEY = "<default>";
private final Settings settings;
private final Configuration config;
private final LdapAutodiscovery ldapAutodiscovery; private final LdapAutodiscovery ldapAutodiscovery;
private Map<String, LdapUserMapping> userMappings = null; private Map<String, LdapUserMapping> userMappings = null;
private Map<String, LdapGroupMapping> groupMappings = null; private Map<String, LdapGroupMapping> groupMappings = null;
/** /**
* Create an instance of the settings manager. * Create an instance of the settings manager.
* *
* @param settings The settings to use.
* @param config The config to use.
*/ */
public LdapSettingsManager(Settings settings, LdapAutodiscovery ldapAutodiscovery) {
this.settings = settings;
public LdapSettingsManager(Configuration config, LdapAutodiscovery ldapAutodiscovery) {
this.config = config;
this.ldapAutodiscovery = ldapAutodiscovery; this.ldapAutodiscovery = ldapAutodiscovery;
} }


if (userMappings == null) { if (userMappings == null) {
// Use linked hash map to preserve order // Use linked hash map to preserve order
userMappings = new LinkedHashMap<>(); userMappings = new LinkedHashMap<>();
String[] serverKeys = settings.getStringArray(LDAP_SERVERS_PROPERTY);
String[] serverKeys = config.getStringArray(LDAP_SERVERS_PROPERTY);
if (serverKeys.length > 0) { if (serverKeys.length > 0) {
for (String serverKey : serverKeys) { for (String serverKey : serverKeys) {
LdapUserMapping userMapping = new LdapUserMapping(settings, LDAP_PROPERTY_PREFIX + "." + serverKey);
LdapUserMapping userMapping = new LdapUserMapping(config, LDAP_PROPERTY_PREFIX + "." + serverKey);
if (StringUtils.isNotBlank(userMapping.getBaseDn())) { if (StringUtils.isNotBlank(userMapping.getBaseDn())) {
LOG.info("User mapping for server {}: {}", serverKey, userMapping); LOG.info("User mapping for server {}: {}", serverKey, userMapping);
userMappings.put(serverKey, userMapping); userMappings.put(serverKey, userMapping);
} }
} else { } else {
// Backward compatibility with single server configuration // Backward compatibility with single server configuration
LdapUserMapping userMapping = new LdapUserMapping(settings, LDAP_PROPERTY_PREFIX);
LdapUserMapping userMapping = new LdapUserMapping(config, LDAP_PROPERTY_PREFIX);
if (StringUtils.isNotBlank(userMapping.getBaseDn())) { if (StringUtils.isNotBlank(userMapping.getBaseDn())) {
LOG.info("User mapping: {}", userMapping); LOG.info("User mapping: {}", userMapping);
userMappings.put(DEFAULT_LDAP_SERVER_KEY, userMapping); userMappings.put(DEFAULT_LDAP_SERVER_KEY, userMapping);
if (groupMappings == null) { if (groupMappings == null) {
// Use linked hash map to preserve order // Use linked hash map to preserve order
groupMappings = new LinkedHashMap<>(); groupMappings = new LinkedHashMap<>();
String[] serverKeys = settings.getStringArray(LDAP_SERVERS_PROPERTY);
String[] serverKeys = config.getStringArray(LDAP_SERVERS_PROPERTY);
if (serverKeys.length > 0) { if (serverKeys.length > 0) {
for (String serverKey : serverKeys) { for (String serverKey : serverKeys) {
LdapGroupMapping groupMapping = new LdapGroupMapping(settings, LDAP_PROPERTY_PREFIX + "." + serverKey);
LdapGroupMapping groupMapping = new LdapGroupMapping(config, LDAP_PROPERTY_PREFIX + "." + serverKey);
if (StringUtils.isNotBlank(groupMapping.getBaseDn())) { if (StringUtils.isNotBlank(groupMapping.getBaseDn())) {
LOG.info("Group mapping for server {}: {}", serverKey, groupMapping); LOG.info("Group mapping for server {}: {}", serverKey, groupMapping);
groupMappings.put(serverKey, groupMapping); groupMappings.put(serverKey, groupMapping);
} }
} else { } else {
// Backward compatibility with single server configuration // Backward compatibility with single server configuration
LdapGroupMapping groupMapping = new LdapGroupMapping(settings, LDAP_PROPERTY_PREFIX);
LdapGroupMapping groupMapping = new LdapGroupMapping(config, LDAP_PROPERTY_PREFIX);
if (StringUtils.isNotBlank(groupMapping.getBaseDn())) { if (StringUtils.isNotBlank(groupMapping.getBaseDn())) {
LOG.info("Group mapping: {}", groupMapping); LOG.info("Group mapping: {}", groupMapping);
groupMappings.put(DEFAULT_LDAP_SERVER_KEY, groupMapping); groupMappings.put(DEFAULT_LDAP_SERVER_KEY, groupMapping);
if (contextFactories == null) { if (contextFactories == null) {
// Use linked hash map to preserve order // Use linked hash map to preserve order
contextFactories = new LinkedHashMap<>(); contextFactories = new LinkedHashMap<>();
String[] serverKeys = settings.getStringArray(LDAP_SERVERS_PROPERTY);
String[] serverKeys = config.getStringArray(LDAP_SERVERS_PROPERTY);
if (serverKeys.length > 0) { if (serverKeys.length > 0) {
initMultiLdapConfiguration(serverKeys); initMultiLdapConfiguration(serverKeys);
} else { } else {
} }


private void initSimpleLdapConfiguration() { private void initSimpleLdapConfiguration() {
String realm = settings.getString(LDAP_PROPERTY_PREFIX + ".realm");
String realm = config.get(LDAP_PROPERTY_PREFIX + ".realm").orElse(null);
String ldapUrlKey = LDAP_PROPERTY_PREFIX + ".url"; String ldapUrlKey = LDAP_PROPERTY_PREFIX + ".url";
String ldapUrl = settings.getString(ldapUrlKey);
String ldapUrl = config.get(ldapUrlKey).orElse(null);
if (ldapUrl == null && realm != null) { if (ldapUrl == null && realm != null) {
LOG.warn("Auto-discovery feature is deprecated, please use '{}' to specify LDAP url", ldapUrlKey); LOG.warn("Auto-discovery feature is deprecated, please use '{}' to specify LDAP url", ldapUrlKey);
List<LdapSrvRecord> ldapServers = ldapAutodiscovery.getLdapServers(realm); List<LdapSrvRecord> ldapServers = ldapAutodiscovery.getLdapServers(realm);
for (LdapSrvRecord ldapSrvRecord : ldapServers) { for (LdapSrvRecord ldapSrvRecord : ldapServers) {
if (StringUtils.isNotBlank(ldapSrvRecord.getServerUrl())) { if (StringUtils.isNotBlank(ldapSrvRecord.getServerUrl())) {
LOG.info("Detected server: {}", ldapSrvRecord.getServerUrl()); LOG.info("Detected server: {}", ldapSrvRecord.getServerUrl());
LdapContextFactory contextFactory = new LdapContextFactory(settings, LDAP_PROPERTY_PREFIX, ldapSrvRecord.getServerUrl());
LdapContextFactory contextFactory = new LdapContextFactory(config, LDAP_PROPERTY_PREFIX, ldapSrvRecord.getServerUrl());
contextFactories.put(DEFAULT_LDAP_SERVER_KEY + index, contextFactory); contextFactories.put(DEFAULT_LDAP_SERVER_KEY + index, contextFactory);
index++; index++;
} }
if (StringUtils.isBlank(ldapUrl)) { if (StringUtils.isBlank(ldapUrl)) {
throw new LdapException(String.format("The property '%s' is empty and no realm configured to try auto-discovery.", ldapUrlKey)); throw new LdapException(String.format("The property '%s' is empty and no realm configured to try auto-discovery.", ldapUrlKey));
} }
LdapContextFactory contextFactory = new LdapContextFactory(settings, LDAP_PROPERTY_PREFIX, ldapUrl);
LdapContextFactory contextFactory = new LdapContextFactory(config, LDAP_PROPERTY_PREFIX, ldapUrl);
contextFactories.put(DEFAULT_LDAP_SERVER_KEY, contextFactory); contextFactories.put(DEFAULT_LDAP_SERVER_KEY, contextFactory);
} }
} }


private void initMultiLdapConfiguration(String[] serverKeys) { private void initMultiLdapConfiguration(String[] serverKeys) {
if (settings.hasKey("ldap.url") || settings.hasKey("ldap.realm")) {
if (config.hasKey("ldap.url") || config.hasKey("ldap.realm")) {
throw new LdapException("When defining multiple LDAP servers with the property '" + LDAP_SERVERS_PROPERTY + "', " throw new LdapException("When defining multiple LDAP servers with the property '" + LDAP_SERVERS_PROPERTY + "', "
+ "all LDAP properties must be linked to one of those servers. Please remove properties like 'ldap.url', 'ldap.realm', ..."); + "all LDAP properties must be linked to one of those servers. Please remove properties like 'ldap.url', 'ldap.realm', ...");
} }
for (String serverKey : serverKeys) { for (String serverKey : serverKeys) {
String prefix = LDAP_PROPERTY_PREFIX + "." + serverKey; String prefix = LDAP_PROPERTY_PREFIX + "." + serverKey;
String ldapUrlKey = prefix + ".url"; String ldapUrlKey = prefix + ".url";
String ldapUrl = settings.getString(ldapUrlKey);
String ldapUrl = config.get(ldapUrlKey).orElse(null);
if (StringUtils.isBlank(ldapUrl)) { if (StringUtils.isBlank(ldapUrl)) {
throw new LdapException(String.format("The property '%s' property is empty while it is mandatory.", ldapUrlKey)); throw new LdapException(String.format("The property '%s' property is empty while it is mandatory.", ldapUrlKey));
} }
LdapContextFactory contextFactory = new LdapContextFactory(settings, prefix, ldapUrl);
LdapContextFactory contextFactory = new LdapContextFactory(config, prefix, ldapUrl);
contextFactories.put(serverKey, contextFactory); contextFactories.put(serverKey, contextFactory);
} }
} }

+ 7
- 7
server/sonar-auth-ldap/src/main/java/org/sonar/auth/ldap/LdapUserMapping.java View File

package org.sonar.auth.ldap; package org.sonar.auth.ldap;


import org.apache.commons.lang.StringUtils; 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.Logger;
import org.sonar.api.utils.log.Loggers; import org.sonar.api.utils.log.Loggers;


/** /**
* Constructs mapping from Sonar settings. * Constructs mapping from Sonar settings.
*/ */
public LdapUserMapping(Settings settings, String settingsPrefix) {
public LdapUserMapping(Configuration config, String settingsPrefix) {
String usesrBaseDnSettingKey = settingsPrefix + ".user.baseDn"; String usesrBaseDnSettingKey = settingsPrefix + ".user.baseDn";
String usersBaseDn = settings.getString(usesrBaseDnSettingKey);
String usersBaseDn = config.get(usesrBaseDnSettingKey).orElse(null);
if (usersBaseDn == null) { if (usersBaseDn == null) {
String realm = settings.getString(settingsPrefix + ".realm");
String realm = config.get(settingsPrefix + ".realm").orElse(null);
if (realm != null) { if (realm != null) {
LOG.warn("Auto-discovery feature is deprecated, please use '{}' to specify user search dn", usesrBaseDnSettingKey); LOG.warn("Auto-discovery feature is deprecated, please use '{}' to specify user search dn", usesrBaseDnSettingKey);
usersBaseDn = LdapAutodiscovery.getDnsDomainDn(realm); usersBaseDn = LdapAutodiscovery.getDnsDomainDn(realm);
} }


this.baseDn = usersBaseDn; this.baseDn = usersBaseDn;
this.realNameAttribute = StringUtils.defaultString(settings.getString(settingsPrefix + ".user.realNameAttribute"), DEFAULT_NAME_ATTRIBUTE);
this.emailAttribute = StringUtils.defaultString(settings.getString(settingsPrefix + ".user.emailAttribute"), DEFAULT_EMAIL_ATTRIBUTE);
this.realNameAttribute = StringUtils.defaultString(config.get(settingsPrefix + ".user.realNameAttribute").orElse(null), DEFAULT_NAME_ATTRIBUTE);
this.emailAttribute = StringUtils.defaultString(config.get(settingsPrefix + ".user.emailAttribute").orElse(null), DEFAULT_EMAIL_ATTRIBUTE);


String req = StringUtils.defaultString(settings.getString(settingsPrefix + ".user.request"), DEFAULT_REQUEST);
String req = StringUtils.defaultString(config.get(settingsPrefix + ".user.request").orElse(null), DEFAULT_REQUEST);
req = StringUtils.replace(req, "{login}", "{0}"); req = StringUtils.replace(req, "{login}", "{0}");
this.request = req; this.request = req;
} }

+ 2
- 2
server/sonar-auth-ldap/src/test/java/org/sonar/auth/ldap/KerberosTest.java View File

@Test @Test
public void test() { public void test() {
MapSettings settings = configure(); MapSettings settings = configure();
LdapRealm ldapRealm = new LdapRealm(new LdapSettingsManager(settings, new LdapAutodiscovery()));
LdapRealm ldapRealm = new LdapRealm(new LdapSettingsManager(settings.asConfig(), new LdapAutodiscovery()));


ldapRealm.init(); ldapRealm.init();


public void wrong_bind_password() { public void wrong_bind_password() {
MapSettings settings = configure() MapSettings settings = configure()
.setProperty("ldap.bindPassword", "wrong_bind_password"); .setProperty("ldap.bindPassword", "wrong_bind_password");
LdapRealm ldapRealm = new LdapRealm(new LdapSettingsManager(settings, new LdapAutodiscovery()));
LdapRealm ldapRealm = new LdapRealm(new LdapSettingsManager(settings.asConfig(), new LdapAutodiscovery()));
try { try {
ldapRealm.init(); ldapRealm.init();
Assert.fail(); Assert.fail();

+ 5
- 5
server/sonar-auth-ldap/src/test/java/org/sonar/auth/ldap/LdapAuthenticatorTest.java View File

public void testNoConnection() { public void testNoConnection() {
exampleServer.disableAnonymousAccess(); exampleServer.disableAnonymousAccess();
try { try {
LdapSettingsManager settingsManager = new LdapSettingsManager(LdapSettingsFactory.generateAuthenticationSettings(exampleServer, null, LdapContextFactory.AUTH_METHOD_SIMPLE),
LdapSettingsManager settingsManager = new LdapSettingsManager(LdapSettingsFactory.generateAuthenticationSettings(exampleServer, null, LdapContextFactory.AUTH_METHOD_SIMPLE).asConfig(),
new LdapAutodiscovery()); new LdapAutodiscovery());
LdapAuthenticator authenticator = new LdapAuthenticator(settingsManager.getContextFactories(), settingsManager.getUserMappings()); LdapAuthenticator authenticator = new LdapAuthenticator(settingsManager.getContextFactories(), settingsManager.getUserMappings());
authenticator.authenticate("godin", "secret1"); authenticator.authenticate("godin", "secret1");


@Test @Test
public void testSimple() { public void testSimple() {
LdapSettingsManager settingsManager = new LdapSettingsManager(LdapSettingsFactory.generateAuthenticationSettings(exampleServer, null, LdapContextFactory.AUTH_METHOD_SIMPLE),
LdapSettingsManager settingsManager = new LdapSettingsManager(LdapSettingsFactory.generateAuthenticationSettings(exampleServer, null, LdapContextFactory.AUTH_METHOD_SIMPLE).asConfig(),
new LdapAutodiscovery()); new LdapAutodiscovery());
LdapAuthenticator authenticator = new LdapAuthenticator(settingsManager.getContextFactories(), settingsManager.getUserMappings()); LdapAuthenticator authenticator = new LdapAuthenticator(settingsManager.getContextFactories(), settingsManager.getUserMappings());


@Test @Test
public void testSimpleMultiLdap() { public void testSimpleMultiLdap() {
LdapSettingsManager settingsManager = new LdapSettingsManager( LdapSettingsManager settingsManager = new LdapSettingsManager(
LdapSettingsFactory.generateAuthenticationSettings(exampleServer, infosupportServer, LdapContextFactory.AUTH_METHOD_SIMPLE), new LdapAutodiscovery());
LdapSettingsFactory.generateAuthenticationSettings(exampleServer, infosupportServer, LdapContextFactory.AUTH_METHOD_SIMPLE).asConfig(), new LdapAutodiscovery());
LdapAuthenticator authenticator = new LdapAuthenticator(settingsManager.getContextFactories(), settingsManager.getUserMappings()); LdapAuthenticator authenticator = new LdapAuthenticator(settingsManager.getContextFactories(), settingsManager.getUserMappings());


assertThat(authenticator.authenticate("godin", "secret1")).isTrue(); assertThat(authenticator.authenticate("godin", "secret1")).isTrue();


@Test @Test
public void testSasl() { public void testSasl() {
LdapSettingsManager settingsManager = new LdapSettingsManager(LdapSettingsFactory.generateAuthenticationSettings(exampleServer, null, LdapContextFactory.AUTH_METHOD_CRAM_MD5),
LdapSettingsManager settingsManager = new LdapSettingsManager(LdapSettingsFactory.generateAuthenticationSettings(exampleServer, null, LdapContextFactory.AUTH_METHOD_CRAM_MD5).asConfig(),
new LdapAutodiscovery()); new LdapAutodiscovery());
LdapAuthenticator authenticator = new LdapAuthenticator(settingsManager.getContextFactories(), settingsManager.getUserMappings()); LdapAuthenticator authenticator = new LdapAuthenticator(settingsManager.getContextFactories(), settingsManager.getUserMappings());


@Test @Test
public void testSaslMultipleLdap() { public void testSaslMultipleLdap() {
LdapSettingsManager settingsManager = new LdapSettingsManager( LdapSettingsManager settingsManager = new LdapSettingsManager(
LdapSettingsFactory.generateAuthenticationSettings(exampleServer, infosupportServer, LdapContextFactory.AUTH_METHOD_CRAM_MD5), new LdapAutodiscovery());
LdapSettingsFactory.generateAuthenticationSettings(exampleServer, infosupportServer, LdapContextFactory.AUTH_METHOD_CRAM_MD5).asConfig(), new LdapAutodiscovery());
LdapAuthenticator authenticator = new LdapAuthenticator(settingsManager.getContextFactories(), settingsManager.getUserMappings()); LdapAuthenticator authenticator = new LdapAuthenticator(settingsManager.getContextFactories(), settingsManager.getUserMappings());


assertThat(authenticator.authenticate("godin", "secret1")).isTrue(); assertThat(authenticator.authenticate("godin", "secret1")).isTrue();

+ 4
- 4
server/sonar-auth-ldap/src/test/java/org/sonar/auth/ldap/LdapAutoDiscoveryWarningLogTest.java View File

public void does_not_display_log_when_not_using_auto_discovery() { public void does_not_display_log_when_not_using_auto_discovery() {
MapSettings settings = new MapSettings() MapSettings settings = new MapSettings()
.setProperty("ldap.url", server.getUrl()); .setProperty("ldap.url", server.getUrl());
LdapRealm realm = new LdapRealm(new LdapSettingsManager(settings, new LdapAutodiscovery()));
LdapRealm realm = new LdapRealm(new LdapSettingsManager(settings.asConfig(), new LdapAutodiscovery()));
assertThat(realm.getName()).isEqualTo("LDAP"); assertThat(realm.getName()).isEqualTo("LDAP");


realm.init(); realm.init();
LdapAutodiscovery ldapAutodiscovery = mock(LdapAutodiscovery.class); LdapAutodiscovery ldapAutodiscovery = mock(LdapAutodiscovery.class);
when(ldapAutodiscovery.getLdapServers("example.org")).thenReturn(singletonList(new LdapAutodiscovery.LdapSrvRecord(server.getUrl(), 1, 1))); when(ldapAutodiscovery.getLdapServers("example.org")).thenReturn(singletonList(new LdapAutodiscovery.LdapSrvRecord(server.getUrl(), 1, 1)));
// ldap.url setting is not set // ldap.url setting is not set
LdapRealm realm = new LdapRealm(new LdapSettingsManager(new MapSettings().setProperty("ldap.realm", "example.org"),
LdapRealm realm = new LdapRealm(new LdapSettingsManager(new MapSettings().setProperty("ldap.realm", "example.org").asConfig(),
ldapAutodiscovery)); ldapAutodiscovery));


realm.init(); realm.init();
public void display_warning_log_when_using_auto_discovery_to_detect_user_baseDn_on_single_server() { public void display_warning_log_when_using_auto_discovery_to_detect_user_baseDn_on_single_server() {
// ldap.user.baseDn setting is not set // ldap.user.baseDn setting is not set
MapSettings settings = new MapSettings().setProperty("ldap.url", server.getUrl()).setProperty("ldap.realm", "example.org"); MapSettings settings = new MapSettings().setProperty("ldap.url", server.getUrl()).setProperty("ldap.realm", "example.org");
LdapRealm realm = new LdapRealm(new LdapSettingsManager(settings, new LdapAutodiscovery()));
LdapRealm realm = new LdapRealm(new LdapSettingsManager(settings.asConfig(), new LdapAutodiscovery()));


realm.init(); realm.init();


.setProperty("ldap.example.realm", "example.org") .setProperty("ldap.example.realm", "example.org")
.setProperty("ldap.infosupport.url", server2.getUrl()) .setProperty("ldap.infosupport.url", server2.getUrl())
.setProperty("ldap.infosupport.realm", "infosupport.org"); .setProperty("ldap.infosupport.realm", "infosupport.org");
LdapRealm realm = new LdapRealm(new LdapSettingsManager(settings, new LdapAutodiscovery()));
LdapRealm realm = new LdapRealm(new LdapSettingsManager(settings.asConfig(), new LdapAutodiscovery()));


realm.init(); realm.init();



+ 2
- 2
server/sonar-auth-ldap/src/test/java/org/sonar/auth/ldap/LdapGroupMappingTest.java View File



@Test @Test
public void defaults() { public void defaults() {
LdapGroupMapping groupMapping = new LdapGroupMapping(new MapSettings(), "ldap");
LdapGroupMapping groupMapping = new LdapGroupMapping(new MapSettings().asConfig(), "ldap");


assertThat(groupMapping.getBaseDn()).isNull(); assertThat(groupMapping.getBaseDn()).isNull();
assertThat(groupMapping.getIdAttribute()).isEqualTo("cn"); assertThat(groupMapping.getIdAttribute()).isEqualTo("cn");
public void custom_request() { public void custom_request() {
MapSettings settings = new MapSettings() MapSettings settings = new MapSettings()
.setProperty("ldap.group.request", "(&(|(objectClass=posixGroup)(objectClass=groupOfUniqueNames))(|(memberUid={uid})(uniqueMember={dn})))"); .setProperty("ldap.group.request", "(&(|(objectClass=posixGroup)(objectClass=groupOfUniqueNames))(|(memberUid={uid})(uniqueMember={dn})))");
LdapGroupMapping groupMapping = new LdapGroupMapping(settings, "ldap");
LdapGroupMapping groupMapping = new LdapGroupMapping(settings.asConfig(), "ldap");


assertThat(groupMapping.getRequest()).isEqualTo("(&(|(objectClass=posixGroup)(objectClass=groupOfUniqueNames))(|(memberUid={0})(uniqueMember={1})))"); assertThat(groupMapping.getRequest()).isEqualTo("(&(|(objectClass=posixGroup)(objectClass=groupOfUniqueNames))(|(memberUid={0})(uniqueMember={1})))");
assertThat(groupMapping.getRequiredUserAttributes()).isEqualTo(new String[] {"uid", "dn"}); assertThat(groupMapping.getRequiredUserAttributes()).isEqualTo(new String[] {"uid", "dn"});

+ 6
- 6
server/sonar-auth-ldap/src/test/java/org/sonar/auth/ldap/LdapGroupsProviderTest.java View File

public void defaults() { public void defaults() {
MapSettings settings = LdapSettingsFactory.generateSimpleAnonymousAccessSettings(exampleServer, null); MapSettings settings = LdapSettingsFactory.generateSimpleAnonymousAccessSettings(exampleServer, null);


LdapSettingsManager settingsManager = new LdapSettingsManager(settings, new LdapAutodiscovery());
LdapSettingsManager settingsManager = new LdapSettingsManager(settings.asConfig(), new LdapAutodiscovery());
LdapGroupsProvider groupsProvider = new LdapGroupsProvider(settingsManager.getContextFactories(), settingsManager.getUserMappings(), settingsManager.getGroupMappings()); LdapGroupsProvider groupsProvider = new LdapGroupsProvider(settingsManager.getContextFactories(), settingsManager.getUserMappings(), settingsManager.getGroupMappings());
Collection<String> groups; Collection<String> groups;


public void defaultsMultipleLdap() { public void defaultsMultipleLdap() {
MapSettings settings = LdapSettingsFactory.generateSimpleAnonymousAccessSettings(exampleServer, infosupportServer); MapSettings settings = LdapSettingsFactory.generateSimpleAnonymousAccessSettings(exampleServer, infosupportServer);


LdapSettingsManager settingsManager = new LdapSettingsManager(settings, new LdapAutodiscovery());
LdapSettingsManager settingsManager = new LdapSettingsManager(settings.asConfig(), new LdapAutodiscovery());
LdapGroupsProvider groupsProvider = new LdapGroupsProvider(settingsManager.getContextFactories(), settingsManager.getUserMappings(), settingsManager.getGroupMappings()); LdapGroupsProvider groupsProvider = new LdapGroupsProvider(settingsManager.getContextFactories(), settingsManager.getUserMappings(), settingsManager.getGroupMappings());


Collection<String> groups; Collection<String> groups;
public void posix() { public void posix() {
MapSettings settings = LdapSettingsFactory.generateSimpleAnonymousAccessSettings(exampleServer, null); MapSettings settings = LdapSettingsFactory.generateSimpleAnonymousAccessSettings(exampleServer, null);
settings.setProperty("ldap.group.request", "(&(objectClass=posixGroup)(memberUid={uid}))"); settings.setProperty("ldap.group.request", "(&(objectClass=posixGroup)(memberUid={uid}))");
LdapSettingsManager settingsManager = new LdapSettingsManager(settings, new LdapAutodiscovery());
LdapSettingsManager settingsManager = new LdapSettingsManager(settings.asConfig(), new LdapAutodiscovery());
LdapGroupsProvider groupsProvider = new LdapGroupsProvider(settingsManager.getContextFactories(), settingsManager.getUserMappings(), settingsManager.getGroupMappings()); LdapGroupsProvider groupsProvider = new LdapGroupsProvider(settingsManager.getContextFactories(), settingsManager.getUserMappings(), settingsManager.getGroupMappings());


Collection<String> groups; Collection<String> groups;
MapSettings settings = LdapSettingsFactory.generateSimpleAnonymousAccessSettings(exampleServer, infosupportServer); MapSettings settings = LdapSettingsFactory.generateSimpleAnonymousAccessSettings(exampleServer, infosupportServer);
settings.setProperty("ldap.example.group.request", "(&(objectClass=posixGroup)(memberUid={uid}))"); settings.setProperty("ldap.example.group.request", "(&(objectClass=posixGroup)(memberUid={uid}))");
settings.setProperty("ldap.infosupport.group.request", "(&(objectClass=posixGroup)(memberUid={uid}))"); settings.setProperty("ldap.infosupport.group.request", "(&(objectClass=posixGroup)(memberUid={uid}))");
LdapSettingsManager settingsManager = new LdapSettingsManager(settings, new LdapAutodiscovery());
LdapSettingsManager settingsManager = new LdapSettingsManager(settings.asConfig(), new LdapAutodiscovery());
LdapGroupsProvider groupsProvider = new LdapGroupsProvider(settingsManager.getContextFactories(), settingsManager.getUserMappings(), settingsManager.getGroupMappings()); LdapGroupsProvider groupsProvider = new LdapGroupsProvider(settingsManager.getContextFactories(), settingsManager.getUserMappings(), settingsManager.getGroupMappings());


Collection<String> groups; Collection<String> groups;
public void mixed() { public void mixed() {
MapSettings settings = LdapSettingsFactory.generateSimpleAnonymousAccessSettings(exampleServer, infosupportServer); MapSettings settings = LdapSettingsFactory.generateSimpleAnonymousAccessSettings(exampleServer, infosupportServer);
settings.setProperty("ldap.example.group.request", "(&(|(objectClass=groupOfUniqueNames)(objectClass=posixGroup))(|(uniqueMember={dn})(memberUid={uid})))"); settings.setProperty("ldap.example.group.request", "(&(|(objectClass=groupOfUniqueNames)(objectClass=posixGroup))(|(uniqueMember={dn})(memberUid={uid})))");
LdapSettingsManager settingsManager = new LdapSettingsManager(settings, new LdapAutodiscovery());
LdapSettingsManager settingsManager = new LdapSettingsManager(settings.asConfig(), new LdapAutodiscovery());
LdapGroupsProvider groupsProvider = new LdapGroupsProvider(settingsManager.getContextFactories(), settingsManager.getUserMappings(), settingsManager.getGroupMappings()); LdapGroupsProvider groupsProvider = new LdapGroupsProvider(settingsManager.getContextFactories(), settingsManager.getUserMappings(), settingsManager.getGroupMappings());


Collection<String> groups; Collection<String> groups;
MapSettings settings = LdapSettingsFactory.generateSimpleAnonymousAccessSettings(exampleServer, infosupportServer); MapSettings settings = LdapSettingsFactory.generateSimpleAnonymousAccessSettings(exampleServer, infosupportServer);
settings.setProperty("ldap.example.group.request", "(&(|(objectClass=groupOfUniqueNames)(objectClass=posixGroup))(|(uniqueMember={dn})(memberUid={uid})))"); settings.setProperty("ldap.example.group.request", "(&(|(objectClass=groupOfUniqueNames)(objectClass=posixGroup))(|(uniqueMember={dn})(memberUid={uid})))");
settings.setProperty("ldap.infosupport.group.request", "(&(|(objectClass=groupOfUniqueNames)(objectClass=posixGroup))(|(uniqueMember={dn})(memberUid={uid})))"); settings.setProperty("ldap.infosupport.group.request", "(&(|(objectClass=groupOfUniqueNames)(objectClass=posixGroup))(|(uniqueMember={dn})(memberUid={uid})))");
LdapSettingsManager settingsManager = new LdapSettingsManager(settings, new LdapAutodiscovery());
LdapSettingsManager settingsManager = new LdapSettingsManager(settings.asConfig(), new LdapAutodiscovery());
LdapGroupsProvider groupsProvider = new LdapGroupsProvider(settingsManager.getContextFactories(), settingsManager.getUserMappings(), settingsManager.getGroupMappings()); LdapGroupsProvider groupsProvider = new LdapGroupsProvider(settingsManager.getContextFactories(), settingsManager.getUserMappings(), settingsManager.getGroupMappings());


Collection<String> groups; Collection<String> groups;

+ 2
- 2
server/sonar-auth-ldap/src/test/java/org/sonar/auth/ldap/LdapRealmTest.java View File

public void normal() { public void normal() {
MapSettings settings = new MapSettings() MapSettings settings = new MapSettings()
.setProperty("ldap.url", server.getUrl()); .setProperty("ldap.url", server.getUrl());
LdapRealm realm = new LdapRealm(new LdapSettingsManager(settings, new LdapAutodiscovery()));
LdapRealm realm = new LdapRealm(new LdapSettingsManager(settings.asConfig(), new LdapAutodiscovery()));
assertThat(realm.getName()).isEqualTo("LDAP"); assertThat(realm.getName()).isEqualTo("LDAP");
realm.init(); realm.init();
assertThat(realm.doGetAuthenticator()).isInstanceOf(LdapAuthenticator.class); assertThat(realm.doGetAuthenticator()).isInstanceOf(LdapAuthenticator.class);
MapSettings settings = new MapSettings() MapSettings settings = new MapSettings()
.setProperty("ldap.url", "ldap://no-such-host") .setProperty("ldap.url", "ldap://no-such-host")
.setProperty("ldap.group.baseDn", "cn=groups,dc=example,dc=org"); .setProperty("ldap.group.baseDn", "cn=groups,dc=example,dc=org");
LdapRealm realm = new LdapRealm(new LdapSettingsManager(settings, new LdapAutodiscovery()));
LdapRealm realm = new LdapRealm(new LdapSettingsManager(settings.asConfig(), new LdapAutodiscovery()));
assertThat(realm.getName()).isEqualTo("LDAP"); assertThat(realm.getName()).isEqualTo("LDAP");
try { try {
realm.init(); realm.init();

+ 3
- 3
server/sonar-auth-ldap/src/test/java/org/sonar/auth/ldap/LdapReferralsTest.java View File

import javax.annotation.Nullable; import javax.annotation.Nullable;
import org.junit.ClassRule; import org.junit.ClassRule;
import org.junit.Test; import org.junit.Test;
import org.sonar.api.config.Settings;
import org.sonar.api.config.internal.MapSettings;
import org.sonar.auth.ldap.server.LdapServer; import org.sonar.auth.ldap.server.LdapServer;


import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
} }


private static Map<String, LdapContextFactory> createFactories(@Nullable String propertyKey, @Nullable String propertyValue) { private static Map<String, LdapContextFactory> createFactories(@Nullable String propertyKey, @Nullable String propertyValue) {
Settings settings = LdapSettingsFactory.generateSimpleAnonymousAccessSettings(server, null);
MapSettings settings = LdapSettingsFactory.generateSimpleAnonymousAccessSettings(server, null);
if (propertyKey != null) { if (propertyKey != null) {
settings.setProperty(propertyKey, propertyValue); settings.setProperty(propertyKey, propertyValue);
} }
return new LdapSettingsManager(settings, new LdapAutodiscovery()).getContextFactories();
return new LdapSettingsManager(settings.asConfig(), new LdapAutodiscovery()).getContextFactories();
} }
} }

+ 1
- 1
server/sonar-auth-ldap/src/test/java/org/sonar/auth/ldap/LdapSearchTest.java View File



@BeforeClass @BeforeClass
public static void init() { public static void init() {
contextFactories = new LdapSettingsManager(LdapSettingsFactory.generateSimpleAnonymousAccessSettings(server, null), new LdapAutodiscovery()).getContextFactories();
contextFactories = new LdapSettingsManager(LdapSettingsFactory.generateSimpleAnonymousAccessSettings(server, null).asConfig(), new LdapAutodiscovery()).getContextFactories();
} }


@Test @Test

+ 11
- 12
server/sonar-auth-ldap/src/test/java/org/sonar/auth/ldap/LdapSettingsManagerTest.java View File

import org.junit.Rule; import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.rules.ExpectedException; import org.junit.rules.ExpectedException;
import org.sonar.api.config.Settings;
import org.sonar.api.config.internal.MapSettings; import org.sonar.api.config.internal.MapSettings;


import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;


@Test @Test
public void shouldFailWhenNoLdapUrl() { public void shouldFailWhenNoLdapUrl() {
Settings settings = generateMultipleLdapSettingsWithUserAndGroupMapping();
MapSettings settings = generateMultipleLdapSettingsWithUserAndGroupMapping();
settings.removeProperty("ldap.example.url"); settings.removeProperty("ldap.example.url");
LdapSettingsManager settingsManager = new LdapSettingsManager(settings, new LdapAutodiscovery());
LdapSettingsManager settingsManager = new LdapSettingsManager(settings.asConfig(), new LdapAutodiscovery());


thrown.expect(LdapException.class); thrown.expect(LdapException.class);
thrown.expectMessage("The property 'ldap.example.url' property is empty while it is mandatory."); thrown.expectMessage("The property 'ldap.example.url' property is empty while it is mandatory.");


@Test @Test
public void shouldFailWhenMixingSingleAndMultipleConfiguration() { public void shouldFailWhenMixingSingleAndMultipleConfiguration() {
Settings settings = generateMultipleLdapSettingsWithUserAndGroupMapping();
MapSettings settings = generateMultipleLdapSettingsWithUserAndGroupMapping();
settings.setProperty("ldap.url", "ldap://foo"); settings.setProperty("ldap.url", "ldap://foo");
LdapSettingsManager settingsManager = new LdapSettingsManager(settings, new LdapAutodiscovery());
LdapSettingsManager settingsManager = new LdapSettingsManager(settings.asConfig(), new LdapAutodiscovery());


thrown.expect(LdapException.class); thrown.expect(LdapException.class);
thrown thrown
@Test @Test
public void testContextFactoriesWithSingleLdap() { public void testContextFactoriesWithSingleLdap() {
LdapSettingsManager settingsManager = new LdapSettingsManager( LdapSettingsManager settingsManager = new LdapSettingsManager(
generateSingleLdapSettingsWithUserAndGroupMapping(), new LdapAutodiscovery());
generateSingleLdapSettingsWithUserAndGroupMapping().asConfig(), new LdapAutodiscovery());
assertThat(settingsManager.getContextFactories().size()).isEqualTo(1); assertThat(settingsManager.getContextFactories().size()).isEqualTo(1);
} }


@Test @Test
public void testContextFactoriesWithMultipleLdap() { public void testContextFactoriesWithMultipleLdap() {
LdapSettingsManager settingsManager = new LdapSettingsManager( LdapSettingsManager settingsManager = new LdapSettingsManager(
generateMultipleLdapSettingsWithUserAndGroupMapping(), new LdapAutodiscovery());
generateMultipleLdapSettingsWithUserAndGroupMapping().asConfig(), new LdapAutodiscovery());
assertThat(settingsManager.getContextFactories().size()).isEqualTo(2); assertThat(settingsManager.getContextFactories().size()).isEqualTo(2);
// We do it twice to make sure the settings keep the same. // We do it twice to make sure the settings keep the same.
assertThat(settingsManager.getContextFactories().size()).isEqualTo(2); assertThat(settingsManager.getContextFactories().size()).isEqualTo(2);
LdapSrvRecord ldap2 = new LdapSrvRecord("ldap://localhost:1899", 1, 1); LdapSrvRecord ldap2 = new LdapSrvRecord("ldap://localhost:1899", 1, 1);
when(ldapAutodiscovery.getLdapServers("example.org")).thenReturn(Arrays.asList(ldap1, ldap2)); when(ldapAutodiscovery.getLdapServers("example.org")).thenReturn(Arrays.asList(ldap1, ldap2));
LdapSettingsManager settingsManager = new LdapSettingsManager( LdapSettingsManager settingsManager = new LdapSettingsManager(
generateAutodiscoverSettings(), ldapAutodiscovery);
generateAutodiscoverSettings().asConfig(), ldapAutodiscovery);
assertThat(settingsManager.getContextFactories().size()).isEqualTo(2); assertThat(settingsManager.getContextFactories().size()).isEqualTo(2);
} }


LdapAutodiscovery ldapAutodiscovery = mock(LdapAutodiscovery.class); LdapAutodiscovery ldapAutodiscovery = mock(LdapAutodiscovery.class);
when(ldapAutodiscovery.getLdapServers("example.org")).thenReturn(Collections.emptyList()); when(ldapAutodiscovery.getLdapServers("example.org")).thenReturn(Collections.emptyList());
LdapSettingsManager settingsManager = new LdapSettingsManager( LdapSettingsManager settingsManager = new LdapSettingsManager(
generateAutodiscoverSettings(), ldapAutodiscovery);
generateAutodiscoverSettings().asConfig(), ldapAutodiscovery);


thrown.expect(LdapException.class); thrown.expect(LdapException.class);
thrown.expectMessage("The property 'ldap.url' is empty and SonarQube is not able to auto-discover any LDAP server."); thrown.expectMessage("The property 'ldap.url' is empty and SonarQube is not able to auto-discover any LDAP server.");
@Test @Test
public void testUserMappings() { public void testUserMappings() {
LdapSettingsManager settingsManager = new LdapSettingsManager( LdapSettingsManager settingsManager = new LdapSettingsManager(
generateMultipleLdapSettingsWithUserAndGroupMapping(), new LdapAutodiscovery());
generateMultipleLdapSettingsWithUserAndGroupMapping().asConfig(), new LdapAutodiscovery());
assertThat(settingsManager.getUserMappings().size()).isEqualTo(2); assertThat(settingsManager.getUserMappings().size()).isEqualTo(2);
// We do it twice to make sure the settings keep the same. // We do it twice to make sure the settings keep the same.
assertThat(settingsManager.getUserMappings().size()).isEqualTo(2); assertThat(settingsManager.getUserMappings().size()).isEqualTo(2);
@Test @Test
public void testGroupMappings() { public void testGroupMappings() {
LdapSettingsManager settingsManager = new LdapSettingsManager( LdapSettingsManager settingsManager = new LdapSettingsManager(
generateMultipleLdapSettingsWithUserAndGroupMapping(), new LdapAutodiscovery());
generateMultipleLdapSettingsWithUserAndGroupMapping().asConfig(), new LdapAutodiscovery());
assertThat(settingsManager.getGroupMappings().size()).isEqualTo(2); assertThat(settingsManager.getGroupMappings().size()).isEqualTo(2);
// We do it twice to make sure the settings keep the same. // We do it twice to make sure the settings keep the same.
assertThat(settingsManager.getGroupMappings().size()).isEqualTo(2); assertThat(settingsManager.getGroupMappings().size()).isEqualTo(2);
@Test @Test
public void testEmptySettings() { public void testEmptySettings() {
LdapSettingsManager settingsManager = new LdapSettingsManager( LdapSettingsManager settingsManager = new LdapSettingsManager(
new MapSettings(), new LdapAutodiscovery());
new MapSettings().asConfig(), new LdapAutodiscovery());


thrown.expect(LdapException.class); thrown.expect(LdapException.class);
thrown.expectMessage("The property 'ldap.url' is empty and no realm configured to try auto-discovery."); thrown.expectMessage("The property 'ldap.url' is empty and no realm configured to try auto-discovery.");

+ 3
- 3
server/sonar-auth-ldap/src/test/java/org/sonar/auth/ldap/LdapUserMappingTest.java View File



@Test @Test
public void defaults() { public void defaults() {
LdapUserMapping userMapping = new LdapUserMapping(new MapSettings(), "ldap");
LdapUserMapping userMapping = new LdapUserMapping(new MapSettings().asConfig(), "ldap");
assertThat(userMapping.getBaseDn()).isNull(); assertThat(userMapping.getBaseDn()).isNull();
assertThat(userMapping.getRequest()).isEqualTo("(&(objectClass=inetOrgPerson)(uid={0}))"); assertThat(userMapping.getRequest()).isEqualTo("(&(objectClass=inetOrgPerson)(uid={0}))");
assertThat(userMapping.getRealNameAttribute()).isEqualTo("cn"); assertThat(userMapping.getRealNameAttribute()).isEqualTo("cn");
.setProperty("ldap.user.baseDn", "cn=users") .setProperty("ldap.user.baseDn", "cn=users")
.setProperty("ldap.user.request", "(&(objectClass=user)(sAMAccountName={0}))"); .setProperty("ldap.user.request", "(&(objectClass=user)(sAMAccountName={0}))");


LdapUserMapping userMapping = new LdapUserMapping(settings, "ldap");
LdapUserMapping userMapping = new LdapUserMapping(settings.asConfig(), "ldap");
LdapSearch search = userMapping.createSearch(null, "tester"); LdapSearch search = userMapping.createSearch(null, "tester");
assertThat(search.getBaseDn()).isEqualTo("cn=users"); assertThat(search.getBaseDn()).isEqualTo("cn=users");
assertThat(search.getRequest()).isEqualTo("(&(objectClass=user)(sAMAccountName={0}))"); assertThat(search.getRequest()).isEqualTo("(&(objectClass=user)(sAMAccountName={0}))");
.setProperty("ldap.userObjectClass", "user") .setProperty("ldap.userObjectClass", "user")
.setProperty("ldap.loginAttribute", "sAMAccountName"); .setProperty("ldap.loginAttribute", "sAMAccountName");


LdapUserMapping userMapping = new LdapUserMapping(settings, "ldap");
LdapUserMapping userMapping = new LdapUserMapping(settings.asConfig(), "ldap");
assertThat(userMapping.getBaseDn()).isEqualTo("dc=example,dc=org"); assertThat(userMapping.getBaseDn()).isEqualTo("dc=example,dc=org");
} }



+ 3
- 3
server/sonar-auth-ldap/src/test/java/org/sonar/auth/ldap/LdapUsersProviderTest.java View File



import org.junit.ClassRule; import org.junit.ClassRule;
import org.junit.Test; import org.junit.Test;
import org.sonar.api.config.Settings;
import org.sonar.api.config.internal.MapSettings;
import org.sonar.api.security.UserDetails; import org.sonar.api.security.UserDetails;
import org.sonar.auth.ldap.server.LdapServer; import org.sonar.auth.ldap.server.LdapServer;




@Test @Test
public void test() { public void test() {
Settings settings = LdapSettingsFactory.generateSimpleAnonymousAccessSettings(exampleServer, infosupportServer);
LdapSettingsManager settingsManager = new LdapSettingsManager(settings, new LdapAutodiscovery());
MapSettings settings = LdapSettingsFactory.generateSimpleAnonymousAccessSettings(exampleServer, infosupportServer);
LdapSettingsManager settingsManager = new LdapSettingsManager(settings.asConfig(), new LdapAutodiscovery());
LdapUsersProvider usersProvider = new LdapUsersProvider(settingsManager.getContextFactories(), settingsManager.getUserMappings()); LdapUsersProvider usersProvider = new LdapUsersProvider(settingsManager.getContextFactories(), settingsManager.getUserMappings());


UserDetails details; UserDetails details;

+ 1
- 1
server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/analysis/ProjectConfigurationFactory.java View File



import org.sonar.api.ce.ComputeEngineSide; import org.sonar.api.ce.ComputeEngineSide;
import org.sonar.api.config.Configuration; import org.sonar.api.config.Configuration;
import org.sonar.api.config.Settings;
import org.sonar.api.config.internal.Settings;
import org.sonar.api.config.internal.ConfigurationBridge; import org.sonar.api.config.internal.ConfigurationBridge;
import org.sonar.db.DbClient; import org.sonar.db.DbClient;
import org.sonar.db.component.BranchType; import org.sonar.db.component.BranchType;

+ 1
- 1
server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/filter/IssueFilterTest.java View File

import org.junit.Rule; import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.rules.ExpectedException; import org.junit.rules.ExpectedException;
import org.sonar.api.config.Settings;
import org.sonar.api.config.internal.Settings;
import org.sonar.api.config.internal.MapSettings; import org.sonar.api.config.internal.MapSettings;
import org.sonar.api.rule.RuleKey; import org.sonar.api.rule.RuleKey;
import org.sonar.ce.task.projectanalysis.component.Component; import org.sonar.ce.task.projectanalysis.component.Component;

+ 2
- 1
server/sonar-ce-task/src/main/java/org/sonar/ce/task/setting/SettingsLoader.java View File



import org.picocontainer.Startable; import org.picocontainer.Startable;
import org.sonar.api.ce.ComputeEngineSide; import org.sonar.api.ce.ComputeEngineSide;
import org.sonar.api.config.internal.Settings;
import org.sonar.ce.task.container.EagerStart; import org.sonar.ce.task.container.EagerStart;
import org.sonar.ce.task.container.TaskContainerImpl; import org.sonar.ce.task.container.TaskContainerImpl;
import org.sonar.server.setting.ThreadLocalSettings; import org.sonar.server.setting.ThreadLocalSettings;


/** /**
* Add this class as the first components in the {@link TaskContainerImpl} * Add this class as the first components in the {@link TaskContainerImpl}
* to trigger loading of Thread local specific {@link org.sonar.api.config.Settings} in {@link ThreadLocalSettings}.
* to trigger loading of Thread local specific {@link Settings} in {@link ThreadLocalSettings}.
*/ */
@EagerStart @EagerStart
@ComputeEngineSide @ComputeEngineSide

+ 1
- 1
server/sonar-db-core/src/main/java/org/sonar/db/DefaultDatabase.java View File

import org.apache.commons.dbcp2.BasicDataSource; import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.commons.dbcp2.BasicDataSourceFactory; import org.apache.commons.dbcp2.BasicDataSourceFactory;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.sonar.api.config.Settings;
import org.sonar.api.config.internal.Settings;
import org.sonar.api.utils.log.Logger; import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers; import org.sonar.api.utils.log.Loggers;
import org.sonar.db.dialect.Dialect; import org.sonar.db.dialect.Dialect;

+ 1
- 1
server/sonar-db-core/src/testFixtures/java/org/sonar/db/CoreTestDb.java View File

import javax.sql.DataSource; import javax.sql.DataSource;
import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.codec.digest.DigestUtils;
import org.junit.AssumptionViolatedException; import org.junit.AssumptionViolatedException;
import org.sonar.api.config.Settings;
import org.sonar.api.config.internal.Settings;
import org.sonar.api.config.internal.MapSettings; import org.sonar.api.config.internal.MapSettings;
import org.sonar.api.utils.log.Logger; import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers; import org.sonar.api.utils.log.Loggers;

+ 1
- 1
server/sonar-db-dao/src/test/java/org/sonar/db/createdb/CreateDb.java View File

import com.sonar.orchestrator.db.DatabaseFactory; import com.sonar.orchestrator.db.DatabaseFactory;
import com.sonar.orchestrator.db.DefaultDatabase; import com.sonar.orchestrator.db.DefaultDatabase;
import java.util.function.Consumer; import java.util.function.Consumer;
import org.sonar.api.config.Settings;
import org.sonar.api.config.internal.Settings;
import org.sonar.api.config.internal.MapSettings; import org.sonar.api.config.internal.MapSettings;
import org.sonar.api.utils.log.Logger; import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers; import org.sonar.api.utils.log.Loggers;

+ 1
- 1
server/sonar-db-dao/src/testFixtures/java/org/sonar/db/OrchestratorSettingsUtils.java View File

import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.text.StrSubstitutor; import org.apache.commons.lang.text.StrSubstitutor;
import org.sonar.api.config.Settings;
import org.sonar.api.config.internal.Settings;


import static org.apache.commons.lang.StringUtils.isEmpty; import static org.apache.commons.lang.StringUtils.isEmpty;



+ 1
- 1
server/sonar-db-dao/src/testFixtures/java/org/sonar/db/SQDatabase.java View File

import org.apache.ibatis.jdbc.ScriptRunner; import org.apache.ibatis.jdbc.ScriptRunner;
import org.sonar.api.SonarEdition; import org.sonar.api.SonarEdition;
import org.sonar.api.SonarQubeSide; import org.sonar.api.SonarQubeSide;
import org.sonar.api.config.Settings;
import org.sonar.api.config.internal.Settings;
import org.sonar.api.config.internal.MapSettings; import org.sonar.api.config.internal.MapSettings;
import org.sonar.api.internal.SonarRuntimeImpl; import org.sonar.api.internal.SonarRuntimeImpl;
import org.sonar.api.utils.System2; import org.sonar.api.utils.System2;

+ 1
- 1
server/sonar-db-dao/src/testFixtures/java/org/sonar/db/TestDbImpl.java View File

import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.junit.AssumptionViolatedException; import org.junit.AssumptionViolatedException;
import org.sonar.api.config.Settings;
import org.sonar.api.config.internal.Settings;
import org.sonar.db.dialect.H2; import org.sonar.db.dialect.H2;
import org.sonar.process.logging.LogbackHelper; import org.sonar.process.logging.LogbackHelper;



+ 1
- 1
server/sonar-server-common/src/main/java/org/sonar/server/config/ConfigurationProvider.java View File

import org.picocontainer.injectors.ProviderAdapter; import org.picocontainer.injectors.ProviderAdapter;
import org.sonar.api.config.Configuration; import org.sonar.api.config.Configuration;
import org.sonar.api.config.PropertyDefinition; import org.sonar.api.config.PropertyDefinition;
import org.sonar.api.config.Settings;
import org.sonar.api.config.internal.Settings;


import static java.util.function.Function.identity; import static java.util.function.Function.identity;
import static org.sonar.api.config.internal.MultivalueProperty.parseAsCsv; import static org.sonar.api.config.internal.MultivalueProperty.parseAsCsv;

+ 1
- 1
server/sonar-server-common/src/main/java/org/sonar/server/setting/ChildSettings.java View File

import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import org.sonar.api.config.Configuration; import org.sonar.api.config.Configuration;
import org.sonar.api.config.Settings;
import org.sonar.api.config.internal.Settings;
import org.sonar.api.config.internal.ConfigurationBridge; import org.sonar.api.config.internal.ConfigurationBridge;


import static java.util.Objects.requireNonNull; import static java.util.Objects.requireNonNull;

+ 2
- 2
server/sonar-server-common/src/main/java/org/sonar/server/setting/ThreadLocalSettings.java View File

import org.apache.ibatis.exceptions.PersistenceException; import org.apache.ibatis.exceptions.PersistenceException;
import org.sonar.api.CoreProperties; import org.sonar.api.CoreProperties;
import org.sonar.api.ce.ComputeEngineSide; import org.sonar.api.ce.ComputeEngineSide;
import org.sonar.api.config.Encryption;
import org.sonar.api.config.internal.Encryption;
import org.sonar.api.config.PropertyDefinition; import org.sonar.api.config.PropertyDefinition;
import org.sonar.api.config.PropertyDefinitions; import org.sonar.api.config.PropertyDefinitions;
import org.sonar.api.config.Settings;
import org.sonar.api.config.internal.Settings;
import org.sonar.api.server.ServerSide; import org.sonar.api.server.ServerSide;
import org.sonar.api.utils.System2; import org.sonar.api.utils.System2;
import org.sonar.core.util.SettingFormatter; import org.sonar.core.util.SettingFormatter;

+ 1
- 1
server/sonar-webserver-api/src/main/java/org/sonar/server/setting/ProjectConfigurationLoaderImpl.java View File

import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.sonar.api.config.Configuration; import org.sonar.api.config.Configuration;
import org.sonar.api.config.Settings;
import org.sonar.api.config.internal.Settings;
import org.sonar.db.DbClient; import org.sonar.db.DbClient;
import org.sonar.db.DbSession; import org.sonar.db.DbSession;
import org.sonar.db.component.ComponentDto; import org.sonar.db.component.ComponentDto;

+ 1
- 1
server/sonar-webserver-core/src/main/java/org/sonar/server/platform/PersistentSettings.java View File



import javax.annotation.CheckForNull; import javax.annotation.CheckForNull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import org.sonar.api.config.Settings;
import org.sonar.api.config.internal.Settings;
import org.sonar.db.DbClient; import org.sonar.db.DbClient;
import org.sonar.db.DbSession; import org.sonar.db.DbSession;
import org.sonar.db.property.PropertyDto; import org.sonar.db.property.PropertyDto;

+ 1
- 1
server/sonar-webserver-core/src/main/java/org/sonar/server/platform/monitoring/SettingsSection.java View File

import org.sonar.api.PropertyType; import org.sonar.api.PropertyType;
import org.sonar.api.config.PropertyDefinition; import org.sonar.api.config.PropertyDefinition;
import org.sonar.api.config.PropertyDefinitions; import org.sonar.api.config.PropertyDefinitions;
import org.sonar.api.config.Settings;
import org.sonar.api.config.internal.Settings;
import org.sonar.api.server.ServerSide; import org.sonar.api.server.ServerSide;
import org.sonar.process.systeminfo.Global; import org.sonar.process.systeminfo.Global;
import org.sonar.process.systeminfo.SystemInfoSection; import org.sonar.process.systeminfo.SystemInfoSection;

+ 1
- 1
server/sonar-webserver-core/src/test/java/org/sonar/server/notification/NotificationMediumTest.java View File

import org.mockito.invocation.InvocationOnMock; import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer; import org.mockito.stubbing.Answer;
import org.sonar.api.config.PropertyDefinitions; import org.sonar.api.config.PropertyDefinitions;
import org.sonar.api.config.Settings;
import org.sonar.api.config.internal.Settings;
import org.sonar.api.config.internal.MapSettings; import org.sonar.api.config.internal.MapSettings;
import org.sonar.api.notifications.Notification; import org.sonar.api.notifications.Notification;
import org.sonar.api.notifications.NotificationChannel; import org.sonar.api.notifications.NotificationChannel;

+ 1
- 1
server/sonar-webserver-core/src/test/java/org/sonar/server/platform/PersistentSettingsTest.java View File



import org.junit.Rule; import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.sonar.api.config.Settings;
import org.sonar.api.config.internal.Settings;
import org.sonar.api.config.internal.MapSettings; import org.sonar.api.config.internal.MapSettings;
import org.sonar.api.utils.System2; import org.sonar.api.utils.System2;
import org.sonar.db.DbTester; import org.sonar.db.DbTester;

+ 1
- 1
server/sonar-webserver-core/src/test/java/org/sonar/server/platform/monitoring/SettingsSectionTest.java View File

import org.sonar.api.PropertyType; import org.sonar.api.PropertyType;
import org.sonar.api.config.PropertyDefinition; import org.sonar.api.config.PropertyDefinition;
import org.sonar.api.config.PropertyDefinitions; import org.sonar.api.config.PropertyDefinitions;
import org.sonar.api.config.Settings;
import org.sonar.api.config.internal.Settings;
import org.sonar.api.config.internal.MapSettings; import org.sonar.api.config.internal.MapSettings;
import org.sonar.process.systeminfo.protobuf.ProtobufSystemInfo; import org.sonar.process.systeminfo.protobuf.ProtobufSystemInfo;



+ 1
- 1
server/sonar-webserver-webapi/src/main/java/org/sonar/server/setting/ws/CheckSecretKeyAction.java View File

*/ */
package org.sonar.server.setting.ws; package org.sonar.server.setting.ws;


import org.sonar.api.config.Settings;
import org.sonar.api.config.internal.Settings;
import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService; import org.sonar.api.server.ws.WebService;

+ 2
- 2
server/sonar-webserver-webapi/src/main/java/org/sonar/server/setting/ws/EncryptAction.java View File

*/ */
package org.sonar.server.setting.ws; package org.sonar.server.setting.ws;


import org.sonar.api.config.Encryption;
import org.sonar.api.config.Settings;
import org.sonar.api.config.internal.Encryption;
import org.sonar.api.config.internal.Settings;
import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService; import org.sonar.api.server.ws.WebService;

+ 1
- 1
server/sonar-webserver-webapi/src/main/java/org/sonar/server/setting/ws/GenerateSecretKeyAction.java View File

*/ */
package org.sonar.server.setting.ws; package org.sonar.server.setting.ws;


import org.sonar.api.config.Settings;
import org.sonar.api.config.internal.Settings;
import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService; import org.sonar.api.server.ws.WebService;

+ 1
- 1
server/sonar-webserver-webapi/src/test/java/org/sonar/server/setting/ws/CheckSecretKeyActionTest.java View File

import org.junit.Test; import org.junit.Test;
import org.junit.rules.ExpectedException; import org.junit.rules.ExpectedException;
import org.junit.rules.TemporaryFolder; import org.junit.rules.TemporaryFolder;
import org.sonar.api.config.Encryption;
import org.sonar.api.config.internal.Encryption;
import org.sonar.api.config.internal.MapSettings; import org.sonar.api.config.internal.MapSettings;
import org.sonar.api.server.ws.WebService; import org.sonar.api.server.ws.WebService;
import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.exceptions.ForbiddenException;

+ 1
- 1
server/sonar-webserver-webapi/src/test/java/org/sonar/server/setting/ws/EncryptActionTest.java View File

import org.junit.Test; import org.junit.Test;
import org.junit.rules.ExpectedException; import org.junit.rules.ExpectedException;
import org.junit.rules.TemporaryFolder; import org.junit.rules.TemporaryFolder;
import org.sonar.api.config.Encryption;
import org.sonar.api.config.internal.Encryption;
import org.sonar.api.config.internal.MapSettings; import org.sonar.api.config.internal.MapSettings;
import org.sonar.api.server.ws.WebService; import org.sonar.api.server.ws.WebService;
import org.sonar.server.exceptions.BadRequestException; import org.sonar.server.exceptions.BadRequestException;

+ 1
- 1
server/sonar-webserver-webapi/src/test/java/org/sonar/server/setting/ws/GenerateSecretKeyActionTest.java View File

import org.junit.Test; import org.junit.Test;
import org.junit.rules.ExpectedException; import org.junit.rules.ExpectedException;
import org.junit.rules.TemporaryFolder; import org.junit.rules.TemporaryFolder;
import org.sonar.api.config.Encryption;
import org.sonar.api.config.internal.Encryption;
import org.sonar.api.config.internal.MapSettings; import org.sonar.api.config.internal.MapSettings;
import org.sonar.api.server.ws.WebService; import org.sonar.api.server.ws.WebService;
import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.exceptions.ForbiddenException;

+ 3
- 5
sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/sensor/internal/SensorContextTester.java View File

import org.sonar.api.batch.sensor.symbol.NewSymbolTable; import org.sonar.api.batch.sensor.symbol.NewSymbolTable;
import org.sonar.api.batch.sensor.symbol.internal.DefaultSymbolTable; import org.sonar.api.batch.sensor.symbol.internal.DefaultSymbolTable;
import org.sonar.api.config.Configuration; import org.sonar.api.config.Configuration;
import org.sonar.api.config.Settings;
import org.sonar.api.config.internal.ConfigurationBridge; import org.sonar.api.config.internal.ConfigurationBridge;
import org.sonar.api.config.internal.MapSettings; import org.sonar.api.config.internal.MapSettings;
import org.sonar.api.internal.MetadataLoader; import org.sonar.api.internal.MetadataLoader;
*/ */
public class SensorContextTester implements SensorContext { public class SensorContextTester implements SensorContext {


private Settings settings;
private MapSettings settings;
private DefaultFileSystem fs; private DefaultFileSystem fs;
private ActiveRules activeRules; private ActiveRules activeRules;
private InMemorySensorStorage sensorStorage; private InMemorySensorStorage sensorStorage;
return new SensorContextTester(moduleBaseDir); return new SensorContextTester(moduleBaseDir);
} }


@Override
public Settings settings() {
public MapSettings settings() {
return settings; return settings;
} }


return new ConfigurationBridge(settings); return new ConfigurationBridge(settings);
} }


public SensorContextTester setSettings(Settings settings) {
public SensorContextTester setSettings(MapSettings settings) {
this.settings = settings; this.settings = settings;
return this; return this;
} }

sonar-plugin-api/src/main/java/org/sonar/api/config/AesCipher.java → sonar-plugin-api-impl/src/main/java/org/sonar/api/config/internal/AesCipher.java View File

* along with this program; if not, write to the Free Software Foundation, * along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/ */
package org.sonar.api.config;
package org.sonar.api.config.internal;


import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;

sonar-plugin-api/src/main/java/org/sonar/api/config/Base64Cipher.java → sonar-plugin-api-impl/src/main/java/org/sonar/api/config/internal/Base64Cipher.java View File

* along with this program; if not, write to the Free Software Foundation, * along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/ */
package org.sonar.api.config;
package org.sonar.api.config.internal;


import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.binary.Base64;



sonar-plugin-api/src/main/java/org/sonar/api/config/Cipher.java → sonar-plugin-api-impl/src/main/java/org/sonar/api/config/internal/Cipher.java View File

* along with this program; if not, write to the Free Software Foundation, * along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/ */
package org.sonar.api.config;
package org.sonar.api.config.internal;


interface Cipher { interface Cipher {
String encrypt(String clearText); String encrypt(String clearText);

+ 0
- 1
sonar-plugin-api-impl/src/main/java/org/sonar/api/config/internal/ConfigurationBridge.java View File

package org.sonar.api.config.internal; package org.sonar.api.config.internal;


import java.util.Optional; import java.util.Optional;
import org.sonar.api.config.Settings;
import org.sonar.api.config.Configuration; import org.sonar.api.config.Configuration;


/** /**

sonar-plugin-api/src/main/java/org/sonar/api/config/Encryption.java → sonar-plugin-api-impl/src/main/java/org/sonar/api/config/internal/Encryption.java View File

* along with this program; if not, write to the Free Software Foundation, * along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/ */
package org.sonar.api.config;
package org.sonar.api.config.internal;


import java.util.HashMap; import java.util.HashMap;
import java.util.Locale; import java.util.Locale;

+ 0
- 2
sonar-plugin-api-impl/src/main/java/org/sonar/api/config/internal/MapSettings.java View File

import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import org.sonar.api.config.Configuration; import org.sonar.api.config.Configuration;
import org.sonar.api.config.Encryption;
import org.sonar.api.config.PropertyDefinitions; import org.sonar.api.config.PropertyDefinitions;
import org.sonar.api.config.Settings;


import static java.util.Collections.unmodifiableMap; import static java.util.Collections.unmodifiableMap;
import static java.util.Objects.requireNonNull; import static java.util.Objects.requireNonNull;

sonar-plugin-api/src/main/java/org/sonar/api/config/Settings.java → sonar-plugin-api-impl/src/main/java/org/sonar/api/config/internal/Settings.java View File

* along with this program; if not, write to the Free Software Foundation, * along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/ */
package org.sonar.api.config;
package org.sonar.api.config.internal;


import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.sonar.api.ce.ComputeEngineSide; import org.sonar.api.ce.ComputeEngineSide;
import org.sonar.api.config.Configuration;
import org.sonar.api.config.PropertyDefinition;
import org.sonar.api.config.PropertyDefinitions;
import org.sonar.api.scanner.ScannerSide; import org.sonar.api.scanner.ScannerSide;
import org.sonar.api.server.ServerSide; import org.sonar.api.server.ServerSide;
import org.sonar.api.utils.DateUtils; import org.sonar.api.utils.DateUtils;

+ 8
- 9
sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/sensor/internal/SensorContextTesterTest.java View File

import org.junit.rules.TemporaryFolder; import org.junit.rules.TemporaryFolder;
import org.sonar.api.batch.bootstrap.ProjectDefinition; import org.sonar.api.batch.bootstrap.ProjectDefinition;
import org.sonar.api.batch.fs.InputFile; import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.fs.internal.DefaultFileSystem;
import org.sonar.api.batch.fs.internal.DefaultInputFile;
import org.sonar.api.batch.fs.internal.DefaultInputModule;
import org.sonar.api.batch.fs.internal.DefaultTextPointer;
import org.sonar.api.batch.fs.internal.TestInputFileBuilder;
import org.sonar.api.batch.rule.ActiveRules; import org.sonar.api.batch.rule.ActiveRules;
import org.sonar.api.batch.rule.Severity;
import org.sonar.api.batch.rule.internal.ActiveRulesBuilder; import org.sonar.api.batch.rule.internal.ActiveRulesBuilder;
import org.sonar.api.batch.rule.internal.NewActiveRule; import org.sonar.api.batch.rule.internal.NewActiveRule;
import org.sonar.api.batch.rule.Severity;
import org.sonar.api.batch.sensor.error.AnalysisError; import org.sonar.api.batch.sensor.error.AnalysisError;
import org.sonar.api.batch.sensor.error.NewAnalysisError; import org.sonar.api.batch.sensor.error.NewAnalysisError;
import org.sonar.api.batch.sensor.highlighting.TypeOfText; import org.sonar.api.batch.sensor.highlighting.TypeOfText;
import org.sonar.api.batch.sensor.issue.NewExternalIssue; import org.sonar.api.batch.sensor.issue.NewExternalIssue;
import org.sonar.api.batch.sensor.issue.NewIssue; import org.sonar.api.batch.sensor.issue.NewIssue;
import org.sonar.api.batch.sensor.symbol.NewSymbolTable; import org.sonar.api.batch.sensor.symbol.NewSymbolTable;
import org.sonar.api.config.Settings;
import org.sonar.api.config.internal.MapSettings; import org.sonar.api.config.internal.MapSettings;
import org.sonar.api.batch.fs.internal.DefaultFileSystem;
import org.sonar.api.batch.fs.internal.DefaultInputFile;
import org.sonar.api.batch.fs.internal.DefaultInputModule;
import org.sonar.api.batch.fs.internal.DefaultTextPointer;
import org.sonar.api.batch.fs.internal.TestInputFileBuilder;
import org.sonar.api.measures.CoreMetrics; import org.sonar.api.measures.CoreMetrics;
import org.sonar.api.rule.RuleKey; import org.sonar.api.rule.RuleKey;
import org.sonar.api.rules.RuleType; import org.sonar.api.rules.RuleType;


@Test @Test
public void testSettings() { public void testSettings() {
Settings settings = new MapSettings();
MapSettings settings = new MapSettings();
settings.setProperty("foo", "bar"); settings.setProperty("foo", "bar");
tester.setSettings(settings); tester.setSettings(settings);
assertThat(tester.settings().getString("foo")).isEqualTo("bar");
assertThat(tester.config().get("foo")).contains("bar");
} }


@Test @Test

sonar-plugin-api/src/test/java/org/sonar/api/config/AesCipherTest.java → sonar-plugin-api-impl/src/test/java/org/sonar/api/config/internal/AesCipherTest.java View File

* along with this program; if not, write to the Free Software Foundation, * along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/ */
package org.sonar.api.config;
package org.sonar.api.config.internal;


import java.io.File;
import java.net.URL;
import java.security.InvalidKeyException;
import java.security.Key;
import javax.crypto.BadPaddingException;
import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.junit.Rule; import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.rules.ExpectedException; import org.junit.rules.ExpectedException;


import javax.crypto.BadPaddingException;

import java.io.File;
import java.net.URL;
import java.security.InvalidKeyException;
import java.security.Key;

import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.fail; import static org.junit.Assert.fail;


thrown.expect(RuntimeException.class); thrown.expect(RuntimeException.class);
thrown.expectMessage("Invalid AES key"); thrown.expectMessage("Invalid AES key");


URL resource = getClass().getResource("/org/sonar/api/config/AesCipherTest/bad_secret_key.txt");
URL resource = getClass().getResource("/org/sonar/api/config/internal/AesCipherTest/bad_secret_key.txt");
AesCipher cipher = new AesCipher(new File(resource.toURI()).getCanonicalPath()); AesCipher cipher = new AesCipher(new File(resource.toURI()).getCanonicalPath());


cipher.encrypt("this is a secret"); cipher.encrypt("this is a secret");
public void decrypt() throws Exception { public void decrypt() throws Exception {
AesCipher cipher = new AesCipher(pathToSecretKey()); AesCipher cipher = new AesCipher(pathToSecretKey());


// the following value has been encrypted with the key /org/sonar/api/config/AesCipherTest/aes_secret_key.txt
// the following value has been encrypted with the key /org/sonar/api/config/internal/AesCipherTest/aes_secret_key.txt
String clearText = cipher.decrypt("9mx5Zq4JVyjeChTcVjEide4kWCwusFl7P2dSVXtg9IY="); String clearText = cipher.decrypt("9mx5Zq4JVyjeChTcVjEide4kWCwusFl7P2dSVXtg9IY=");


assertThat(clearText).isEqualTo("this is a secret"); assertThat(clearText).isEqualTo("this is a secret");


@Test @Test
public void decrypt_bad_key() throws Exception { public void decrypt_bad_key() throws Exception {
URL resource = getClass().getResource("/org/sonar/api/config/AesCipherTest/bad_secret_key.txt");
URL resource = getClass().getResource("/org/sonar/api/config/internal/AesCipherTest/bad_secret_key.txt");
AesCipher cipher = new AesCipher(new File(resource.toURI()).getCanonicalPath()); AesCipher cipher = new AesCipher(new File(resource.toURI()).getCanonicalPath());


try { try {


@Test @Test
public void decrypt_other_key() throws Exception { public void decrypt_other_key() throws Exception {
URL resource = getClass().getResource("/org/sonar/api/config/AesCipherTest/other_secret_key.txt");
URL resource = getClass().getResource("/org/sonar/api/config/internal/AesCipherTest/other_secret_key.txt");
AesCipher cipher = new AesCipher(new File(resource.toURI()).getCanonicalPath()); AesCipher cipher = new AesCipher(new File(resource.toURI()).getCanonicalPath());


try { try {


@Test @Test
public void loadSecretKeyFromFile_trim_content() throws Exception { public void loadSecretKeyFromFile_trim_content() throws Exception {
URL resource = getClass().getResource("/org/sonar/api/config/AesCipherTest/non_trimmed_secret_key.txt");
URL resource = getClass().getResource("/org/sonar/api/config/internal/AesCipherTest/non_trimmed_secret_key.txt");
String path = new File(resource.toURI()).getCanonicalPath(); String path = new File(resource.toURI()).getCanonicalPath();
AesCipher cipher = new AesCipher(null); AesCipher cipher = new AesCipher(null);


} }


private String pathToSecretKey() throws Exception { private String pathToSecretKey() throws Exception {
URL resource = getClass().getResource("/org/sonar/api/config/AesCipherTest/aes_secret_key.txt");
URL resource = getClass().getResource("/org/sonar/api/config/internal/AesCipherTest/aes_secret_key.txt");
return new File(resource.toURI()).getCanonicalPath(); return new File(resource.toURI()).getCanonicalPath();
} }
} }

sonar-plugin-api/src/test/java/org/sonar/api/config/EncryptionTest.java → sonar-plugin-api-impl/src/test/java/org/sonar/api/config/internal/EncryptionTest.java View File

* along with this program; if not, write to the Free Software Foundation, * along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/ */
package org.sonar.api.config;
package org.sonar.api.config.internal;


import org.junit.Test; import org.junit.Test;



+ 0
- 1
sonar-plugin-api-impl/src/test/java/org/sonar/api/config/internal/MapSettingsTest.java View File

import org.sonar.api.PropertyType; import org.sonar.api.PropertyType;
import org.sonar.api.config.PropertyDefinition; import org.sonar.api.config.PropertyDefinition;
import org.sonar.api.config.PropertyDefinitions; import org.sonar.api.config.PropertyDefinitions;
import org.sonar.api.config.Settings;
import org.sonar.api.utils.DateUtils; import org.sonar.api.utils.DateUtils;


import static java.util.Collections.singletonList; import static java.util.Collections.singletonList;

sonar-plugin-api/src/test/resources/org/sonar/api/config/AesCipherTest/aes_secret_key.txt → sonar-plugin-api-impl/src/test/resources/org/sonar/api/config/internal/AesCipherTest/aes_secret_key.txt View File


sonar-plugin-api/src/test/resources/org/sonar/api/config/AesCipherTest/bad_secret_key.txt → sonar-plugin-api-impl/src/test/resources/org/sonar/api/config/internal/AesCipherTest/bad_secret_key.txt View File


sonar-plugin-api/src/test/resources/org/sonar/api/config/AesCipherTest/non_trimmed_secret_key.txt → sonar-plugin-api-impl/src/test/resources/org/sonar/api/config/internal/AesCipherTest/non_trimmed_secret_key.txt View File


sonar-plugin-api/src/test/resources/org/sonar/api/config/AesCipherTest/other_secret_key.txt → sonar-plugin-api-impl/src/test/resources/org/sonar/api/config/internal/AesCipherTest/other_secret_key.txt View File


+ 0
- 1
sonar-plugin-api/build.gradle View File

dependencies { dependencies {
// please keep the list grouped by configuration and ordered by name // please keep the list grouped by configuration and ordered by name


compile 'commons-codec:commons-codec'
compile 'commons-io:commons-io' compile 'commons-io:commons-io'
compile 'commons-lang:commons-lang' compile 'commons-lang:commons-lang'
compile 'com.google.code.gson:gson' compile 'com.google.code.gson:gson'

+ 7
- 4
sonar-plugin-api/src/main/java/org/sonar/api/batch/bootstrap/ProjectBuilder.java View File

package org.sonar.api.batch.bootstrap; package org.sonar.api.batch.bootstrap;


import org.sonar.api.ExtensionPoint; import org.sonar.api.ExtensionPoint;
import org.sonar.api.config.Configuration;
import org.sonar.api.scanner.ScannerSide; import org.sonar.api.scanner.ScannerSide;


/** /**
@Deprecated @Deprecated
public abstract class ProjectBuilder { public abstract class ProjectBuilder {


/**
* Plugins can use the implementation {@link org.sonar.api.batch.bootstrap.internal.ProjectBuilderContext}
* for their unit tests.
*/
@Deprecated @Deprecated
public interface Context { public interface Context {
ProjectReactor projectReactor(); ProjectReactor projectReactor();

/**
* Global config (command line arguments, global scanner properties).
* @since 8.3 Only as a replacement for injecting Settings
*/
Configuration config();
} }


/** /**

+ 8
- 1
sonar-plugin-api/src/main/java/org/sonar/api/batch/bootstrap/internal/ProjectBuilderContext.java View File



import org.sonar.api.batch.bootstrap.ProjectBuilder; import org.sonar.api.batch.bootstrap.ProjectBuilder;
import org.sonar.api.batch.bootstrap.ProjectReactor; import org.sonar.api.batch.bootstrap.ProjectReactor;
import org.sonar.api.config.Configuration;


/** /**
* Context that is passed to {@link org.sonar.api.batch.bootstrap.ProjectBuilder} as parameter. * Context that is passed to {@link org.sonar.api.batch.bootstrap.ProjectBuilder} as parameter.
public class ProjectBuilderContext implements ProjectBuilder.Context { public class ProjectBuilderContext implements ProjectBuilder.Context {


private final ProjectReactor reactor; private final ProjectReactor reactor;
private final Configuration configuration;


public ProjectBuilderContext(ProjectReactor reactor) {
public ProjectBuilderContext(ProjectReactor reactor, Configuration configuration) {
this.reactor = reactor; this.reactor = reactor;
this.configuration = configuration;
} }


@Override @Override
return reactor; return reactor;
} }


@Override
public Configuration config() {
return configuration;
}
} }

+ 0
- 7
sonar-plugin-api/src/main/java/org/sonar/api/batch/postjob/PostJobContext.java View File

import org.sonar.api.batch.AnalysisMode; import org.sonar.api.batch.AnalysisMode;
import org.sonar.api.batch.postjob.issue.PostJobIssue; import org.sonar.api.batch.postjob.issue.PostJobIssue;
import org.sonar.api.config.Configuration; import org.sonar.api.config.Configuration;
import org.sonar.api.config.Settings;


/** /**
* See {@link PostJob#execute(PostJobContext)} * See {@link PostJob#execute(PostJobContext)}
*/ */
public interface PostJobContext { public interface PostJobContext {


/**
* @deprecated since 6.5 use {@link #config()}
*/
@Deprecated
Settings settings();

/** /**
* Get configuration of the current project. * Get configuration of the current project.
* @since 6.5 * @since 6.5

+ 0
- 7
sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/SensorContext.java View File

import org.sonar.api.batch.sensor.rule.NewAdHocRule; import org.sonar.api.batch.sensor.rule.NewAdHocRule;
import org.sonar.api.batch.sensor.symbol.NewSymbolTable; import org.sonar.api.batch.sensor.symbol.NewSymbolTable;
import org.sonar.api.config.Configuration; import org.sonar.api.config.Configuration;
import org.sonar.api.config.Settings;
import org.sonar.api.scanner.fs.InputProject; import org.sonar.api.scanner.fs.InputProject;
import org.sonar.api.scanner.sensor.ProjectSensor; import org.sonar.api.scanner.sensor.ProjectSensor;
import org.sonar.api.utils.Version; import org.sonar.api.utils.Version;
*/ */
public interface SensorContext { public interface SensorContext {


/**
* @deprecated since 6.5 use {@link #config()}
*/
@Deprecated
Settings settings();

/** /**
* Get settings of the project. * Get settings of the project.
* @since 6.5 * @since 6.5

+ 9
- 11
sonar-plugin-api/src/test/java/org/sonar/api/batch/bootstrap/ProjectBuilderTest.java View File

import java.io.File; import java.io.File;
import org.junit.Test; import org.junit.Test;
import org.sonar.api.batch.bootstrap.internal.ProjectBuilderContext; import org.sonar.api.batch.bootstrap.internal.ProjectBuilderContext;
import org.sonar.api.config.Settings;
import org.sonar.api.config.Configuration;
import org.sonar.api.config.internal.MapSettings; import org.sonar.api.config.internal.MapSettings;


import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
// this reactor is created and provided by Sonar // this reactor is created and provided by Sonar
final ProjectReactor projectReactor = new ProjectReactor(ProjectDefinition.create()); final ProjectReactor projectReactor = new ProjectReactor(ProjectDefinition.create());


ProjectBuilder builder = new ProjectBuilderSample(new MapSettings());
builder.build(new ProjectBuilderContext(projectReactor));
ProjectBuilder builder = new ProjectBuilderSample();
final MapSettings settings = new MapSettings();
settings.setProperty("foo", "bar");
final Configuration configuration = settings.asConfig();
builder.build(new ProjectBuilderContext(projectReactor, configuration));


assertThat(projectReactor.getProjects().size(), is(2)); assertThat(projectReactor.getProjects().size(), is(2));
ProjectDefinition root = projectReactor.getRoot(); ProjectDefinition root = projectReactor.getRoot();
} }


final static class ProjectBuilderSample extends ProjectBuilder { final static class ProjectBuilderSample extends ProjectBuilder {
private Settings conf;

public ProjectBuilderSample(Settings conf) {
// A real implementation should for example use the settings
this.conf = conf;
}


@Override @Override
protected void build(ProjectReactor reactor) {
public void build(Context context) {
assertThat(context.config().get("foo")).contains("bar");
// change name of root project // change name of root project
ProjectDefinition root = reactor.getRoot();
ProjectDefinition root = context.projectReactor().getRoot();
root.setName("Name changed by plugin"); root.setName("Name changed by plugin");


// add sub-project // add sub-project

+ 1
- 1
sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/GlobalConfiguration.java View File



import java.util.Map; import java.util.Map;
import javax.annotation.concurrent.Immutable; import javax.annotation.concurrent.Immutable;
import org.sonar.api.config.Encryption;
import org.sonar.api.config.internal.Encryption;
import org.sonar.api.config.PropertyDefinitions; import org.sonar.api.config.PropertyDefinitions;
import org.sonar.scanner.config.DefaultConfiguration; import org.sonar.scanner.config.DefaultConfiguration;



+ 1
- 1
sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/RawScannerProperties.java View File

import java.util.Map; import java.util.Map;
import javax.annotation.concurrent.Immutable; import javax.annotation.concurrent.Immutable;
import org.sonar.api.CoreProperties; import org.sonar.api.CoreProperties;
import org.sonar.api.config.Encryption;
import org.sonar.api.config.internal.Encryption;


/** /**
* Properties that are coming from scanner. * Properties that are coming from scanner.

+ 1
- 1
sonar-scanner-engine/src/main/java/org/sonar/scanner/config/DefaultConfiguration.java View File

import javax.annotation.concurrent.Immutable; import javax.annotation.concurrent.Immutable;
import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.ArrayUtils;
import org.sonar.api.config.Configuration; import org.sonar.api.config.Configuration;
import org.sonar.api.config.Encryption;
import org.sonar.api.config.internal.Encryption;
import org.sonar.api.config.PropertyDefinition; import org.sonar.api.config.PropertyDefinition;
import org.sonar.api.config.PropertyDefinitions; import org.sonar.api.config.PropertyDefinitions;
import org.sonar.api.utils.log.Logger; import org.sonar.api.utils.log.Logger;

+ 1
- 9
sonar-scanner-engine/src/main/java/org/sonar/scanner/postjob/DefaultPostJobContext.java View File

import org.sonar.api.batch.postjob.PostJobContext; import org.sonar.api.batch.postjob.PostJobContext;
import org.sonar.api.batch.postjob.issue.PostJobIssue; import org.sonar.api.batch.postjob.issue.PostJobIssue;
import org.sonar.api.config.Configuration; import org.sonar.api.config.Configuration;
import org.sonar.api.config.Settings;


public class DefaultPostJobContext implements PostJobContext { public class DefaultPostJobContext implements PostJobContext {


private final Configuration config; private final Configuration config;
private final AnalysisMode analysisMode; private final AnalysisMode analysisMode;
private final Settings mutableSettings;


public DefaultPostJobContext(Configuration config, Settings mutableSettings, AnalysisMode analysisMode) {
public DefaultPostJobContext(Configuration config, AnalysisMode analysisMode) {
this.config = config; this.config = config;
this.mutableSettings = mutableSettings;
this.analysisMode = analysisMode; this.analysisMode = analysisMode;
} }


@Override
public Settings settings() {
return mutableSettings;
}

@Override @Override
public Configuration config() { public Configuration config() {
return config; return config;

+ 1
- 1
sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ModuleConfiguration.java View File

package org.sonar.scanner.scan; package org.sonar.scanner.scan;


import java.util.Map; import java.util.Map;
import org.sonar.api.config.Encryption;
import org.sonar.api.config.internal.Encryption;
import org.sonar.api.config.PropertyDefinitions; import org.sonar.api.config.PropertyDefinitions;
import org.sonar.scanner.config.DefaultConfiguration; import org.sonar.scanner.config.DefaultConfiguration;



+ 1
- 1
sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/MutableModuleSettings.java View File

import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import org.sonar.api.config.Settings;
import org.sonar.api.config.internal.Settings;


import static java.util.Objects.requireNonNull; import static java.util.Objects.requireNonNull;



+ 1
- 1
sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/MutableProjectSettings.java View File

import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import org.sonar.api.config.Settings;
import org.sonar.api.config.internal.Settings;
import org.sonar.scanner.bootstrap.GlobalConfiguration; import org.sonar.scanner.bootstrap.GlobalConfiguration;


import static java.util.Objects.requireNonNull; import static java.util.Objects.requireNonNull;

+ 7
- 4
sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ProjectBuildersExecutor.java View File

import org.sonar.api.utils.log.Logger; import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers; import org.sonar.api.utils.log.Loggers;
import org.sonar.api.utils.log.Profiler; import org.sonar.api.utils.log.Profiler;
import org.sonar.scanner.bootstrap.GlobalConfiguration;


public class ProjectBuildersExecutor { public class ProjectBuildersExecutor {


private static final Logger LOG = Loggers.get(ProjectBuildersExecutor.class); private static final Logger LOG = Loggers.get(ProjectBuildersExecutor.class);


private final GlobalConfiguration globalConfig;
private final ProjectBuilder[] projectBuilders; private final ProjectBuilder[] projectBuilders;


public ProjectBuildersExecutor(ProjectBuilder... projectBuilders) {
public ProjectBuildersExecutor(GlobalConfiguration globalConfig, ProjectBuilder... projectBuilders) {
this.globalConfig = globalConfig;
this.projectBuilders = projectBuilders; this.projectBuilders = projectBuilders;
} }


public ProjectBuildersExecutor() {
this(new ProjectBuilder[0]);
public ProjectBuildersExecutor(GlobalConfiguration globalConfig) {
this(globalConfig, new ProjectBuilder[0]);
} }


public void execute(ProjectReactor reactor) { public void execute(ProjectReactor reactor) {
if (projectBuilders.length > 0) { if (projectBuilders.length > 0) {
Profiler profiler = Profiler.create(LOG).startInfo("Execute project builders"); Profiler profiler = Profiler.create(LOG).startInfo("Execute project builders");
ProjectBuilderContext context = new ProjectBuilderContext(reactor);
ProjectBuilderContext context = new ProjectBuilderContext(reactor, globalConfig);


for (ProjectBuilder projectBuilder : projectBuilders) { for (ProjectBuilder projectBuilder : projectBuilders) {
try { try {

+ 1
- 1
sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ProjectConfiguration.java View File

package org.sonar.scanner.scan; package org.sonar.scanner.scan;


import java.util.Map; import java.util.Map;
import org.sonar.api.config.Encryption;
import org.sonar.api.config.internal.Encryption;
import org.sonar.api.config.PropertyDefinitions; import org.sonar.api.config.PropertyDefinitions;
import org.sonar.scanner.config.DefaultConfiguration; import org.sonar.scanner.config.DefaultConfiguration;



+ 3
- 4
sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/ModuleSensorContext.java View File

import org.sonar.api.SonarRuntime; import org.sonar.api.SonarRuntime;
import org.sonar.api.batch.fs.FileSystem; import org.sonar.api.batch.fs.FileSystem;
import org.sonar.api.batch.fs.InputModule; import org.sonar.api.batch.fs.InputModule;
import org.sonar.api.batch.fs.internal.DefaultInputProject;
import org.sonar.api.batch.rule.ActiveRules; import org.sonar.api.batch.rule.ActiveRules;
import org.sonar.api.batch.sensor.internal.SensorStorage; import org.sonar.api.batch.sensor.internal.SensorStorage;
import org.sonar.api.config.Configuration; import org.sonar.api.config.Configuration;
import org.sonar.api.config.Settings;
import org.sonar.api.batch.fs.internal.DefaultInputProject;


@ThreadSafe @ThreadSafe
public class ModuleSensorContext extends ProjectSensorContext { public class ModuleSensorContext extends ProjectSensorContext {


private final InputModule module; private final InputModule module;


public ModuleSensorContext(DefaultInputProject project, InputModule module, Configuration config, Settings mutableSettings, FileSystem fs, ActiveRules activeRules,
public ModuleSensorContext(DefaultInputProject project, InputModule module, Configuration config, FileSystem fs, ActiveRules activeRules,
SensorStorage sensorStorage, SonarRuntime sonarRuntime) { SensorStorage sensorStorage, SonarRuntime sonarRuntime) {
super(project, config, mutableSettings, fs, activeRules, sensorStorage, sonarRuntime);
super(project, config, fs, activeRules, sensorStorage, sonarRuntime);
this.module = module; this.module = module;
} }



+ 1
- 9
sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/ProjectSensorContext.java View File

import org.sonar.api.batch.sensor.symbol.NewSymbolTable; import org.sonar.api.batch.sensor.symbol.NewSymbolTable;
import org.sonar.api.batch.sensor.symbol.internal.DefaultSymbolTable; import org.sonar.api.batch.sensor.symbol.internal.DefaultSymbolTable;
import org.sonar.api.config.Configuration; import org.sonar.api.config.Configuration;
import org.sonar.api.config.Settings;
import org.sonar.api.scanner.fs.InputProject; import org.sonar.api.scanner.fs.InputProject;
import org.sonar.api.utils.Version; import org.sonar.api.utils.Version;
import org.sonar.scanner.sensor.noop.NoOpNewAnalysisError; import org.sonar.scanner.sensor.noop.NoOpNewAnalysisError;


static final NoOpNewAnalysisError NO_OP_NEW_ANALYSIS_ERROR = new NoOpNewAnalysisError(); static final NoOpNewAnalysisError NO_OP_NEW_ANALYSIS_ERROR = new NoOpNewAnalysisError();


private final Settings mutableSettings;
private final FileSystem fs; private final FileSystem fs;
private final ActiveRules activeRules; private final ActiveRules activeRules;
private final SensorStorage sensorStorage; private final SensorStorage sensorStorage;
private final SonarRuntime sonarRuntime; private final SonarRuntime sonarRuntime;
private final Configuration config; private final Configuration config;


public ProjectSensorContext(DefaultInputProject project, Configuration config, Settings mutableSettings, FileSystem fs, ActiveRules activeRules,
public ProjectSensorContext(DefaultInputProject project, Configuration config, FileSystem fs, ActiveRules activeRules,
SensorStorage sensorStorage, SonarRuntime sonarRuntime) { SensorStorage sensorStorage, SonarRuntime sonarRuntime) {
this.project = project; this.project = project;
this.config = config; this.config = config;
this.mutableSettings = mutableSettings;
this.fs = fs; this.fs = fs;
this.activeRules = activeRules; this.activeRules = activeRules;
this.sensorStorage = sensorStorage; this.sensorStorage = sensorStorage;
this.sonarRuntime = sonarRuntime; this.sonarRuntime = sonarRuntime;
} }


@Override
public Settings settings() {
return mutableSettings;
}

@Override @Override
public Configuration config() { public Configuration config() {
return config; return config;

+ 1
- 1
sonar-scanner-engine/src/test/java/org/sonar/scanner/config/DefaultConfigurationTest.java View File

import org.junit.Rule; import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.sonar.api.config.Configuration; import org.sonar.api.config.Configuration;
import org.sonar.api.config.Encryption;
import org.sonar.api.config.internal.Encryption;
import org.sonar.api.config.PropertyDefinition; import org.sonar.api.config.PropertyDefinition;
import org.sonar.api.config.PropertyDefinitions; import org.sonar.api.config.PropertyDefinitions;
import org.sonar.api.config.PropertyFieldDefinition; import org.sonar.api.config.PropertyFieldDefinition;

+ 1
- 1
sonar-scanner-engine/src/test/java/org/sonar/scanner/genericcoverage/GenericCoverageSensorTest.java View File

import java.util.Set; import java.util.Set;
import org.junit.Rule; import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.sonar.api.config.Encryption;
import org.sonar.api.config.internal.Encryption;
import org.sonar.api.config.PropertyDefinitions; import org.sonar.api.config.PropertyDefinitions;
import org.sonar.api.utils.log.LogTester; import org.sonar.api.utils.log.LogTester;
import org.sonar.scanner.config.DefaultConfiguration; import org.sonar.scanner.config.DefaultConfiguration;

+ 1
- 1
sonar-scanner-engine/src/test/java/org/sonar/scanner/genericcoverage/GenericTestExecutionSensorTest.java View File

import org.junit.Rule; import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.rules.TemporaryFolder; import org.junit.rules.TemporaryFolder;
import org.sonar.api.config.Encryption;
import org.sonar.api.config.internal.Encryption;
import org.sonar.api.config.PropertyDefinitions; import org.sonar.api.config.PropertyDefinitions;
import org.sonar.api.utils.log.LogTester; import org.sonar.api.utils.log.LogTester;
import org.sonar.api.utils.log.LoggerLevel; import org.sonar.api.utils.log.LoggerLevel;

+ 1
- 1
sonar-scanner-engine/src/test/java/org/sonar/scanner/platform/DefaultServerTest.java View File

import org.junit.Test; import org.junit.Test;
import org.sonar.api.CoreProperties; import org.sonar.api.CoreProperties;
import org.sonar.api.SonarQubeSide; import org.sonar.api.SonarQubeSide;
import org.sonar.api.config.Settings;
import org.sonar.api.config.internal.Settings;
import org.sonar.api.config.internal.MapSettings; import org.sonar.api.config.internal.MapSettings;
import org.sonar.api.internal.SonarRuntimeImpl; import org.sonar.api.internal.SonarRuntimeImpl;
import org.sonar.api.utils.Version; import org.sonar.api.utils.Version;

+ 1
- 7
sonar-scanner-engine/src/test/java/org/sonar/scanner/postjob/DefaultPostJobContextTest.java View File

import org.sonar.api.batch.AnalysisMode; import org.sonar.api.batch.AnalysisMode;
import org.sonar.api.config.internal.MapSettings; import org.sonar.api.config.internal.MapSettings;


import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;


public class DefaultPostJobContextTest { public class DefaultPostJobContextTest {
public void setUp() { public void setUp() {
settings = new MapSettings(); settings = new MapSettings();
AnalysisMode analysisMode = mock(AnalysisMode.class); AnalysisMode analysisMode = mock(AnalysisMode.class);
context = new DefaultPostJobContext(settings.asConfig(), settings, analysisMode);
}

@Test
public void testSettings() {
assertThat(context.settings()).isSameAs(settings);
context = new DefaultPostJobContext(settings.asConfig(), analysisMode);
} }


@Test(expected=UnsupportedOperationException.class) @Test(expected=UnsupportedOperationException.class)

+ 3
- 2
sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/ProjectBuildersExecutorTest.java View File

import org.sonar.api.batch.bootstrap.ProjectBuilder.Context; import org.sonar.api.batch.bootstrap.ProjectBuilder.Context;
import org.sonar.api.batch.bootstrap.ProjectReactor; import org.sonar.api.batch.bootstrap.ProjectReactor;
import org.sonar.api.utils.MessageException; import org.sonar.api.utils.MessageException;
import org.sonar.scanner.bootstrap.GlobalConfiguration;


import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.doThrow;


exception.expectMessage("Failed to execute project builder: Mock for ProjectBuilder"); exception.expectMessage("Failed to execute project builder: Mock for ProjectBuilder");
exception.expect(MessageException.class); exception.expect(MessageException.class);
new ProjectBuildersExecutor(projectBuilders).execute(reactor);
new ProjectBuildersExecutor(mock(GlobalConfiguration.class), projectBuilders).execute(reactor);
} }


@Test @Test


exception.expectMessage("Failed to execute project builder: org.sonar.scanner.scan.ProjectBuildersExecutorTest$MyProjectBuilder"); exception.expectMessage("Failed to execute project builder: org.sonar.scanner.scan.ProjectBuildersExecutorTest$MyProjectBuilder");
exception.expect(MessageException.class); exception.expect(MessageException.class);
new ProjectBuildersExecutor(projectBuilders).execute(reactor);
new ProjectBuildersExecutor(mock(GlobalConfiguration.class), projectBuilders).execute(reactor);
} }


static class MyProjectBuilder extends ProjectBuilder { static class MyProjectBuilder extends ProjectBuilder {

+ 1
- 2
sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/ModuleSensorContextTest.java View File

settings = new MapSettings(); settings = new MapSettings();
sensorStorage = mock(SensorStorage.class); sensorStorage = mock(SensorStorage.class);
runtime = SonarRuntimeImpl.forSonarQube(Version.parse("5.5"), SonarQubeSide.SCANNER, SonarEdition.COMMUNITY); runtime = SonarRuntimeImpl.forSonarQube(Version.parse("5.5"), SonarQubeSide.SCANNER, SonarEdition.COMMUNITY);
adaptor = new ModuleSensorContext(mock(DefaultInputProject.class), mock(InputModule.class), settings.asConfig(), settings, fs, activeRules, sensorStorage, runtime);
adaptor = new ModuleSensorContext(mock(DefaultInputProject.class), mock(InputModule.class), settings.asConfig(), fs, activeRules, sensorStorage, runtime);
} }


@Test @Test
public void shouldProvideComponents() { public void shouldProvideComponents() {
assertThat(adaptor.activeRules()).isEqualTo(activeRules); assertThat(adaptor.activeRules()).isEqualTo(activeRules);
assertThat(adaptor.fileSystem()).isEqualTo(fs); assertThat(adaptor.fileSystem()).isEqualTo(fs);
assertThat(adaptor.settings()).isEqualTo(settings);
assertThat(adaptor.getSonarQubeVersion()).isEqualTo(Version.parse("5.5")); assertThat(adaptor.getSonarQubeVersion()).isEqualTo(Version.parse("5.5"));
assertThat(adaptor.runtime()).isEqualTo(runtime); assertThat(adaptor.runtime()).isEqualTo(runtime);



Loading…
Cancel
Save