From: Julien Lancelot Date: Wed, 9 May 2018 14:15:13 +0000 (+0200) Subject: SONAR-10597 Update CE_QUEUE#SUBMITTER_LOGIN to SUBMITTER_UUID X-Git-Tag: 7.5~1160 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=f70ca313cc49368c64991e531da33036e53d0d5a;p=sonarqube.git SONAR-10597 Update CE_QUEUE#SUBMITTER_LOGIN to SUBMITTER_UUID --- diff --git a/server/sonar-ce/src/main/java/org/sonar/ce/taskprocessor/CeWorkerImpl.java b/server/sonar-ce/src/main/java/org/sonar/ce/taskprocessor/CeWorkerImpl.java index 3f609e1ca3b..bf308183aee 100644 --- a/server/sonar-ce/src/main/java/org/sonar/ce/taskprocessor/CeWorkerImpl.java +++ b/server/sonar-ce/src/main/java/org/sonar/ce/taskprocessor/CeWorkerImpl.java @@ -194,7 +194,7 @@ public class CeWorkerImpl implements CeWorker { .addContext("project", task.getComponentKey()) .addContext("type", task.getType()) .addContext("id", task.getUuid()); - String submitterLogin = task.getSubmitterLogin(); + String submitterLogin = task.getSubmitterUuid(); if (submitterLogin != null) { profiler.addContext("submitter", submitterLogin); } diff --git a/server/sonar-ce/src/test/java/org/sonar/ce/queue/InternalCeQueueImplTest.java b/server/sonar-ce/src/test/java/org/sonar/ce/queue/InternalCeQueueImplTest.java index 6c20fa90840..1aab3f25bfc 100644 --- a/server/sonar-ce/src/test/java/org/sonar/ce/queue/InternalCeQueueImplTest.java +++ b/server/sonar-ce/src/test/java/org/sonar/ce/queue/InternalCeQueueImplTest.java @@ -605,7 +605,7 @@ public class InternalCeQueueImplTest { assertThat(task.getComponentKey()).isEqualTo(componentDto.getDbKey()); assertThat(task.getComponentName()).isEqualTo(componentDto.name()); } - assertThat(task.getSubmitterLogin()).isEqualTo(taskSubmit.getSubmitterLogin()); + assertThat(task.getSubmitterUuid()).isEqualTo(taskSubmit.getSubmitterUuid()); } private void verifyCeQueueDtoForTaskSubmit(CeTaskSubmit taskSubmit) { @@ -614,7 +614,7 @@ public class InternalCeQueueImplTest { CeQueueDto dto = queueDto.get(); assertThat(dto.getTaskType()).isEqualTo(taskSubmit.getType()); assertThat(dto.getComponentUuid()).isEqualTo(taskSubmit.getComponentUuid()); - assertThat(dto.getSubmitterLogin()).isEqualTo(taskSubmit.getSubmitterLogin()); + assertThat(dto.getSubmitterUuid()).isEqualTo(taskSubmit.getSubmitterUuid()); assertThat(dto.getCreatedAt()).isEqualTo(dto.getUpdatedAt()).isNotNull(); } @@ -630,11 +630,11 @@ public class InternalCeQueueImplTest { return createTaskSubmit(type, null, null); } - private CeTaskSubmit createTaskSubmit(String type, @Nullable String componentUuid, @Nullable String submitterLogin) { + private CeTaskSubmit createTaskSubmit(String type, @Nullable String componentUuid, @Nullable String submitterUuid) { CeTaskSubmit.Builder submission = underTest.prepareSubmit(); submission.setType(type); submission.setComponentUuid(componentUuid); - submission.setSubmitterLogin(submitterLogin); + submission.setSubmitterUuid(submitterUuid); return submission.build(); } diff --git a/server/sonar-ce/src/test/java/org/sonar/ce/taskprocessor/CeWorkerImplTest.java b/server/sonar-ce/src/test/java/org/sonar/ce/taskprocessor/CeWorkerImplTest.java index eb9e23c3894..5701b2f54d7 100644 --- a/server/sonar-ce/src/test/java/org/sonar/ce/taskprocessor/CeWorkerImplTest.java +++ b/server/sonar-ce/src/test/java/org/sonar/ce/taskprocessor/CeWorkerImplTest.java @@ -507,7 +507,7 @@ public class CeWorkerImplTest { .setOrganizationUuid("org1") .setUuid("TASK_1").setType(CeTaskTypes.REPORT) .setComponentUuid("PROJECT_1") - .setSubmitterLogin(submitterLogin) + .setSubmitterUuid(submitterLogin) .build(); } diff --git a/server/sonar-db-core/src/main/resources/org/sonar/db/version/schema-h2.ddl b/server/sonar-db-core/src/main/resources/org/sonar/db/version/schema-h2.ddl index 62d8774d7fe..99ad46f3a05 100644 --- a/server/sonar-db-core/src/main/resources/org/sonar/db/version/schema-h2.ddl +++ b/server/sonar-db-core/src/main/resources/org/sonar/db/version/schema-h2.ddl @@ -634,7 +634,7 @@ CREATE TABLE "CE_QUEUE" ( "TASK_TYPE" VARCHAR(15) NOT NULL, "COMPONENT_UUID" VARCHAR(40) NULL, "STATUS" VARCHAR(15) NOT NULL, - "SUBMITTER_LOGIN" VARCHAR(255) NULL, + "SUBMITTER_UUID" VARCHAR(255) NULL, "WORKER_UUID" VARCHAR(40) NULL, "EXECUTION_COUNT" INTEGER NOT NULL, "STARTED_AT" BIGINT NULL, diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/ce/CeActivityDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/ce/CeActivityDto.java index af663e1aee8..1be750ac323 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/ce/CeActivityDto.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/ce/CeActivityDto.java @@ -92,7 +92,8 @@ public class CeActivityDto { this.taskType = queueDto.getTaskType(); this.componentUuid = queueDto.getComponentUuid(); this.isLastKey = format("%s%s", taskType, Strings.nullToEmpty(componentUuid)); - this.submitterLogin = queueDto.getSubmitterLogin(); + // FIXME + this.submitterLogin = queueDto.getSubmitterUuid(); this.workerUuid = queueDto.getWorkerUuid(); this.submittedAt = queueDto.getCreatedAt(); this.startedAt = queueDto.getStartedAt(); diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/ce/CeQueueDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/ce/CeQueueDto.java index 1cdebad0090..640b9c217e4 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/ce/CeQueueDto.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/ce/CeQueueDto.java @@ -34,7 +34,7 @@ public class CeQueueDto { private String taskType; private String componentUuid; private Status status; - private String submitterLogin; + private String submitterUuid; /** * UUID of the worker that is executing, or of the last worker that executed, the current task. */ @@ -84,13 +84,13 @@ public class CeQueueDto { } @CheckForNull - public String getSubmitterLogin() { - return submitterLogin; + public String getSubmitterUuid() { + return submitterUuid; } - public CeQueueDto setSubmitterLogin(@Nullable String s) { - checkArgument(s == null || s.length() <= 255, "Value of submitter login is too long: %s", s); - this.submitterLogin = s; + public CeQueueDto setSubmitterUuid(@Nullable String s) { + checkArgument(s == null || s.length() <= 255, "Value of submitter uuid is too long: %s", s); + this.submitterUuid = s; return this; } @@ -139,7 +139,7 @@ public class CeQueueDto { ", taskType='" + taskType + '\'' + ", componentUuid='" + componentUuid + '\'' + ", status=" + status + - ", submitterLogin='" + submitterLogin + '\'' + + ", submitterLogin='" + submitterUuid + '\'' + ", workerUuid='" + workerUuid + '\'' + ", startedAt=" + startedAt + ", createdAt=" + createdAt + diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/ce/CeQueueMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/ce/CeQueueMapper.xml index 495fc15f8b2..b2b8fb3e403 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/ce/CeQueueMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/ce/CeQueueMapper.xml @@ -8,7 +8,7 @@ cq.task_type as taskType, cq.component_uuid as componentUuid, cq.status as status, - cq.submitter_login as submitterLogin, + cq.submitter_uuid as submitterUuid, cq.worker_uuid as workerUuid, cq.started_at as startedAt, cq.created_at as createdAt, @@ -202,7 +202,7 @@ task_type, component_uuid, status, - submitter_login, + submitter_uuid, worker_uuid, execution_count, started_at, @@ -214,7 +214,7 @@ #{taskType,jdbcType=VARCHAR}, #{componentUuid,jdbcType=VARCHAR}, #{status,jdbcType=VARCHAR}, - #{submitterLogin,jdbcType=VARCHAR}, + #{submitterUuid,jdbcType=VARCHAR}, #{workerUuid,jdbcType=VARCHAR}, 0, #{startedAt,jdbcType=BIGINT}, diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/ce/CeActivityDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/ce/CeActivityDaoTest.java index f3132b2ac03..b8ed217c8ed 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/ce/CeActivityDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/ce/CeActivityDaoTest.java @@ -63,7 +63,7 @@ public class CeActivityDaoTest { assertThat(dto.getUuid()).isEqualTo("TASK_1"); assertThat(dto.getComponentUuid()).isEqualTo("PROJECT_1"); assertThat(dto.getStatus()).isEqualTo(CeActivityDto.Status.SUCCESS); - assertThat(dto.getSubmitterLogin()).isEqualTo("henri"); + assertThat(dto.getSubmitterLogin()).isEqualTo("submitter uuid"); assertThat(dto.getSubmittedAt()).isEqualTo(1_300_000_000_000L); assertThat(dto.getWorkerUuid()).isEqualTo("worker uuid"); assertThat(dto.getIsLast()).isTrue(); @@ -348,7 +348,7 @@ public class CeActivityDaoTest { queueDto.setUuid(uuid); queueDto.setTaskType(type); queueDto.setComponentUuid(componentUuid); - queueDto.setSubmitterLogin("henri"); + queueDto.setSubmitterUuid("submitter uuid"); queueDto.setWorkerUuid("worker uuid"); queueDto.setCreatedAt(1_300_000_000_000L); diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/ce/CeQueueDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/ce/CeQueueDaoTest.java index b2e4faad0ce..a065ed4855b 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/ce/CeQueueDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/ce/CeQueueDaoTest.java @@ -56,7 +56,7 @@ public class CeQueueDaoTest { private static final String COMPONENT_UUID_2 = "PROJECT_2"; private static final String TASK_UUID_3 = "TASK_3"; private static final String SELECT_QUEUE_UUID_AND_STATUS_QUERY = "select uuid,status from ce_queue"; - private static final String SUBMITTER_LOGIN = "henri"; + private static final String SUBMITTER_LOGIN = "submitter uuid"; private static final String WORKER_UUID_1 = "worker uuid 1"; private static final String WORKER_UUID_2 = "worker uuid 2"; @@ -78,7 +78,7 @@ public class CeQueueDaoTest { .setTaskType(CeTaskTypes.REPORT) .setComponentUuid(COMPONENT_UUID_1) .setStatus(PENDING) - .setSubmitterLogin(SUBMITTER_LOGIN) + .setSubmitterUuid(SUBMITTER_LOGIN) .setWorkerUuid(WORKER_UUID_1); mockSystem2ForSingleCall(now); @@ -99,7 +99,7 @@ public class CeQueueDaoTest { assertThat(saved.getTaskType()).isEqualTo(CeTaskTypes.REPORT); assertThat(saved.getComponentUuid()).isEqualTo(COMPONENT_UUID_1); assertThat(saved.getStatus()).isEqualTo(PENDING); - assertThat(saved.getSubmitterLogin()).isEqualTo(SUBMITTER_LOGIN); + assertThat(saved.getSubmitterUuid()).isEqualTo(SUBMITTER_LOGIN); assertThat(saved.getWorkerUuid()).isEqualTo(WORKER_UUID_1); assertThat(saved.getCreatedAt()).isEqualTo(now); assertThat(saved.getUpdatedAt()).isEqualTo(now); @@ -110,7 +110,7 @@ public class CeQueueDaoTest { assertThat(saved.getTaskType()).isEqualTo(CeTaskTypes.REPORT); assertThat(saved.getComponentUuid()).isEqualTo(COMPONENT_UUID_1); assertThat(saved.getStatus()).isEqualTo(PENDING); - assertThat(saved.getSubmitterLogin()).isEqualTo(SUBMITTER_LOGIN); + assertThat(saved.getSubmitterUuid()).isEqualTo(SUBMITTER_LOGIN); assertThat(saved.getWorkerUuid()).isEqualTo(WORKER_UUID_1); assertThat(saved.getCreatedAt()).isEqualTo(6_888_777L); assertThat(saved.getUpdatedAt()).isEqualTo(8_000_999L); @@ -127,7 +127,7 @@ public class CeQueueDaoTest { assertThat(saved.getTaskType()).isEqualTo(CeTaskTypes.REPORT); assertThat(saved.getComponentUuid()).isEqualTo(COMPONENT_UUID_1); assertThat(saved.getStatus()).isEqualTo(PENDING); - assertThat(saved.getSubmitterLogin()).isEqualTo("henri"); + assertThat(saved.getSubmitterUuid()).isEqualTo("henri"); assertThat(saved.getWorkerUuid()).isNull(); assertThat(saved.getCreatedAt()).isEqualTo(INIT_TIME); assertThat(saved.getUpdatedAt()).isEqualTo(INIT_TIME); @@ -507,7 +507,7 @@ public class CeQueueDaoTest { dto.setUuid(uuid); dto.setTaskType(CeTaskTypes.REPORT); dto.setStatus(status); - dto.setSubmitterLogin("henri"); + dto.setSubmitterUuid("henri"); underTestAlwaysIncreasingSystem2.insert(db.getSession(), dto); db.getSession().commit(); return dto; @@ -518,7 +518,7 @@ public class CeQueueDaoTest { dto.setUuid(uuid); dto.setTaskType(CeTaskTypes.REPORT); dto.setStatus(status); - dto.setSubmitterLogin("henri"); + dto.setSubmitterUuid("henri"); dto.setWorkerUuid(workerUuid); dto.setStartedAt(startedAt); underTestAlwaysIncreasingSystem2.insert(db.getSession(), dto); @@ -532,7 +532,7 @@ public class CeQueueDaoTest { dto.setTaskType(CeTaskTypes.REPORT); dto.setComponentUuid(componentUuid); dto.setStatus(status); - dto.setSubmitterLogin("henri"); + dto.setSubmitterUuid("henri"); underTest.insert(db.getSession(), dto); db.getSession().commit(); return dto; diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/ce/CeQueueDtoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/ce/CeQueueDtoTest.java index 0a249fdde7e..85724236dac 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/ce/CeQueueDtoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/ce/CeQueueDtoTest.java @@ -78,10 +78,10 @@ public class CeQueueDtoTest { @Test public void setSubmitterLogin_accepts_null_empty_and_string_255_chars_or_less() { - underTest.setSubmitterLogin(null); - underTest.setSubmitterLogin(""); - underTest.setSubmitterLogin("bar"); - underTest.setSubmitterLogin(STR_255_CHARS); + underTest.setSubmitterUuid(null); + underTest.setSubmitterUuid(""); + underTest.setSubmitterUuid("bar"); + underTest.setSubmitterUuid(STR_255_CHARS); } @Test @@ -89,9 +89,9 @@ public class CeQueueDtoTest { String str_256_chars = STR_255_CHARS + "a"; expectedException.expect(IllegalArgumentException.class); - expectedException.expectMessage("Value of submitter login is too long: " + str_256_chars); + expectedException.expectMessage("Value of submitter uuid is too long: " + str_256_chars); - underTest.setSubmitterLogin(str_256_chars); + underTest.setSubmitterUuid(str_256_chars); } @Test diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/ce/CeQueueTesting.java b/server/sonar-db-dao/src/test/java/org/sonar/db/ce/CeQueueTesting.java index b7bda8ee1ff..14e2ab30db0 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/ce/CeQueueTesting.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/ce/CeQueueTesting.java @@ -33,7 +33,7 @@ public class CeQueueTesting { .setComponentUuid(randomAlphanumeric(40)) .setStatus(CeQueueDto.Status.PENDING) .setTaskType(CeTaskTypes.REPORT) - .setSubmitterLogin(randomAlphanumeric(255)) + .setSubmitterUuid(randomAlphanumeric(255)) .setCreatedAt(nextLong()) .setUpdatedAt(nextLong()) .setStartedAt(nextLong()); diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/purge/PurgeDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/purge/PurgeDaoTest.java index c2ba89ca811..e40a4b59d28 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/purge/PurgeDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/purge/PurgeDaoTest.java @@ -789,7 +789,7 @@ public class PurgeDaoTest { queueDto.setUuid(Uuids.create()); queueDto.setTaskType(REPORT); queueDto.setComponentUuid(component.uuid()); - queueDto.setSubmitterLogin("henri"); + queueDto.setSubmitterUuid("submitter uuid"); queueDto.setCreatedAt(1_300_000_000_000L); queueDto.setStatus(status); return queueDto; diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v72/DbVersion72.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v72/DbVersion72.java index 65d99312ce4..598349bb821 100644 --- a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v72/DbVersion72.java +++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v72/DbVersion72.java @@ -49,6 +49,7 @@ public class DbVersion72 implements DbVersion { .add(2119, "Rename LOGIN TO USER_UUID on table USER_TOKENS", RenameLoginToUserUuidOnTableUserTokens.class) .add(2120, "Rename USER_LOGIN TO USER_UUID on table MANUAL_MEASURES", RenameUserLoginToUserUuidOnTableManualMeasures.class) .add(2121, "Rename NOTE_USER_LOGIN TO NOTE_USER_UUID on table RULES_METADATA", RenameNoteUserLoginToNoteUserUuidOnTableRulesMetadata.class) + .add(2122, "Rename SUBMITTER_LOGIN TO SUBMITTER_UUID on table CE_QUEUE", RenameSubmitterLoginToSubmitterUuidOnTableCeQueue.class) ; } } diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v72/RenameSubmitterLoginToSubmitterUuidOnTableCeQueue.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v72/RenameSubmitterLoginToSubmitterUuidOnTableCeQueue.java new file mode 100644 index 00000000000..ced36acd596 --- /dev/null +++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v72/RenameSubmitterLoginToSubmitterUuidOnTableCeQueue.java @@ -0,0 +1,47 @@ +/* + * SonarQube + * Copyright (C) 2009-2018 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.v72; + +import java.sql.SQLException; +import org.sonar.db.Database; +import org.sonar.server.platform.db.migration.sql.RenameColumnsBuilder; +import org.sonar.server.platform.db.migration.step.DdlChange; + +import static org.sonar.server.platform.db.migration.def.VarcharColumnDef.newVarcharColumnDefBuilder; + +public class RenameSubmitterLoginToSubmitterUuidOnTableCeQueue extends DdlChange { + + public RenameSubmitterLoginToSubmitterUuidOnTableCeQueue(Database db) { + super(db); + } + + @Override + public void execute(Context context) throws SQLException { + context.execute(new RenameColumnsBuilder(getDialect(), "ce_queue") + .renameColumn("submitter_login", + newVarcharColumnDefBuilder() + .setColumnName("submitter_uuid") + .setLimit(255) + .setIsNullable(true) + .build()) + .build()); + } +} diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v72/DbVersion72Test.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v72/DbVersion72Test.java index f83902a41d2..899207322d4 100644 --- a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v72/DbVersion72Test.java +++ b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v72/DbVersion72Test.java @@ -34,7 +34,7 @@ public class DbVersion72Test { @Test public void verify_migration_count() { - verifyMigrationCount(underTest, 22); + verifyMigrationCount(underTest, 23); } } diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v72/RenameSubmitterLoginToSubmitterUuidOnTableCeQueueTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v72/RenameSubmitterLoginToSubmitterUuidOnTableCeQueueTest.java new file mode 100644 index 00000000000..fadffa67c03 --- /dev/null +++ b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v72/RenameSubmitterLoginToSubmitterUuidOnTableCeQueueTest.java @@ -0,0 +1,57 @@ +/* + * SonarQube + * Copyright (C) 2009-2018 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.v72; + +import java.sql.SQLException; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.sonar.db.CoreDbTester; + +import static java.sql.Types.VARCHAR; + +public class RenameSubmitterLoginToSubmitterUuidOnTableCeQueueTest { + + @Rule + public final CoreDbTester db = CoreDbTester.createForSchema(RenameSubmitterLoginToSubmitterUuidOnTableCeQueueTest.class, "ce_queue.sql"); + + @Rule + public ExpectedException expectedException = ExpectedException.none(); + + private RenameSubmitterLoginToSubmitterUuidOnTableCeQueue underTest = new RenameSubmitterLoginToSubmitterUuidOnTableCeQueue(db.database()); + + @Test + public void rename_column() throws SQLException { + underTest.execute(); + + db.assertColumnDefinition("ce_queue", "submitter_uuid", VARCHAR, 255, true); + db.assertColumnDoesNotExist("ce_queue", "submitter_login"); + } + + public void migration_is_not_reentrant() throws SQLException { + underTest.execute(); + + expectedException.expect(IllegalStateException.class); + + underTest.execute(); + } + +} diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v72/RenameSubmitterLoginToSubmitterUuidOnTableCeQueueTest/ce_queue.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v72/RenameSubmitterLoginToSubmitterUuidOnTableCeQueueTest/ce_queue.sql new file mode 100644 index 00000000000..0927e642262 --- /dev/null +++ b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v72/RenameSubmitterLoginToSubmitterUuidOnTableCeQueueTest/ce_queue.sql @@ -0,0 +1,16 @@ +CREATE TABLE "CE_QUEUE" ( + "ID" INTEGER NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1), + "UUID" VARCHAR(40) NOT NULL, + "TASK_TYPE" VARCHAR(15) NOT NULL, + "COMPONENT_UUID" VARCHAR(40) NULL, + "STATUS" VARCHAR(15) NOT NULL, + "SUBMITTER_LOGIN" VARCHAR(255) NULL, + "WORKER_UUID" VARCHAR(40) NULL, + "EXECUTION_COUNT" INTEGER NOT NULL, + "STARTED_AT" BIGINT NULL, + "CREATED_AT" BIGINT NOT NULL, + "UPDATED_AT" BIGINT NOT NULL +); +CREATE UNIQUE INDEX "CE_QUEUE_UUID" ON "CE_QUEUE" ("UUID"); +CREATE INDEX "CE_QUEUE_COMPONENT_UUID" ON "CE_QUEUE" ("COMPONENT_UUID"); +CREATE INDEX "CE_QUEUE_STATUS" ON "CE_QUEUE" ("STATUS"); \ No newline at end of file diff --git a/server/sonar-server/src/main/java/org/sonar/ce/queue/CeQueueImpl.java b/server/sonar-server/src/main/java/org/sonar/ce/queue/CeQueueImpl.java index 6f1762cf994..c7966317717 100644 --- a/server/sonar-server/src/main/java/org/sonar/ce/queue/CeQueueImpl.java +++ b/server/sonar-server/src/main/java/org/sonar/ce/queue/CeQueueImpl.java @@ -152,7 +152,7 @@ public class CeQueueImpl implements CeQueue { dto.setTaskType(submission.getType()); dto.setComponentUuid(submission.getComponentUuid()); dto.setStatus(PENDING); - dto.setSubmitterLogin(submission.getSubmitterLogin()); + dto.setSubmitterUuid(submission.getSubmitterUuid()); dto.setStartedAt(null); dbClient.ceQueueDao().insert(dbSession, dto); return dto; @@ -271,7 +271,7 @@ public class CeQueueImpl implements CeQueue { CeTask.Builder builder = new CeTask.Builder(); builder.setUuid(dto.getUuid()); builder.setType(dto.getTaskType()); - builder.setSubmitterLogin(dto.getSubmitterLogin()); + builder.setSubmitterUuid(dto.getSubmitterUuid()); String componentUuid = dto.getComponentUuid(); if (componentUuid != null) { builder.setComponentUuid(componentUuid); diff --git a/server/sonar-server/src/main/java/org/sonar/ce/queue/CeTask.java b/server/sonar-server/src/main/java/org/sonar/ce/queue/CeTask.java index 69127d475de..008972bbbc9 100644 --- a/server/sonar-server/src/main/java/org/sonar/ce/queue/CeTask.java +++ b/server/sonar-server/src/main/java/org/sonar/ce/queue/CeTask.java @@ -36,7 +36,7 @@ public class CeTask { private final String componentUuid; private final String componentKey; private final String componentName; - private final String submitterLogin; + private final String submitterUuid; private CeTask(Builder builder) { this.organizationUuid = requireNonNull(emptyToNull(builder.organizationUuid), "organizationUuid can't be null nor empty"); @@ -45,7 +45,7 @@ public class CeTask { this.componentUuid = emptyToNull(builder.componentUuid); this.componentKey = emptyToNull(builder.componentKey); this.componentName = emptyToNull(builder.componentName); - this.submitterLogin = emptyToNull(builder.submitterLogin); + this.submitterUuid = emptyToNull(builder.submitterUuid); } public String getOrganizationUuid() { @@ -76,8 +76,8 @@ public class CeTask { } @CheckForNull - public String getSubmitterLogin() { - return submitterLogin; + public String getSubmitterUuid() { + return submitterUuid; } @Override @@ -89,7 +89,7 @@ public class CeTask { .add("componentUuid", componentUuid) .add("componentKey", componentKey) .add("componentName", componentName) - .add("submitterLogin", submitterLogin) + .add("submitterUuid", submitterUuid) .toString(); } @@ -117,7 +117,7 @@ public class CeTask { private String componentUuid; private String componentKey; private String componentName; - private String submitterLogin; + private String submitterUuid; public Builder setOrganizationUuid(String organizationUuid) { this.organizationUuid = organizationUuid; @@ -154,8 +154,8 @@ public class CeTask { return this; } - public Builder setSubmitterLogin(@Nullable String s) { - this.submitterLogin = s; + public Builder setSubmitterUuid(@Nullable String s) { + this.submitterUuid = s; return this; } diff --git a/server/sonar-server/src/main/java/org/sonar/ce/queue/CeTaskSubmit.java b/server/sonar-server/src/main/java/org/sonar/ce/queue/CeTaskSubmit.java index 3db0b91aa7d..c3eb9083d2d 100644 --- a/server/sonar-server/src/main/java/org/sonar/ce/queue/CeTaskSubmit.java +++ b/server/sonar-server/src/main/java/org/sonar/ce/queue/CeTaskSubmit.java @@ -32,13 +32,13 @@ public final class CeTaskSubmit { private final String uuid; private final String type; private final String componentUuid; - private final String submitterLogin; + private final String submitterUuid; private CeTaskSubmit(Builder builder) { this.uuid = Objects.requireNonNull(emptyToNull(builder.uuid)); this.type = Objects.requireNonNull(emptyToNull(builder.type)); this.componentUuid = emptyToNull(builder.componentUuid); - this.submitterLogin = emptyToNull(builder.submitterLogin); + this.submitterUuid = emptyToNull(builder.submitterUuid); } public String getType() { @@ -55,15 +55,15 @@ public final class CeTaskSubmit { } @CheckForNull - public String getSubmitterLogin() { - return submitterLogin; + public String getSubmitterUuid() { + return submitterUuid; } public static final class Builder { private final String uuid; private String type; private String componentUuid; - private String submitterLogin; + private String submitterUuid; public Builder(String uuid) { this.uuid = uuid; @@ -83,8 +83,8 @@ public final class CeTaskSubmit { return this; } - public Builder setSubmitterLogin(@Nullable String s) { - this.submitterLogin = s; + public Builder setSubmitterUuid(@Nullable String s) { + this.submitterUuid = s; return this; } diff --git a/server/sonar-server/src/main/java/org/sonar/server/ce/ws/TaskFormatter.java b/server/sonar-server/src/main/java/org/sonar/server/ce/ws/TaskFormatter.java index 2fe083766dd..9b20e1f3400 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/ce/ws/TaskFormatter.java +++ b/server/sonar-server/src/main/java/org/sonar/server/ce/ws/TaskFormatter.java @@ -40,6 +40,7 @@ import org.sonar.db.ce.CeQueueDto; import org.sonar.db.ce.CeTaskCharacteristicDto; import org.sonar.db.component.ComponentDto; import org.sonar.db.organization.OrganizationDto; +import org.sonar.db.user.UserDto; import org.sonarqube.ws.Ce; import org.sonarqube.ws.Common; @@ -48,6 +49,8 @@ import static java.lang.String.format; import static java.util.Collections.singletonList; import static org.sonar.api.utils.DateUtils.formatDateTime; import static org.sonar.core.util.Protobuf.setNullable; +import static org.sonar.core.util.stream.MoreCollectors.toSet; +import static org.sonar.core.util.stream.MoreCollectors.uniqueIndex; /** * Converts {@link CeActivityDto} and {@link CeQueueDto} to the protobuf objects @@ -65,14 +68,20 @@ public class TaskFormatter { public List formatQueue(DbSession dbSession, List dtos) { DtoCache cache = DtoCache.forQueueDtos(dbClient, dbSession, dtos); - return dtos.stream().map(input -> formatQueue(input, cache)).collect(MoreCollectors.toList(dtos.size())); + Map usersByUuid = getUsersByUuid(dbSession, dtos); + return dtos.stream().map(input -> formatQueue(input, cache, usersByUuid)).collect(MoreCollectors.toList(dtos.size())); } public Ce.Task formatQueue(DbSession dbSession, CeQueueDto queue) { - return formatQueue(queue, DtoCache.forQueueDtos(dbClient, dbSession, singletonList(queue))); + return formatQueue(queue, DtoCache.forQueueDtos(dbClient, dbSession, singletonList(queue)), getUsersByUuid(dbSession, singletonList(queue))); } - private Ce.Task formatQueue(CeQueueDto dto, DtoCache componentDtoCache) { + private Map getUsersByUuid(DbSession dbSession, Collection dtos) { + Set submitterUuids = dtos.stream().map(CeQueueDto::getSubmitterUuid).filter(Objects::nonNull).collect(toSet()); + return dbClient.userDao().selectByUuids(dbSession, submitterUuids).stream().collect(uniqueIndex(UserDto::getUuid)); + } + + private Ce.Task formatQueue(CeQueueDto dto, DtoCache componentDtoCache, Map usersByUuid) { Ce.Task.Builder builder = Ce.Task.newBuilder(); String organizationKey = componentDtoCache.getOrganizationKey(dto.getComponentUuid()); setNullable(organizationKey, builder::setOrganization); @@ -84,7 +93,7 @@ public class TaskFormatter { builder.setStatus(Ce.TaskStatus.valueOf(dto.getStatus().name())); builder.setType(dto.getTaskType()); builder.setLogs(false); - setNullable(dto.getSubmitterLogin(), builder::setSubmitterLogin); + setNullable(dto.getSubmitterUuid(), s -> builder.setSubmitterLogin(usersByUuid.get(s).getLogin())); builder.setSubmittedAt(formatDateTime(new Date(dto.getCreatedAt()))); setNullable(dto.getStartedAt(), builder::setStartedAt, DateUtils::formatDateTime); setNullable(computeExecutionTimeMs(dto), builder::setExecutionTimeMs); @@ -174,7 +183,7 @@ public class TaskFormatter { static DtoCache forQueueDtos(DbClient dbClient, DbSession dbSession, Collection ceQueueDtos) { Map componentsByUuid = dbClient.componentDao().selectByUuids(dbSession, componentUuidsOfCeQueues(ceQueueDtos)) .stream() - .collect(MoreCollectors.uniqueIndex(ComponentDto::uuid)); + .collect(uniqueIndex(ComponentDto::uuid)); Multimap characteristicsByTaskUuid = dbClient.ceTaskCharacteristicsDao() .selectByTaskUuids(dbSession, ceQueueDtos.stream().map(CeQueueDto::getUuid).collect(Collectors.toList())) .stream().collect(MoreCollectors.index(CeTaskCharacteristicDto::getTaskUuid)); @@ -186,7 +195,7 @@ public class TaskFormatter { .filter(Objects::nonNull) .map(CeQueueDto::getComponentUuid) .filter(Objects::nonNull) - .collect(MoreCollectors.toSet(ceQueueDtos.size())); + .collect(toSet(ceQueueDtos.size())); } static DtoCache forActivityDtos(DbClient dbClient, DbSession dbSession, Collection ceActivityDtos) { @@ -194,7 +203,7 @@ public class TaskFormatter { dbSession, getComponentUuidsOfCeActivities(ceActivityDtos)) .stream() - .collect(MoreCollectors.uniqueIndex(ComponentDto::uuid)); + .collect(uniqueIndex(ComponentDto::uuid)); Multimap characteristicsByTaskUuid = dbClient.ceTaskCharacteristicsDao() .selectByTaskUuids(dbSession, ceActivityDtos.stream().map(CeActivityDto::getUuid).collect(Collectors.toList())) .stream().collect(MoreCollectors.index(CeTaskCharacteristicDto::getTaskUuid)); @@ -206,7 +215,7 @@ public class TaskFormatter { .filter(Objects::nonNull) .map(CeActivityDto::getComponentUuid) .filter(Objects::nonNull) - .collect(MoreCollectors.toSet(ceActivityDtos.size())); + .collect(toSet(ceActivityDtos.size())); } private static Map buildOrganizationsByUuid(DbClient dbClient, DbSession dbSession, Map componentsByUuid) { @@ -214,9 +223,9 @@ public class TaskFormatter { dbSession, componentsByUuid.values().stream() .map(ComponentDto::getOrganizationUuid) - .collect(MoreCollectors.toSet(componentsByUuid.size()))) + .collect(toSet(componentsByUuid.size()))) .stream() - .collect(MoreCollectors.uniqueIndex(OrganizationDto::getUuid)); + .collect(uniqueIndex(OrganizationDto::getUuid)); } @CheckForNull diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/queue/ReportSubmitter.java b/server/sonar-server/src/main/java/org/sonar/server/computation/queue/ReportSubmitter.java index f3be61d393c..728124dfab6 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/queue/ReportSubmitter.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/queue/ReportSubmitter.java @@ -183,7 +183,7 @@ public class ReportSubmitter { submit.setType(CeTaskTypes.REPORT); submit.setComponentUuid(project.uuid()); - submit.setSubmitterLogin(userSession.getLogin()); + submit.setSubmitterUuid(userSession.getUuid()); return queue.submit(submit.build()); } diff --git a/server/sonar-server/src/test/java/org/sonar/ce/queue/CeQueueImplTest.java b/server/sonar-server/src/test/java/org/sonar/ce/queue/CeQueueImplTest.java index 9234fad9022..bd8352216f4 100644 --- a/server/sonar-server/src/test/java/org/sonar/ce/queue/CeQueueImplTest.java +++ b/server/sonar-server/src/test/java/org/sonar/ce/queue/CeQueueImplTest.java @@ -70,7 +70,7 @@ public class CeQueueImplTest { @Test public void submit_returns_task_populated_from_CeTaskSubmit_and_creates_CeQueue_row() { - CeTaskSubmit taskSubmit = createTaskSubmit(CeTaskTypes.REPORT, "PROJECT_1", "rob"); + CeTaskSubmit taskSubmit = createTaskSubmit(CeTaskTypes.REPORT, "PROJECT_1", "submitter uuid"); CeTask task = underTest.submit(taskSubmit); @@ -189,7 +189,7 @@ public class CeQueueImplTest { @Test public void massSubmit_returns_tasks_for_each_CeTaskSubmit_populated_from_CeTaskSubmit_and_creates_CeQueue_row_for_each() { - CeTaskSubmit taskSubmit1 = createTaskSubmit(CeTaskTypes.REPORT, "PROJECT_1", "rob"); + CeTaskSubmit taskSubmit1 = createTaskSubmit(CeTaskTypes.REPORT, "PROJECT_1", "submitter uuid"); CeTaskSubmit taskSubmit2 = createTaskSubmit("some type"); List tasks = underTest.massSubmit(asList(taskSubmit1, taskSubmit2)); @@ -452,7 +452,7 @@ public class CeQueueImplTest { assertThat(task.getComponentKey()).isEqualTo(componentDto.getDbKey()); assertThat(task.getComponentName()).isEqualTo(componentDto.name()); } - assertThat(task.getSubmitterLogin()).isEqualTo(taskSubmit.getSubmitterLogin()); + assertThat(task.getSubmitterUuid()).isEqualTo(taskSubmit.getSubmitterUuid()); } private void verifyCeQueueDtoForTaskSubmit(CeTaskSubmit taskSubmit) { @@ -460,7 +460,7 @@ public class CeQueueImplTest { assertThat(queueDto.isPresent()).isTrue(); assertThat(queueDto.get().getTaskType()).isEqualTo(taskSubmit.getType()); assertThat(queueDto.get().getComponentUuid()).isEqualTo(taskSubmit.getComponentUuid()); - assertThat(queueDto.get().getSubmitterLogin()).isEqualTo(taskSubmit.getSubmitterLogin()); + assertThat(queueDto.get().getSubmitterUuid()).isEqualTo(taskSubmit.getSubmitterUuid()); assertThat(queueDto.get().getCreatedAt()).isEqualTo(1_450_000_000_000L); } @@ -472,11 +472,11 @@ public class CeQueueImplTest { return createTaskSubmit(type, null, null); } - private CeTaskSubmit createTaskSubmit(String type, @Nullable String componentUuid, @Nullable String submitterLogin) { + private CeTaskSubmit createTaskSubmit(String type, @Nullable String componentUuid, @Nullable String submitterUuid) { CeTaskSubmit.Builder submission = underTest.prepareSubmit(); submission.setType(type); submission.setComponentUuid(componentUuid); - submission.setSubmitterLogin(submitterLogin); + submission.setSubmitterUuid(submitterUuid); return submission.build(); } diff --git a/server/sonar-server/src/test/java/org/sonar/ce/queue/CeTaskTest.java b/server/sonar-server/src/test/java/org/sonar/ce/queue/CeTaskTest.java index 0d3ea813e53..97d20e21601 100644 --- a/server/sonar-server/src/test/java/org/sonar/ce/queue/CeTaskTest.java +++ b/server/sonar-server/src/test/java/org/sonar/ce/queue/CeTaskTest.java @@ -94,7 +94,7 @@ public class CeTaskTest { underTest.setOrganizationUuid("org1"); underTest.setType("TYPE_1"); underTest.setUuid("UUID_1"); - underTest.setSubmitterLogin("LOGIN_1"); + underTest.setSubmitterUuid("LOGIN_1"); underTest.setComponentKey("COMPONENT_KEY_1"); underTest.setComponentUuid("COMPONENT_UUID_1"); underTest.setComponentName("The component"); @@ -104,7 +104,7 @@ public class CeTaskTest { assertThat(task.getOrganizationUuid()).isEqualTo("org1"); assertThat(task.getUuid()).isEqualTo("UUID_1"); assertThat(task.getType()).isEqualTo("TYPE_1"); - assertThat(task.getSubmitterLogin()).isEqualTo("LOGIN_1"); + assertThat(task.getSubmitterUuid()).isEqualTo("LOGIN_1"); assertThat(task.getComponentKey()).isEqualTo("COMPONENT_KEY_1"); assertThat(task.getComponentUuid()).isEqualTo("COMPONENT_UUID_1"); assertThat(task.getComponentName()).isEqualTo("The component"); @@ -126,10 +126,10 @@ public class CeTaskTest { @Test public void empty_in_submitterLogin_is_considered_as_null() { CeTask ceTask = underTest.setOrganizationUuid("org1").setUuid("uuid").setType("type") - .setSubmitterLogin("") + .setSubmitterUuid("") .build(); - assertThat(ceTask.getSubmitterLogin()).isNull(); + assertThat(ceTask.getSubmitterUuid()).isNull(); } @Test diff --git a/server/sonar-server/src/test/java/org/sonar/server/ce/ws/CancelActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/ce/ws/CancelActionTest.java index 04518e1f6ac..541edc1d049 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/ce/ws/CancelActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/ce/ws/CancelActionTest.java @@ -20,7 +20,6 @@ package org.sonar.server.ce.ws; import javax.annotation.Nullable; - import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -176,7 +175,7 @@ public class CancelActionTest { CeTaskSubmit.Builder submission = queue.prepareSubmit(); submission.setType(CeTaskTypes.REPORT); submission.setComponentUuid(componentUuid); - submission.setSubmitterLogin(null); + submission.setSubmitterUuid(null); CeTask task = queue.submit(submission.build()); return db.getDbClient().ceQueueDao().selectByUuid(db.getSession(), task.getUuid()).get(); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/ce/ws/SubmitActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/ce/ws/SubmitActionTest.java index c35385b08ea..32540048c7d 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/ce/ws/SubmitActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/ce/ws/SubmitActionTest.java @@ -56,7 +56,8 @@ public class SubmitActionTest { .setOrganizationUuid("org1") .setUuid("TASK_1") .setType(CeTaskTypes.REPORT) - .setComponentUuid("PROJECT_1").setSubmitterLogin("robert") + .setComponentUuid("PROJECT_1") + .setSubmitterUuid("robert") .build(); @Captor diff --git a/server/sonar-server/src/test/java/org/sonar/server/ce/ws/TaskActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/ce/ws/TaskActionTest.java index 98438254d3c..44333e12674 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/ce/ws/TaskActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/ce/ws/TaskActionTest.java @@ -37,13 +37,13 @@ import org.sonar.db.ce.CeTaskCharacteristicDto; import org.sonar.db.ce.CeTaskTypes; import org.sonar.db.component.ComponentDto; import org.sonar.db.organization.OrganizationDto; +import org.sonar.db.user.UserDto; import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsActionTester; import org.sonarqube.ws.Ce; import org.sonarqube.ws.Common; -import org.sonarqube.ws.Ce; import static java.util.Collections.singleton; import static org.assertj.core.api.Assertions.assertThat; @@ -79,14 +79,15 @@ public class TaskActionTest { @Test public void task_is_in_queue() { - logInAsRoot(); + UserDto user = db.users().insertUser(); + userSession.logIn(user).setRoot(); CeQueueDto queueDto = new CeQueueDto(); queueDto.setTaskType(CeTaskTypes.REPORT); queueDto.setUuid(SOME_TASK_UUID); queueDto.setComponentUuid(project.uuid()); queueDto.setStatus(CeQueueDto.Status.PENDING); - queueDto.setSubmitterLogin("john"); + queueDto.setSubmitterUuid(user.getUuid()); persist(queueDto); Ce.TaskResponse taskResponse = ws.newRequest() @@ -95,7 +96,7 @@ public class TaskActionTest { assertThat(taskResponse.getTask().getOrganization()).isEqualTo(organizationDto.getKey()); assertThat(taskResponse.getTask().getId()).isEqualTo(SOME_TASK_UUID); assertThat(taskResponse.getTask().getStatus()).isEqualTo(Ce.TaskStatus.PENDING); - assertThat(taskResponse.getTask().getSubmitterLogin()).isEqualTo("john"); + assertThat(taskResponse.getTask().getSubmitterLogin()).isEqualTo(user.getLogin()); assertThat(taskResponse.getTask().getComponentId()).isEqualTo(project.uuid()); assertThat(taskResponse.getTask().getComponentKey()).isEqualTo(project.getDbKey()); assertThat(taskResponse.getTask().getComponentName()).isEqualTo(project.name()); @@ -105,7 +106,8 @@ public class TaskActionTest { @Test public void task_is_archived() { - logInAsRoot(); + UserDto user = db.users().insertUser(); + userSession.logIn(user).setRoot(); CeActivityDto activityDto = createActivityDto(SOME_TASK_UUID); persist(activityDto); @@ -147,9 +149,10 @@ public class TaskActionTest { @Test public void long_living_branch_in_queue_analysis() { - logInAsRoot(); + UserDto user = db.users().insertUser(); + userSession.logIn(user).setRoot(); String branch = "my_branch"; - CeQueueDto queueDto = createAndPersistQueueTask(null); + CeQueueDto queueDto = createAndPersistQueueTask(null, user); insertCharacteristic(queueDto, BRANCH_KEY, branch); insertCharacteristic(queueDto, BRANCH_TYPE_KEY, LONG.name()); @@ -264,24 +267,27 @@ public class TaskActionTest { @Test public void get_project_queue_task_with_scan_permission_on_project() { - userSession.logIn().addProjectPermission(GlobalPermissions.SCAN_EXECUTION, project); - CeQueueDto task = createAndPersistQueueTask(project); + UserDto user = db.users().insertUser(); + userSession.logIn(user).addProjectPermission(GlobalPermissions.SCAN_EXECUTION, project); + CeQueueDto task = createAndPersistQueueTask(project, user); call(task.getUuid()); } @Test public void get_project_queue_task_with_scan_permission_on_organization_but_not_on_project() { - userSession.logIn().addPermission(SCAN, project.getOrganizationUuid()); - CeQueueDto task = createAndPersistQueueTask(project); + UserDto user = db.users().insertUser(); + userSession.logIn(user).addPermission(SCAN, project.getOrganizationUuid()); + CeQueueDto task = createAndPersistQueueTask(project, user); call(task.getUuid()); } @Test public void getting_project_queue_task_throws_ForbiddenException_if_no_admin_nor_scan_permissions() { - userSession.logIn(); - CeQueueDto task = createAndPersistQueueTask(project); + UserDto user = db.users().insertUser(); + userSession.logIn(user); + CeQueueDto task = createAndPersistQueueTask(project, user); expectedException.expect(ForbiddenException.class); @@ -290,16 +296,18 @@ public class TaskActionTest { @Test public void getting_global_queue_task_requires_to_be_system_administrator() { - logInAsSystemAdministrator(); - CeQueueDto task = createAndPersistQueueTask(null); + UserDto user = db.users().insertUser(); + userSession.logIn(user).setSystemAdministrator(); + CeQueueDto task = createAndPersistQueueTask(null, user); call(task.getUuid()); } @Test public void getting_global_queue_throws_ForbiddenException_if_not_system_administrator() { - userSession.logIn().setNonSystemAdministrator(); - CeQueueDto task = createAndPersistQueueTask(null); + UserDto user = db.users().insertUser(); + userSession.logIn(user).setNonSystemAdministrator(); + CeQueueDto task = createAndPersistQueueTask(null, user); expectedException.expect(ForbiddenException.class); @@ -377,12 +385,12 @@ public class TaskActionTest { return activityDto; } - private CeQueueDto createAndPersistQueueTask(@Nullable ComponentDto component) { + private CeQueueDto createAndPersistQueueTask(@Nullable ComponentDto component, UserDto user) { CeQueueDto dto = new CeQueueDto(); dto.setTaskType(CeTaskTypes.REPORT); dto.setUuid(SOME_TASK_UUID); dto.setStatus(CeQueueDto.Status.PENDING); - dto.setSubmitterLogin("john"); + dto.setSubmitterUuid(user.getUuid()); if (component != null) { dto.setComponentUuid(component.uuid()); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/ce/ws/TaskFormatterTest.java b/server/sonar-server/src/test/java/org/sonar/server/ce/ws/TaskFormatterTest.java index e3b9201dfc9..6e51cee0dd4 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/ce/ws/TaskFormatterTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/ce/ws/TaskFormatterTest.java @@ -30,6 +30,7 @@ import org.sonar.db.ce.CeActivityDto; import org.sonar.db.ce.CeQueueDto; import org.sonar.db.ce.CeTaskTypes; import org.sonar.db.organization.OrganizationDto; +import org.sonar.db.user.UserDto; import org.sonarqube.ws.Ce; import static java.util.Arrays.asList; @@ -77,6 +78,7 @@ public class TaskFormatterTest { String uuid = "COMPONENT_UUID"; OrganizationDto organizationDto = db.organizations().insert(); db.components().insertPrivateProject(organizationDto, (t) -> t.setUuid(uuid).setDbKey("COMPONENT_KEY").setName("Component Name")); + UserDto user = db.users().insertUser(); CeQueueDto dto = new CeQueueDto(); dto.setUuid("UUID"); @@ -85,7 +87,7 @@ public class TaskFormatterTest { dto.setCreatedAt(1_450_000_000_000L); dto.setStartedAt(1_451_000_000_000L); dto.setComponentUuid(uuid); - dto.setSubmitterLogin("rob"); + dto.setSubmitterUuid(user.getUuid()); Ce.Task wsTask = underTest.formatQueue(db.getSession(), dto); @@ -97,7 +99,7 @@ public class TaskFormatterTest { assertThat(wsTask.getComponentQualifier()).isEqualTo("TRK"); assertThat(wsTask.getStatus()).isEqualTo(Ce.TaskStatus.IN_PROGRESS); assertThat(wsTask.getLogs()).isFalse(); - assertThat(wsTask.getSubmitterLogin()).isEqualTo("rob"); + assertThat(wsTask.getSubmitterLogin()).isEqualTo(user.getLogin()); assertThat(wsTask.hasExecutionTimeMs()).isTrue(); assertThat(wsTask.hasExecutedAt()).isFalse(); assertThat(wsTask.hasScannerContext()).isFalse(); diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/queue/ReportSubmitterTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/queue/ReportSubmitterTest.java index 0a92579795b..94693054919 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/queue/ReportSubmitterTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/queue/ReportSubmitterTest.java @@ -44,6 +44,7 @@ import org.sonar.db.component.ComponentDto; import org.sonar.db.component.ComponentTesting; import org.sonar.db.organization.OrganizationDto; import org.sonar.db.permission.OrganizationPermission; +import org.sonar.db.user.UserDto; import org.sonar.server.component.ComponentUpdater; import org.sonar.server.component.NewComponent; import org.sonar.server.exceptions.BadRequestException; @@ -134,7 +135,8 @@ public class ReportSubmitterTest { @Test public void submit_a_report_on_existing_project() { ComponentDto project = db.components().insertPrivateProject(db.getDefaultOrganization()); - userSession.logIn().addProjectPermission(SCAN_EXECUTION, project); + UserDto user = db.users().insertUser(); + userSession.logIn(user).addProjectPermission(SCAN_EXECUTION, project); mockSuccessfulPrepareSubmitCall(); @@ -144,7 +146,10 @@ public class ReportSubmitterTest { verifyZeroInteractions(permissionTemplateService); verifyZeroInteractions(favoriteUpdater); verify(queue).submit(argThat(submit -> - submit.getType().equals(CeTaskTypes.REPORT) && submit.getComponentUuid().equals(project.uuid()) && submit.getUuid().equals(TASK_UUID))); + submit.getType().equals(CeTaskTypes.REPORT) + && submit.getComponentUuid().equals(project.uuid()) + && submit.getSubmitterUuid().equals(user.getUuid()) + && submit.getUuid().equals(TASK_UUID))); } @Test