From: Sébastien Lesaint Date: Fri, 7 Jul 2017 14:28:21 +0000 (+0200) Subject: SONAR-9525 enforce CeWorker#getOrdinal returns int >= 0 X-Git-Tag: 6.6-RC1~883 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=1b8db6820739c48ff966a8e21a3cb0a864fc6045;p=sonarqube.git SONAR-9525 enforce CeWorker#getOrdinal returns int >= 0 --- diff --git a/server/sonar-ce/src/main/java/org/sonar/ce/taskprocessor/CeWorker.java b/server/sonar-ce/src/main/java/org/sonar/ce/taskprocessor/CeWorker.java index 96bb7df9243..9a7ffff9776 100644 --- a/server/sonar-ce/src/main/java/org/sonar/ce/taskprocessor/CeWorker.java +++ b/server/sonar-ce/src/main/java/org/sonar/ce/taskprocessor/CeWorker.java @@ -37,7 +37,7 @@ public interface CeWorker extends Callable { } /** - * Position of the current CeWorker among all the running workers. + * Position of the current CeWorker among all the running workers, starts with 0. */ int getOrdinal(); 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 4dbada7fce4..ba5e447ac7f 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 @@ -31,6 +31,7 @@ import org.sonar.ce.queue.InternalCeQueue; import org.sonar.core.util.logs.Profiler; import org.sonar.db.ce.CeActivityDto; +import static com.google.common.base.Preconditions.checkArgument; import static java.lang.String.format; import static org.sonar.ce.taskprocessor.CeWorker.Result.NO_TASK; import static org.sonar.ce.taskprocessor.CeWorker.Result.TASK_PROCESSED; @@ -47,13 +48,18 @@ public class CeWorkerImpl implements CeWorker { public CeWorkerImpl(int ordinal, String uuid, InternalCeQueue queue, CeLogging ceLogging, CeTaskProcessorRepository taskProcessorRepository) { - this.ordinal = ordinal; + this.ordinal = checkOrdinal(ordinal); this.uuid = uuid; this.queue = queue; this.ceLogging = ceLogging; this.taskProcessorRepository = taskProcessorRepository; } + private static int checkOrdinal(int ordinal) { + checkArgument(ordinal >= 0, "Ordinal must be >= 0"); + return ordinal; + } + @Override public Result call() throws Exception { return withCustomizedThreadName(this::findAndProcessTask); 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 59b3607ed30..026c987ecd9 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 @@ -27,6 +27,7 @@ import javax.annotation.Nullable; import org.apache.commons.lang.RandomStringUtils; import org.junit.Rule; import org.junit.Test; +import org.junit.rules.ExpectedException; import org.mockito.ArgumentCaptor; import org.mockito.InOrder; import org.mockito.Mockito; @@ -56,6 +57,8 @@ public class CeWorkerImplTest { public CeTaskProcessorRepositoryRule taskProcessorRepository = new CeTaskProcessorRepositoryRule(); @Rule public LogTester logTester = new LogTester(); + @Rule + public ExpectedException expectedException = ExpectedException.none(); private InternalCeQueue queue = mock(InternalCeQueue.class); private ReportTaskProcessor taskProcessor = mock(ReportTaskProcessor.class); @@ -66,6 +69,14 @@ public class CeWorkerImplTest { private CeWorker underTest = new CeWorkerImpl(randomOrdinal, workerUuid, queue, ceLogging, taskProcessorRepository); private InOrder inOrder = Mockito.inOrder(ceLogging, taskProcessor, queue); + @Test + public void constructor_throws_IAE_if_ordinal_is_less_than_zero() { + expectedException.expect(IllegalArgumentException.class); + expectedException.expectMessage("Ordinal must be >= 0"); + + new CeWorkerImpl(-1 - new Random().nextInt(20), workerUuid, queue, ceLogging, taskProcessorRepository); + } + @Test public void getUUID_must_return_the_uuid_of_constructor() { String uuid = UUID.randomUUID().toString();