From 1b42db46981f2437941a9fe228140b1775d16cdc Mon Sep 17 00:00:00 2001 From: Simon Brandhof Date: Fri, 23 May 2014 17:14:08 +0200 Subject: [PATCH] SONAR-5007 add ACTIVE_RULES.CREATED_AT / UPDATED_AT and sanitize DAOs --- .../rule/ActiveRulesProviderTest/shared.xml | 4 +- .../core/persistence/DatabaseVersion.java | 2 +- .../qualityprofile/db/QualityProfileDao.java | 104 +++-- .../org/sonar/core/persistence/rows-h2.sql | 1 + .../org/sonar/core/persistence/schema-h2.ddl | 4 +- .../db/QualityProfileDaoTest.java | 2 +- .../db/ActiveRuleDaoTest/delete-result.xml | 6 +- .../delete_from_profile-result.xml | 6 +- .../delete_from_rule-result.xml | 6 +- .../delete_parameter-result.xml | 4 +- .../delete_parameters-result.xml | 4 +- ...lete_parameters_from_profile_id-result.xml | 6 +- .../delete_parameters_from_profile_id.xml | 6 +- .../db/ActiveRuleDaoTest/insert-result.xml | 2 +- .../db/ActiveRuleDaoTest/shared.xml | 6 +- .../db/ActiveRuleDaoTest/update-result.xml | 6 +- ...uleParametersFromARuleParameter-result.xml | 4 +- ...ActiveRuleParametersFromARuleParameter.xml | 4 +- .../shouldDeleteActiveRules-result.xml | 6 +- .../RulesDaoTest/shouldDeleteActiveRules.xml | 12 +- .../dao/RulesDaoTest/shouldGetActiveRules.xml | 6 +- .../qualityprofile/ActiveRuleService.java | 5 + .../sonar/server/qualityprofile/QProfile.java | 12 +- .../server/qualityprofile/QProfileBackup.java | 3 +- .../server/qualityprofile/QProfileLookup.java | 37 +- .../qualityprofile/QProfileOperations.java | 31 +- .../qualityprofile/QProfileProjectLookup.java | 13 +- .../QProfileProjectOperations.java | 14 +- .../RegisterQualityProfiles.java | 4 +- .../qualityprofile/index/ActiveRuleIndex.java | 22 +- .../538_add_dates_to_active_rules_table.rb | 39 ++ .../migrate/539_insert_active_rule_dates.rb | 31 ++ .../ActiveRuleServiceMediumTest.java | 64 +-- .../QProfileOperationsTest.java | 19 +- .../RegisterQualityProfilesTest.java | 369 ------------------ .../index/ActiveRuleIndexMediumTest.java | 75 +++- .../persistence/ActiveRuleDaoTest.java | 4 +- .../server/rule2/RuleServiceMediumTest.java | 4 +- .../server/rule2/ws/RulesWebServiceTest.java | 14 +- .../shouldActivateInChildren-result.xml | 4 +- .../shouldActivateInChildren.xml | 2 +- .../shouldChangeParent-result.xml | 6 +- .../shouldChangeParent.xml | 6 +- .../shouldDeactivateInChildren-result.xml | 2 +- .../shouldDeactivateInChildren.xml | 4 +- ...NotDeactivateOverridingChildren-result.xml | 4 +- .../shouldNotDeactivateOverridingChildren.xml | 4 +- .../shouldRemoveParent-result.xml | 2 +- .../shouldRemoveParent.xml | 4 +- .../shouldSetParent-result.xml | 4 +- .../InheritedProfilesTest/shouldSetParent.xml | 2 +- .../RuleChangeTest/changeParentProfile.xml | 6 +- .../RuleChangeTest/initialData.xml | 6 +- .../removeActivatedRules-result.xml | 2 +- .../RuleChangeTest/ruleReverted.xml | 4 +- ...aram_change_on_rule_revert_if_no_param.xml | 4 +- .../ActiveRuleDaoTest/delete-result.xml | 6 +- .../delete_from_profile-result.xml | 6 +- .../delete_from_rule-result.xml | 6 +- .../delete_parameter-result.xml | 4 +- .../delete_parameters-result.xml | 4 +- ...lete_parameters_from_profile_id-result.xml | 6 +- .../delete_parameters_from_profile_id.xml | 6 +- .../ActiveRuleDaoTest/insert-result.xml | 2 +- .../ActiveRuleDaoTest/insert_parameter.xml | 2 +- .../persistence/ActiveRuleDaoTest/shared.xml | 6 +- .../ActiveRuleDaoTest/update-result.xml | 6 +- ...e_deprecated_active_rule_params-result.xml | 2 +- .../disable_deprecated_active_rule_params.xml | 2 +- .../disable_deprecated_active_rules.xml | 4 +- ...e_deprecated_active_rule_params-result.xml | 2 +- .../disable_deprecated_active_rule_params.xml | 2 +- .../disable_deprecated_active_rules.xml | 4 +- 73 files changed, 449 insertions(+), 648 deletions(-) create mode 100644 sonar-server/src/main/webapp/WEB-INF/db/migrate/538_add_dates_to_active_rules_table.rb create mode 100644 sonar-server/src/main/webapp/WEB-INF/db/migrate/539_insert_active_rule_dates.rb delete mode 100644 sonar-server/src/test/java/org/sonar/server/qualityprofile/RegisterQualityProfilesTest.java diff --git a/sonar-batch/src/test/resources/org/sonar/batch/rule/ActiveRulesProviderTest/shared.xml b/sonar-batch/src/test/resources/org/sonar/batch/rule/ActiveRulesProviderTest/shared.xml index 695222a8c53..ca968f8fe5f 100644 --- a/sonar-batch/src/test/resources/org/sonar/batch/rule/ActiveRulesProviderTest/shared.xml +++ b/sonar-batch/src/test/resources/org/sonar/batch/rule/ActiveRulesProviderTest/shared.xml @@ -13,11 +13,11 @@ used_profile="[false]"/> - + - + diff --git a/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java b/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java index d18002ce859..035ce2a7e99 100644 --- a/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java +++ b/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java @@ -33,7 +33,7 @@ import java.util.List; */ public class DatabaseVersion implements BatchComponent, ServerComponent { - public static final int LAST_VERSION = 537; + public static final int LAST_VERSION = 539; public static enum Status { UP_TO_DATE, REQUIRES_UPGRADE, REQUIRES_DOWNGRADE, FRESH_INSTALL diff --git a/sonar-core/src/main/java/org/sonar/core/qualityprofile/db/QualityProfileDao.java b/sonar-core/src/main/java/org/sonar/core/qualityprofile/db/QualityProfileDao.java index 6c598bfc230..f9fb3ba1fcb 100644 --- a/sonar-core/src/main/java/org/sonar/core/qualityprofile/db/QualityProfileDao.java +++ b/sonar-core/src/main/java/org/sonar/core/qualityprofile/db/QualityProfileDao.java @@ -21,7 +21,6 @@ package org.sonar.core.qualityprofile.db; import com.google.common.base.Preconditions; -import org.apache.ibatis.session.SqlSession; import org.sonar.api.ServerComponent; import org.sonar.core.component.ComponentDto; import org.sonar.core.persistence.DaoComponent; @@ -48,28 +47,54 @@ public class QualityProfileDao implements ServerComponent, DaoComponent { return session.getMapper(QualityProfileMapper.class).selectAll(); } - public void insert(QualityProfileDto dto, SqlSession session) { - session.getMapper(QualityProfileMapper.class).insert(dto); + public void insert(DbSession session, QualityProfileDto profile, QualityProfileDto... otherProfiles) { + QualityProfileMapper mapper = session.getMapper(QualityProfileMapper.class); + doInsert(mapper, profile); + for (QualityProfileDto other : otherProfiles) { + doInsert(mapper, other); + } + } + + private void doInsert(QualityProfileMapper mapper, QualityProfileDto profile) { + Preconditions.checkArgument(profile.getId() == null, "Quality profile is already persisted (got id %d)", profile.getId()); + mapper.insert(profile); } + /** + * @deprecated use {@link #insert(org.sonar.core.persistence.DbSession, QualityProfileDto, QualityProfileDto...)} + */ + @Deprecated public void insert(QualityProfileDto dto) { - SqlSession session = mybatis.openSession(false); + DbSession session = mybatis.openSession(false); try { - insert(dto, session); + insert(session, dto); session.commit(); } finally { MyBatis.closeQuietly(session); } } - public void update(QualityProfileDto dto, SqlSession session) { - session.getMapper(QualityProfileMapper.class).update(dto); + public void update(DbSession session, QualityProfileDto profile, QualityProfileDto... otherProfiles) { + QualityProfileMapper mapper = session.getMapper(QualityProfileMapper.class); + doUpdate(mapper, profile); + for (QualityProfileDto otherProfile : otherProfiles) { + doUpdate(mapper, otherProfile); + } } + private void doUpdate(QualityProfileMapper mapper, QualityProfileDto profile) { + Preconditions.checkArgument(profile.getId() != null, "Quality profile is not persisted"); + mapper.update(profile); + } + + /** + * @deprecated use {@link #update(org.sonar.core.persistence.DbSession, QualityProfileDto, QualityProfileDto...)} + */ + @Deprecated public void update(QualityProfileDto dto) { - SqlSession session = mybatis.openSession(false); + DbSession session = mybatis.openSession(false); try { - update(dto, session); + update(session, dto); session.commit(); } finally { MyBatis.closeQuietly(session); @@ -77,26 +102,33 @@ public class QualityProfileDao implements ServerComponent, DaoComponent { } - public void delete(QualityProfileDto profile, DbSession session) { - Preconditions.checkNotNull(profile.getId(), "Profile is not persisted"); - session.getMapper(QualityProfileMapper.class).delete(profile.getId()); + public void delete(DbSession session, QualityProfileDto profile, QualityProfileDto... otherProfiles) { + QualityProfileMapper mapper = session.getMapper(QualityProfileMapper.class); + doDelete(mapper, profile); + for (QualityProfileDto otherProfile : otherProfiles) { + doDelete(mapper, otherProfile); + } + } + + private void doDelete(QualityProfileMapper mapper, QualityProfileDto profile) { + Preconditions.checkNotNull(profile.getId(), "Quality profile is not persisted"); + mapper.delete(profile.getId()); } /** - * @deprecated use {@link #delete(QualityProfileDto, DbSession)} + * @deprecated use {@link #delete(org.sonar.core.persistence.DbSession, QualityProfileDto, QualityProfileDto...)} */ @Deprecated - public void delete(int id, SqlSession session) { + public void delete(int id, DbSession session) { session.getMapper(QualityProfileMapper.class).delete(id); } /** - * @param id - * @deprecated use {@link #delete(QualityProfileDto, DbSession)} + * @deprecated use {@link #delete(org.sonar.core.persistence.DbSession, QualityProfileDto, QualityProfileDto...)} */ @Deprecated public void delete(int id) { - SqlSession session = mybatis.openSession(false); + DbSession session = mybatis.openSession(false); try { delete(id, session); session.commit(); @@ -106,7 +138,7 @@ public class QualityProfileDao implements ServerComponent, DaoComponent { } public List selectAll() { - SqlSession session = mybatis.openSession(false); + DbSession session = mybatis.openSession(false); try { return session.getMapper(QualityProfileMapper.class).selectAll(); } finally { @@ -114,12 +146,12 @@ public class QualityProfileDao implements ServerComponent, DaoComponent { } } - public QualityProfileDto selectDefaultProfile(String language, String key, SqlSession session) { + public QualityProfileDto selectDefaultProfile(String language, String key, DbSession session) { return session.getMapper(QualityProfileMapper.class).selectDefaultProfile(language, key); } public QualityProfileDto selectDefaultProfile(String language, String key) { - SqlSession session = mybatis.openSession(false); + DbSession session = mybatis.openSession(false); try { return selectDefaultProfile(language, key, session); } finally { @@ -128,7 +160,7 @@ public class QualityProfileDao implements ServerComponent, DaoComponent { } public QualityProfileDto selectByProjectAndLanguage(long projectId, String language, String key) { - SqlSession session = mybatis.openSession(false); + DbSession session = mybatis.openSession(false); try { return session.getMapper(QualityProfileMapper.class).selectByProjectAndLanguage(projectId, language, key); } finally { @@ -137,7 +169,7 @@ public class QualityProfileDao implements ServerComponent, DaoComponent { } public List selectByLanguage(String language) { - SqlSession session = mybatis.openSession(false); + DbSession session = mybatis.openSession(false); try { return session.getMapper(QualityProfileMapper.class).selectByLanguage(language); } finally { @@ -146,13 +178,13 @@ public class QualityProfileDao implements ServerComponent, DaoComponent { } @CheckForNull - public QualityProfileDto selectById(int id, SqlSession session) { + public QualityProfileDto selectById(int id, DbSession session) { return session.getMapper(QualityProfileMapper.class).selectById(id); } @CheckForNull public QualityProfileDto selectById(int id) { - SqlSession session = mybatis.openSession(false); + DbSession session = mybatis.openSession(false); try { return selectById(id, session); } finally { @@ -161,13 +193,13 @@ public class QualityProfileDao implements ServerComponent, DaoComponent { } @CheckForNull - public QualityProfileDto selectParent(int childId, SqlSession session) { + public QualityProfileDto selectParent(int childId, DbSession session) { return session.getMapper(QualityProfileMapper.class).selectParent(childId); } @CheckForNull public QualityProfileDto selectParent(int childId) { - SqlSession session = mybatis.openSession(false); + DbSession session = mybatis.openSession(false); try { return selectParent(childId, session); } finally { @@ -175,12 +207,12 @@ public class QualityProfileDao implements ServerComponent, DaoComponent { } } - public List selectChildren(String name, String language, SqlSession session) { + public List selectChildren(String name, String language, DbSession session) { return session.getMapper(QualityProfileMapper.class).selectChildren(name, language); } public List selectChildren(String name, String language) { - SqlSession session = mybatis.openSession(false); + DbSession session = mybatis.openSession(false); try { return selectChildren(name, language, session); } finally { @@ -188,12 +220,12 @@ public class QualityProfileDao implements ServerComponent, DaoComponent { } } - public int countChildren(String name, String language, SqlSession session) { + public int countChildren(String name, String language, DbSession session) { return session.getMapper(QualityProfileMapper.class).countChildren(name, language); } public int countChildren(String name, String language) { - SqlSession session = mybatis.openSession(false); + DbSession session = mybatis.openSession(false); try { return countChildren(name, language, session); } finally { @@ -201,12 +233,12 @@ public class QualityProfileDao implements ServerComponent, DaoComponent { } } - public QualityProfileDto selectByNameAndLanguage(String name, String language, SqlSession session) { + public QualityProfileDto selectByNameAndLanguage(String name, String language, DbSession session) { return session.getMapper(QualityProfileMapper.class).selectByNameAndLanguage(name, language); } public QualityProfileDto selectByNameAndLanguage(String name, String language) { - SqlSession session = mybatis.openSession(false); + DbSession session = mybatis.openSession(false); try { return selectByNameAndLanguage(name, language, session); } finally { @@ -215,7 +247,7 @@ public class QualityProfileDao implements ServerComponent, DaoComponent { } public List selectProjects(String propertyKey, String propertyValue) { - SqlSession session = mybatis.openSession(false); + DbSession session = mybatis.openSession(false); try { return selectProjects(propertyKey, propertyValue, session); } finally { @@ -223,12 +255,12 @@ public class QualityProfileDao implements ServerComponent, DaoComponent { } } - public List selectProjects(String propertyKey, String propertyValue, SqlSession session) { + public List selectProjects(String propertyKey, String propertyValue, DbSession session) { return session.getMapper(QualityProfileMapper.class).selectProjects(propertyKey, propertyValue); } public int countProjects(String propertyKey, String propertyValue) { - SqlSession session = mybatis.openSession(false); + DbSession session = mybatis.openSession(false); try { return session.getMapper(QualityProfileMapper.class).countProjects(propertyKey, propertyValue); } finally { @@ -237,7 +269,7 @@ public class QualityProfileDao implements ServerComponent, DaoComponent { } public void updateUsedColumn(int profileId, boolean used) { - SqlSession session = mybatis.openSession(false); + DbSession session = mybatis.openSession(false); try { session.getMapper(QualityProfileMapper.class).updatedUsedColumn(profileId, used); session.commit(); diff --git a/sonar-core/src/main/resources/org/sonar/core/persistence/rows-h2.sql b/sonar-core/src/main/resources/org/sonar/core/persistence/rows-h2.sql index acf291ae4ce..d285c17efa4 100644 --- a/sonar-core/src/main/resources/org/sonar/core/persistence/rows-h2.sql +++ b/sonar-core/src/main/resources/org/sonar/core/persistence/rows-h2.sql @@ -233,6 +233,7 @@ INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('534'); INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('535'); INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('536'); INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('537'); +INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('539'); INSERT INTO USERS(ID, LOGIN, NAME, EMAIL, CRYPTED_PASSWORD, SALT, CREATED_AT, UPDATED_AT, REMEMBER_TOKEN, REMEMBER_TOKEN_EXPIRES_AT) VALUES (1, 'admin', 'Administrator', '', 'a373a0e667abb2604c1fd571eb4ad47fe8cc0878', '48bc4b0d93179b5103fd3885ea9119498e9d161b', '2011-09-26 22:27:48.0', '2011-09-26 22:27:48.0', null, null); ALTER TABLE USERS ALTER COLUMN ID RESTART WITH 2; diff --git a/sonar-core/src/main/resources/org/sonar/core/persistence/schema-h2.ddl b/sonar-core/src/main/resources/org/sonar/core/persistence/schema-h2.ddl index 962392da0ed..ec5c4ca5b48 100644 --- a/sonar-core/src/main/resources/org/sonar/core/persistence/schema-h2.ddl +++ b/sonar-core/src/main/resources/org/sonar/core/persistence/schema-h2.ddl @@ -306,7 +306,9 @@ CREATE TABLE "ACTIVE_RULES" ( "PROFILE_ID" INTEGER NOT NULL, "RULE_ID" INTEGER NOT NULL, "FAILURE_LEVEL" INTEGER NOT NULL, - "INHERITANCE" VARCHAR(10) + "INHERITANCE" VARCHAR(10), + "CREATED_AT" TIMESTAMP, + "UPDATED_AT" TIMESTAMP ); CREATE TABLE "NOTIFICATIONS" ( diff --git a/sonar-core/src/test/java/org/sonar/core/qualityprofile/db/QualityProfileDaoTest.java b/sonar-core/src/test/java/org/sonar/core/qualityprofile/db/QualityProfileDaoTest.java index 3563740140b..304d31346c8 100644 --- a/sonar-core/src/test/java/org/sonar/core/qualityprofile/db/QualityProfileDaoTest.java +++ b/sonar-core/src/test/java/org/sonar/core/qualityprofile/db/QualityProfileDaoTest.java @@ -84,7 +84,7 @@ public class QualityProfileDaoTest extends AbstractDaoTestCase { public void select_all() { setupData("shared"); - List dtos = dao.selectAll(); + List dtos = dao.findAll(getMyBatis().openSession(false)); assertThat(dtos).hasSize(2); diff --git a/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/delete-result.xml b/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/delete-result.xml index 29697429a4b..81ed9b7884a 100644 --- a/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/delete-result.xml +++ b/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/delete-result.xml @@ -1,9 +1,9 @@ - + - + - + diff --git a/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/delete_from_profile-result.xml b/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/delete_from_profile-result.xml index e9fbac55033..7c678e3f49e 100644 --- a/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/delete_from_profile-result.xml +++ b/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/delete_from_profile-result.xml @@ -1,9 +1,9 @@ - + - + - + diff --git a/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/delete_from_rule-result.xml b/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/delete_from_rule-result.xml index 7e8d5ddfecc..d69ba08b710 100644 --- a/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/delete_from_rule-result.xml +++ b/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/delete_from_rule-result.xml @@ -1,9 +1,9 @@ - + - + - + diff --git a/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/delete_parameter-result.xml b/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/delete_parameter-result.xml index 3057a933a8e..2fda189a9b4 100644 --- a/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/delete_parameter-result.xml +++ b/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/delete_parameter-result.xml @@ -1,8 +1,8 @@ - + - + diff --git a/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/delete_parameters-result.xml b/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/delete_parameters-result.xml index d8bb5660f28..21b52c9dad7 100644 --- a/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/delete_parameters-result.xml +++ b/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/delete_parameters-result.xml @@ -1,8 +1,8 @@ - + - + diff --git a/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/delete_parameters_from_profile_id-result.xml b/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/delete_parameters_from_profile_id-result.xml index 0bd84f428ea..843e2452204 100644 --- a/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/delete_parameters_from_profile_id-result.xml +++ b/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/delete_parameters_from_profile_id-result.xml @@ -1,11 +1,11 @@ - + - + - + diff --git a/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/delete_parameters_from_profile_id.xml b/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/delete_parameters_from_profile_id.xml index d7a92243391..8e12efd7f25 100644 --- a/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/delete_parameters_from_profile_id.xml +++ b/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/delete_parameters_from_profile_id.xml @@ -1,11 +1,11 @@ - + - + - + diff --git a/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/insert-result.xml b/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/insert-result.xml index 0a98d012fad..b2e08355fe3 100644 --- a/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/insert-result.xml +++ b/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/insert-result.xml @@ -1,5 +1,5 @@ - + diff --git a/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/shared.xml b/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/shared.xml index 55259929055..629b4d18945 100644 --- a/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/shared.xml +++ b/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/shared.xml @@ -1,11 +1,11 @@ - + - + - + diff --git a/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/update-result.xml b/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/update-result.xml index d30e3009c23..99f81d6251c 100644 --- a/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/update-result.xml +++ b/sonar-core/src/test/resources/org/sonar/core/qualityprofile/db/ActiveRuleDaoTest/update-result.xml @@ -1,9 +1,9 @@ - + - + - + diff --git a/sonar-core/src/test/resources/org/sonar/jpa/dao/RulesDaoTest/shouldDeleteActiveRuleParametersFromARuleParameter-result.xml b/sonar-core/src/test/resources/org/sonar/jpa/dao/RulesDaoTest/shouldDeleteActiveRuleParametersFromARuleParameter-result.xml index 2890c5c5db8..b385ab5bb8c 100644 --- a/sonar-core/src/test/resources/org/sonar/jpa/dao/RulesDaoTest/shouldDeleteActiveRuleParametersFromARuleParameter-result.xml +++ b/sonar-core/src/test/resources/org/sonar/jpa/dao/RulesDaoTest/shouldDeleteActiveRuleParametersFromARuleParameter-result.xml @@ -9,8 +9,8 @@ - - + + diff --git a/sonar-core/src/test/resources/org/sonar/jpa/dao/RulesDaoTest/shouldDeleteActiveRuleParametersFromARuleParameter.xml b/sonar-core/src/test/resources/org/sonar/jpa/dao/RulesDaoTest/shouldDeleteActiveRuleParametersFromARuleParameter.xml index 2372c6501a6..2f124ad6ff5 100644 --- a/sonar-core/src/test/resources/org/sonar/jpa/dao/RulesDaoTest/shouldDeleteActiveRuleParametersFromARuleParameter.xml +++ b/sonar-core/src/test/resources/org/sonar/jpa/dao/RulesDaoTest/shouldDeleteActiveRuleParametersFromARuleParameter.xml @@ -9,8 +9,8 @@ - - + + diff --git a/sonar-core/src/test/resources/org/sonar/jpa/dao/RulesDaoTest/shouldDeleteActiveRules-result.xml b/sonar-core/src/test/resources/org/sonar/jpa/dao/RulesDaoTest/shouldDeleteActiveRules-result.xml index db0aa2f2efe..ea216ae75ab 100644 --- a/sonar-core/src/test/resources/org/sonar/jpa/dao/RulesDaoTest/shouldDeleteActiveRules-result.xml +++ b/sonar-core/src/test/resources/org/sonar/jpa/dao/RulesDaoTest/shouldDeleteActiveRules-result.xml @@ -10,8 +10,8 @@ - - - + + + diff --git a/sonar-core/src/test/resources/org/sonar/jpa/dao/RulesDaoTest/shouldDeleteActiveRules.xml b/sonar-core/src/test/resources/org/sonar/jpa/dao/RulesDaoTest/shouldDeleteActiveRules.xml index c5b2976f405..a4c3245e38a 100644 --- a/sonar-core/src/test/resources/org/sonar/jpa/dao/RulesDaoTest/shouldDeleteActiveRules.xml +++ b/sonar-core/src/test/resources/org/sonar/jpa/dao/RulesDaoTest/shouldDeleteActiveRules.xml @@ -10,12 +10,12 @@ - - - + + + - - - + + + diff --git a/sonar-core/src/test/resources/org/sonar/jpa/dao/RulesDaoTest/shouldGetActiveRules.xml b/sonar-core/src/test/resources/org/sonar/jpa/dao/RulesDaoTest/shouldGetActiveRules.xml index 793c98f5a80..f77d45e47ff 100644 --- a/sonar-core/src/test/resources/org/sonar/jpa/dao/RulesDaoTest/shouldGetActiveRules.xml +++ b/sonar-core/src/test/resources/org/sonar/jpa/dao/RulesDaoTest/shouldGetActiveRules.xml @@ -10,8 +10,8 @@ - - - + + + diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/ActiveRuleService.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/ActiveRuleService.java index 098aa191196..b5484164ed2 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/ActiveRuleService.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/ActiveRuleService.java @@ -31,6 +31,7 @@ import org.sonar.core.preview.PreviewCache; import org.sonar.core.qualityprofile.db.ActiveRuleDto; import org.sonar.core.qualityprofile.db.ActiveRuleKey; import org.sonar.core.qualityprofile.db.ActiveRuleParamDto; +import org.sonar.core.qualityprofile.db.QualityProfileKey; import org.sonar.core.rule.RuleParamDto; import org.sonar.server.db.DbClient; import org.sonar.server.qualityprofile.index.ActiveRuleIndex; @@ -74,6 +75,10 @@ public class ActiveRuleService implements ServerComponent { return index.get(ActiveRuleIndex.class).findByRule(key); } + public List findByQProfileKey(QualityProfileKey key) { + return index.get(ActiveRuleIndex.class).findByQProfile(key); + } + /** * Activate a rule on a Quality profile. Update configuration (severity/parameters) if the rule is already * activated. diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfile.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfile.java index f37a8df39c3..75b4c65a9c7 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfile.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfile.java @@ -23,6 +23,7 @@ package org.sonar.server.qualityprofile; import org.apache.commons.lang.builder.ReflectionToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; import org.sonar.core.qualityprofile.db.QualityProfileDto; +import org.sonar.core.qualityprofile.db.QualityProfileKey; import javax.annotation.CheckForNull; import javax.annotation.Nullable; @@ -36,10 +37,12 @@ public class QProfile { private Integer version; private boolean used; + @Deprecated public int id() { return id; } + @Deprecated QProfile setId(int id) { this.id = id; return this; @@ -63,6 +66,10 @@ public class QProfile { return this; } + public QualityProfileKey key() { + return QualityProfileKey.of(name, language); + } + @CheckForNull public String parent() { return parent; @@ -73,6 +80,7 @@ public class QProfile { return this; } + @CheckForNull public Integer version() { return version; } @@ -91,7 +99,7 @@ public class QProfile { return this; } - public boolean isInherited(){ + public boolean isInherited() { return parent != null; } @@ -117,6 +125,6 @@ public class QProfile { @Override public String toString() { - return new ReflectionToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE ).toString(); + return new ReflectionToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE).toString(); } } diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileBackup.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileBackup.java index c6789a360d9..32cf6846c15 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileBackup.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileBackup.java @@ -22,7 +22,6 @@ package org.sonar.server.qualityprofile; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ListMultimap; -import org.apache.ibatis.session.SqlSession; import org.sonar.api.ServerComponent; import org.sonar.api.database.DatabaseSession; import org.sonar.api.profiles.ProfileDefinition; @@ -107,7 +106,7 @@ public class QProfileBackup implements ServerComponent { public QProfileResult restore(String xmlBackup, boolean deleteExisting) { checkPermission(UserSession.get()); - SqlSession session = myBatis.openSession(false); + DbSession session = myBatis.openSession(false); QProfileResult result = new QProfileResult(); try { ValidationMessages messages = ValidationMessages.create(); diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileLookup.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileLookup.java index b6c15ae3df6..0aa53c0c725 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileLookup.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileLookup.java @@ -22,14 +22,13 @@ package org.sonar.server.qualityprofile; import com.google.common.base.Function; import com.google.common.collect.Iterables; -import org.apache.ibatis.session.SqlSession; import org.sonar.api.ServerComponent; +import org.sonar.core.persistence.DbSession; import org.sonar.core.persistence.MyBatis; import org.sonar.core.qualityprofile.db.QualityProfileDao; import org.sonar.core.qualityprofile.db.QualityProfileDto; import javax.annotation.CheckForNull; - import java.util.List; import static com.google.common.collect.Lists.newArrayList; @@ -54,7 +53,7 @@ public class QProfileLookup implements ServerComponent { @CheckForNull public QProfile profile(int id) { - SqlSession session = myBatis.openSession(false); + DbSession session = myBatis.openSession(false); try { return profile(id, session); } finally { @@ -63,7 +62,7 @@ public class QProfileLookup implements ServerComponent { } @CheckForNull - public QProfile profile(int id, SqlSession session) { + public QProfile profile(int id, DbSession session) { QualityProfileDto dto = findQualityProfile(id, session); if (dto != null) { return QProfile.from(dto); @@ -71,7 +70,7 @@ public class QProfileLookup implements ServerComponent { return null; } - public QProfile profile(String name, String language, SqlSession session) { + public QProfile profile(String name, String language, DbSession session) { QualityProfileDto dto = findQualityProfile(name, language, session); if (dto != null) { return QProfile.from(dto); @@ -81,7 +80,7 @@ public class QProfileLookup implements ServerComponent { @CheckForNull public QProfile profile(String name, String language) { - SqlSession session = myBatis.openSession(false); + DbSession session = myBatis.openSession(false); try { return profile(name, language, session); } finally { @@ -91,7 +90,7 @@ public class QProfileLookup implements ServerComponent { @CheckForNull public QProfile defaultProfile(String language) { - SqlSession session = myBatis.openSession(false); + DbSession session = myBatis.openSession(false); try { return defaultProfile(language, session); } finally { @@ -100,7 +99,7 @@ public class QProfileLookup implements ServerComponent { } @CheckForNull - private QProfile defaultProfile(String language, SqlSession session) { + private QProfile defaultProfile(String language, DbSession session) { QualityProfileDto dto = dao.selectDefaultProfile(language, QProfileOperations.PROFILE_PROPERTY_PREFIX + language, session); if (dto != null) { return QProfile.from(dto); @@ -110,7 +109,7 @@ public class QProfileLookup implements ServerComponent { @CheckForNull public QProfile parent(QProfile profile) { - SqlSession session = myBatis.openSession(false); + DbSession session = myBatis.openSession(false); try { String parent = profile.parent(); if (parent != null) { @@ -126,7 +125,7 @@ public class QProfileLookup implements ServerComponent { } public List children(QProfile profile) { - SqlSession session = myBatis.openSession(false); + DbSession session = myBatis.openSession(false); try { return children(profile, session); } finally { @@ -134,13 +133,13 @@ public class QProfileLookup implements ServerComponent { } } - public List children(QProfile profile, SqlSession session) { + public List children(QProfile profile, DbSession session) { return toQProfiles(dao.selectChildren(profile.name(), profile.language(), session)); } public List ancestors(QProfile profile) { List ancestors = newArrayList(); - SqlSession session = myBatis.openSession(false); + DbSession session = myBatis.openSession(false); try { incrementAncestors(profile, ancestors, session); } finally { @@ -149,7 +148,7 @@ public class QProfileLookup implements ServerComponent { return ancestors; } - public boolean isDeletable(QProfile profile, SqlSession session) { + public boolean isDeletable(QProfile profile, DbSession session) { QProfile defaultProfile = defaultProfile(profile.language(), session); if (defaultProfile != null && (defaultProfile.id() == profile.id())) { return false; @@ -158,7 +157,7 @@ public class QProfileLookup implements ServerComponent { } public boolean isDeletable(QProfile profile) { - SqlSession session = myBatis.openSession(false); + DbSession session = myBatis.openSession(false); try { return isDeletable(profile, session); } finally { @@ -166,7 +165,7 @@ public class QProfileLookup implements ServerComponent { } } - private void incrementAncestors(QProfile profile, List ancestors, SqlSession session) { + private void incrementAncestors(QProfile profile, List ancestors, DbSession session) { if (profile.parent() != null) { QualityProfileDto parentDto = dao.selectParent(profile.id(), session); if (parentDto == null) { @@ -179,7 +178,7 @@ public class QProfileLookup implements ServerComponent { } public int countChildren(QProfile profile) { - SqlSession session = myBatis.openSession(false); + DbSession session = myBatis.openSession(false); try { return countChildren(profile, session); } finally { @@ -187,7 +186,7 @@ public class QProfileLookup implements ServerComponent { } } - public int countChildren(QProfile profile, SqlSession session) { + public int countChildren(QProfile profile, DbSession session) { return dao.countChildren(profile.name(), profile.language(), session); } @@ -201,12 +200,12 @@ public class QProfileLookup implements ServerComponent { } @CheckForNull - private QualityProfileDto findQualityProfile(int id, SqlSession session) { + private QualityProfileDto findQualityProfile(int id, DbSession session) { return dao.selectById(id, session); } @CheckForNull - private QualityProfileDto findQualityProfile(String name, String language, SqlSession session) { + private QualityProfileDto findQualityProfile(String name, String language, DbSession session) { return dao.selectByNameAndLanguage(name, language, session); } diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileOperations.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileOperations.java index 6994e030ad2..c0e2c97195a 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileOperations.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileOperations.java @@ -21,7 +21,6 @@ package org.sonar.server.qualityprofile; import com.google.common.annotations.VisibleForTesting; -import org.apache.ibatis.session.SqlSession; import org.sonar.api.ServerComponent; import org.sonar.core.permission.GlobalPermissions; import org.sonar.core.persistence.DbSession; @@ -67,7 +66,7 @@ public class QProfileOperations implements ServerComponent { } public QProfileResult newProfile(String name, String language, Map xmlProfilesByPlugin, UserSession userSession) { - SqlSession session = myBatis.openSession(false); + DbSession session = myBatis.openSession(false); try { QProfile profile = newProfile(name, language, true, userSession, session); @@ -85,23 +84,23 @@ public class QProfileOperations implements ServerComponent { } } - public QProfile newProfile(String name, String language, boolean failIfAlreadyExists, UserSession userSession, SqlSession session) { + public QProfile newProfile(String name, String language, boolean failIfAlreadyExists, UserSession userSession, DbSession session) { return newProfile(name, language, null, failIfAlreadyExists, userSession, session); } - public QProfile newProfile(String name, String language, @Nullable String parent, boolean failIfAlreadyExists, UserSession userSession, SqlSession session) { + public QProfile newProfile(String name, String language, @Nullable String parent, boolean failIfAlreadyExists, UserSession userSession, DbSession session) { checkPermission(userSession); if (failIfAlreadyExists) { checkNotAlreadyExists(name, language, session); } QualityProfileDto dto = new QualityProfileDto().setName(name).setLanguage(language).setParent(parent).setVersion(1).setUsed(false); - dao.insert(dto, session); + dao.insert(session, dto); return QProfile.from(dto); } public void renameProfile(int profileId, String newName, UserSession userSession) { checkPermission(userSession); - SqlSession session = myBatis.openSession(false); + DbSession session = myBatis.openSession(false); try { QualityProfileDto profileDto = findNotNull(profileId, session); String oldName = profileDto.getName(); @@ -111,11 +110,11 @@ public class QProfileOperations implements ServerComponent { checkNotAlreadyExists(newName, profile.language(), session); } profileDto.setName(newName); - dao.update(profileDto, session); + dao.update(session, profileDto); List children = profileLookup.children(profile, session); for (QProfile child : children) { - dao.update(child.setParent(newName).toDto(), session); + dao.update(session, child.setParent(newName).toDto()); } propertiesDao.updateProperties(PROFILE_PROPERTY_PREFIX + profile.language(), oldName, newName, session); @@ -156,7 +155,7 @@ public class QProfileOperations implements ServerComponent { public void setDefaultProfile(int profileId, UserSession userSession) { checkPermission(userSession); - SqlSession session = myBatis.openSession(false); + DbSession session = myBatis.openSession(false); try { QualityProfileDto qualityProfile = findNotNull(profileId, session); propertiesDao.setProperty(new PropertyDto().setKey(PROFILE_PROPERTY_PREFIX + qualityProfile.getLanguage()).setValue(qualityProfile.getName())); @@ -168,7 +167,7 @@ public class QProfileOperations implements ServerComponent { public void updateParentProfile(int profileId, @Nullable Integer parentId, UserSession userSession) { checkPermission(userSession); - SqlSession session = myBatis.openSession(false); + DbSession session = myBatis.openSession(false); try { QualityProfileDto profile = findNotNull(profileId, session); QualityProfileDto parentProfile = null; @@ -182,7 +181,7 @@ public class QProfileOperations implements ServerComponent { // Modification of inheritance has to be done before setting new parent name in order to be able to disable rules from old parent ProfilesManager.RuleInheritanceActions actions = profilesManager.profileParentChanged(profile.getId(), newParentName, userSession.name()); profile.setParent(newParentName); - dao.update(profile, session); + dao.update(session, profile); session.commit(); //esActiveRule.deleteActiveRules(actions.idsToDelete()); @@ -194,7 +193,7 @@ public class QProfileOperations implements ServerComponent { public void copyProfile(int profileId, String copyProfileName, UserSession userSession) { checkPermission(userSession); - SqlSession session = myBatis.openSession(false); + DbSession session = myBatis.openSession(false); try { QualityProfileDto profileDto = findNotNull(profileId, session); checkNotAlreadyExists(copyProfileName, profileDto.getLanguage(), session); @@ -208,7 +207,7 @@ public class QProfileOperations implements ServerComponent { } @VisibleForTesting - boolean isCycle(QualityProfileDto childProfile, @Nullable QualityProfileDto parentProfile, SqlSession session) { + boolean isCycle(QualityProfileDto childProfile, @Nullable QualityProfileDto parentProfile, DbSession session) { QualityProfileDto currentParent = parentProfile; while (currentParent != null) { if (childProfile.getName().equals(currentParent.getName())) { @@ -220,7 +219,7 @@ public class QProfileOperations implements ServerComponent { } @CheckForNull - private QualityProfileDto getParent(QualityProfileDto profile, SqlSession session) { + private QualityProfileDto getParent(QualityProfileDto profile, DbSession session) { if (profile.getParent() != null) { return dao.selectParent(profile.getId(), session); } @@ -232,13 +231,13 @@ public class QProfileOperations implements ServerComponent { userSession.checkGlobalPermission(GlobalPermissions.QUALITY_PROFILE_ADMIN); } - private QualityProfileDto findNotNull(int profileId, SqlSession session) { + private QualityProfileDto findNotNull(int profileId, DbSession session) { QualityProfileDto profile = dao.selectById(profileId, session); QProfileValidations.checkProfileIsNotNull(profile); return profile; } - private void checkNotAlreadyExists(String name, String language, SqlSession session) { + private void checkNotAlreadyExists(String name, String language, DbSession session) { if (dao.selectByNameAndLanguage(name, language, session) != null) { throw BadRequestException.ofL10n("quality_profiles.profile_x_already_exists", name); } diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileProjectLookup.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileProjectLookup.java index 5dd735c852e..3424fb85e94 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileProjectLookup.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileProjectLookup.java @@ -21,11 +21,11 @@ package org.sonar.server.qualityprofile; import com.google.common.collect.Lists; -import org.apache.ibatis.session.SqlSession; import org.elasticsearch.common.collect.Maps; import org.sonar.api.ServerComponent; import org.sonar.api.component.Component; import org.sonar.api.web.UserRole; +import org.sonar.core.persistence.DbSession; import org.sonar.core.persistence.MyBatis; import org.sonar.core.qualityprofile.db.QualityProfileDao; import org.sonar.core.qualityprofile.db.QualityProfileDto; @@ -33,7 +33,6 @@ import org.sonar.core.user.AuthorizationDao; import org.sonar.server.user.UserSession; import javax.annotation.CheckForNull; - import java.util.Collection; import java.util.List; import java.util.Map; @@ -51,21 +50,21 @@ public class QProfileProjectLookup implements ServerComponent { } public List projects(int profileId) { - SqlSession session = myBatis.openSession(false); + DbSession session = myBatis.openSession(false); try { QualityProfileDto qualityProfile = qualityProfileDao.selectById(profileId, session); QProfileValidations.checkProfileIsNotNull(qualityProfile); Map componentsByKeys = Maps.newHashMap(); - for (Component component: qualityProfileDao.selectProjects( - qualityProfile.getName(), QProfileOperations.PROFILE_PROPERTY_PREFIX + qualityProfile.getLanguage(), session - )) { + for (Component component : qualityProfileDao.selectProjects( + qualityProfile.getName(), QProfileOperations.PROFILE_PROPERTY_PREFIX + qualityProfile.getLanguage(), session + )) { componentsByKeys.put(component.key(), component); } UserSession userSession = UserSession.get(); List result = Lists.newArrayList(); Collection authorizedProjectKeys = authorizationDao.selectAuthorizedRootProjectsKeys(userSession.userId(), UserRole.USER); - for (String key: componentsByKeys.keySet()) { + for (String key : componentsByKeys.keySet()) { if (authorizedProjectKeys.contains(key)) { result.add(componentsByKeys.get(key)); } diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileProjectOperations.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileProjectOperations.java index 7ae201b6ded..ceb944981be 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileProjectOperations.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileProjectOperations.java @@ -20,11 +20,11 @@ package org.sonar.server.qualityprofile; -import org.apache.ibatis.session.SqlSession; import org.sonar.api.ServerComponent; import org.sonar.api.component.Component; import org.sonar.core.component.ComponentDto; 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; @@ -50,7 +50,7 @@ public class QProfileProjectOperations implements ServerComponent { public void addProject(int profileId, long projectId, UserSession userSession) { checkPermission(userSession); - SqlSession session = myBatis.openSession(false); + DbSession session = myBatis.openSession(false); try { ComponentDto project = (ComponentDto) findProjectNotNull(projectId, session); QualityProfileDto qualityProfile = findNotNull(profileId, session); @@ -65,7 +65,7 @@ public class QProfileProjectOperations implements ServerComponent { public void removeProject(int profileId, long projectId, UserSession userSession) { checkPermission(userSession); - SqlSession session = myBatis.openSession(false); + DbSession session = myBatis.openSession(false); try { ComponentDto project = (ComponentDto) findProjectNotNull(projectId, session); QualityProfileDto qualityProfile = findNotNull(profileId, session); @@ -79,7 +79,7 @@ public class QProfileProjectOperations implements ServerComponent { public void removeProject(String language, long projectId, UserSession userSession) { checkPermission(userSession); - SqlSession session = myBatis.openSession(false); + DbSession session = myBatis.openSession(false); try { ComponentDto project = (ComponentDto) findProjectNotNull(projectId, session); @@ -92,7 +92,7 @@ public class QProfileProjectOperations implements ServerComponent { public void removeAllProjects(int profileId, UserSession userSession) { checkPermission(userSession); - SqlSession session = myBatis.openSession(false); + DbSession session = myBatis.openSession(false); try { QualityProfileDto qualityProfile = findNotNull(profileId, session); @@ -103,13 +103,13 @@ public class QProfileProjectOperations implements ServerComponent { } } - private QualityProfileDto findNotNull(int id, SqlSession session) { + private QualityProfileDto findNotNull(int id, DbSession session) { QualityProfileDto qualityProfile = qualityProfileDao.selectById(id, session); QProfileValidations.checkProfileIsNotNull(qualityProfile); return qualityProfile; } - private Component findProjectNotNull(long projectId, SqlSession session) { + private Component findProjectNotNull(long projectId, DbSession session) { Component component = resourceDao.findById(projectId, session); if (component == null) { throw new NotFoundException("This project does not exists."); diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/RegisterQualityProfiles.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/RegisterQualityProfiles.java index 2f8247aa008..93ac34b5621 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/RegisterQualityProfiles.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/RegisterQualityProfiles.java @@ -151,13 +151,13 @@ public class RegisterQualityProfiles implements ServerComponent { private void cleanUp(QualityProfileKey key, QualityProfileDto profileDto, DbSession session) { dbClient.activeRuleDao().deleteByProfileKey(key, session); - dbClient.qualityProfileDao().delete(profileDto, session); + dbClient.qualityProfileDao().delete(session, profileDto); session.commit(); } private void insertNewProfile(QualityProfileKey key, DbSession session) { QualityProfileDto profile = QualityProfileDto.createFor(key).setVersion(1).setUsed(false); - dbClient.qualityProfileDao().insert(profile, session); + dbClient.qualityProfileDao().insert(session, profile); session.commit(); } diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/index/ActiveRuleIndex.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/index/ActiveRuleIndex.java index 8a598e448de..3ff839eedaf 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/index/ActiveRuleIndex.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/index/ActiveRuleIndex.java @@ -141,7 +141,20 @@ public class ActiveRuleIndex extends BaseIndex findByQProfile(QualityProfileKey key) { + SearchRequestBuilder request = getClient().prepareSearch(this.getIndexName()) + .setQuery(QueryBuilders.termQuery(ActiveRuleNormalizer.ActiveRuleField.PROFILE_KEY.key(), key.toString())) + .setRouting(key.toString()); + + SearchResponse response = request.get(); + List activeRules = new ArrayList(); + for (SearchHit hit : response.getHits()) { + activeRules.add(toDoc(hit.getSource())); + } return activeRules; } @@ -149,12 +162,5 @@ public class ActiveRuleIndex extends BaseIndex activeRules = service.findByRuleKey(RuleKey.of("java", "r1")); + assertThat(activeRules).hasSize(1); + assertThat(activeRules.get(0).key().ruleKey()).isEqualTo(RuleKey.of("java", "r1")); - dbSession.commit(); + activeRules = service.findByRuleKey(RuleKey.of("java", "r2")); + assertThat(activeRules).hasSize(2); + assertThat(activeRules.get(0).key().ruleKey()).isEqualTo(RuleKey.of("java", "r2")); - assertThat(service.findByRuleKey(rule.getKey())).hasSize(1); - assertThat(service.findByRuleKey(rule.getKey()).get(0) - .severity()).isEqualTo("MINOR"); + activeRules = service.findByRuleKey(RuleKey.of("java", "r3")); + assertThat(activeRules).isEmpty(); - assertThat(service.findByRuleKey(rule2.getKey())).hasSize(1); - assertThat(service.findByRuleKey(rule2.getKey()).get(0) - .severity()).isEqualTo("BLOCKER"); + // find by profile + activeRules = service.findByQProfileKey(profile1.getKey()); + assertThat(activeRules).hasSize(2); + assertThat(activeRules.get(0).key().qProfile()).isEqualTo(profile1.getKey()); + assertThat(activeRules.get(1).key().qProfile()).isEqualTo(profile1.getKey()); + activeRules = service.findByQProfileKey(profile2.getKey()); + assertThat(activeRules).hasSize(1); + assertThat(activeRules.get(0).key().qProfile()).isEqualTo(profile2.getKey()); + activeRules = service.findByQProfileKey(QualityProfileKey.of("unknown", "unknown")); + assertThat(activeRules).isEmpty(); } private void grantPermission() { diff --git a/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileOperationsTest.java b/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileOperationsTest.java index f6e5c0580a9..28a631899d7 100644 --- a/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileOperationsTest.java +++ b/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileOperationsTest.java @@ -21,7 +21,6 @@ package org.sonar.server.qualityprofile; import com.google.common.collect.Maps; -import org.apache.ibatis.session.SqlSession; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -116,11 +115,11 @@ public class QProfileOperationsTest { doAnswer(new Answer() { public Object answer(InvocationOnMock invocation) { Object[] args = invocation.getArguments(); - QualityProfileDto dto = (QualityProfileDto) args[0]; + QualityProfileDto dto = (QualityProfileDto) args[1]; dto.setId(currentId++); return null; } - }).when(qualityProfileDao).insert(any(QualityProfileDto.class), any(SqlSession.class)); + }).when(qualityProfileDao).insert(any(DbSession.class), any(QualityProfileDto.class)); operations = new QProfileOperations(myBatis, qualityProfileDao, activeRuleDao, propertiesDao, exporter, dryRunCache, profileLookup, profilesManager); } @@ -131,10 +130,10 @@ public class QProfileOperationsTest { assertThat(result.profile().name()).isEqualTo("Default"); assertThat(result.profile().language()).isEqualTo("java"); - verify(qualityProfileDao).insert(any(QualityProfileDto.class), eq(session)); + verify(qualityProfileDao).insert(eq(session), any(QualityProfileDto.class)); ArgumentCaptor profileArgument = ArgumentCaptor.forClass(QualityProfileDto.class); - verify(qualityProfileDao).insert(profileArgument.capture(), eq(session)); + verify(qualityProfileDao).insert(eq(session), profileArgument.capture()); assertThat(profileArgument.getValue().getName()).isEqualTo("Default"); assertThat(profileArgument.getValue().getLanguage()).isEqualTo("java"); assertThat(profileArgument.getValue().getVersion()).isEqualTo(1); @@ -175,7 +174,7 @@ public class QProfileOperationsTest { operations.renameProfile(1, "Default profile", authorizedUserSession); ArgumentCaptor profileArgument = ArgumentCaptor.forClass(QualityProfileDto.class); - verify(qualityProfileDao).update(profileArgument.capture(), eq(session)); + verify(qualityProfileDao).update(eq(session), profileArgument.capture()); assertThat(profileArgument.getValue().getId()).isEqualTo(1); assertThat(profileArgument.getValue().getName()).isEqualTo("Default profile"); assertThat(profileArgument.getValue().getLanguage()).isEqualTo("java"); @@ -220,7 +219,7 @@ public class QProfileOperationsTest { ArgumentCaptor profileArgument = ArgumentCaptor.forClass(QualityProfileDto.class); // One call to update current profile and one other for child - verify(qualityProfileDao, times(2)).update(profileArgument.capture(), eq(session)); + verify(qualityProfileDao, times(2)).update(eq(session), profileArgument.capture()); assertThat(profileArgument.getAllValues()).hasSize(2); QualityProfileDto child = profileArgument.getAllValues().get(1); assertThat(child.getId()).isEqualTo(2); @@ -252,7 +251,7 @@ public class QProfileOperationsTest { operations.updateParentProfile(1, 3, authorizedUserSession); ArgumentCaptor profileArgument = ArgumentCaptor.forClass(QualityProfileDto.class); - verify(qualityProfileDao).update(profileArgument.capture(), eq(session)); + verify(qualityProfileDao).update(eq(session), profileArgument.capture()); assertThat(profileArgument.getValue().getParent()).isEqualTo("Parent"); assertThat(profileArgument.getValue().getLanguage()).isEqualTo("java"); @@ -270,7 +269,7 @@ public class QProfileOperationsTest { operations.updateParentProfile(1, 2, authorizedUserSession); ArgumentCaptor profileArgument = ArgumentCaptor.forClass(QualityProfileDto.class); - verify(qualityProfileDao).update(profileArgument.capture(), eq(session)); + verify(qualityProfileDao).update(eq(session), profileArgument.capture()); assertThat(profileArgument.getValue().getParent()).isEqualTo("Parent"); assertThat(profileArgument.getValue().getLanguage()).isEqualTo("java"); @@ -289,7 +288,7 @@ public class QProfileOperationsTest { operations.updateParentProfile(1, null, authorizedUserSession); ArgumentCaptor profileArgument = ArgumentCaptor.forClass(QualityProfileDto.class); - verify(qualityProfileDao).update(profileArgument.capture(), eq(session)); + verify(qualityProfileDao).update(eq(session), profileArgument.capture()); assertThat(profileArgument.getValue().getParent()).isNull(); assertThat(profileArgument.getValue().getLanguage()).isEqualTo("java"); diff --git a/sonar-server/src/test/java/org/sonar/server/qualityprofile/RegisterQualityProfilesTest.java b/sonar-server/src/test/java/org/sonar/server/qualityprofile/RegisterQualityProfilesTest.java deleted file mode 100644 index 9439456f6e9..00000000000 --- a/sonar-server/src/test/java/org/sonar/server/qualityprofile/RegisterQualityProfilesTest.java +++ /dev/null @@ -1,369 +0,0 @@ -/* - * SonarQube, open source software quality management tool. - * Copyright (C) 2008-2014 SonarSource - * mailto:contact AT sonarsource DOT com - * - * SonarQube is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * SonarQube is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -package org.sonar.server.qualityprofile; - -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.ArgumentCaptor; -import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; -import org.sonar.api.database.DatabaseSession; -import org.sonar.api.profiles.ProfileDefinition; -import org.sonar.api.profiles.RulesProfile; -import org.sonar.api.utils.SonarException; -import org.sonar.api.utils.ValidationMessages; -import org.sonar.core.persistence.DbSession; -import org.sonar.core.persistence.MyBatis; -import org.sonar.core.qualityprofile.db.QualityProfileDao; -import org.sonar.core.qualityprofile.db.QualityProfileKey; -import org.sonar.core.template.LoadedTemplateDao; -import org.sonar.core.template.LoadedTemplateDto; -import org.sonar.jpa.session.DatabaseSessionFactory; -import org.sonar.server.platform.PersistentSettings; -import org.sonar.server.user.UserSession; - -import java.util.List; - -import static com.google.common.collect.Lists.newArrayList; -import static org.fest.assertions.Assertions.assertThat; -import static org.fest.assertions.Fail.fail; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyString; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyZeroInteractions; -import static org.mockito.Mockito.when; - -@RunWith(MockitoJUnitRunner.class) -@Ignore -/* FIXME this test has the following errors: -java.lang.IllegalArgumentException: Name must be set - at com.google.common.base.Preconditions.checkArgument(Preconditions.java:88) - at org.sonar.core.qualityprofile.db.QualityProfileKey.of(QualityProfileKey.java:44) - at org.sonar.server.qualityprofile.RegisterQualityProfiles.register(RegisterQualityProfiles.java:158) - at org.sonar.server.qualityprofile.RegisterQualityProfiles.start(RegisterQualityProfiles.java:123) - at org.sonar.server.qualityprofile.RegisterQualityProfilesTest.delete_existing_profile_if_template_is_empty(RegisterQualityProfilesTest.java:338) - ... - */ -//TODO check with J.L. -public class RegisterQualityProfilesTest { - - - @Mock - QualityProfileDao qualityProfileDao; - - @Mock - LoadedTemplateDao loadedTemplateDao; - - @Mock - QProfileBackup qProfileBackup; - - @Mock - QProfileOperations qProfileOperations; - - @Mock - QProfileLookup qProfileLookup; - - DefaultProfilesCache defaultProfilesCache = new DefaultProfilesCache(); - - @Mock - MyBatis myBatis; - - @Mock - DbSession session; - - @Mock - DatabaseSessionFactory sessionFactory; - - @Mock - PersistentSettings settings; - - List definitions; - - RegisterQualityProfiles registerQualityProfiles; - - @Before - public void setUp() throws Exception { - when(myBatis.openSession(false)).thenReturn(session); - when(sessionFactory.getSession()).thenReturn(mock(DatabaseSession.class)); - - definitions = newArrayList(); -// registerQualityProfiles = new RegisterQualityProfiles(sessionFactory, myBatis, loadedTemplateDao, qProfileBackup, qProfileOperations, qProfileLookup, -// defaultProfilesCache, null, definitions); - } - - @Test - public void register_profile() throws Exception { - RulesProfile rulesProfile = RulesProfile.create("Default", "java"); - ProfileDefinition profileDefinition = mock(ProfileDefinition.class); - when(profileDefinition.createProfile(any(ValidationMessages.class))).thenReturn(rulesProfile); - definitions.add(profileDefinition); - - QProfile profile = new QProfile(); - when(qProfileOperations.newProfile(eq("Default"), eq("java"), eq(true), any(UserSession.class), eq(session))).thenReturn(profile); - - registerQualityProfiles.start(); - - verify(qProfileBackup).restoreFromActiveRules( - QualityProfileKey.of(eq(profile).name(), eq(profile).language()), eq(rulesProfile), eq(session)); - - ArgumentCaptor templateCaptor = ArgumentCaptor.forClass(LoadedTemplateDto.class); - verify(loadedTemplateDao).insert(templateCaptor.capture(), eq(session)); - assertThat(templateCaptor.getValue().getKey()).isEqualTo("java:Default"); - assertThat(templateCaptor.getValue().getType()).isEqualTo("QUALITY_PROFILE"); - - verify(settings).saveProperty("sonar.profile.java", "Default"); - - assertThat(defaultProfilesCache.byLanguage("java")).containsOnly("Default"); - - verify(session).commit(); - } - - @Test - public void register_profiles_with_different_languages() throws Exception { - RulesProfile rulesProfile1 = RulesProfile.create("Default", "java"); - ProfileDefinition profileDefinition1 = mock(ProfileDefinition.class); - when(profileDefinition1.createProfile(any(ValidationMessages.class))).thenReturn(rulesProfile1); - definitions.add(profileDefinition1); - - RulesProfile rulesProfile2 = RulesProfile.create("Default", "js"); - ProfileDefinition profileDefinition2 = mock(ProfileDefinition.class); - when(profileDefinition2.createProfile(any(ValidationMessages.class))).thenReturn(rulesProfile2); - definitions.add(profileDefinition2); - - QProfile profile1 = new QProfile(); - when(qProfileOperations.newProfile(eq("Default"), eq("java"), eq(true), any(UserSession.class), eq(session))).thenReturn(profile1); - - QProfile profile2 = new QProfile(); - when(qProfileOperations.newProfile(eq("Default"), eq("js"), eq(true), any(UserSession.class), eq(session))).thenReturn(profile2); - - registerQualityProfiles.start(); - - verify(qProfileBackup).restoreFromActiveRules( - QualityProfileKey.of(eq(profile1).name(), eq(profile1).language()), eq(rulesProfile1), eq(session)); - verify(qProfileBackup).restoreFromActiveRules( - QualityProfileKey.of(eq(profile2).name(), eq(profile2).language()), eq(rulesProfile2), eq(session)); - verify(loadedTemplateDao, times(2)).insert(any(LoadedTemplateDto.class), eq(session)); - verify(session).commit(); - - verify(settings).saveProperty("sonar.profile.java", "Default"); - verify(settings).saveProperty("sonar.profile.js", "Default"); - - assertThat(defaultProfilesCache.byLanguage("java")).containsOnly("Default"); - assertThat(defaultProfilesCache.byLanguage("js")).containsOnly("Default"); - } - - @Test - public void register_two_profiles_with_one_rules_profile_being_default() throws Exception { - RulesProfile rulesProfile1 = RulesProfile.create("Basic", "java"); - ProfileDefinition profileDefinition1 = mock(ProfileDefinition.class); - when(profileDefinition1.createProfile(any(ValidationMessages.class))).thenReturn(rulesProfile1); - definitions.add(profileDefinition1); - - // Default profile for java - RulesProfile rulesProfile2 = RulesProfile.create("Default", "java"); - rulesProfile2.setDefaultProfile(true); - ProfileDefinition profileDefinition2 = mock(ProfileDefinition.class); - when(profileDefinition2.createProfile(any(ValidationMessages.class))).thenReturn(rulesProfile2); - definitions.add(profileDefinition2); - - QProfile profile1 = new QProfile(); - when(qProfileOperations.newProfile(eq("Basic"), eq("java"), eq(true), any(UserSession.class), eq(session))).thenReturn(profile1); - - QProfile profile2 = new QProfile(); - when(qProfileOperations.newProfile(eq("Default"), eq("java"), eq(true), any(UserSession.class), eq(session))).thenReturn(profile2); - - registerQualityProfiles.start(); - - verify(settings).saveProperty("sonar.profile.java", "Default"); - assertThat(defaultProfilesCache.byLanguage("java")).containsOnly("Default", "Basic"); - } - - @Test - public void register_two_profiles_with_no_rules_profile_being_default() throws Exception { - RulesProfile rulesProfile1 = RulesProfile.create("Basic", "java"); - ProfileDefinition profileDefinition1 = mock(ProfileDefinition.class); - when(profileDefinition1.createProfile(any(ValidationMessages.class))).thenReturn(rulesProfile1); - definitions.add(profileDefinition1); - - RulesProfile rulesProfile2 = RulesProfile.create("Default", "java"); - ProfileDefinition profileDefinition2 = mock(ProfileDefinition.class); - when(profileDefinition2.createProfile(any(ValidationMessages.class))).thenReturn(rulesProfile2); - definitions.add(profileDefinition2); - - QProfile profile1 = new QProfile(); - when(qProfileOperations.newProfile(eq("Basic"), eq("java"), eq(true), any(UserSession.class), eq(session))).thenReturn(profile1); - - QProfile profile2 = new QProfile(); - when(qProfileOperations.newProfile(eq("Default"), eq("java"), eq(true), any(UserSession.class), eq(session))).thenReturn(profile2); - - registerQualityProfiles.start(); - - // No rules profile is defined as default, first one will be the default one - verify(settings).saveProperty("sonar.profile.java", "Basic"); - } - - @Test - public void register_two_profiles_with_one_rules_profile_name_using_sonar_way() throws Exception { - RulesProfile rulesProfile1 = RulesProfile.create("Basic", "java"); - ProfileDefinition profileDefinition1 = mock(ProfileDefinition.class); - when(profileDefinition1.createProfile(any(ValidationMessages.class))).thenReturn(rulesProfile1); - definitions.add(profileDefinition1); - - // This profile is using 'Sonar way' name, it will be the default one - RulesProfile rulesProfile2 = RulesProfile.create("Sonar way", "java"); - ProfileDefinition profileDefinition2 = mock(ProfileDefinition.class); - when(profileDefinition2.createProfile(any(ValidationMessages.class))).thenReturn(rulesProfile2); - definitions.add(profileDefinition2); - - QProfile profile1 = new QProfile(); - when(qProfileOperations.newProfile(eq("Basic"), eq("java"), eq(true), any(UserSession.class), eq(session))).thenReturn(profile1); - - QProfile profile2 = new QProfile(); - when(qProfileOperations.newProfile(eq("Sonar way"), eq("java"), eq(true), any(UserSession.class), eq(session))).thenReturn(profile2); - - registerQualityProfiles.start(); - - verify(settings).saveProperty("sonar.profile.java", "Sonar way"); - } - - @Test - public void fail_to_register_two_profiles_both_being_default() throws Exception { - RulesProfile rulesProfile1 = RulesProfile.create("Basic", "java"); - rulesProfile1.setDefaultProfile(true); - ProfileDefinition profileDefinition1 = mock(ProfileDefinition.class); - when(profileDefinition1.createProfile(any(ValidationMessages.class))).thenReturn(rulesProfile1); - definitions.add(profileDefinition1); - - RulesProfile rulesProfile2 = RulesProfile.create("Default", "java"); - rulesProfile2.setDefaultProfile(true); - ProfileDefinition profileDefinition2 = mock(ProfileDefinition.class); - when(profileDefinition2.createProfile(any(ValidationMessages.class))).thenReturn(rulesProfile2); - definitions.add(profileDefinition2); - - try { - registerQualityProfiles.start(); - fail(); - } catch (Exception e) { - assertThat(e).isInstanceOf(SonarException.class); - } - - verifyZeroInteractions(qProfileLookup); - verifyZeroInteractions(qProfileBackup); - verifyZeroInteractions(qProfileOperations); - verifyZeroInteractions(settings); - } - - @Test - public void register_profile_from_multiple_rule_profiles_with_same_name_and_language() throws Exception { - RulesProfile rulesProfile1 = RulesProfile.create("Default", "java"); - ProfileDefinition profileDefinition1 = mock(ProfileDefinition.class); - when(profileDefinition1.createProfile(any(ValidationMessages.class))).thenReturn(rulesProfile1); - definitions.add(profileDefinition1); - - RulesProfile rulesProfile2 = RulesProfile.create("Default", "java"); - ProfileDefinition profileDefinition2 = mock(ProfileDefinition.class); - when(profileDefinition2.createProfile(any(ValidationMessages.class))).thenReturn(rulesProfile2); - definitions.add(profileDefinition2); - - QProfile profile = new QProfile(); - when(qProfileOperations.newProfile(eq("Default"), eq("java"), eq(true), any(UserSession.class), eq(session))).thenReturn(profile); - - registerQualityProfiles.start(); - - ArgumentCaptor rulesProfileCaptor = ArgumentCaptor.forClass(RulesProfile.class); - verify(qProfileBackup, times(2)).restoreFromActiveRules( - QualityProfileKey.of(eq(profile).name(), eq(profile).language()), rulesProfileCaptor.capture(), eq(session)); - assertThat(rulesProfileCaptor.getAllValues().get(0)).isEqualTo(rulesProfile1); - assertThat(rulesProfileCaptor.getAllValues().get(1)).isEqualTo(rulesProfile2); - - verify(session).commit(); - } - - @Test - public void not_register_already_registered_profile() throws Exception { - ProfileDefinition profileDefinition = mock(ProfileDefinition.class); - when(profileDefinition.createProfile(any(ValidationMessages.class))).thenReturn(RulesProfile.create("Default", "java")); - definitions.add(profileDefinition); - - when(loadedTemplateDao.countByTypeAndKey(anyString(), anyString(), eq(session))).thenReturn(1); - - registerQualityProfiles.start(); - - verify(loadedTemplateDao, never()).insert(any(LoadedTemplateDto.class), eq(session)); - verifyZeroInteractions(qProfileBackup); - verifyZeroInteractions(qProfileOperations); - - verify(settings).saveProperty("sonar.profile.java", "Default"); - } - - @Test - public void not_set_profile_as_default_if_language_has_already_a_default_profile() throws Exception { - ProfileDefinition profileDefinition = mock(ProfileDefinition.class); - when(profileDefinition.createProfile(any(ValidationMessages.class))).thenReturn(RulesProfile.create("Default", "java")); - definitions.add(profileDefinition); - - QProfile profile = new QProfile(); - when(qProfileOperations.newProfile(eq("Default"), eq("java"), eq(true), any(UserSession.class), eq(session))).thenReturn(profile); - - when(settings.getString(eq("sonar.profile.java"))).thenReturn("Existing Default Profile"); - - registerQualityProfiles.start(); - - verify(settings, never()).saveProperty(anyString(), anyString()); - } - - @Test - public void delete_existing_profile_if_template_is_empty() throws Exception { - RulesProfile rulesProfile = RulesProfile.create("Default", "java"); - ProfileDefinition profileDefinition = mock(ProfileDefinition.class); - when(profileDefinition.createProfile(any(ValidationMessages.class))).thenReturn(rulesProfile); - definitions.add(profileDefinition); - - QProfile profile = new QProfile(); - when(qProfileLookup.profile(eq("Default"), eq("java"), eq(session))).thenReturn(new QProfile()); - when(qProfileOperations.newProfile(eq("Default"), eq("java"), eq(true), any(UserSession.class), eq(session))).thenReturn(profile); - - when(loadedTemplateDao.countByTypeAndKey(anyString(), anyString(), eq(session))).thenReturn(0); - - registerQualityProfiles.start(); - - verify(qProfileOperations).deleteProfile(any(QProfile.class), eq(session)); - verify(qProfileBackup).restoreFromActiveRules( - QualityProfileKey.of(eq(profile).name(), eq(profile).language()), eq(rulesProfile), eq(session)); - verify(session).commit(); - } - - @Test - public void not_fail_if_no_profile() throws Exception { - registerQualityProfiles.start(); - - verifyZeroInteractions(qProfileLookup); - verifyZeroInteractions(qProfileBackup); - verifyZeroInteractions(qProfileOperations); - verifyZeroInteractions(settings); - } -} diff --git a/sonar-server/src/test/java/org/sonar/server/qualityprofile/index/ActiveRuleIndexMediumTest.java b/sonar-server/src/test/java/org/sonar/server/qualityprofile/index/ActiveRuleIndexMediumTest.java index 7fa084912ad..3fde39826c9 100644 --- a/sonar-server/src/test/java/org/sonar/server/qualityprofile/index/ActiveRuleIndexMediumTest.java +++ b/sonar-server/src/test/java/org/sonar/server/qualityprofile/index/ActiveRuleIndexMediumTest.java @@ -74,7 +74,7 @@ public class ActiveRuleIndexMediumTest { QualityProfileDto profileDto = new QualityProfileDto() .setName("myprofile") .setLanguage("java"); - qualityProfileDao.insert(profileDto, dbSession); + qualityProfileDao.insert(dbSession, profileDto); // insert db RuleKey ruleKey = RuleKey.of("javascript", "S001"); @@ -110,7 +110,7 @@ public class ActiveRuleIndexMediumTest { QualityProfileDto profileDto = new QualityProfileDto() .setName("myprofile") .setLanguage("java"); - qualityProfileDao.insert(profileDto, dbSession); + qualityProfileDao.insert(dbSession, profileDto); // insert db RuleKey ruleKey = RuleKey.of("javascript", "S001"); @@ -158,16 +158,11 @@ public class ActiveRuleIndexMediumTest { } @Test - public void find_activeRules_by_ruleKey() throws InterruptedException { - QualityProfileDto profileDto = new QualityProfileDto() - .setName("myprofile") - .setLanguage("java"); - - QualityProfileDto profileDto2 = new QualityProfileDto() - .setName("other-profile") - .setLanguage("java"); - qualityProfileDao.insert(profileDto, dbSession); - qualityProfileDao.insert(profileDto2, dbSession); + public void find_activeRules() throws InterruptedException { + QualityProfileDto profile1 = QualityProfileDto.createFor("p1", "java"); + QualityProfileDto profile2 = QualityProfileDto.createFor("p2", "java"); + qualityProfileDao.insert(dbSession, profile1); + qualityProfileDao.insert(dbSession, profile2); // insert db RuleDto ruleDto = newRuleDto(RuleKey.of("javascript", "S001")); @@ -177,15 +172,15 @@ public class ActiveRuleIndexMediumTest { RuleDto ruleDto2 = newRuleDto(RuleKey.of("javascript", "S002")); dao.insert(ruleDto2, dbSession); - ActiveRuleDto find1 = ActiveRuleDto.createFor(profileDto, ruleDto) + ActiveRuleDto find1 = ActiveRuleDto.createFor(profile1, ruleDto) .setInheritance(ActiveRule.Inheritance.INHERIT.name()) .setSeverity(Severity.BLOCKER); - ActiveRuleDto find2 = ActiveRuleDto.createFor(profileDto2, ruleDto) + ActiveRuleDto find2 = ActiveRuleDto.createFor(profile2, ruleDto) .setInheritance(ActiveRule.Inheritance.INHERIT.name()) .setSeverity(Severity.BLOCKER); - ActiveRuleDto notFound = ActiveRuleDto.createFor(profileDto2, ruleDto2) + ActiveRuleDto notFound = ActiveRuleDto.createFor(profile2, ruleDto2) .setInheritance(ActiveRule.Inheritance.INHERIT.name()) .setSeverity(Severity.BLOCKER); @@ -203,6 +198,56 @@ public class ActiveRuleIndexMediumTest { // verify that activeRules are indexed in es + Collection hits = index.findByRule(RuleKey.of("javascript", "S001")); + + assertThat(hits).isNotNull(); + assertThat(hits).hasSize(2); + } + + @Test + public void find_activeRules_by_qprofile() throws InterruptedException { + QualityProfileDto profileDto = new QualityProfileDto() + .setName("P1") + .setLanguage("java"); + + QualityProfileDto profileDto2 = new QualityProfileDto() + .setName("P2") + .setLanguage("java"); + qualityProfileDao.insert(dbSession, profileDto); + qualityProfileDao.insert(dbSession, profileDto2); + + // insert db + RuleDto rule1 = newRuleDto(RuleKey.of("javascript", "S001")); + dao.insert(rule1, dbSession); + RuleDto rule2 = newRuleDto(RuleKey.of("javascript", "S002")); + dao.insert(rule2, dbSession); + + ActiveRuleDto onP1 = ActiveRuleDto.createFor(profileDto, rule1) + .setInheritance(ActiveRule.Inheritance.INHERIT.name()) + .setSeverity(Severity.BLOCKER); + + ActiveRuleDto firstOnP1 = ActiveRuleDto.createFor(profileDto2, rule1) + .setInheritance(ActiveRule.Inheritance.INHERIT.name()) + .setSeverity(Severity.BLOCKER); + + ActiveRuleDto firstOnP2 = ActiveRuleDto.createFor(profileDto2, rule2) + .setInheritance(ActiveRule.Inheritance.INHERIT.name()) + .setSeverity(Severity.BLOCKER); + + activeRuleDao.insert(onP1, dbSession); + activeRuleDao.insert(firstOnP1, dbSession); + activeRuleDao.insert(firstOnP2, dbSession); + dbSession.commit(); + + // verify that activeRules are persisted in db + List persistedDtos = activeRuleDao.findByRule(rule1, dbSession); + assertThat(persistedDtos).hasSize(2); + persistedDtos = activeRuleDao.findByRule(rule2, dbSession); + assertThat(persistedDtos).hasSize(1); + + // verify that activeRules are indexed in es + + Collection hits = index.findByRule(RuleKey.of("javascript", "S001")); assertThat(hits).isNotNull(); diff --git a/sonar-server/src/test/java/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest.java b/sonar-server/src/test/java/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest.java index 6680aa28ef3..dc1cf73dfae 100644 --- a/sonar-server/src/test/java/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest.java +++ b/sonar-server/src/test/java/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest.java @@ -60,7 +60,7 @@ public class ActiveRuleDaoTest extends AbstractDaoTestCase{ public void get_by_key() throws Exception { QualityProfileDto profile = QualityProfileDto.createFor("profile","xoo"); - qualityProfileDao.insert(profile, session); + qualityProfileDao.insert(session, profile); RuleDto rule = RuleDto.createFor(RuleKey.of("repo","rule")); ruleDao.insert(rule, session); @@ -78,4 +78,4 @@ public class ActiveRuleDaoTest extends AbstractDaoTestCase{ } -} \ No newline at end of file +} diff --git a/sonar-server/src/test/java/org/sonar/server/rule2/RuleServiceMediumTest.java b/sonar-server/src/test/java/org/sonar/server/rule2/RuleServiceMediumTest.java index 94b8c263084..4119d09eaad 100644 --- a/sonar-server/src/test/java/org/sonar/server/rule2/RuleServiceMediumTest.java +++ b/sonar-server/src/test/java/org/sonar/server/rule2/RuleServiceMediumTest.java @@ -194,8 +194,8 @@ public class RuleServiceMediumTest { // 1. Create in DB QualityProfileDto qprofile1 = QualityProfileDto.createFor("profile1", "java"); QualityProfileDto qprofile2 = QualityProfileDto.createFor("profile2", "java"); - tester.get(QualityProfileDao.class).insert(qprofile1, dbSession); - tester.get(QualityProfileDao.class).insert(qprofile2, dbSession); + tester.get(QualityProfileDao.class).insert(dbSession, qprofile1); + tester.get(QualityProfileDao.class).insert(dbSession, qprofile2); RuleDto rule1 = newRuleDto(RuleKey.of("test", "rule1")); RuleDto rule2 = newRuleDto(RuleKey.of("test", "rule2")); diff --git a/sonar-server/src/test/java/org/sonar/server/rule2/ws/RulesWebServiceTest.java b/sonar-server/src/test/java/org/sonar/server/rule2/ws/RulesWebServiceTest.java index 42752fa53c4..2370285e09b 100644 --- a/sonar-server/src/test/java/org/sonar/server/rule2/ws/RulesWebServiceTest.java +++ b/sonar-server/src/test/java/org/sonar/server/rule2/ws/RulesWebServiceTest.java @@ -95,7 +95,7 @@ public class RulesWebServiceTest { @Test public void show_rule() throws Exception { QualityProfileDto profile = newQualityProfile(); - tester.get(QualityProfileDao.class).insert(profile, session); + tester.get(QualityProfileDao.class).insert(session, profile); RuleDto rule = newRuleDto(RuleKey.of(profile.getLanguage(), "S001")); ruleDao.insert(rule, session); @@ -169,7 +169,7 @@ public class RulesWebServiceTest { @Test public void search_all_active_rules() throws Exception { QualityProfileDto profile = newQualityProfile(); - tester.get(QualityProfileDao.class).insert(profile, session); + tester.get(QualityProfileDao.class).insert(session, profile); RuleDto rule = newRuleDto(RuleKey.of(profile.getLanguage(), "S001")); ruleDao.insert(rule, session); @@ -194,10 +194,10 @@ public class RulesWebServiceTest { @Test public void search_profile_active_rules() throws Exception { QualityProfileDto profile = newQualityProfile().setName("p1"); - tester.get(QualityProfileDao.class).insert(profile, session); + tester.get(QualityProfileDao.class).insert(session, profile); QualityProfileDto profile2 = newQualityProfile().setName("p2"); - tester.get(QualityProfileDao.class).insert(profile2, session); + tester.get(QualityProfileDao.class).insert(session, profile2); session.commit(); @@ -225,7 +225,7 @@ public class RulesWebServiceTest { @Test public void search_all_active_rules_params() throws Exception { QualityProfileDto profile = newQualityProfile(); - tester.get(QualityProfileDao.class).insert(profile, session); + tester.get(QualityProfileDao.class).insert(session, profile); RuleDto rule = newRuleDto(RuleKey.of(profile.getLanguage(), "S001")); ruleDao.insert(rule, session); @@ -273,7 +273,7 @@ public class RulesWebServiceTest { @Test public void get_tags() throws Exception { QualityProfileDto profile = newQualityProfile(); - tester.get(QualityProfileDao.class).insert(profile, session); + tester.get(QualityProfileDao.class).insert(session, profile); RuleDto rule = newRuleDto(RuleKey.of(profile.getLanguage(), "S001")) .setTags(ImmutableSet.of("hello", "world")); @@ -296,7 +296,7 @@ public class RulesWebServiceTest { @Test public void get_note_as_markdown_and_html() throws Exception { QualityProfileDto profile = newQualityProfile(); - tester.get(QualityProfileDao.class).insert(profile, session); + tester.get(QualityProfileDao.class).insert(session, profile); RuleDto rule = newRuleDto(RuleKey.of(profile.getLanguage(), "S001")) .setNoteData("this is *bold*"); diff --git a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldActivateInChildren-result.xml b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldActivateInChildren-result.xml index 0abf30a764d..c2f51e7c5cd 100644 --- a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldActivateInChildren-result.xml +++ b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldActivateInChildren-result.xml @@ -9,10 +9,10 @@ - + - + diff --git a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldActivateInChildren.xml b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldActivateInChildren.xml index aad208af42c..486f07a228b 100644 --- a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldActivateInChildren.xml +++ b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldActivateInChildren.xml @@ -9,7 +9,7 @@ - + diff --git a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldChangeParent-result.xml b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldChangeParent-result.xml index c3ae4eace67..fd2d9fb83d5 100644 --- a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldChangeParent-result.xml +++ b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldChangeParent-result.xml @@ -12,10 +12,10 @@ - + - + - + diff --git a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldChangeParent.xml b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldChangeParent.xml index 5dc5943c65f..cc846d55d91 100644 --- a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldChangeParent.xml +++ b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldChangeParent.xml @@ -12,10 +12,10 @@ - + - + - + diff --git a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldDeactivateInChildren-result.xml b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldDeactivateInChildren-result.xml index a8ec4a1ce2b..1fe9567d2a6 100644 --- a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldDeactivateInChildren-result.xml +++ b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldDeactivateInChildren-result.xml @@ -7,6 +7,6 @@ - + diff --git a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldDeactivateInChildren.xml b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldDeactivateInChildren.xml index a26558a9af0..8b1fbcf5863 100644 --- a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldDeactivateInChildren.xml +++ b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldDeactivateInChildren.xml @@ -7,8 +7,8 @@ - + - + diff --git a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldNotDeactivateOverridingChildren-result.xml b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldNotDeactivateOverridingChildren-result.xml index 4b6b7956e78..8ac5c1f896f 100644 --- a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldNotDeactivateOverridingChildren-result.xml +++ b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldNotDeactivateOverridingChildren-result.xml @@ -7,8 +7,8 @@ - + - + diff --git a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldNotDeactivateOverridingChildren.xml b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldNotDeactivateOverridingChildren.xml index abb43308bbb..afc3652d57d 100644 --- a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldNotDeactivateOverridingChildren.xml +++ b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldNotDeactivateOverridingChildren.xml @@ -7,8 +7,8 @@ - + - + diff --git a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldRemoveParent-result.xml b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldRemoveParent-result.xml index 917389cb977..90a7808bdd5 100644 --- a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldRemoveParent-result.xml +++ b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldRemoveParent-result.xml @@ -7,6 +7,6 @@ - + diff --git a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldRemoveParent.xml b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldRemoveParent.xml index 4c07b2f63d6..cd454ddc37a 100644 --- a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldRemoveParent.xml +++ b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldRemoveParent.xml @@ -7,8 +7,8 @@ - + - + diff --git a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldSetParent-result.xml b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldSetParent-result.xml index 23842c2d8f9..a84397a8316 100644 --- a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldSetParent-result.xml +++ b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldSetParent-result.xml @@ -7,8 +7,8 @@ - + - + diff --git a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldSetParent.xml b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldSetParent.xml index e96c33fdad2..c1edd622683 100644 --- a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldSetParent.xml +++ b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/InheritedProfilesTest/shouldSetParent.xml @@ -7,6 +7,6 @@ - + diff --git a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/RuleChangeTest/changeParentProfile.xml b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/RuleChangeTest/changeParentProfile.xml index 9b9803081e1..8ed48ad4287 100644 --- a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/RuleChangeTest/changeParentProfile.xml +++ b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/RuleChangeTest/changeParentProfile.xml @@ -11,12 +11,12 @@ - + - + - + diff --git a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/RuleChangeTest/initialData.xml b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/RuleChangeTest/initialData.xml index c5241085e2e..9f5e218e6b3 100644 --- a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/RuleChangeTest/initialData.xml +++ b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/RuleChangeTest/initialData.xml @@ -11,11 +11,11 @@ - + - + - + diff --git a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/RuleChangeTest/removeActivatedRules-result.xml b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/RuleChangeTest/removeActivatedRules-result.xml index bc09b586a0f..03b04b26912 100644 --- a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/RuleChangeTest/removeActivatedRules-result.xml +++ b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/RuleChangeTest/removeActivatedRules-result.xml @@ -3,6 +3,6 @@ - + diff --git a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/RuleChangeTest/ruleReverted.xml b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/RuleChangeTest/ruleReverted.xml index 7103bfacf12..001f65415a1 100644 --- a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/RuleChangeTest/ruleReverted.xml +++ b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/RuleChangeTest/ruleReverted.xml @@ -9,10 +9,10 @@ - + - + diff --git a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/RuleChangeTest/should_not_track_param_change_on_rule_revert_if_no_param.xml b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/RuleChangeTest/should_not_track_param_change_on_rule_revert_if_no_param.xml index c3129c4f001..4e77c9f5dc6 100644 --- a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/RuleChangeTest/should_not_track_param_change_on_rule_revert_if_no_param.xml +++ b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/RuleChangeTest/should_not_track_param_change_on_rule_revert_if_no_param.xml @@ -6,8 +6,8 @@ - + - + diff --git a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/delete-result.xml b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/delete-result.xml index e106bb1434c..1fb8fabd0b5 100644 --- a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/delete-result.xml +++ b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/delete-result.xml @@ -1,9 +1,9 @@ - + - + - + diff --git a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/delete_from_profile-result.xml b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/delete_from_profile-result.xml index e9fbac55033..7c678e3f49e 100644 --- a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/delete_from_profile-result.xml +++ b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/delete_from_profile-result.xml @@ -1,9 +1,9 @@ - + - + - + diff --git a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/delete_from_rule-result.xml b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/delete_from_rule-result.xml index fa2ce3f2fb8..281f14a4daf 100644 --- a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/delete_from_rule-result.xml +++ b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/delete_from_rule-result.xml @@ -1,9 +1,9 @@ - + - + - + diff --git a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/delete_parameter-result.xml b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/delete_parameter-result.xml index 3057a933a8e..2fda189a9b4 100644 --- a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/delete_parameter-result.xml +++ b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/delete_parameter-result.xml @@ -1,8 +1,8 @@ - + - + diff --git a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/delete_parameters-result.xml b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/delete_parameters-result.xml index d8bb5660f28..21b52c9dad7 100644 --- a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/delete_parameters-result.xml +++ b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/delete_parameters-result.xml @@ -1,8 +1,8 @@ - + - + diff --git a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/delete_parameters_from_profile_id-result.xml b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/delete_parameters_from_profile_id-result.xml index 0bd84f428ea..843e2452204 100644 --- a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/delete_parameters_from_profile_id-result.xml +++ b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/delete_parameters_from_profile_id-result.xml @@ -1,11 +1,11 @@ - + - + - + diff --git a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/delete_parameters_from_profile_id.xml b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/delete_parameters_from_profile_id.xml index d7a92243391..8e12efd7f25 100644 --- a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/delete_parameters_from_profile_id.xml +++ b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/delete_parameters_from_profile_id.xml @@ -1,11 +1,11 @@ - + - + - + diff --git a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/insert-result.xml b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/insert-result.xml index 0a98d012fad..b2e08355fe3 100644 --- a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/insert-result.xml +++ b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/insert-result.xml @@ -1,5 +1,5 @@ - + diff --git a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/insert_parameter.xml b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/insert_parameter.xml index 17c001f0fb3..706a94112cf 100644 --- a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/insert_parameter.xml +++ b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/insert_parameter.xml @@ -1,7 +1,7 @@ - + diff --git a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/shared.xml b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/shared.xml index 44f40f5b46f..71152729eeb 100644 --- a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/shared.xml +++ b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/shared.xml @@ -5,12 +5,12 @@ - + - + - + diff --git a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/update-result.xml b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/update-result.xml index d30e3009c23..99f81d6251c 100644 --- a/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/update-result.xml +++ b/sonar-server/src/test/resources/org/sonar/server/qualityprofile/persistence/ActiveRuleDaoTest/update-result.xml @@ -1,9 +1,9 @@ - + - + - + diff --git a/sonar-server/src/test/resources/org/sonar/server/rule/RegisterRulesTest/disable_deprecated_active_rule_params-result.xml b/sonar-server/src/test/resources/org/sonar/server/rule/RegisterRulesTest/disable_deprecated_active_rule_params-result.xml index dfa2ccff019..0e2f96d5e55 100644 --- a/sonar-server/src/test/resources/org/sonar/server/rule/RegisterRulesTest/disable_deprecated_active_rule_params-result.xml +++ b/sonar-server/src/test/resources/org/sonar/server/rule/RegisterRulesTest/disable_deprecated_active_rule_params-result.xml @@ -10,7 +10,7 @@ - + diff --git a/sonar-server/src/test/resources/org/sonar/server/rule/RegisterRulesTest/disable_deprecated_active_rule_params.xml b/sonar-server/src/test/resources/org/sonar/server/rule/RegisterRulesTest/disable_deprecated_active_rule_params.xml index 2f429f49bbb..8ffb87c578c 100644 --- a/sonar-server/src/test/resources/org/sonar/server/rule/RegisterRulesTest/disable_deprecated_active_rule_params.xml +++ b/sonar-server/src/test/resources/org/sonar/server/rule/RegisterRulesTest/disable_deprecated_active_rule_params.xml @@ -11,7 +11,7 @@ - + diff --git a/sonar-server/src/test/resources/org/sonar/server/rule/RegisterRulesTest/disable_deprecated_active_rules.xml b/sonar-server/src/test/resources/org/sonar/server/rule/RegisterRulesTest/disable_deprecated_active_rules.xml index 8957a2373d4..ba2812d280f 100644 --- a/sonar-server/src/test/resources/org/sonar/server/rule/RegisterRulesTest/disable_deprecated_active_rules.xml +++ b/sonar-server/src/test/resources/org/sonar/server/rule/RegisterRulesTest/disable_deprecated_active_rules.xml @@ -9,7 +9,7 @@ - - + + diff --git a/sonar-server/src/test/resources/org/sonar/server/rule2/RegisterRulesTest/disable_deprecated_active_rule_params-result.xml b/sonar-server/src/test/resources/org/sonar/server/rule2/RegisterRulesTest/disable_deprecated_active_rule_params-result.xml index dfa2ccff019..0e2f96d5e55 100644 --- a/sonar-server/src/test/resources/org/sonar/server/rule2/RegisterRulesTest/disable_deprecated_active_rule_params-result.xml +++ b/sonar-server/src/test/resources/org/sonar/server/rule2/RegisterRulesTest/disable_deprecated_active_rule_params-result.xml @@ -10,7 +10,7 @@ - + diff --git a/sonar-server/src/test/resources/org/sonar/server/rule2/RegisterRulesTest/disable_deprecated_active_rule_params.xml b/sonar-server/src/test/resources/org/sonar/server/rule2/RegisterRulesTest/disable_deprecated_active_rule_params.xml index bf310a09b6a..60abd0993ac 100644 --- a/sonar-server/src/test/resources/org/sonar/server/rule2/RegisterRulesTest/disable_deprecated_active_rule_params.xml +++ b/sonar-server/src/test/resources/org/sonar/server/rule2/RegisterRulesTest/disable_deprecated_active_rule_params.xml @@ -11,7 +11,7 @@ - + diff --git a/sonar-server/src/test/resources/org/sonar/server/rule2/RegisterRulesTest/disable_deprecated_active_rules.xml b/sonar-server/src/test/resources/org/sonar/server/rule2/RegisterRulesTest/disable_deprecated_active_rules.xml index 8957a2373d4..ba2812d280f 100644 --- a/sonar-server/src/test/resources/org/sonar/server/rule2/RegisterRulesTest/disable_deprecated_active_rules.xml +++ b/sonar-server/src/test/resources/org/sonar/server/rule2/RegisterRulesTest/disable_deprecated_active_rules.xml @@ -9,7 +9,7 @@ - - + + -- 2.39.5