aboutsummaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorDuarte Meneses <duarte.meneses@sonarsource.com>2020-04-20 16:15:35 -0500
committersonartech <sonartech@sonarsource.com>2020-05-25 20:05:19 +0000
commit249c040bad9bfc8d9a29501d7c5a8a0ef970089b (patch)
tree2873a08dab2240388f46aeb4de8651ba35c5af05 /server
parent9b546ae89646eb741cc06ffc57dddb5e02aa5f5f (diff)
downloadsonarqube-249c040bad9bfc8d9a29501d7c5a8a0ef970089b.tar.gz
sonarqube-249c040bad9bfc8d9a29501d7c5a8a0ef970089b.zip
SONAR-13221 Quality gate conditions
Diffstat (limited to 'server')
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/qualitygate/QualityGateServiceImplTest.java5
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/qualitygate/QualityGateConditionDao.java6
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/qualitygate/QualityGateConditionDto.java10
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/qualitygate/QualityGateConditionMapper.java4
-rw-r--r--server/sonar-db-dao/src/main/resources/org/sonar/db/qualitygate/QualityGateConditionMapper.xml18
-rw-r--r--server/sonar-db-dao/src/test/java/org/sonar/db/qualitygate/QualityGateConditionDaoTest.java36
-rw-r--r--server/sonar-db-dao/src/testFixtures/java/org/sonar/db/qualitygate/QualityGateDbTester.java1
-rw-r--r--server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/AddPrimaryKeyOnUuidColumnOfQualityGateConditionsTable.java38
-rw-r--r--server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/AddUuidColumnToQualityGateConditionsTable.java31
-rw-r--r--server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/DropIdColumnOfQualityGateConditionsTable.java31
-rw-r--r--server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/DropPrimaryKeyOnIdColumnOfQualityGateConditionsTable.java32
-rw-r--r--server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/MakeQualityGateConditionsUuidColumnNotNullable.java31
-rw-r--r--server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/PopulateQualityGateConditionsUuid.java50
-rw-r--r--server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/AddPrimaryKeyOnUuidColumnOfQualityGateConditionsTableTest.java50
-rw-r--r--server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/AddUuidColumnToQualityGateConditionsTableTest.java66
-rw-r--r--server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/DropIdColumnOfQualityGateConditionsTableTest.java51
-rw-r--r--server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/DropPrimaryKeyOnIdColumnOfQualityGateConditionsTableTest.java56
-rw-r--r--server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/MakeQualityGateConditionsUuidColumnNotNullableTest.java42
-rw-r--r--server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/PopulateQualityGateConditionsUuidTest.java81
-rw-r--r--server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/AddPrimaryKeyOnUuidColumnOfQualityGateConditionsTableTest/schema.sql12
-rw-r--r--server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/AddUuidColumnToQualityGateConditionsTableTest/schema.sql12
-rw-r--r--server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/DropIdColumnOfQualityGateConditionsTableTest/schema.sql13
-rw-r--r--server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/DropPrimaryKeyOnIdColumnOfQualityGateConditionsTableTest/schema.sql13
-rw-r--r--server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/MakeQualityGateConditionsUuidColumnNotNullableTest/schema.sql12
-rw-r--r--server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/PopulateQualityGateConditionsUuidTest/schema.sql13
-rw-r--r--server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/QualityGateConditionsUpdater.java2
-rw-r--r--server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/QualityGateUpdater.java2
-rw-r--r--server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/RegisterQualityGates.java14
-rw-r--r--server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/CreateConditionAction.java3
-rw-r--r--server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/DeleteConditionAction.java7
-rw-r--r--server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/QualityGatesWsSupport.java4
-rw-r--r--server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/ShowAction.java3
-rw-r--r--server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/UpdateConditionAction.java5
-rw-r--r--server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/QualityGateConditionsUpdaterTest.java2
-rw-r--r--server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/RegisterQualityGatesTest.java1
-rw-r--r--server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/CreateConditionActionTest.java2
-rw-r--r--server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/DeleteConditionActionTest.java29
-rw-r--r--server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/ShowActionTest.java4
-rw-r--r--server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/UpdateConditionActionTest.java24
39 files changed, 731 insertions, 85 deletions
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/qualitygate/QualityGateServiceImplTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/qualitygate/QualityGateServiceImplTest.java
index aed1a4d5d14..29e1fff586c 100644
--- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/qualitygate/QualityGateServiceImplTest.java
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/qualitygate/QualityGateServiceImplTest.java
@@ -49,9 +49,10 @@ public class QualityGateServiceImplTest {
private static final long METRIC_ID_2 = 753;
private static final Metric METRIC_1 = mock(Metric.class);
private static final Metric METRIC_2 = mock(Metric.class);
- private static final QualityGateConditionDto CONDITION_1 = new QualityGateConditionDto().setId(321).setMetricId(METRIC_ID_1).setOperator("LT")
+ private static final QualityGateConditionDto CONDITION_1 = new QualityGateConditionDto().setUuid("321").setMetricId(METRIC_ID_1).setOperator("LT")
+ .setErrorThreshold("error_th");
+ private static final QualityGateConditionDto CONDITION_2 = new QualityGateConditionDto().setUuid("456").setMetricId(METRIC_ID_2).setOperator("GT")
.setErrorThreshold("error_th");
- private static final QualityGateConditionDto CONDITION_2 = new QualityGateConditionDto().setId(456).setMetricId(METRIC_ID_2).setOperator("GT").setErrorThreshold("error_th");
private QualityGateDao qualityGateDao = mock(QualityGateDao.class);
private QualityGateConditionDao qualityGateConditionDao = mock(QualityGateConditionDao.class);
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/qualitygate/QualityGateConditionDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/qualitygate/QualityGateConditionDao.java
index 8211eb64e32..88163b8eded 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/qualitygate/QualityGateConditionDao.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/qualitygate/QualityGateConditionDao.java
@@ -34,12 +34,12 @@ public class QualityGateConditionDao implements Dao {
return mapper(session).selectForQualityGate(qGateId);
}
- public QualityGateConditionDto selectById(long id, DbSession session) {
- return mapper(session).selectById(id);
+ public QualityGateConditionDto selectByUuid(String uuid, DbSession session) {
+ return mapper(session).selectByUuid(uuid);
}
public void delete(QualityGateConditionDto qGate, DbSession session) {
- mapper(session).delete(qGate.getId());
+ mapper(session).delete(qGate.getUuid());
}
public void update(QualityGateConditionDto qGate, DbSession session) {
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/qualitygate/QualityGateConditionDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/qualitygate/QualityGateConditionDto.java
index 9eee979c8e3..b21fcc53532 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/qualitygate/QualityGateConditionDto.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/qualitygate/QualityGateConditionDto.java
@@ -31,7 +31,7 @@ public class QualityGateConditionDto {
public static final String OPERATOR_GREATER_THAN = "GT";
public static final String OPERATOR_LESS_THAN = "LT";
- private long id;
+ private String uuid;
private long qualityGateId;
@@ -47,12 +47,12 @@ public class QualityGateConditionDto {
private Date updatedAt;
- public long getId() {
- return id;
+ public String getUuid() {
+ return uuid;
}
- public QualityGateConditionDto setId(long id) {
- this.id = id;
+ public QualityGateConditionDto setUuid(String uuid) {
+ this.uuid = uuid;
return this;
}
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/qualitygate/QualityGateConditionMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/qualitygate/QualityGateConditionMapper.java
index 2066c9dee4f..0261c1a34fb 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/qualitygate/QualityGateConditionMapper.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/qualitygate/QualityGateConditionMapper.java
@@ -29,9 +29,9 @@ public interface QualityGateConditionMapper {
void update(QualityGateConditionDto newCondition);
- QualityGateConditionDto selectById(long id);
+ QualityGateConditionDto selectByUuid(String uuid);
- void delete(long id);
+ void delete(String uuid);
void deleteConditionsWithInvalidMetrics();
}
diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/qualitygate/QualityGateConditionMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/qualitygate/QualityGateConditionMapper.xml
index 3ab285eeaf6..c7b3c7099e3 100644
--- a/server/sonar-db-dao/src/main/resources/org/sonar/db/qualitygate/QualityGateConditionMapper.xml
+++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/qualitygate/QualityGateConditionMapper.xml
@@ -3,13 +3,13 @@
<mapper namespace="org.sonar.db.qualitygate.QualityGateConditionMapper">
- <insert id="insert" parameterType="QualityGateCondition" keyColumn="id" useGeneratedKeys="true" keyProperty="id">
- insert into quality_gate_conditions (qgate_id, metric_id, operator, value_error, created_at, updated_at)
- values (#{qualityGateId}, #{metricId}, #{operator}, #{errorThreshold}, #{createdAt}, #{updatedAt})
+ <insert id="insert" parameterType="QualityGateCondition">
+ insert into quality_gate_conditions (uuid, qgate_id, metric_id, operator, value_error, created_at, updated_at)
+ values (#{uuid}, #{qualityGateId}, #{metricId}, #{operator}, #{errorThreshold}, #{createdAt}, #{updatedAt})
</insert>
<sql id="conditionColumns">
- id, qgate_id as qualityGateId, metric_id as metricId, operator, value_error as errorThreshold,
+ uuid, qgate_id as qualityGateId, metric_id as metricId, operator, value_error as errorThreshold,
created_at as createdAt, updated_at as updatedAt
</sql>
@@ -20,14 +20,14 @@
order by created_at asc
</select>
- <select id="selectById" parameterType="long" resultType="QualityGateCondition">
+ <select id="selectByUuid" parameterType="String" resultType="QualityGateCondition">
select
<include refid="conditionColumns"/>
- from quality_gate_conditions where id=#{id}
+ from quality_gate_conditions where uuid=#{uuid}
</select>
- <update id="delete" parameterType="long">
- delete from quality_gate_conditions where id=#{id}
+ <update id="delete" parameterType="String">
+ delete from quality_gate_conditions where uuid=#{uuid}
</update>
<update id="update" parameterType="QualityGateCondition">
@@ -36,7 +36,7 @@
operator=#{operator},
value_error=#{errorThreshold},
updated_at=#{updatedAt}
- where id=#{id}
+ where uuid=#{uuid}
</update>
<delete id="deleteConditionsWithInvalidMetrics">
diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/qualitygate/QualityGateConditionDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/qualitygate/QualityGateConditionDaoTest.java
index 6f05c6e3b41..658a7077aa6 100644
--- a/server/sonar-db-dao/src/test/java/org/sonar/db/qualitygate/QualityGateConditionDaoTest.java
+++ b/server/sonar-db-dao/src/test/java/org/sonar/db/qualitygate/QualityGateConditionDaoTest.java
@@ -26,6 +26,7 @@ import java.util.stream.IntStream;
import org.junit.Rule;
import org.junit.Test;
import org.sonar.api.utils.System2;
+import org.sonar.core.util.Uuids;
import org.sonar.db.DbSession;
import org.sonar.db.DbTester;
import org.sonar.db.metric.MetricDto;
@@ -45,8 +46,8 @@ public class QualityGateConditionDaoTest {
public void testInsert() {
QualityGateConditionDto newCondition = insertQGCondition(1L, 2L, "GT", "20");
- assertThat(newCondition.getId()).isNotNull();
- QualityGateConditionDto actual = underTest.selectById(newCondition.getId(), dbSession);
+ assertThat(newCondition.getUuid()).isNotNull();
+ QualityGateConditionDto actual = underTest.selectByUuid(newCondition.getUuid(), dbSession);
assertEquals(actual, newCondition);
}
@@ -63,29 +64,29 @@ public class QualityGateConditionDaoTest {
Collection<QualityGateConditionDto> conditions = underTest.selectForQualityGate(dbSession, qg1Id);
assertThat(conditions).hasSize(qg1Conditions);
assertThat(conditions)
- .extracting("id")
+ .extracting("uuid")
.containsExactly(conditions.stream()
.sorted(Comparator.comparing(QualityGateConditionDto::getCreatedAt))
- .map(QualityGateConditionDto::getId).toArray());
+ .map(QualityGateConditionDto::getUuid).toArray());
conditions = underTest.selectForQualityGate(dbSession, qg2Id);
assertThat(conditions).hasSize(qg2Conditions);
assertThat(conditions)
- .extracting("id")
+ .extracting("uuid")
.containsExactly(conditions.stream()
.sorted(Comparator.comparing(QualityGateConditionDto::getCreatedAt))
- .map(QualityGateConditionDto::getId)
+ .map(QualityGateConditionDto::getUuid)
.toArray());
assertThat(underTest.selectForQualityGate(dbSession, 5)).isEmpty();
}
@Test
- public void testSelectById() {
+ public void testSelectByUuid() {
QualityGateConditionDto condition = insertQGCondition(1L, 2L, "GT", "20");
- assertEquals(underTest.selectById(condition.getId(), dbSession), condition);
- assertThat(underTest.selectById(42L, dbSession)).isNull();
+ assertEquals(underTest.selectByUuid(condition.getUuid(), dbSession), condition);
+ assertThat(underTest.selectByUuid("uuid1", dbSession)).isNull();
}
@Test
@@ -96,8 +97,8 @@ public class QualityGateConditionDaoTest {
underTest.delete(condition1, dbSession);
dbSession.commit();
- assertThat(underTest.selectById(condition1.getId(), dbSession)).isNull();
- assertThat(underTest.selectById(condition2.getId(), dbSession)).isNotNull();
+ assertThat(underTest.selectByUuid(condition1.getUuid(), dbSession)).isNull();
+ assertThat(underTest.selectByUuid(condition2.getUuid(), dbSession)).isNotNull();
}
@Test
@@ -106,7 +107,7 @@ public class QualityGateConditionDaoTest {
QualityGateConditionDto condition2 = insertQGCondition(3L);
QualityGateConditionDto newCondition1 = new QualityGateConditionDto()
- .setId(condition1.getId())
+ .setUuid(condition1.getUuid())
.setQualityGateId(condition1.getQualityGateId())
.setMetricId(7L)
.setOperator(">")
@@ -115,8 +116,8 @@ public class QualityGateConditionDaoTest {
dbSession.commit();
- assertEquals(underTest.selectById(condition1.getId(), dbSession), newCondition1);
- assertEquals(underTest.selectById(condition2.getId(), dbSession), condition2);
+ assertEquals(underTest.selectByUuid(condition1.getUuid(), dbSession), newCondition1);
+ assertEquals(underTest.selectByUuid(condition2.getUuid(), dbSession), condition2);
}
@Test
@@ -131,9 +132,9 @@ public class QualityGateConditionDaoTest {
dbTester.commit();
- assertThat(underTest.selectById(condition1.getId(), dbSession)).isNotNull();
- assertThat(underTest.selectById(condition2.getId(), dbSession)).isNull();
- assertThat(underTest.selectById(condition3.getId(), dbSession)).isNull();
+ assertThat(underTest.selectByUuid(condition1.getUuid(), dbSession)).isNotNull();
+ assertThat(underTest.selectByUuid(condition2.getUuid(), dbSession)).isNull();
+ assertThat(underTest.selectByUuid(condition3.getUuid(), dbSession)).isNull();
}
private QualityGateConditionDto insertQGCondition(long qualityGateId) {
@@ -146,6 +147,7 @@ public class QualityGateConditionDaoTest {
private QualityGateConditionDto insertQGCondition(long qualityGateId, long metricId, String operator, String threshold) {
QualityGateConditionDto res = new QualityGateConditionDto()
+ .setUuid(Uuids.create())
.setQualityGateId(qualityGateId)
.setMetricId(metricId)
.setOperator(operator)
diff --git a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/qualitygate/QualityGateDbTester.java b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/qualitygate/QualityGateDbTester.java
index 596b2e04471..1f49d797efb 100644
--- a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/qualitygate/QualityGateDbTester.java
+++ b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/qualitygate/QualityGateDbTester.java
@@ -94,6 +94,7 @@ public class QualityGateDbTester {
@SafeVarargs
public final QualityGateConditionDto addCondition(QualityGateDto qualityGate, MetricDto metric, Consumer<QualityGateConditionDto>... dtoPopulators) {
QualityGateConditionDto condition = new QualityGateConditionDto().setQualityGateId(qualityGate.getId())
+ .setUuid(Uuids.createFast())
.setMetricId(metric.getId())
.setOperator("GT")
.setErrorThreshold(randomNumeric(10));
diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/AddPrimaryKeyOnUuidColumnOfQualityGateConditionsTable.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/AddPrimaryKeyOnUuidColumnOfQualityGateConditionsTable.java
new file mode 100644
index 00000000000..c69ffbeffd0
--- /dev/null
+++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/AddPrimaryKeyOnUuidColumnOfQualityGateConditionsTable.java
@@ -0,0 +1,38 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.qualitygateconditions;
+
+import java.sql.SQLException;
+import org.sonar.db.Database;
+import org.sonar.server.platform.db.migration.step.DdlChange;
+import org.sonar.server.platform.db.migration.version.v83.util.AddPrimaryKeyBuilder;
+
+public class AddPrimaryKeyOnUuidColumnOfQualityGateConditionsTable extends DdlChange {
+
+ public AddPrimaryKeyOnUuidColumnOfQualityGateConditionsTable(Database db) {
+ super(db);
+ }
+
+ @Override
+ public void execute(Context context) throws SQLException {
+ context.execute(new AddPrimaryKeyBuilder("quality_gate_conditions", "uuid").build());
+ }
+
+}
diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/AddUuidColumnToQualityGateConditionsTable.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/AddUuidColumnToQualityGateConditionsTable.java
new file mode 100644
index 00000000000..34c7ed0d4b1
--- /dev/null
+++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/AddUuidColumnToQualityGateConditionsTable.java
@@ -0,0 +1,31 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.qualitygateconditions;
+
+import org.sonar.db.Database;
+import org.sonar.server.platform.db.migration.version.v83.common.AddUuidColumnToTable;
+
+public class AddUuidColumnToQualityGateConditionsTable extends AddUuidColumnToTable {
+ private static final String TABLE = "quality_gate_conditions";
+
+ public AddUuidColumnToQualityGateConditionsTable(Database db) {
+ super(db, TABLE);
+ }
+}
diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/DropIdColumnOfQualityGateConditionsTable.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/DropIdColumnOfQualityGateConditionsTable.java
new file mode 100644
index 00000000000..5ea1809a672
--- /dev/null
+++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/DropIdColumnOfQualityGateConditionsTable.java
@@ -0,0 +1,31 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.qualitygateconditions;
+
+import org.sonar.db.Database;
+import org.sonar.server.platform.db.migration.version.v83.common.DropIdColumn;
+
+public class DropIdColumnOfQualityGateConditionsTable extends DropIdColumn {
+ private static final String TABLE = "quality_gate_conditions";
+
+ public DropIdColumnOfQualityGateConditionsTable(Database db) {
+ super(db, TABLE);
+ }
+}
diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/DropPrimaryKeyOnIdColumnOfQualityGateConditionsTable.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/DropPrimaryKeyOnIdColumnOfQualityGateConditionsTable.java
new file mode 100644
index 00000000000..c1b89875c8a
--- /dev/null
+++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/DropPrimaryKeyOnIdColumnOfQualityGateConditionsTable.java
@@ -0,0 +1,32 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.qualitygateconditions;
+
+import org.sonar.db.Database;
+import org.sonar.server.platform.db.migration.version.v83.common.DropPrimaryKeyOnIdColumn;
+import org.sonar.server.platform.db.migration.version.v83.util.DropPrimaryKeySqlGenerator;
+
+public class DropPrimaryKeyOnIdColumnOfQualityGateConditionsTable extends DropPrimaryKeyOnIdColumn {
+ private static final String TABLE_NAME = "quality_gate_conditions";
+
+ public DropPrimaryKeyOnIdColumnOfQualityGateConditionsTable(Database db, DropPrimaryKeySqlGenerator dropPrimaryKeySqlGenerator) {
+ super(db, dropPrimaryKeySqlGenerator, TABLE_NAME);
+ }
+}
diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/MakeQualityGateConditionsUuidColumnNotNullable.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/MakeQualityGateConditionsUuidColumnNotNullable.java
new file mode 100644
index 00000000000..c1835b49bc0
--- /dev/null
+++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/MakeQualityGateConditionsUuidColumnNotNullable.java
@@ -0,0 +1,31 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.qualitygateconditions;
+
+import org.sonar.db.Database;
+import org.sonar.server.platform.db.migration.version.v83.common.MakeUuidColumnNotNullable;
+
+public class MakeQualityGateConditionsUuidColumnNotNullable extends MakeUuidColumnNotNullable {
+ private static final String TABLE = "quality_gate_conditions";
+
+ public MakeQualityGateConditionsUuidColumnNotNullable(Database db) {
+ super(db, TABLE);
+ }
+}
diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/PopulateQualityGateConditionsUuid.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/PopulateQualityGateConditionsUuid.java
new file mode 100644
index 00000000000..8a7447de24c
--- /dev/null
+++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/PopulateQualityGateConditionsUuid.java
@@ -0,0 +1,50 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.qualitygateconditions;
+
+import java.sql.SQLException;
+import org.sonar.core.util.UuidFactory;
+import org.sonar.db.Database;
+import org.sonar.server.platform.db.migration.step.DataChange;
+import org.sonar.server.platform.db.migration.step.MassUpdate;
+
+public class PopulateQualityGateConditionsUuid extends DataChange {
+
+ private final UuidFactory uuidFactory;
+
+ public PopulateQualityGateConditionsUuid(Database db, UuidFactory uuidFactory) {
+ super(db);
+ this.uuidFactory = uuidFactory;
+ }
+
+ @Override
+ protected void execute(Context context) throws SQLException {
+ MassUpdate massUpdate = context.prepareMassUpdate();
+
+ massUpdate.select("select id from quality_gate_conditions where uuid is null order by id asc");
+ massUpdate.update("update quality_gate_conditions set uuid = ? where id = ?");
+
+ massUpdate.execute((row, update) -> {
+ update.setString(1, uuidFactory.create());
+ update.setLong(2, row.getLong(1));
+ return true;
+ });
+ }
+}
diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/AddPrimaryKeyOnUuidColumnOfQualityGateConditionsTableTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/AddPrimaryKeyOnUuidColumnOfQualityGateConditionsTableTest.java
new file mode 100644
index 00000000000..3a19b4f7dfe
--- /dev/null
+++ b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/AddPrimaryKeyOnUuidColumnOfQualityGateConditionsTableTest.java
@@ -0,0 +1,50 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.qualitygateconditions;
+
+import java.sql.SQLException;
+import org.junit.Rule;
+import org.junit.Test;
+import org.sonar.db.CoreDbTester;
+import org.sonar.server.platform.db.migration.step.DdlChange;
+
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+public class AddPrimaryKeyOnUuidColumnOfQualityGateConditionsTableTest {
+
+ @Rule
+ public CoreDbTester db = CoreDbTester.createForSchema(AddPrimaryKeyOnUuidColumnOfQualityGateConditionsTableTest.class, "schema.sql");
+
+ private DdlChange underTest = new AddPrimaryKeyOnUuidColumnOfQualityGateConditionsTable(db.database());
+
+ @Test
+ public void execute() throws SQLException {
+ underTest.execute();
+
+ db.assertPrimaryKey("quality_gate_conditions", "pk_quality_gate_conditions", "uuid");
+ }
+
+ @Test
+ public void migration_is_not_re_entrant() throws SQLException {
+ underTest.execute();
+
+ assertThatThrownBy(() -> underTest.execute()).isInstanceOf(IllegalStateException.class);
+ }
+}
diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/AddUuidColumnToQualityGateConditionsTableTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/AddUuidColumnToQualityGateConditionsTableTest.java
new file mode 100644
index 00000000000..a60293d6886
--- /dev/null
+++ b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/AddUuidColumnToQualityGateConditionsTableTest.java
@@ -0,0 +1,66 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.qualitygateconditions;
+
+import java.sql.SQLException;
+import java.sql.Types;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.sonar.core.util.UuidFactoryFast;
+import org.sonar.db.CoreDbTester;
+import org.sonar.server.platform.db.migration.step.DdlChange;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class AddUuidColumnToQualityGateConditionsTableTest {
+
+ @Rule
+ public CoreDbTester db = CoreDbTester.createForSchema(AddUuidColumnToQualityGateConditionsTableTest.class, "schema.sql");
+
+ private DdlChange underTest = new AddUuidColumnToQualityGateConditionsTable(db.database());
+
+ private UuidFactoryFast uuidFactory = UuidFactoryFast.getInstance();
+
+ @Before
+ public void setup() {
+ insertQualityGateCondition(1L);
+ insertQualityGateCondition(2L);
+ insertQualityGateCondition(3L);
+ }
+
+ @Test
+ public void add_uuid_column() throws SQLException {
+ underTest.execute();
+
+ db.assertColumnDefinition("quality_gate_conditions", "uuid", Types.VARCHAR, 40, true);
+
+ assertThat(db.countRowsOfTable("quality_gate_conditions"))
+ .isEqualTo(3);
+ }
+
+ private void insertQualityGateCondition(Long id) {
+ db.executeInsert("quality_gate_conditions",
+ "id", id,
+ "qgate_id", id + 1,
+ "period", id + 2);
+ }
+
+}
diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/DropIdColumnOfQualityGateConditionsTableTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/DropIdColumnOfQualityGateConditionsTableTest.java
new file mode 100644
index 00000000000..a80e871fef5
--- /dev/null
+++ b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/DropIdColumnOfQualityGateConditionsTableTest.java
@@ -0,0 +1,51 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.qualitygateconditions;
+
+import java.sql.SQLException;
+import org.junit.Rule;
+import org.junit.Test;
+import org.sonar.db.CoreDbTester;
+import org.sonar.server.platform.db.migration.step.DdlChange;
+
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+public class DropIdColumnOfQualityGateConditionsTableTest {
+
+ @Rule
+ public CoreDbTester db = CoreDbTester.createForSchema(DropIdColumnOfQualityGateConditionsTableTest.class, "schema.sql");
+
+ private DdlChange underTest = new DropIdColumnOfQualityGateConditionsTable(db.database());
+
+ @Test
+ public void execute() throws SQLException {
+ underTest.execute();
+
+ db.assertColumnDoesNotExist("quality_gate_conditions", "id");
+ }
+
+ @Test
+ public void migration_is_not_re_entrant() throws SQLException {
+ underTest.execute();
+
+ assertThatThrownBy(() -> underTest.execute()).isInstanceOf(IllegalStateException.class);
+ }
+
+}
diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/DropPrimaryKeyOnIdColumnOfQualityGateConditionsTableTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/DropPrimaryKeyOnIdColumnOfQualityGateConditionsTableTest.java
new file mode 100644
index 00000000000..20d7cddf43f
--- /dev/null
+++ b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/DropPrimaryKeyOnIdColumnOfQualityGateConditionsTableTest.java
@@ -0,0 +1,56 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.qualitygateconditions;
+
+import java.sql.SQLException;
+import org.junit.Rule;
+import org.junit.Test;
+import org.sonar.db.CoreDbTester;
+import org.sonar.server.platform.db.migration.step.DdlChange;
+import org.sonar.server.platform.db.migration.version.v83.util.DropPrimaryKeySqlGenerator;
+import org.sonar.server.platform.db.migration.version.v83.util.SqlHelper;
+
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+public class DropPrimaryKeyOnIdColumnOfQualityGateConditionsTableTest {
+
+ private static final String TABLE_NAME = "quality_gate_conditions";
+ @Rule
+ public CoreDbTester db = CoreDbTester.createForSchema(DropPrimaryKeyOnIdColumnOfQualityGateConditionsTableTest.class, "schema.sql");
+
+ private DropPrimaryKeySqlGenerator dropPrimaryKeySqlGenerator = new DropPrimaryKeySqlGenerator(db.database(), new SqlHelper(db.database()));
+
+ private DdlChange underTest = new DropPrimaryKeyOnIdColumnOfQualityGateConditionsTable(db.database(), dropPrimaryKeySqlGenerator);
+
+ @Test
+ public void execute() throws SQLException {
+ underTest.execute();
+
+ db.assertNoPrimaryKey(TABLE_NAME);
+ }
+
+ @Test
+ public void migration_is_not_re_entrant() throws SQLException {
+ underTest.execute();
+
+ assertThatThrownBy(() -> underTest.execute()).isInstanceOf(IllegalStateException.class);
+ }
+}
diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/MakeQualityGateConditionsUuidColumnNotNullableTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/MakeQualityGateConditionsUuidColumnNotNullableTest.java
new file mode 100644
index 00000000000..d045803b0af
--- /dev/null
+++ b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/MakeQualityGateConditionsUuidColumnNotNullableTest.java
@@ -0,0 +1,42 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.qualitygateconditions;
+
+import java.sql.SQLException;
+import org.junit.Rule;
+import org.junit.Test;
+import org.sonar.db.CoreDbTester;
+import org.sonar.server.platform.db.migration.step.MigrationStep;
+
+import static java.sql.Types.VARCHAR;
+
+public class MakeQualityGateConditionsUuidColumnNotNullableTest {
+ @Rule
+ public CoreDbTester db = CoreDbTester.createForSchema(MakeQualityGateConditionsUuidColumnNotNullableTest.class, "schema.sql");
+
+ private MigrationStep underTest = new MakeQualityGateConditionsUuidColumnNotNullable(db.database());
+
+ @Test
+ public void uuid_column_is_not_nullable() throws SQLException {
+ underTest.execute();
+
+ db.assertColumnDefinition("quality_gate_conditions", "uuid", VARCHAR, null, false);
+ }
+}
diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/PopulateQualityGateConditionsUuidTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/PopulateQualityGateConditionsUuidTest.java
new file mode 100644
index 00000000000..cb852ddef9b
--- /dev/null
+++ b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/PopulateQualityGateConditionsUuidTest.java
@@ -0,0 +1,81 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.qualitygateconditions;
+
+import java.sql.SQLException;
+import java.util.Objects;
+import java.util.stream.Collectors;
+import org.junit.Rule;
+import org.junit.Test;
+import org.sonar.core.util.UuidFactory;
+import org.sonar.core.util.UuidFactoryFast;
+import org.sonar.db.CoreDbTester;
+import org.sonar.server.platform.db.migration.step.DataChange;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class PopulateQualityGateConditionsUuidTest {
+
+ @Rule
+ public CoreDbTester db = CoreDbTester.createForSchema(PopulateQualityGateConditionsUuidTest.class, "schema.sql");
+
+ private UuidFactory uuidFactory = UuidFactoryFast.getInstance();
+ private DataChange underTest = new PopulateQualityGateConditionsUuid(db.database(), uuidFactory);
+
+ @Test
+ public void populate_uuids() throws SQLException {
+ insertQualityGateCondition(1L);
+ insertQualityGateCondition(2L);
+ insertQualityGateCondition(3L);
+
+ underTest.execute();
+
+ verifyUuidsAreNotNull();
+ }
+
+ @Test
+ public void migration_is_reentrant() throws SQLException {
+ insertQualityGateCondition(1L);
+ insertQualityGateCondition(2L);
+ insertQualityGateCondition(3L);
+
+ underTest.execute();
+ // re-entrant
+ underTest.execute();
+
+ verifyUuidsAreNotNull();
+ }
+
+ private void verifyUuidsAreNotNull() {
+ assertThat(db.select("select uuid from quality_gate_conditions")
+ .stream()
+ .map(row -> row.get("UUID"))
+ .filter(Objects::isNull)
+ .collect(Collectors.toList())).isEmpty();
+ }
+
+ private void insertQualityGateCondition(Long id) {
+ db.executeInsert("quality_gate_conditions",
+ "id", id,
+ "uuid", uuidFactory.create(),
+ "qgate_id", id + 1,
+ "period", id + 2);
+ }
+}
diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/AddPrimaryKeyOnUuidColumnOfQualityGateConditionsTableTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/AddPrimaryKeyOnUuidColumnOfQualityGateConditionsTableTest/schema.sql
new file mode 100644
index 00000000000..eb63669fd7e
--- /dev/null
+++ b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/AddPrimaryKeyOnUuidColumnOfQualityGateConditionsTableTest/schema.sql
@@ -0,0 +1,12 @@
+CREATE TABLE "QUALITY_GATE_CONDITIONS"(
+ "ID" INTEGER NOT NULL,
+ "UUID" VARCHAR(40) NOT NULL,
+ "QGATE_ID" INTEGER,
+ "METRIC_ID" INTEGER,
+ "PERIOD" INTEGER,
+ "OPERATOR" VARCHAR(3),
+ "VALUE_ERROR" VARCHAR(64),
+ "VALUE_WARNING" VARCHAR(64),
+ "CREATED_AT" TIMESTAMP,
+ "UPDATED_AT" TIMESTAMP
+);
diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/AddUuidColumnToQualityGateConditionsTableTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/AddUuidColumnToQualityGateConditionsTableTest/schema.sql
new file mode 100644
index 00000000000..a347b023e66
--- /dev/null
+++ b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/AddUuidColumnToQualityGateConditionsTableTest/schema.sql
@@ -0,0 +1,12 @@
+CREATE TABLE "QUALITY_GATE_CONDITIONS"(
+ "ID" INTEGER NOT NULL AUTO_INCREMENT (1,1),
+ "QGATE_ID" INTEGER,
+ "METRIC_ID" INTEGER,
+ "PERIOD" INTEGER,
+ "OPERATOR" VARCHAR(3),
+ "VALUE_ERROR" VARCHAR(64),
+ "VALUE_WARNING" VARCHAR(64),
+ "CREATED_AT" TIMESTAMP,
+ "UPDATED_AT" TIMESTAMP
+);
+ALTER TABLE "QUALITY_GATE_CONDITIONS" ADD CONSTRAINT "PK_QUALITY_GATE_CONDITIONS" PRIMARY KEY("ID");
diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/DropIdColumnOfQualityGateConditionsTableTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/DropIdColumnOfQualityGateConditionsTableTest/schema.sql
new file mode 100644
index 00000000000..68093696c1e
--- /dev/null
+++ b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/DropIdColumnOfQualityGateConditionsTableTest/schema.sql
@@ -0,0 +1,13 @@
+CREATE TABLE "QUALITY_GATE_CONDITIONS"(
+ "ID" INTEGER NOT NULL AUTO_INCREMENT (1,1),
+ "UUID" VARCHAR(40) NOT NULL,
+ "QGATE_ID" INTEGER,
+ "METRIC_ID" INTEGER,
+ "PERIOD" INTEGER,
+ "OPERATOR" VARCHAR(3),
+ "VALUE_ERROR" VARCHAR(64),
+ "VALUE_WARNING" VARCHAR(64),
+ "CREATED_AT" TIMESTAMP,
+ "UPDATED_AT" TIMESTAMP
+);
+ALTER TABLE "QUALITY_GATE_CONDITIONS" ADD CONSTRAINT "PK_QUALITY_GATE_CONDITIONS" PRIMARY KEY("UUID");
diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/DropPrimaryKeyOnIdColumnOfQualityGateConditionsTableTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/DropPrimaryKeyOnIdColumnOfQualityGateConditionsTableTest/schema.sql
new file mode 100644
index 00000000000..751e993b7ee
--- /dev/null
+++ b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/DropPrimaryKeyOnIdColumnOfQualityGateConditionsTableTest/schema.sql
@@ -0,0 +1,13 @@
+CREATE TABLE "QUALITY_GATE_CONDITIONS"(
+ "ID" INTEGER NOT NULL AUTO_INCREMENT (1,1),
+ "UUID" VARCHAR(40) NOT NULL,
+ "QGATE_ID" INTEGER,
+ "METRIC_ID" INTEGER,
+ "PERIOD" INTEGER,
+ "OPERATOR" VARCHAR(3),
+ "VALUE_ERROR" VARCHAR(64),
+ "VALUE_WARNING" VARCHAR(64),
+ "CREATED_AT" TIMESTAMP,
+ "UPDATED_AT" TIMESTAMP
+);
+ALTER TABLE "QUALITY_GATE_CONDITIONS" ADD CONSTRAINT "PK_QUALITY_GATE_CONDITIONS" PRIMARY KEY("ID");
diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/MakeQualityGateConditionsUuidColumnNotNullableTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/MakeQualityGateConditionsUuidColumnNotNullableTest/schema.sql
new file mode 100644
index 00000000000..dd697725c44
--- /dev/null
+++ b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/MakeQualityGateConditionsUuidColumnNotNullableTest/schema.sql
@@ -0,0 +1,12 @@
+CREATE TABLE "QUALITY_GATE_CONDITIONS"(
+ "ID" INTEGER NOT NULL AUTO_INCREMENT (1,1),
+ "UUID" VARCHAR(40) NOT NULL,
+ "QGATE_ID" INTEGER,
+ "METRIC_ID" INTEGER,
+ "PERIOD" INTEGER,
+ "OPERATOR" VARCHAR(3),
+ "VALUE_ERROR" VARCHAR(64),
+ "VALUE_WARNING" VARCHAR(64),
+ "CREATED_AT" TIMESTAMP,
+ "UPDATED_AT" TIMESTAMP
+);
diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/PopulateQualityGateConditionsUuidTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/PopulateQualityGateConditionsUuidTest/schema.sql
new file mode 100644
index 00000000000..2f6bb7f50c1
--- /dev/null
+++ b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/qualitygateconditions/PopulateQualityGateConditionsUuidTest/schema.sql
@@ -0,0 +1,13 @@
+CREATE TABLE "QUALITY_GATE_CONDITIONS"(
+ "ID" INTEGER NOT NULL AUTO_INCREMENT (1,1),
+ "UUID" VARCHAR(40),
+ "QGATE_ID" INTEGER,
+ "METRIC_ID" INTEGER,
+ "PERIOD" INTEGER,
+ "OPERATOR" VARCHAR(3),
+ "VALUE_ERROR" VARCHAR(64),
+ "VALUE_WARNING" VARCHAR(64),
+ "CREATED_AT" TIMESTAMP,
+ "UPDATED_AT" TIMESTAMP
+);
+ALTER TABLE "QUALITY_GATE_CONDITIONS" ADD CONSTRAINT "PK_QUALITY_GATE_CONDITIONS" PRIMARY KEY("ID");
diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/QualityGateConditionsUpdater.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/QualityGateConditionsUpdater.java
index bad67910b85..81995bfb175 100644
--- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/QualityGateConditionsUpdater.java
+++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/QualityGateConditionsUpdater.java
@@ -31,6 +31,7 @@ import java.util.Set;
import java.util.stream.Collectors;
import javax.annotation.Nullable;
import org.sonar.api.measures.Metric.ValueType;
+import org.sonar.core.util.Uuids;
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.metric.MetricDto;
@@ -92,6 +93,7 @@ public class QualityGateConditionsUpdater {
checkConditionDoesNotExistOnSameMetric(getConditions(dbSession, qualityGate.getId()), metric);
QualityGateConditionDto newCondition = new QualityGateConditionDto().setQualityGateId(qualityGate.getId())
+ .setUuid(Uuids.create())
.setMetricId(metric.getId()).setMetricKey(metric.getKey())
.setOperator(operator)
.setErrorThreshold(errorThreshold);
diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/QualityGateUpdater.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/QualityGateUpdater.java
index 37285a29b02..29bb767aa7f 100644
--- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/QualityGateUpdater.java
+++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/QualityGateUpdater.java
@@ -20,6 +20,7 @@
package org.sonar.server.qualitygate;
import org.sonar.core.util.UuidFactory;
+import org.sonar.core.util.Uuids;
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.organization.OrganizationDto;
@@ -56,6 +57,7 @@ public class QualityGateUpdater {
for (QualityGateConditionDto sourceCondition : dbClient.gateConditionDao().selectForQualityGate(dbSession, qualityGateDto.getId())) {
dbClient.gateConditionDao().insert(new QualityGateConditionDto()
+ .setUuid(Uuids.create())
.setQualityGateId(destinationGate.getId())
.setMetricId(sourceCondition.getMetricId())
.setOperator(sourceCondition.getOperator())
diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/RegisterQualityGates.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/RegisterQualityGates.java
index 8bd2f6c2d50..dad60af40b2 100644
--- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/RegisterQualityGates.java
+++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/RegisterQualityGates.java
@@ -153,26 +153,26 @@ public class RegisterQualityGates implements Startable {
}
private static class QualityGateCondition {
- private Long id;
+ private String uuid;
private String metricKey;
private String operator;
private String errorThreshold;
public static QualityGateCondition from(QualityGateConditionDto qualityGateConditionDto, Map<Long, String> mapping) {
return new QualityGateCondition()
- .setId(qualityGateConditionDto.getId())
+ .setUuid(qualityGateConditionDto.getUuid())
.setMetricKey(mapping.get(qualityGateConditionDto.getMetricId()))
.setOperator(qualityGateConditionDto.getOperator())
.setErrorThreshold(qualityGateConditionDto.getErrorThreshold());
}
@CheckForNull
- public Long getId() {
- return id;
+ public String getUuid() {
+ return uuid;
}
- public QualityGateCondition setId(Long id) {
- this.id = id;
+ public QualityGateCondition setUuid(String uuid) {
+ this.uuid = uuid;
return this;
}
@@ -205,7 +205,7 @@ public class RegisterQualityGates implements Startable {
public QualityGateConditionDto toQualityGateDto(long qualityGateId) {
return new QualityGateConditionDto()
- .setId(id)
+ .setUuid(uuid)
.setMetricKey(metricKey)
.setOperator(operator)
.setErrorThreshold(errorThreshold)
diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/CreateConditionAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/CreateConditionAction.java
index c271aab9d58..16674d7b102 100644
--- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/CreateConditionAction.java
+++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/CreateConditionAction.java
@@ -88,7 +88,8 @@ public class CreateConditionAction implements QualityGatesWsAction {
wsSupport.checkCanEdit(qualityGate);
QualityGateConditionDto condition = qualityGateConditionsUpdater.createCondition(dbSession, qualityGate, metric, operator, error);
CreateConditionResponse.Builder createConditionResponse = CreateConditionResponse.newBuilder()
- .setId(condition.getId())
+ // TODO
+ //.setId(condition.getUuid())
.setMetric(condition.getMetricKey())
.setError(condition.getErrorThreshold())
.setOp(condition.getOperator());
diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/DeleteConditionAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/DeleteConditionAction.java
index d3f9d9c643b..7060e275513 100644
--- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/DeleteConditionAction.java
+++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/DeleteConditionAction.java
@@ -61,12 +61,13 @@ public class DeleteConditionAction implements QualityGatesWsAction {
@Override
public void handle(Request request, Response response) {
- long conditionId = request.mandatoryParamAsLong(PARAM_ID);
+ // TODO
+ String conditionUuid = request.mandatoryParam(PARAM_ID);
try (DbSession dbSession = dbClient.openSession(false)) {
OrganizationDto organization = wsSupport.getOrganization(dbSession, request);
- QualityGateConditionDto condition = wsSupport.getCondition(dbSession, conditionId);
+ QualityGateConditionDto condition = wsSupport.getCondition(dbSession, conditionUuid);
QGateWithOrgDto qualityGateDto = dbClient.qualityGateDao().selectByOrganizationAndId(dbSession, organization, condition.getQualityGateId());
- checkState(qualityGateDto != null, "Condition '%s' is linked to an unknown quality gate '%s'", conditionId, condition.getQualityGateId());
+ checkState(qualityGateDto != null, "Condition '%s' is linked to an unknown quality gate '%s'", conditionUuid, condition.getQualityGateId());
wsSupport.checkCanEdit(qualityGateDto);
dbClient.gateConditionDao().delete(condition, dbSession);
diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/QualityGatesWsSupport.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/QualityGatesWsSupport.java
index d1d867f5661..492dac9039f 100644
--- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/QualityGatesWsSupport.java
+++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/QualityGatesWsSupport.java
@@ -67,8 +67,8 @@ public class QualityGatesWsSupport {
"No quality gate has been found for id %s in organization %s", qualityGateId, organization.getName());
}
- QualityGateConditionDto getCondition(DbSession dbSession, long id) {
- return checkFound(dbClient.gateConditionDao().selectById(id, dbSession), "No quality gate condition with id '%d'", id);
+ QualityGateConditionDto getCondition(DbSession dbSession, String uuid) {
+ return checkFound(dbClient.gateConditionDao().selectByUuid(uuid, dbSession), "No quality gate condition with uuid '%s'", uuid);
}
boolean isQualityGateAdmin(OrganizationDto organization) {
diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/ShowAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/ShowAction.java
index 7a2ae0a30cd..ae96b03eca8 100644
--- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/ShowAction.java
+++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/ShowAction.java
@@ -140,7 +140,8 @@ public class ShowAction implements QualityGatesWsAction {
MetricDto metric = metricsById.get(metricId);
checkState(metric != null, "Could not find metric with id %s", metricId);
ShowWsResponse.Condition.Builder builder = ShowWsResponse.Condition.newBuilder()
- .setId(condition.getId())
+ // TODO
+ //.setId(condition.getUuid())
.setMetric(metric.getKey())
.setOp(condition.getOperator());
ofNullable(condition.getErrorThreshold()).ifPresent(builder::setError);
diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/UpdateConditionAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/UpdateConditionAction.java
index 0f5f4589b1b..a6a34ba65c8 100644
--- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/UpdateConditionAction.java
+++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/UpdateConditionAction.java
@@ -77,7 +77,7 @@ public class UpdateConditionAction implements QualityGatesWsAction {
@Override
public void handle(Request request, Response response) {
- int id = request.mandatoryParamAsInt(PARAM_ID);
+ String id = request.mandatoryParam(PARAM_ID);
String metric = request.mandatoryParam(PARAM_METRIC);
String operator = request.mandatoryParam(PARAM_OPERATOR);
String error = request.mandatoryParam(PARAM_ERROR);
@@ -90,7 +90,8 @@ public class UpdateConditionAction implements QualityGatesWsAction {
wsSupport.checkCanEdit(qualityGateDto);
QualityGateConditionDto updatedCondition = qualityGateConditionsUpdater.updateCondition(dbSession, condition, metric, operator, error);
UpdateConditionResponse.Builder updateConditionResponse = UpdateConditionResponse.newBuilder()
- .setId(updatedCondition.getId())
+ // TODO
+ // .setId(updatedCondition.getUuid())
.setMetric(updatedCondition.getMetricKey())
.setError(updatedCondition.getErrorThreshold())
.setOp(updatedCondition.getOperator());
diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/QualityGateConditionsUpdaterTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/QualityGateConditionsUpdaterTest.java
index 8d6e1eea1c4..c7470ddaebf 100644
--- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/QualityGateConditionsUpdaterTest.java
+++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/QualityGateConditionsUpdaterTest.java
@@ -392,7 +392,7 @@ public class QualityGateConditionsUpdaterTest {
}
private void verifyCondition(QualityGateConditionDto dto, QualityGateDto qualityGate, MetricDto metric, String operator, String error) {
- QualityGateConditionDto reloaded = db.getDbClient().gateConditionDao().selectById(dto.getId(), db.getSession());
+ QualityGateConditionDto reloaded = db.getDbClient().gateConditionDao().selectByUuid(dto.getUuid(), db.getSession());
assertThat(reloaded.getQualityGateId()).isEqualTo(qualityGate.getId());
assertThat(reloaded.getMetricId()).isEqualTo(metric.getId().longValue());
assertThat(reloaded.getOperator()).isEqualTo(operator);
diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/RegisterQualityGatesTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/RegisterQualityGatesTest.java
index 98b37354d97..3b1f58fecef 100644
--- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/RegisterQualityGatesTest.java
+++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/RegisterQualityGatesTest.java
@@ -214,6 +214,7 @@ public class RegisterQualityGatesTest {
public void builtin_quality_gate_with_incorrect_metricId_should_not_throw_an_exception() {
insertMetrics();
QualityGateConditionDto conditionDto = new QualityGateConditionDto()
+ .setUuid(Uuids.createFast())
.setMetricId(-1) // This Id does not exist
.setOperator(OPERATOR_GREATER_THAN)
.setErrorThreshold("1");
diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/CreateConditionActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/CreateConditionActionTest.java
index cb5f0c1514b..31b4829efc0 100644
--- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/CreateConditionActionTest.java
+++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/CreateConditionActionTest.java
@@ -205,7 +205,7 @@ public class CreateConditionActionTest {
.executeProtobuf(CreateConditionResponse.class);
QualityGateConditionDto condition = new ArrayList<>(dbClient.gateConditionDao().selectForQualityGate(dbSession, qualityGate.getId())).get(0);
- assertThat(response.getId()).isEqualTo(condition.getId());
+ assertThat(response.getId()).isEqualTo(condition.getUuid());
assertThat(response.getMetric()).isEqualTo(metric.getKey());
assertThat(response.getOp()).isEqualTo("LT");
assertThat(response.getError()).isEqualTo("45");
diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/DeleteConditionActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/DeleteConditionActionTest.java
index 31ea34856af..bdfdf5c02e7 100644
--- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/DeleteConditionActionTest.java
+++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/DeleteConditionActionTest.java
@@ -39,7 +39,6 @@ import org.sonar.server.ws.TestResponse;
import org.sonar.server.ws.WsActionTester;
import static java.lang.String.format;
-import static java.lang.String.valueOf;
import static java.net.HttpURLConnection.HTTP_NO_CONTENT;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.tuple;
@@ -84,7 +83,7 @@ public class DeleteConditionActionTest {
QualityGateConditionDto qualityGateCondition = db.qualityGates().addCondition(qualityGate, metric);
ws.newRequest()
- .setParam(PARAM_ID, valueOf(qualityGateCondition.getId()))
+ .setParam(PARAM_ID, qualityGateCondition.getUuid())
.setParam(PARAM_ORGANIZATION, organization.getKey())
.execute();
@@ -99,7 +98,7 @@ public class DeleteConditionActionTest {
QualityGateConditionDto qualityGateCondition = db.qualityGates().addCondition(qualityGate, metric);
ws.newRequest()
- .setParam(PARAM_ID, valueOf(qualityGateCondition.getId()))
+ .setParam(PARAM_ID, qualityGateCondition.getUuid())
.execute();
assertThat(searchConditionsOf(qualityGate)).isEmpty();
@@ -114,7 +113,7 @@ public class DeleteConditionActionTest {
QualityGateConditionDto qualityGateCondition = db.qualityGates().addCondition(qualityGate, metric);
TestResponse result = ws.newRequest()
- .setParam(PARAM_ID, valueOf(qualityGateCondition.getId()))
+ .setParam(PARAM_ID, qualityGateCondition.getUuid())
.setParam(PARAM_ORGANIZATION, organization.getKey())
.execute();
@@ -133,7 +132,7 @@ public class DeleteConditionActionTest {
expectedException.expectMessage(format("Operation forbidden for built-in Quality Gate '%s'", qualityGate.getName()));
ws.newRequest()
- .setParam(PARAM_ID, valueOf(qualityGateCondition.getId()))
+ .setParam(PARAM_ID, qualityGateCondition.getUuid())
.setParam(PARAM_ORGANIZATION, organization.getKey())
.execute();
}
@@ -149,25 +148,25 @@ public class DeleteConditionActionTest {
expectedException.expect(ForbiddenException.class);
ws.newRequest()
- .setParam(PARAM_ID, valueOf(qualityGateCondition.getId()))
+ .setParam(PARAM_ID, qualityGateCondition.getUuid())
.setParam(PARAM_ORGANIZATION, organization.getKey())
.execute();
}
@Test
- public void fail_if_condition_id_is_not_found() {
+ public void fail_if_condition_uuid_is_not_found() {
OrganizationDto organization = db.organizations().insert();
userSession.addPermission(ADMINISTER_QUALITY_PROFILES, organization);
QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization);
MetricDto metric = db.measures().insertMetric();
QualityGateConditionDto qualityGateCondition = db.qualityGates().addCondition(qualityGate, metric);
- long unknownConditionId = qualityGateCondition.getId() + 42L;
+ String unknownConditionUuid = "unknown";
expectedException.expect(NotFoundException.class);
- expectedException.expectMessage("No quality gate condition with id '" + unknownConditionId + "'");
+ expectedException.expectMessage("No quality gate condition with uuid '" + unknownConditionUuid + "'");
ws.newRequest()
- .setParam(PARAM_ID, valueOf(unknownConditionId))
+ .setParam(PARAM_ID, unknownConditionUuid)
.setParam(PARAM_ORGANIZATION, organization.getKey())
.execute();
}
@@ -176,15 +175,15 @@ public class DeleteConditionActionTest {
public void fail_when_condition_match_unknown_quality_gate() {
OrganizationDto organization = db.organizations().insert();
userSession.addPermission(ADMINISTER_QUALITY_PROFILES, organization);
- QualityGateConditionDto condition = new QualityGateConditionDto().setQualityGateId(123L);
+ QualityGateConditionDto condition = new QualityGateConditionDto().setUuid("uuid").setQualityGateId(123L);
db.getDbClient().gateConditionDao().insert(condition, db.getSession());
db.commit();
expectedException.expect(IllegalStateException.class);
- expectedException.expectMessage(format("Condition '%s' is linked to an unknown quality gate '%s'", condition.getId(), 123L));
+ expectedException.expectMessage(format("Condition '%s' is linked to an unknown quality gate '%s'", condition.getUuid(), 123L));
ws.newRequest()
- .setParam(PARAM_ID, valueOf(condition.getId()))
+ .setParam(PARAM_ID, condition.getUuid())
.setParam(PARAM_ORGANIZATION, organization.getKey())
.execute();
}
@@ -199,10 +198,10 @@ public class DeleteConditionActionTest {
QualityGateConditionDto condition = db.qualityGates().addCondition(qualityGate, metric);
expectedException.expect(IllegalStateException.class);
- expectedException.expectMessage(format("Condition '%s' is linked to an unknown quality gate '%s'", condition.getId(), qualityGate.getId()));
+ expectedException.expectMessage(format("Condition '%s' is linked to an unknown quality gate '%s'", condition.getUuid(), qualityGate.getId()));
ws.newRequest()
- .setParam(PARAM_ID, valueOf(condition.getId()))
+ .setParam(PARAM_ID, condition.getUuid())
.setParam(PARAM_ORGANIZATION, organization.getKey())
.execute();
}
diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/ShowActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/ShowActionTest.java
index f92fd2d43ae..00cdc03166e 100644
--- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/ShowActionTest.java
+++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/ShowActionTest.java
@@ -89,8 +89,8 @@ public class ShowActionTest {
assertThat(response.getConditionsList())
.extracting(Condition::getId, Condition::getMetric, Condition::getOp, Condition::getError)
.containsExactlyInAnyOrder(
- tuple(condition1.getId(), metric1.getKey(), "GT", condition1.getErrorThreshold()),
- tuple(condition2.getId(), metric2.getKey(), "LT", condition2.getErrorThreshold()));
+ tuple(condition1.getUuid(), metric1.getKey(), "GT", condition1.getErrorThreshold()),
+ tuple(condition2.getUuid(), metric2.getKey(), "LT", condition2.getErrorThreshold()));
}
@Test
diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/UpdateConditionActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/UpdateConditionActionTest.java
index f655723b2f4..5dfe619802c 100644
--- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/UpdateConditionActionTest.java
+++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/UpdateConditionActionTest.java
@@ -88,7 +88,7 @@ public class UpdateConditionActionTest {
ws.newRequest()
.setParam(PARAM_ORGANIZATION, organization.getKey())
- .setParam(PARAM_ID, Long.toString(condition.getId()))
+ .setParam(PARAM_ID, condition.getUuid())
.setParam(PARAM_METRIC, metric.getKey())
.setParam(PARAM_OPERATOR, "LT")
.setParam(PARAM_ERROR, "90")
@@ -105,7 +105,7 @@ public class UpdateConditionActionTest {
QualityGateConditionDto condition = db.qualityGates().addCondition(qualityGate, metric);
ws.newRequest()
- .setParam(PARAM_ID, Long.toString(condition.getId()))
+ .setParam(PARAM_ID, condition.getUuid())
.setParam(PARAM_METRIC, metric.getKey())
.setParam(PARAM_OPERATOR, "LT")
.setParam(PARAM_ERROR, "10")
@@ -125,13 +125,13 @@ public class UpdateConditionActionTest {
CreateConditionResponse response = ws.newRequest()
.setParam(PARAM_ORGANIZATION, organization.getKey())
- .setParam(PARAM_ID, Long.toString(condition.getId()))
+ .setParam(PARAM_ID, condition.getUuid())
.setParam(PARAM_METRIC, metric.getKey())
.setParam(PARAM_OPERATOR, "LT")
.setParam(PARAM_ERROR, "45")
.executeProtobuf(CreateConditionResponse.class);
- assertThat(response.getId()).isEqualTo(condition.getId());
+ assertThat(response.getId()).isEqualTo(condition.getUuid());
assertThat(response.getMetric()).isEqualTo(metric.getKey());
assertThat(response.getOp()).isEqualTo("LT");
assertThat(response.getError()).isEqualTo("45");
@@ -150,7 +150,7 @@ public class UpdateConditionActionTest {
ws.newRequest()
.setParam(PARAM_ORGANIZATION, organization.getKey())
- .setParam(PARAM_ID, Long.toString(condition.getId()))
+ .setParam(PARAM_ID, condition.getUuid())
.setParam(PARAM_METRIC, metric.getKey())
.setParam(PARAM_OPERATOR, "LT")
.setParam(PARAM_ERROR, "10")
@@ -166,7 +166,7 @@ public class UpdateConditionActionTest {
db.qualityGates().addCondition(qualityGate, metric);
expectedException.expect(NotFoundException.class);
- expectedException.expectMessage("No quality gate condition with id '123'");
+ expectedException.expectMessage("No quality gate condition with uuid '123'");
ws.newRequest()
.setParam(PARAM_ORGANIZATION, organization.getKey())
@@ -182,16 +182,16 @@ public class UpdateConditionActionTest {
OrganizationDto organization = db.organizations().insert();
userSession.addPermission(ADMINISTER_QUALITY_GATES, organization);
MetricDto metric = insertMetric();
- QualityGateConditionDto condition = new QualityGateConditionDto().setQualityGateId(123L);
+ QualityGateConditionDto condition = new QualityGateConditionDto().setUuid("uuid").setQualityGateId(123L);
db.getDbClient().gateConditionDao().insert(condition, dbSession);
db.commit();
expectedException.expect(IllegalStateException.class);
- expectedException.expectMessage(format("Condition '%s' is linked to an unknown quality gate '%s'", condition.getId(), 123L));
+ expectedException.expectMessage(format("Condition '%s' is linked to an unknown quality gate '%s'", condition.getUuid(), 123L));
ws.newRequest()
.setParam(PARAM_ORGANIZATION, organization.getKey())
- .setParam(PARAM_ID, Long.toString(condition.getId()))
+ .setParam(PARAM_ID,condition.getUuid())
.setParam(PARAM_METRIC, metric.getKey())
.setParam(PARAM_OPERATOR, "LT")
.setParam(PARAM_ERROR, "90")
@@ -212,7 +212,7 @@ public class UpdateConditionActionTest {
ws.newRequest()
.setParam(PARAM_ORGANIZATION, organization.getKey())
- .setParam(PARAM_ID, Long.toString(condition.getId()))
+ .setParam(PARAM_ID, condition.getUuid())
.setParam(PARAM_METRIC, metric.getKey())
.setParam(PARAM_OPERATOR, "ABC")
.setParam(PARAM_ERROR, "90")
@@ -234,7 +234,7 @@ public class UpdateConditionActionTest {
ws.newRequest()
.setParam(PARAM_ORGANIZATION, organization.getKey())
- .setParam(PARAM_ID, Long.toString(condition.getId()))
+ .setParam(PARAM_ID, condition.getUuid())
.setParam(PARAM_METRIC, metric.getKey())
.setParam(PARAM_OPERATOR, updateOperator)
.setParam(PARAM_ERROR, "90")
@@ -254,7 +254,7 @@ public class UpdateConditionActionTest {
ws.newRequest()
.setParam(PARAM_ORGANIZATION, organization.getKey())
- .setParam(PARAM_ID, Long.toString(condition.getId()))
+ .setParam(PARAM_ID, condition.getUuid())
.setParam(PARAM_METRIC, metric.getKey())
.setParam(PARAM_OPERATOR, "LT")
.setParam(PARAM_ERROR, "90")