From fa5e05ed1f61182122c2a72d292c5f45061dba2c Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Wed, 23 Jul 2014 09:59:59 +0200 Subject: [PATCH] SONAR-5477 Return global settings from database in /batch/global WS --- .../batch/GlobalReferentialsAction.java | 23 ++++++------- .../org/sonar/server/batch/BatchWsTest.java | 4 +-- .../batch/GlobalReferentialsActionTest.java | 34 +++++++++++-------- .../sonar/core/properties/PropertiesDao.java | 9 +++-- 4 files changed, 39 insertions(+), 31 deletions(-) diff --git a/server/sonar-server/src/main/java/org/sonar/server/batch/GlobalReferentialsAction.java b/server/sonar-server/src/main/java/org/sonar/server/batch/GlobalReferentialsAction.java index f733b8b9566..286f37021be 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/batch/GlobalReferentialsAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/batch/GlobalReferentialsAction.java @@ -21,7 +21,6 @@ package org.sonar.server.batch; import org.apache.commons.io.IOUtils; -import org.sonar.api.config.Settings; import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.RequestHandler; import org.sonar.api.server.ws.Response; @@ -31,25 +30,25 @@ import org.sonar.core.measure.db.MetricDto; import org.sonar.core.permission.GlobalPermissions; import org.sonar.core.persistence.DbSession; import org.sonar.core.persistence.MyBatis; +import org.sonar.core.properties.PropertiesDao; +import org.sonar.core.properties.PropertyDto; import org.sonar.server.db.DbClient; import org.sonar.server.plugins.MimeTypes; import org.sonar.server.user.UserSession; -import java.util.Map; - public class GlobalReferentialsAction implements RequestHandler { private final DbClient dbClient; - private final Settings settings; + private final PropertiesDao propertiesDao; - public GlobalReferentialsAction(DbClient dbClient, Settings settings) { + public GlobalReferentialsAction(DbClient dbClient, PropertiesDao propertiesDao) { this.dbClient = dbClient; - this.settings = settings; + this.propertiesDao = propertiesDao; } void define(WebService.NewController controller) { controller.createAction("global") - .setDescription("Return global referentials") + .setDescription("Return metrics and global properties") .setSince("4.5") .setInternal(true) .setHandler(this); @@ -65,7 +64,7 @@ public class GlobalReferentialsAction implements RequestHandler { try { GlobalReferentials ref = new GlobalReferentials(); addMetrics(ref, session); - addSettings(ref, hasScanPerm, hasDryRunPerm); + addSettings(ref, hasScanPerm, hasDryRunPerm, session); response.stream().setMediaType(MimeTypes.JSON); IOUtils.write(ref.toJson(), response.stream().output()); @@ -91,10 +90,10 @@ public class GlobalReferentialsAction implements RequestHandler { } } - private void addSettings(GlobalReferentials ref, boolean hasScanPerm, boolean hasDryRunPerm) { - for (Map.Entry entry : settings.getProperties().entrySet()) { - String key = entry.getKey(); - String value = entry.getValue(); + private void addSettings(GlobalReferentials ref, boolean hasScanPerm, boolean hasDryRunPerm, DbSession session) { + for (PropertyDto propertyDto : propertiesDao.selectGlobalProperties(session)) { + String key = propertyDto.getKey(); + String value = propertyDto.getValue(); if (isPropertyAllowed(key, hasScanPerm, hasDryRunPerm)) { ref.addGlobalSetting(key, value); diff --git a/server/sonar-server/src/test/java/org/sonar/server/batch/BatchWsTest.java b/server/sonar-server/src/test/java/org/sonar/server/batch/BatchWsTest.java index 35a48d01451..bef1af04f54 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/batch/BatchWsTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/batch/BatchWsTest.java @@ -28,7 +28,7 @@ import org.junit.rules.TemporaryFolder; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; -import org.sonar.api.config.Settings; +import org.sonar.core.properties.PropertiesDao; import org.sonar.server.db.DbClient; import org.sonar.server.ws.WsTester; @@ -55,7 +55,7 @@ public class BatchWsTest { @Before public void before() throws IOException { - tester = new WsTester(new BatchWs(batchIndex, new GlobalReferentialsAction(mock(DbClient.class), mock(Settings.class)))); + tester = new WsTester(new BatchWs(batchIndex, new GlobalReferentialsAction(mock(DbClient.class), mock(PropertiesDao.class)))); } @Test diff --git a/server/sonar-server/src/test/java/org/sonar/server/batch/GlobalReferentialsActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/batch/GlobalReferentialsActionTest.java index 42b107eca07..d3f9fb9906a 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/batch/GlobalReferentialsActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/batch/GlobalReferentialsActionTest.java @@ -25,10 +25,11 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; -import org.sonar.api.config.Settings; import org.sonar.core.measure.db.MetricDto; import org.sonar.core.permission.GlobalPermissions; import org.sonar.core.persistence.DbSession; +import org.sonar.core.properties.PropertiesDao; +import org.sonar.core.properties.PropertyDto; import org.sonar.server.db.DbClient; import org.sonar.server.measure.persistence.MetricDao; import org.sonar.server.user.MockUserSession; @@ -47,7 +48,8 @@ public class GlobalReferentialsActionTest { @Mock MetricDao metricDao; - Settings settings; + @Mock + PropertiesDao propertiesDao; WsTester tester; @@ -57,9 +59,7 @@ public class GlobalReferentialsActionTest { when(dbClient.openSession(false)).thenReturn(session); when(dbClient.metricDao()).thenReturn(metricDao); - settings = new Settings(); - - tester = new WsTester(new BatchWs(mock(BatchIndex.class), new GlobalReferentialsAction(dbClient, settings))); + tester = new WsTester(new BatchWs(mock(BatchIndex.class), new GlobalReferentialsAction(dbClient, propertiesDao))); } @Test @@ -77,9 +77,11 @@ public class GlobalReferentialsActionTest { public void return_global_settings() throws Exception { MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION, GlobalPermissions.DRY_RUN_EXECUTION); - settings.setProperty("foo", "bar"); - settings.setProperty("foo.secured", "1234"); - settings.setProperty("foo.license.secured", "5678"); + when(propertiesDao.selectGlobalProperties(session)).thenReturn(newArrayList( + new PropertyDto().setKey("foo").setValue("bar"), + new PropertyDto().setKey("foo.secured").setValue("1234"), + new PropertyDto().setKey("foo.license.secured").setValue("5678") + )); WsTester.TestRequest request = tester.newGetRequest("batch", "global"); request.execute().assertJson(getClass(), "return_global_settings.json"); @@ -89,9 +91,11 @@ public class GlobalReferentialsActionTest { public void return_only_license_settings_without_scan_but_with_preview_permission() throws Exception { MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.DRY_RUN_EXECUTION); - settings.setProperty("foo", "bar"); - settings.setProperty("foo.secured", "1234"); - settings.setProperty("foo.license.secured", "5678"); + when(propertiesDao.selectGlobalProperties(session)).thenReturn(newArrayList( + new PropertyDto().setKey("foo").setValue("bar"), + new PropertyDto().setKey("foo.secured").setValue("1234"), + new PropertyDto().setKey("foo.license.secured").setValue("5678") + )); WsTester.TestRequest request = tester.newGetRequest("batch", "global"); request.execute().assertJson(getClass(), "return_only_license_settings_without_scan_but_with_preview_permission.json"); @@ -101,9 +105,11 @@ public class GlobalReferentialsActionTest { public void return_no_secured_settings_without_scan_and_preview_permission() throws Exception { MockUserSession.set().setLogin("john").setGlobalPermissions(); - settings.setProperty("foo", "bar"); - settings.setProperty("foo.secured", "1234"); - settings.setProperty("foo.license.secured", "5678"); + when(propertiesDao.selectGlobalProperties(session)).thenReturn(newArrayList( + new PropertyDto().setKey("foo").setValue("bar"), + new PropertyDto().setKey("foo.secured").setValue("1234"), + new PropertyDto().setKey("foo.license.secured").setValue("5678") + )); WsTester.TestRequest request = tester.newGetRequest("batch", "global"); request.execute().assertJson(getClass(), "return_no_secured_settings_without_scan_and_preview_permission.json"); diff --git a/sonar-core/src/main/java/org/sonar/core/properties/PropertiesDao.java b/sonar-core/src/main/java/org/sonar/core/properties/PropertiesDao.java index be7e5ed7028..756ed70d824 100644 --- a/sonar-core/src/main/java/org/sonar/core/properties/PropertiesDao.java +++ b/sonar-core/src/main/java/org/sonar/core/properties/PropertiesDao.java @@ -24,8 +24,8 @@ import com.google.common.base.Strings; import org.apache.commons.lang.StringUtils; import org.apache.ibatis.session.SqlSession; import org.sonar.api.BatchComponent; -import org.sonar.core.persistence.DaoComponent; import org.sonar.api.ServerComponent; +import org.sonar.core.persistence.DaoComponent; import org.sonar.core.persistence.DbSession; import org.sonar.core.persistence.MyBatis; @@ -74,14 +74,17 @@ public class PropertiesDao implements BatchComponent, ServerComponent, DaoCompon public List selectGlobalProperties() { SqlSession session = mybatis.openSession(false); - PropertiesMapper mapper = session.getMapper(PropertiesMapper.class); try { - return mapper.selectGlobalProperties(); + return selectGlobalProperties(session); } finally { MyBatis.closeQuietly(session); } } + public List selectGlobalProperties(SqlSession session) { + return session.getMapper(PropertiesMapper.class).selectGlobalProperties(); + } + public PropertyDto selectGlobalProperty(String propertyKey) { SqlSession session = mybatis.openSession(false); PropertiesMapper mapper = session.getMapper(PropertiesMapper.class); -- 2.39.5