Browse Source

SONAR-8474 set organization uuid of components to uuid of task

for the time being, the organization uuid of a task is either the one of the component the task is associated to, or the default organization
tags/6.3-RC1
Sébastien Lesaint 7 years ago
parent
commit
14944eb05b
22 changed files with 404 additions and 137 deletions
  1. 19
    8
      server/sonar-server/src/main/java/org/sonar/ce/queue/CeQueueImpl.java
  2. 24
    4
      server/sonar-server/src/main/java/org/sonar/ce/queue/CeTask.java
  3. 5
    3
      server/sonar-server/src/main/java/org/sonar/server/computation/queue/InternalCeQueueImpl.java
  4. 6
    0
      server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/analysis/AnalysisMetadataHolder.java
  5. 23
    12
      server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/analysis/AnalysisMetadataHolderImpl.java
  6. 5
    0
      server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/analysis/MutableAnalysisMetadataHolder.java
  7. 1
    0
      server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/step/LoadReportAnalysisMetadataHolderStep.java
  8. 5
    6
      server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/step/PersistComponentsStep.java
  9. 15
    6
      server/sonar-server/src/test/java/org/sonar/ce/queue/CeQueueImplTest.java
  10. 102
    14
      server/sonar-server/src/test/java/org/sonar/ce/queue/CeTaskTest.java
  11. 18
    11
      server/sonar-server/src/test/java/org/sonar/server/ce/ws/SubmitActionTest.java
  12. 15
    7
      server/sonar-server/src/test/java/org/sonar/server/computation/queue/InternalCeQueueImplTest.java
  13. 59
    7
      server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/analysis/AnalysisMetadataHolderImplTest.java
  14. 19
    3
      server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/analysis/AnalysisMetadataHolderRule.java
  15. 17
    7
      server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/analysis/MutableAnalysisMetadataHolderRule.java
  16. 5
    4
      server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/api/posttask/PostProjectAnalysisTasksExecutorTest.java
  17. 1
    1
      server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/ExtractReportStepTest.java
  18. 15
    4
      server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/LoadReportAnalysisMetadataHolderStepTest.java
  19. 28
    25
      server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/ReportPersistComponentsStepTest.java
  20. 10
    9
      server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/ViewsPersistComponentsStepTest.java
  21. 1
    0
      server/sonar-server/src/test/java/org/sonar/server/computation/taskprocessor/CeTaskProcessorRepositoryImplTest.java
  22. 11
    6
      server/sonar-server/src/test/java/org/sonar/server/computation/taskprocessor/CeWorkerCallableImplTest.java

+ 19
- 8
server/sonar-server/src/main/java/org/sonar/ce/queue/CeQueueImpl.java View File

@@ -37,11 +37,13 @@ import org.sonar.db.DbSession;
import org.sonar.db.ce.CeActivityDto;
import org.sonar.db.ce.CeQueueDto;
import org.sonar.db.component.ComponentDto;
import org.sonar.server.organization.DefaultOrganizationProvider;

import static com.google.common.base.Preconditions.checkState;
import static com.google.common.base.Predicates.notNull;
import static com.google.common.collect.FluentIterable.from;
import static java.util.Collections.singleton;
import static java.util.Objects.requireNonNull;
import static org.sonar.db.component.ComponentDtoFunctions.toUuid;

@ComputeEngineSide
@@ -49,13 +51,15 @@ public class CeQueueImpl implements CeQueue {

private final DbClient dbClient;
private final UuidFactory uuidFactory;
private final DefaultOrganizationProvider defaultOrganizationProvider;

// state
private AtomicBoolean submitPaused = new AtomicBoolean(false);

public CeQueueImpl(DbClient dbClient, UuidFactory uuidFactory) {
public CeQueueImpl(DbClient dbClient, UuidFactory uuidFactory, DefaultOrganizationProvider defaultOrganizationProvider) {
this.dbClient = dbClient;
this.uuidFactory = uuidFactory;
this.defaultOrganizationProvider = defaultOrganizationProvider;
}

@Override
@@ -102,13 +106,13 @@ public class CeQueueImpl implements CeQueue {

protected CeTask loadTask(DbSession dbSession, CeQueueDto dto) {
if (dto.getComponentUuid() == null) {
return new CeQueueDtoToCeTask().apply(dto);
return new CeQueueDtoToCeTask(defaultOrganizationProvider.get().getUuid()).apply(dto);
}
Optional<ComponentDto> componentDto = dbClient.componentDao().selectByUuid(dbSession, dto.getComponentUuid());
if (componentDto.isPresent()) {
return new CeQueueDtoToCeTask(ImmutableMap.of(dto.getComponentUuid(), componentDto.get())).apply(dto);
return new CeQueueDtoToCeTask(defaultOrganizationProvider.get().getUuid(), ImmutableMap.of(dto.getComponentUuid(), componentDto.get())).apply(dto);
}
return new CeQueueDtoToCeTask().apply(dto);
return new CeQueueDtoToCeTask(defaultOrganizationProvider.get().getUuid()).apply(dto);
}

private List<CeTask> loadTasks(DbSession dbSession, List<CeQueueDto> dtos) {
@@ -121,7 +125,7 @@ public class CeQueueImpl implements CeQueue {
.uniqueIndex(toUuid());

return from(dtos)
.transform(new CeQueueDtoToCeTask(componentDtoByUuid))
.transform(new CeQueueDtoToCeTask(defaultOrganizationProvider.get().getUuid(), componentDtoByUuid))
.toList();
}

@@ -191,13 +195,15 @@ public class CeQueueImpl implements CeQueue {
}

private static class CeQueueDtoToCeTask implements Function<CeQueueDto, CeTask> {
private final String defaultOrganizationUuid;
private final Map<String, ComponentDto> componentDtoByUuid;

public CeQueueDtoToCeTask() {
this.componentDtoByUuid = Collections.emptyMap();
public CeQueueDtoToCeTask(String defaultOrganizationUuid) {
this(defaultOrganizationUuid, Collections.emptyMap());
}

public CeQueueDtoToCeTask(Map<String, ComponentDto> componentDtoByUuid) {
public CeQueueDtoToCeTask(String defaultOrganizationUuid, Map<String, ComponentDto> componentDtoByUuid) {
this.defaultOrganizationUuid = requireNonNull(defaultOrganizationUuid, "defaultOrganizationUuid can't be null");
this.componentDtoByUuid = componentDtoByUuid;
}

@@ -213,10 +219,15 @@ public class CeQueueImpl implements CeQueue {
builder.setComponentUuid(componentUuid);
ComponentDto component = componentDtoByUuid.get(componentUuid);
if (component != null) {
builder.setOrganizationUuid(component.getOrganizationUuid());
builder.setComponentKey(component.getKey());
builder.setComponentName(component.name());
}
}
// fixme this should be set from the CeQueueDto
if (!builder.hasOrganizationUuid()) {
builder.setOrganizationUuid(defaultOrganizationUuid);
}
return builder.build();
}
}

+ 24
- 4
server/sonar-server/src/main/java/org/sonar/ce/queue/CeTask.java View File

@@ -30,6 +30,7 @@ import static java.util.Objects.requireNonNull;
@Immutable
public class CeTask {

private final String organizationUuid;
private final String type;
private final String uuid;
private final String componentUuid;
@@ -38,14 +39,19 @@ public class CeTask {
private final String submitterLogin;

private CeTask(Builder builder) {
this.uuid = requireNonNull(emptyToNull(builder.uuid));
this.type = requireNonNull(emptyToNull(builder.type));
this.organizationUuid = requireNonNull(emptyToNull(builder.organizationUuid), "organizationUuid can't be null nor empty");
this.uuid = requireNonNull(emptyToNull(builder.uuid), "uuid can't be null nor empty");
this.type = requireNonNull(emptyToNull(builder.type), "type can't be null nor empty");
this.componentUuid = emptyToNull(builder.componentUuid);
this.componentKey = emptyToNull(builder.componentKey);
this.componentName = emptyToNull(builder.componentName);
this.submitterLogin = emptyToNull(builder.submitterLogin);
}

public String getOrganizationUuid() {
return organizationUuid;
}

public String getUuid() {
return uuid;
}
@@ -77,9 +83,12 @@ public class CeTask {
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("componentUuid", componentUuid)
.add("uuid", uuid)
.add("organizationUuid", organizationUuid)
.add("type", type)
.add("uuid", uuid)
.add("componentUuid", componentUuid)
.add("componentKey", componentKey)
.add("componentName", componentName)
.add("submitterLogin", submitterLogin)
.toString();
}
@@ -102,6 +111,7 @@ public class CeTask {
}

public static final class Builder {
private String organizationUuid;
private String uuid;
private String type;
private String componentUuid;
@@ -109,6 +119,16 @@ public class CeTask {
private String componentName;
private String submitterLogin;

public Builder setOrganizationUuid(String organizationUuid) {
this.organizationUuid = organizationUuid;
return this;
}

// FIXME remove this method when organization support is added to the Compute Engine queue
public boolean hasOrganizationUuid() {
return organizationUuid != null;
}

public Builder setUuid(String uuid) {
this.uuid = uuid;
return this;

+ 5
- 3
server/sonar-server/src/main/java/org/sonar/server/computation/queue/InternalCeQueueImpl.java View File

@@ -39,6 +39,7 @@ import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.ce.CeActivityDto;
import org.sonar.db.ce.CeQueueDto;
import org.sonar.server.organization.DefaultOrganizationProvider;

import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkState;
@@ -53,8 +54,9 @@ public class InternalCeQueueImpl extends CeQueueImpl implements InternalCeQueue
// state
private AtomicBoolean peekPaused = new AtomicBoolean(false);

public InternalCeQueueImpl(System2 system2, DbClient dbClient, UuidFactory uuidFactory, CEQueueStatus queueStatus) {
super(dbClient, uuidFactory);
public InternalCeQueueImpl(System2 system2, DbClient dbClient, UuidFactory uuidFactory, CEQueueStatus queueStatus,
DefaultOrganizationProvider defaultOrganizationProvider) {
super(dbClient, uuidFactory, defaultOrganizationProvider);
this.system2 = system2;
this.dbClient = dbClient;
this.queueStatus = queueStatus;
@@ -127,7 +129,7 @@ public class InternalCeQueueImpl extends CeQueueImpl implements InternalCeQueue
@CheckForNull
private static String getStackTraceForPersistence(Throwable error) {
try (ByteArrayOutputStream out = new ByteArrayOutputStream();
LineReturnEnforcedPrintStream printStream = new LineReturnEnforcedPrintStream(out)) {
LineReturnEnforcedPrintStream printStream = new LineReturnEnforcedPrintStream(out)) {
error.printStackTrace(printStream);
printStream.flush();
return out.toString();

+ 6
- 0
server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/analysis/AnalysisMetadataHolder.java View File

@@ -25,6 +25,12 @@ import org.sonar.server.qualityprofile.QualityProfile;

public interface AnalysisMetadataHolder {

/**
* Returns the UUID of the organization the analysis belongs to.
* @throws IllegalStateException if organization uuid has not been set
*/
String getOrganizationUuid();

/**
* Returns the UUID generated for this analysis.
* @throws IllegalStateException if uuid has not been set

+ 23
- 12
server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/analysis/AnalysisMetadataHolderImpl.java View File

@@ -27,34 +27,38 @@ import org.sonar.server.computation.util.InitializedProperty;
import org.sonar.server.qualityprofile.QualityProfile;

import static com.google.common.base.Preconditions.checkState;
import static java.util.Objects.requireNonNull;

public class AnalysisMetadataHolderImpl implements MutableAnalysisMetadataHolder {

private final InitializedProperty<String> organizationUuid = new InitializedProperty<>();
private final InitializedProperty<String> uuid = new InitializedProperty<>();

private final InitializedProperty<Long> analysisDate = new InitializedProperty<>();

private final InitializedProperty<Analysis> baseProjectSnapshot = new InitializedProperty<>();

private final InitializedProperty<Boolean> crossProjectDuplicationEnabled = new InitializedProperty<>();

private final InitializedProperty<String> branch = new InitializedProperty<>();

private final InitializedProperty<Integer> rootComponentRef = new InitializedProperty<>();

private final InitializedProperty<Map<String, QualityProfile>> qProfilesPerLanguage = new InitializedProperty<>();

@Override
public MutableAnalysisMetadataHolder setUuid(String s) {
checkState(!uuid.isInitialized(), "Analysis uuid has already been set");
this.uuid.setProperty(s);
public MutableAnalysisMetadataHolder setOrganizationUuid(String organizationUuid) {
checkState(!this.organizationUuid.isInitialized(), "Organization uuid has already been set");
requireNonNull(organizationUuid, "Organization uuid can't be null");
this.organizationUuid.setProperty(organizationUuid);
return this;
}

@Override
public MutableAnalysisMetadataHolder setAnalysisDate(long date) {
checkState(!analysisDate.isInitialized(), "Analysis date has already been set");
this.analysisDate.setProperty(date);
public String getOrganizationUuid() {
checkState(organizationUuid.isInitialized(), "Organization uuid has not been set");
return organizationUuid.getProperty();
}

@Override
public MutableAnalysisMetadataHolder setUuid(String s) {
checkState(!uuid.isInitialized(), "Analysis uuid has already been set");
requireNonNull(s, "Analysis uuid can't be null");
this.uuid.setProperty(s);
return this;
}

@@ -64,6 +68,13 @@ public class AnalysisMetadataHolderImpl implements MutableAnalysisMetadataHolder
return this.uuid.getProperty();
}

@Override
public MutableAnalysisMetadataHolder setAnalysisDate(long date) {
checkState(!analysisDate.isInitialized(), "Analysis date has already been set");
this.analysisDate.setProperty(date);
return this;
}

@Override
public long getAnalysisDate() {
checkState(analysisDate.isInitialized(), "Analysis date has not been set");

+ 5
- 0
server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/analysis/MutableAnalysisMetadataHolder.java View File

@@ -25,6 +25,11 @@ import org.sonar.server.qualityprofile.QualityProfile;

public interface MutableAnalysisMetadataHolder extends AnalysisMetadataHolder {

/**
* @throws IllegalStateException if the organization uuid has already been set
*/
MutableAnalysisMetadataHolder setOrganizationUuid(String organizationUuid);

/**
* @throws IllegalStateException if the analysis uuid has already been set
*/

+ 1
- 0
server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/step/LoadReportAnalysisMetadataHolderStep.java View File

@@ -69,6 +69,7 @@ public class LoadReportAnalysisMetadataHolderStep implements ComputationStep {
mutableAnalysisMetadataHolder.setBranch(isNotEmpty(reportMetadata.getBranch()) ? reportMetadata.getBranch() : null);
mutableAnalysisMetadataHolder.setCrossProjectDuplicationEnabled(reportMetadata.getCrossProjectDuplicationActivated());
mutableAnalysisMetadataHolder.setQProfilesByLanguage(transformValues(reportMetadata.getQprofilesPerLanguage(), TO_COMPUTE_QPROFILE));
mutableAnalysisMetadataHolder.setOrganizationUuid(ceTask.getOrganizationUuid());
}

private void checkProjectKeyConsistency(ScannerReport.Metadata reportMetadata) {

+ 5
- 6
server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/step/PersistComponentsStep.java View File

@@ -37,6 +37,7 @@ import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.component.ComponentDto;
import org.sonar.db.component.ComponentUpdateDto;
import org.sonar.server.computation.task.projectanalysis.analysis.AnalysisMetadataHolder;
import org.sonar.server.computation.task.projectanalysis.component.Component;
import org.sonar.server.computation.task.projectanalysis.component.CrawlerDepthLimit;
import org.sonar.server.computation.task.projectanalysis.component.DbIdsRepositoryImpl;
@@ -47,7 +48,6 @@ import org.sonar.server.computation.task.projectanalysis.component.PathAwareVisi
import org.sonar.server.computation.task.projectanalysis.component.PathAwareVisitorAdapter;
import org.sonar.server.computation.task.projectanalysis.component.TreeRootHolder;
import org.sonar.server.computation.task.step.ComputationStep;
import org.sonar.server.organization.DefaultOrganizationProvider;

import static com.google.common.collect.FluentIterable.from;
import static org.sonar.db.component.ComponentDto.UUID_PATH_OF_ROOT;
@@ -65,18 +65,17 @@ public class PersistComponentsStep implements ComputationStep {
private final MutableDbIdsRepository dbIdsRepository;
private final System2 system2;
private final MutableDisabledComponentsHolder disabledComponentsHolder;
private final DefaultOrganizationProvider defaultOrganizationProvider;
private final AnalysisMetadataHolder analysisMetadataHolder;

public PersistComponentsStep(DbClient dbClient, TreeRootHolder treeRootHolder,
MutableDbIdsRepository dbIdsRepository, System2 system2,
MutableDisabledComponentsHolder disabledComponentsHolder,
DefaultOrganizationProvider defaultOrganizationProvider) {
MutableDisabledComponentsHolder disabledComponentsHolder, AnalysisMetadataHolder analysisMetadataHolder) {
this.dbClient = dbClient;
this.treeRootHolder = treeRootHolder;
this.dbIdsRepository = dbIdsRepository;
this.system2 = system2;
this.disabledComponentsHolder = disabledComponentsHolder;
this.defaultOrganizationProvider = defaultOrganizationProvider;
this.analysisMetadataHolder = analysisMetadataHolder;
}

@Override
@@ -349,7 +348,7 @@ public class PersistComponentsStep implements ComputationStep {
String componentUuid = component.getUuid();

ComponentDto componentDto = new ComponentDto();
componentDto.setOrganizationUuid(defaultOrganizationProvider.get().getUuid());
componentDto.setOrganizationUuid(analysisMetadataHolder.getOrganizationUuid());
componentDto.setUuid(componentUuid);
componentDto.setKey(componentKey);
componentDto.setDeprecatedKey(componentKey);

+ 15
- 6
server/sonar-server/src/test/java/org/sonar/ce/queue/CeQueueImplTest.java View File

@@ -36,6 +36,8 @@ import org.sonar.db.ce.CeQueueDto;
import org.sonar.db.ce.CeTaskTypes;
import org.sonar.db.component.ComponentDto;
import org.sonar.db.component.ComponentTesting;
import org.sonar.server.organization.DefaultOrganizationProvider;
import org.sonar.server.organization.TestDefaultOrganizationProvider;

import static java.util.Arrays.asList;
import static org.assertj.core.api.Assertions.assertThat;
@@ -43,17 +45,19 @@ import static org.hamcrest.Matchers.startsWith;

public class CeQueueImplTest {

private System2 system2 = new TestSystem2().setNow(1_450_000_000_000L);

@Rule
public ExpectedException expectedException = ExpectedException.none();

System2 system2 = new TestSystem2().setNow(1_450_000_000_000L);

@Rule
public DbTester dbTester = DbTester.create(system2);
DbSession session = dbTester.getSession();

UuidFactory uuidFactory = UuidFactoryImpl.INSTANCE;
CeQueue underTest = new CeQueueImpl(dbTester.getDbClient(), uuidFactory);
private DbSession session = dbTester.getSession();

private UuidFactory uuidFactory = UuidFactoryImpl.INSTANCE;
private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(dbTester);

private CeQueue underTest = new CeQueueImpl(dbTester.getDbClient(), uuidFactory, defaultOrganizationProvider);

@Test
public void submit_returns_task_populated_from_CeTaskSubmit_and_creates_CeQueue_row() {
@@ -176,6 +180,11 @@ public class CeQueueImplTest {
}

private void verifyCeTask(CeTaskSubmit taskSubmit, CeTask task, @Nullable ComponentDto componentDto) {
if (componentDto == null) {
assertThat(task.getOrganizationUuid()).isEqualTo(defaultOrganizationProvider.get().getUuid());
} else {
assertThat(task.getOrganizationUuid()).isEqualTo(componentDto.getOrganizationUuid());
}
assertThat(task.getUuid()).isEqualTo(taskSubmit.getUuid());
assertThat(task.getComponentUuid()).isEqualTo(task.getComponentUuid());
assertThat(task.getType()).isEqualTo(taskSubmit.getType());

+ 102
- 14
server/sonar-server/src/test/java/org/sonar/ce/queue/CeTaskTest.java View File

@@ -19,37 +19,125 @@
*/
package org.sonar.ce.queue;

import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;

import static org.assertj.core.api.Assertions.assertThat;

public class CeTaskTest {
@Rule
public ExpectedException expectedException = ExpectedException.none();

private CeTask.Builder underTest = new CeTask.Builder();

@Test
public void build() {
CeTask.Builder builder = new CeTask.Builder();
builder.setType("TYPE_1");
builder.setUuid("UUID_1");
builder.setSubmitterLogin("LOGIN_1");
builder.setComponentKey("COMPONENT_KEY_1");
builder.setComponentUuid("COMPONENT_UUID_1");
builder.setComponentName("The component");
CeTask task = builder.build();
public void build_fails_with_NPE_if_organizationUuid_is_null() {
expectedException.expect(NullPointerException.class);
expectedException.expectMessage("organizationUuid can't be null nor empty");

assertThat(task.getType()).isEqualTo("TYPE_1");
underTest.build();
}

@Test
public void build_fails_with_NPE_if_organizationUuid_is_empty() {
underTest.setOrganizationUuid("");

expectedException.expect(NullPointerException.class);
expectedException.expectMessage("organizationUuid can't be null nor empty");

underTest.build();
}

@Test
public void build_fails_with_NPE_if_uid_is_null() {
underTest.setOrganizationUuid("org1");

expectedException.expect(NullPointerException.class);
expectedException.expectMessage("uuid can't be null nor empty");

underTest.build();
}

@Test
public void build_fails_with_NPE_if_uuid_is_empty() {
underTest.setOrganizationUuid("org1").setUuid("");

expectedException.expect(NullPointerException.class);
expectedException.expectMessage("uuid can't be null nor empty");

underTest.build();
}

@Test
public void build_fails_with_NPE_if_type_is_null() {
underTest.setOrganizationUuid("org1").setUuid("uuid");

expectedException.expect(NullPointerException.class);
expectedException.expectMessage("type can't be null nor empty");

underTest.build();
}

@Test
public void build_fails_with_NPE_if_type_is_empty() {
underTest.setOrganizationUuid("org1").setUuid("uuid").setType("");

expectedException.expect(NullPointerException.class);
expectedException.expectMessage("type can't be null nor empty");

underTest.build();
}

@Test
public void verify_getters() {
underTest.setOrganizationUuid("org1");
underTest.setType("TYPE_1");
underTest.setUuid("UUID_1");
underTest.setSubmitterLogin("LOGIN_1");
underTest.setComponentKey("COMPONENT_KEY_1");
underTest.setComponentUuid("COMPONENT_UUID_1");
underTest.setComponentName("The component");

CeTask task = underTest.build();

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.getComponentKey()).isEqualTo("COMPONENT_KEY_1");
assertThat(task.getComponentUuid()).isEqualTo("COMPONENT_UUID_1");
assertThat(task.getComponentName()).isEqualTo("The component");
}

@Test
public void empty_in_component_properties_is_considered_as_null() {
CeTask ceTask = underTest.setOrganizationUuid("org1").setUuid("uuid").setType("type")
.setComponentKey("")
.setComponentName("")
.setComponentUuid("")
.build();

assertThat(ceTask.getComponentKey()).isNull();
assertThat(ceTask.getComponentName()).isNull();
assertThat(ceTask.getComponentUuid()).isNull();
}

@Test
public void empty_in_submitterLogin_is_considered_as_null() {
CeTask ceTask = underTest.setOrganizationUuid("org1").setUuid("uuid").setType("type")
.setSubmitterLogin("")
.build();

assertThat(ceTask.getSubmitterLogin()).isNull();
}

@Test
public void equals_and_hashCode_on_uuid() {
CeTask.Builder builder1 = new CeTask.Builder().setType("TYPE_1").setUuid("UUID_1");
CeTask task1 = builder1.build();
CeTask task1bis = builder1.build();
CeTask task2 = new CeTask.Builder().setType("TYPE_1").setUuid("UUID_2").build();
underTest.setOrganizationUuid("org1").setType("TYPE_1").setUuid("UUID_1");
CeTask task1 = underTest.build();
CeTask task1bis = underTest.build();
CeTask task2 = new CeTask.Builder().setOrganizationUuid("org1").setType("TYPE_1").setUuid("UUID_2").build();

assertThat(task1.equals(task1)).isTrue();
assertThat(task1.equals(task1bis)).isTrue();

+ 18
- 11
server/sonar-server/src/test/java/org/sonar/server/ce/ws/SubmitActionTest.java View File

@@ -22,14 +22,14 @@ package org.sonar.server.ce.ws;
import java.io.InputStream;
import org.junit.Test;
import org.mockito.Matchers;
import org.sonar.ce.queue.CeTask;
import org.sonar.core.util.Protobuf;
import org.sonar.db.ce.CeTaskTypes;
import org.sonar.ce.queue.CeTask;
import org.sonar.server.computation.queue.ReportSubmitter;
import org.sonarqube.ws.MediaTypes;
import org.sonar.server.ws.TestResponse;
import org.sonar.server.ws.WsActionTester;
import org.sonar.test.JsonAssert;
import org.sonarqube.ws.MediaTypes;
import org.sonarqube.ws.WsCe;

import static org.assertj.core.api.Assertions.assertThat;
@@ -41,14 +41,21 @@ import static org.mockito.Mockito.when;

public class SubmitActionTest {

ReportSubmitter reportSubmitter = mock(ReportSubmitter.class);
SubmitAction underTest = new SubmitAction(reportSubmitter);
WsActionTester tester = new WsActionTester(underTest);
private static final CeTask A_CE_TASK = new CeTask.Builder()
.setOrganizationUuid("org1")
.setUuid("TASK_1")
.setType(CeTaskTypes.REPORT)
.setComponentUuid("PROJECT_1").setSubmitterLogin("robert")
.build();

private ReportSubmitter reportSubmitter = mock(ReportSubmitter.class);
private SubmitAction underTest = new SubmitAction(reportSubmitter);
private WsActionTester tester = new WsActionTester(underTest);

@Test
public void submit_task_to_the_queue_and_ask_for_immediate_processing() {
CeTask task = new CeTask.Builder().setUuid("TASK_1").setType(CeTaskTypes.REPORT).setComponentUuid("PROJECT_1").setSubmitterLogin("robert").build();
when(reportSubmitter.submit(eq("my_project"), Matchers.isNull(String.class), eq("My Project"), any(InputStream.class))).thenReturn(task);
when(reportSubmitter.submit(eq("my_project"), Matchers.isNull(String.class), eq("My Project"), any(InputStream.class)))
.thenReturn(A_CE_TASK);

TestResponse wsResponse = tester.newRequest()
.setParam("projectKey", "my_project")
@@ -67,8 +74,8 @@ public class SubmitActionTest {

@Test
public void test_example_json_response() {
CeTask task = new CeTask.Builder().setUuid("TASK_1").setType(CeTaskTypes.REPORT).setComponentUuid("PROJECT_1").setSubmitterLogin("robert").build();
when(reportSubmitter.submit(eq("my_project"), Matchers.isNull(String.class), eq("My Project"), any(InputStream.class))).thenReturn(task);
when(reportSubmitter.submit(eq("my_project"), Matchers.isNull(String.class), eq("My Project"), any(InputStream.class)))
.thenReturn(A_CE_TASK);

TestResponse wsResponse = tester.newRequest()
.setParam("projectKey", "my_project")
@@ -86,8 +93,8 @@ public class SubmitActionTest {
*/
@Test
public void project_name_is_optional() {
CeTask task = new CeTask.Builder().setUuid("TASK_1").setType(CeTaskTypes.REPORT).setComponentUuid("PROJECT_1").setSubmitterLogin("robert").build();
when(reportSubmitter.submit(eq("my_project"), Matchers.isNull(String.class), eq("my_project"), any(InputStream.class))).thenReturn(task);
when(reportSubmitter.submit(eq("my_project"), Matchers.isNull(String.class), eq("my_project"), any(InputStream.class)))
.thenReturn(A_CE_TASK);

tester.newRequest()
.setParam("projectKey", "my_project")

+ 15
- 7
server/sonar-server/src/test/java/org/sonar/server/computation/queue/InternalCeQueueImplTest.java View File

@@ -43,6 +43,8 @@ import org.sonar.db.ce.CeTaskTypes;
import org.sonar.db.component.ComponentDto;
import org.sonar.db.component.ComponentTesting;
import org.sonar.server.computation.monitoring.CEQueueStatusImpl;
import org.sonar.server.organization.DefaultOrganizationProvider;
import org.sonar.server.organization.TestDefaultOrganizationProvider;

import static java.util.Arrays.asList;
import static org.assertj.core.api.Assertions.assertThat;
@@ -55,18 +57,19 @@ public class InternalCeQueueImplTest {

private static final String AN_ANALYSIS_UUID = "U1";

private System2 system2 = new TestSystem2().setNow(1_450_000_000_000L);

@Rule
public ExpectedException expectedException = ExpectedException.none();

System2 system2 = new TestSystem2().setNow(1_450_000_000_000L);

@Rule
public DbTester dbTester = DbTester.create(system2);
DbSession session = dbTester.getSession();

UuidFactory uuidFactory = UuidFactoryImpl.INSTANCE;
CEQueueStatus queueStatus = new CEQueueStatusImpl(dbTester.getDbClient());
InternalCeQueue underTest = new InternalCeQueueImpl(system2, dbTester.getDbClient(), uuidFactory, queueStatus);
private DbSession session = dbTester.getSession();

private UuidFactory uuidFactory = UuidFactoryImpl.INSTANCE;
private CEQueueStatus queueStatus = new CEQueueStatusImpl(dbTester.getDbClient());
private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(dbTester);
private InternalCeQueue underTest = new InternalCeQueueImpl(system2, dbTester.getDbClient(), uuidFactory, queueStatus, defaultOrganizationProvider);

@Test
public void submit_returns_task_populated_from_CeTaskSubmit_and_creates_CeQueue_row() {
@@ -310,6 +313,11 @@ public class InternalCeQueueImplTest {
}

private void verifyCeTask(CeTaskSubmit taskSubmit, CeTask task, @Nullable ComponentDto componentDto) {
if (componentDto == null) {
assertThat(task.getOrganizationUuid()).isEqualTo(defaultOrganizationProvider.get().getUuid());
} else {
assertThat(task.getOrganizationUuid()).isEqualTo(componentDto.getOrganizationUuid());
}
assertThat(task.getUuid()).isEqualTo(taskSubmit.getUuid());
assertThat(task.getComponentUuid()).isEqualTo(task.getComponentUuid());
assertThat(task.getType()).isEqualTo(taskSubmit.getType());

+ 59
- 7
server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/analysis/AnalysisMetadataHolderImplTest.java View File

@@ -27,20 +27,72 @@ import static org.assertj.core.api.Assertions.assertThat;

public class AnalysisMetadataHolderImplTest {

@Rule
public ExpectedException expectedException = ExpectedException.none();

static Analysis baseProjectAnalysis = new Analysis.Builder()
private static Analysis baseProjectAnalysis = new Analysis.Builder()
.setId(1)
.setUuid("uuid_1")
.setCreatedAt(123456789L)
.build();
private static long SOME_DATE = 10000000L;

@Rule
public ExpectedException expectedException = ExpectedException.none();

static long SOME_DATE = 10000000L;
private AnalysisMetadataHolderImpl underTest = new AnalysisMetadataHolderImpl();

@Test
public void getOrganizationUuid_throws_ISE_if_organization_uuid_is_not_set() {
expectedException.expect(IllegalStateException.class);
expectedException.expectMessage("Organization uuid has not been set");

underTest.getOrganizationUuid();
}

@Test
public void setOrganizationUuid_throws_NPE_is_parameter_is_null() {
expectedException.expect(NullPointerException.class);
expectedException.expectMessage("Organization uuid can't be null");

underTest.setOrganizationUuid(null);
}

@Test
public void setOrganizationUuid_throws_ISE_if_called_twice() {
underTest.setOrganizationUuid("org1");

expectedException.expect(IllegalStateException.class);
expectedException.expectMessage("Organization uuid has already been set");

underTest.setOrganizationUuid("org1");
}

@Test
public void getUuid_throws_ISE_if_organization_uuid_is_not_set() {
expectedException.expect(IllegalStateException.class);
expectedException.expectMessage("Analysis uuid has not been set");

underTest.getUuid();
}

@Test
public void setUuid_throws_NPE_is_parameter_is_null() {
expectedException.expect(NullPointerException.class);
expectedException.expectMessage("Analysis uuid can't be null");

underTest.setUuid(null);
}

@Test
public void setUuid_throws_ISE_if_called_twice() {
underTest.setUuid("org1");

expectedException.expect(IllegalStateException.class);
expectedException.expectMessage("Analysis uuid has already been set");

underTest.setUuid("org1");
}

@Test
public void getAnalysisDate_returns_date_with_same_time_as_the_one_set_with_setAnalysisDate() throws InterruptedException {
AnalysisMetadataHolderImpl underTest = new AnalysisMetadataHolderImpl();

underTest.setAnalysisDate(SOME_DATE);

@@ -175,7 +227,7 @@ public class AnalysisMetadataHolderImplTest {
}

@Test
public void branch_throws_ISE_when_holder_is_not_initialized() {
public void getBranch_throws_ISE_when_holder_is_not_initialized() {
expectedException.expect(IllegalStateException.class);
expectedException.expectMessage("Branch has not been set");


+ 19
- 3
server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/analysis/AnalysisMetadataHolderRule.java View File

@@ -21,6 +21,7 @@ package org.sonar.server.computation.task.projectanalysis.analysis;

import java.util.Date;
import java.util.Map;
import java.util.Objects;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
import org.junit.rules.ExternalResource;
@@ -32,6 +33,8 @@ import static com.google.common.base.Preconditions.checkState;

public class AnalysisMetadataHolderRule extends ExternalResource implements MutableAnalysisMetadataHolder {

private final InitializedProperty<String> organizationUuid = new InitializedProperty<>();

private final InitializedProperty<String> uuid = new InitializedProperty<>();

private final InitializedProperty<Long> analysisDate = new InitializedProperty<>();
@@ -47,9 +50,16 @@ public class AnalysisMetadataHolderRule extends ExternalResource implements Muta
private final InitializedProperty<Map<String, QualityProfile>> qProfilesPerLanguage = new InitializedProperty<>();

@Override
public String getUuid() {
checkState(uuid.isInitialized(), "Analysis UUID has not been set");
return this.uuid.getProperty();
public AnalysisMetadataHolderRule setOrganizationUuid(String organizationUuid) {
Objects.requireNonNull(organizationUuid, "organizationUuid can't be null");
this.organizationUuid.setProperty(organizationUuid);
return this;
}

@Override
public String getOrganizationUuid() {
checkState(organizationUuid.isInitialized(), "Organization UUID has not been set");
return this.organizationUuid.getProperty();
}

@Override
@@ -59,6 +69,12 @@ public class AnalysisMetadataHolderRule extends ExternalResource implements Muta
return this;
}

@Override
public String getUuid() {
checkState(uuid.isInitialized(), "Analysis UUID has not been set");
return this.uuid.getProperty();
}

public AnalysisMetadataHolderRule setAnalysisDate(Date date) {
checkNotNull(date, "Date must not be null");
this.analysisDate.setProperty(date.getTime());

+ 17
- 7
server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/analysis/MutableAnalysisMetadataHolderRule.java View File

@@ -35,8 +35,13 @@ public class MutableAnalysisMetadataHolderRule extends ExternalResource implemen
}

@Override
public String getUuid() {
return delegate.getUuid();
public MutableAnalysisMetadataHolder setOrganizationUuid(String organizationUuid) {
return delegate.setOrganizationUuid(organizationUuid);
}

@Override
public String getOrganizationUuid() {
return delegate.getOrganizationUuid();
}

public MutableAnalysisMetadataHolderRule setUuid(String s) {
@@ -44,6 +49,16 @@ public class MutableAnalysisMetadataHolderRule extends ExternalResource implemen
return this;
}

@Override
public String getUuid() {
return delegate.getUuid();
}

public MutableAnalysisMetadataHolderRule setAnalysisDate(long date) {
delegate.setAnalysisDate(date);
return this;
}

@Override
public long getAnalysisDate() {
return delegate.getAnalysisDate();
@@ -54,11 +69,6 @@ public class MutableAnalysisMetadataHolderRule extends ExternalResource implemen
return delegate.hasAnalysisDateBeenSet();
}

public MutableAnalysisMetadataHolderRule setAnalysisDate(long date) {
delegate.setAnalysisDate(date);
return this;
}

@Override
public boolean isFirstAnalysis() {
return delegate.isFirstAnalysis();

+ 5
- 4
server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/api/posttask/PostProjectAnalysisTasksExecutorTest.java View File

@@ -76,6 +76,7 @@ public class PostProjectAnalysisTasksExecutorTest {
private System2 system2 = mock(System2.class);
private ArgumentCaptor<PostProjectAnalysisTask.ProjectAnalysis> projectAnalysisArgumentCaptor = ArgumentCaptor.forClass(PostProjectAnalysisTask.ProjectAnalysis.class);
private CeTask ceTask = new CeTask.Builder()
.setOrganizationUuid("org1")
.setType("type")
.setUuid("uuid")
.setComponentKey("component key")
@@ -245,12 +246,12 @@ public class PostProjectAnalysisTasksExecutorTest {
InOrder inOrder = inOrder(postProjectAnalysisTask1, postProjectAnalysisTask2, postProjectAnalysisTask3);

doThrow(new RuntimeException("Faking a listener throws an exception"))
.when(postProjectAnalysisTask2)
.finished(any(PostProjectAnalysisTask.ProjectAnalysis.class));
.when(postProjectAnalysisTask2)
.finished(any(PostProjectAnalysisTask.ProjectAnalysis.class));

new PostProjectAnalysisTasksExecutor(
ceTask, analysisMetadataHolder, qualityGateHolder, qualityGateStatusHolder, reportReader,
system2, new PostProjectAnalysisTask[] {postProjectAnalysisTask1, postProjectAnalysisTask2, postProjectAnalysisTask3})
ceTask, analysisMetadataHolder, qualityGateHolder, qualityGateStatusHolder, reportReader,
system2, new PostProjectAnalysisTask[] {postProjectAnalysisTask1, postProjectAnalysisTask2, postProjectAnalysisTask3})
.finished(allStepsExecuted);

inOrder.verify(postProjectAnalysisTask1).finished(projectAnalysisArgumentCaptor.capture());

+ 1
- 1
server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/ExtractReportStepTest.java View File

@@ -57,7 +57,7 @@ public class ExtractReportStepTest {
public DbTester dbTester = DbTester.create(System2.INSTANCE);

private MutableBatchReportDirectoryHolder reportDirectoryHolder = new BatchReportDirectoryHolderImpl();
private CeTask ceTask = new CeTask.Builder().setType(CeTaskTypes.REPORT).setUuid(TASK_UUID).build();
private CeTask ceTask = new CeTask.Builder().setOrganizationUuid("org1").setType(CeTaskTypes.REPORT).setUuid(TASK_UUID).build();

private ExtractReportStep underTest = new ExtractReportStep(dbTester.getDbClient(), ceTask, tempFolder, reportDirectoryHolder);


+ 15
- 4
server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/LoadReportAnalysisMetadataHolderStepTest.java View File

@@ -35,10 +35,9 @@ import static org.mockito.Mockito.when;

public class LoadReportAnalysisMetadataHolderStepTest {

public static final String PROJECT_KEY = "project_key";
static long ANALYSIS_DATE = 123456789L;

static String BRANCH = "origin/master";
private static final String PROJECT_KEY = "project_key";
private static final String BRANCH = "origin/master";
private static final long ANALYSIS_DATE = 123456789L;

@Rule
public BatchReportReaderRule reportReader = new BatchReportReaderRule();
@@ -177,6 +176,17 @@ public class LoadReportAnalysisMetadataHolderStepTest {
}
}

@Test
public void execute_set_organization_uuid_from_ce_task() {
reportReader.setMetadata(
newBatchReportBuilder()
.build());

underTest.execute();

assertThat(analysisMetadataHolder.getOrganizationUuid()).isEqualTo(ceTask.getOrganizationUuid());
}

private static ScannerReport.Metadata.Builder newBatchReportBuilder() {
return ScannerReport.Metadata.newBuilder()
.setProjectKey(PROJECT_KEY);
@@ -184,6 +194,7 @@ public class LoadReportAnalysisMetadataHolderStepTest {

private CeTask createCeTask(String projectKey) {
CeTask res = mock(CeTask.class);
when(res.getOrganizationUuid()).thenReturn("org1");
when(res.getComponentKey()).thenReturn(projectKey);
return res;
}

+ 28
- 25
server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/ReportPersistComponentsStepTest.java View File

@@ -31,14 +31,13 @@ import org.sonar.db.DbClient;
import org.sonar.db.DbTester;
import org.sonar.db.component.ComponentDto;
import org.sonar.db.component.ComponentTesting;
import org.sonar.server.computation.task.projectanalysis.analysis.AnalysisMetadataHolderRule;
import org.sonar.server.computation.task.projectanalysis.component.Component;
import org.sonar.server.computation.task.projectanalysis.component.FileAttributes;
import org.sonar.server.computation.task.projectanalysis.component.MutableDbIdsRepositoryRule;
import org.sonar.server.computation.task.projectanalysis.component.MutableDisabledComponentsHolder;
import org.sonar.server.computation.task.projectanalysis.component.TreeRootHolderRule;
import org.sonar.server.computation.task.step.ComputationStep;
import org.sonar.server.organization.DefaultOrganizationProvider;
import org.sonar.server.organization.TestDefaultOrganizationProvider;

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.guava.api.Assertions.assertThat;
@@ -64,12 +63,14 @@ public class ReportPersistComponentsStepTest extends BaseStepTest {
public TreeRootHolderRule treeRootHolder = new TreeRootHolderRule();
@Rule
public MutableDbIdsRepositoryRule dbIdsRepository = MutableDbIdsRepositoryRule.create(treeRootHolder);
@Rule
public AnalysisMetadataHolderRule analysisMetadataHolder = new AnalysisMetadataHolderRule()
.setOrganizationUuid("org1");

private System2 system2 = mock(System2.class);
private DbClient dbClient = dbTester.getDbClient();
private Date now;
private MutableDisabledComponentsHolder disabledComponentsHolder = mock(MutableDisabledComponentsHolder.class, RETURNS_DEEP_STUBS);
private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(dbTester);
private PersistComponentsStep underTest;

@Before
@@ -77,7 +78,7 @@ public class ReportPersistComponentsStepTest extends BaseStepTest {
now = DATE_FORMAT.parse("2015-06-02");
when(system2.now()).thenReturn(now.getTime());

underTest = new PersistComponentsStep(dbClient, treeRootHolder, dbIdsRepository, system2, disabledComponentsHolder, defaultOrganizationProvider);
underTest = new PersistComponentsStep(dbClient, treeRootHolder, dbIdsRepository, system2, disabledComponentsHolder, analysisMetadataHolder);
}

@Override
@@ -113,7 +114,7 @@ public class ReportPersistComponentsStepTest extends BaseStepTest {
assertThat(dbTester.countRowsOfTable("projects")).isEqualTo(4);

ComponentDto projectDto = dbClient.componentDao().selectByKey(dbTester.getSession(), PROJECT_KEY).get();
assertThat(projectDto.getOrganizationUuid()).isEqualTo(defaultOrganizationProvider.get().getUuid());
assertThat(projectDto.getOrganizationUuid()).isEqualTo(analysisMetadataHolder.getOrganizationUuid());
assertThat(projectDto.name()).isEqualTo("Project");
assertThat(projectDto.description()).isEqualTo("Project description");
assertThat(projectDto.path()).isNull();
@@ -128,7 +129,7 @@ public class ReportPersistComponentsStepTest extends BaseStepTest {
assertThat(projectDto.getCreatedAt()).isEqualTo(now);

ComponentDto moduleDto = dbClient.componentDao().selectByKey(dbTester.getSession(), MODULE_KEY).get();
assertThat(moduleDto.getOrganizationUuid()).isEqualTo(defaultOrganizationProvider.get().getUuid());
assertThat(moduleDto.getOrganizationUuid()).isEqualTo(analysisMetadataHolder.getOrganizationUuid());
assertThat(moduleDto.name()).isEqualTo("Module");
assertThat(moduleDto.description()).isEqualTo("Module description");
assertThat(moduleDto.path()).isEqualTo("module");
@@ -143,7 +144,7 @@ public class ReportPersistComponentsStepTest extends BaseStepTest {
assertThat(moduleDto.getCreatedAt()).isEqualTo(now);

ComponentDto directoryDto = dbClient.componentDao().selectByKey(dbTester.getSession(), "MODULE_KEY:src/main/java/dir").get();
assertThat(directoryDto.getOrganizationUuid()).isEqualTo(defaultOrganizationProvider.get().getUuid());
assertThat(directoryDto.getOrganizationUuid()).isEqualTo(analysisMetadataHolder.getOrganizationUuid());
assertThat(directoryDto.name()).isEqualTo("src/main/java/dir");
assertThat(directoryDto.description()).isNull();
assertThat(directoryDto.path()).isEqualTo("src/main/java/dir");
@@ -158,7 +159,7 @@ public class ReportPersistComponentsStepTest extends BaseStepTest {
assertThat(directoryDto.getCreatedAt()).isEqualTo(now);

ComponentDto fileDto = dbClient.componentDao().selectByKey(dbTester.getSession(), "MODULE_KEY:src/main/java/dir/Foo.java").get();
assertThat(fileDto.getOrganizationUuid()).isEqualTo(defaultOrganizationProvider.get().getUuid());
assertThat(fileDto.getOrganizationUuid()).isEqualTo(analysisMetadataHolder.getOrganizationUuid());
assertThat(fileDto.name()).isEqualTo("Foo.java");
assertThat(fileDto.description()).isNull();
assertThat(fileDto.path()).isEqualTo("src/main/java/dir/Foo.java");
@@ -246,9 +247,9 @@ public class ReportPersistComponentsStepTest extends BaseStepTest {
builder(DIRECTORY, 3).setUuid("CDEF").setKey("MODULE_KEY:src/main/java/dir")
.setPath("src/main/java/dir")
.addChildren(
builder(FILE, 4).setUuid("DEFG").setKey("MODULE_KEY:src/main/java/dir/Foo.java")
.setPath("src/main/java/dir/Foo.java")
.build())
builder(FILE, 4).setUuid("DEFG").setKey("MODULE_KEY:src/main/java/dir/Foo.java")
.setPath("src/main/java/dir/Foo.java")
.build())
.build())
.build())
.build());
@@ -298,13 +299,13 @@ public class ReportPersistComponentsStepTest extends BaseStepTest {
builder(Component.Type.MODULE, 3).setUuid("CDEF").setKey("SUB_MODULE_1_KEY")
.setName("Sub Module 1")
.addChildren(
builder(Component.Type.MODULE, 4).setUuid("DEFG").setKey("SUB_MODULE_2_KEY")
.setName("Sub Module 2")
.addChildren(
builder(DIRECTORY, 5).setUuid("EFGH").setKey("SUB_MODULE_2_KEY:src/main/java/dir")
.setPath("src/main/java/dir")
.build())
builder(Component.Type.MODULE, 4).setUuid("DEFG").setKey("SUB_MODULE_2_KEY")
.setName("Sub Module 2")
.addChildren(
builder(DIRECTORY, 5).setUuid("EFGH").setKey("SUB_MODULE_2_KEY:src/main/java/dir")
.setPath("src/main/java/dir")
.build())
.build())
.build())
.build())
.build());
@@ -389,7 +390,8 @@ public class ReportPersistComponentsStepTest extends BaseStepTest {
ComponentDto module = ComponentTesting.newModuleDto("BCDE", project).setKey(MODULE_KEY).setName("Module");
dbClient.componentDao().insert(dbTester.getSession(), module);
ComponentDto directory = ComponentTesting.newDirectory(module, "src/main/java/dir").setUuid("CDEF").setKey("MODULE_KEY:src/main/java/dir");
ComponentDto file = ComponentTesting.newFileDto(module, directory, "DEFG").setPath("src/main/java/dir/Foo.java").setName("Foo.java").setKey("MODULE_KEY:src/main/java/dir/Foo.java");
ComponentDto file = ComponentTesting.newFileDto(module, directory, "DEFG").setPath("src/main/java/dir/Foo.java").setName("Foo.java")
.setKey("MODULE_KEY:src/main/java/dir/Foo.java");
dbClient.componentDao().insert(dbTester.getSession(), directory, file);
dbTester.getSession().commit();

@@ -403,9 +405,9 @@ public class ReportPersistComponentsStepTest extends BaseStepTest {
builder(DIRECTORY, 3).setUuid("CDEF").setKey("MODULE_KEY:src/main/java/dir")
.setPath("src/main/java/dir")
.addChildren(
builder(FILE, 4).setUuid("DEFG").setKey("MODULE_KEY:src/main/java/dir/Foo.java")
.setPath("src/main/java/dir/Foo.java")
.build())
builder(FILE, 4).setUuid("DEFG").setKey("MODULE_KEY:src/main/java/dir/Foo.java")
.setPath("src/main/java/dir/Foo.java")
.build())
.build())
.build())
.build());
@@ -534,7 +536,8 @@ public class ReportPersistComponentsStepTest extends BaseStepTest {
.setName("Module B");
dbClient.componentDao().insert(dbTester.getSession(), moduleA, moduleB);
ComponentDto directory = ComponentTesting.newDirectory(moduleB, "src/main/java/dir").setUuid("CDEF").setKey("MODULE_B:src/main/java/dir");
ComponentDto file = ComponentTesting.newFileDto(moduleB, directory, "DEFG").setPath("src/main/java/dir/Foo.java").setName("Foo.java").setKey("MODULE_B:src/main/java/dir/Foo.java");
ComponentDto file = ComponentTesting.newFileDto(moduleB, directory, "DEFG").setPath("src/main/java/dir/Foo.java").setName("Foo.java")
.setKey("MODULE_B:src/main/java/dir/Foo.java");
dbClient.componentDao().insert(dbTester.getSession(), directory, file);
dbTester.getSession().commit();

@@ -647,9 +650,9 @@ public class ReportPersistComponentsStepTest extends BaseStepTest {
builder(DIRECTORY, 3).setUuid("CDEF").setKey("MODULE_KEY:src/main/java/dir")
.setPath("src/main/java/dir")
.addChildren(
builder(FILE, 4).setUuid("DEFG").setKey("MODULE_KEY:src/main/java/dir/Foo.java")
.setPath("src/main/java/dir/Foo.java")
.build())
builder(FILE, 4).setUuid("DEFG").setKey("MODULE_KEY:src/main/java/dir/Foo.java")
.setPath("src/main/java/dir/Foo.java")
.build())
.build())
.build())
.build());

+ 10
- 9
server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/ViewsPersistComponentsStepTest.java View File

@@ -32,14 +32,13 @@ import org.sonar.db.DbTester;
import org.sonar.db.component.ComponentDbTester;
import org.sonar.db.component.ComponentDto;
import org.sonar.db.component.ComponentTesting;
import org.sonar.server.computation.task.projectanalysis.analysis.AnalysisMetadataHolderRule;
import org.sonar.server.computation.task.projectanalysis.component.MutableDbIdsRepositoryRule;
import org.sonar.server.computation.task.projectanalysis.component.MutableDisabledComponentsHolder;
import org.sonar.server.computation.task.projectanalysis.component.ProjectViewAttributes;
import org.sonar.server.computation.task.projectanalysis.component.TreeRootHolderRule;
import org.sonar.server.computation.task.projectanalysis.component.ViewsComponent;
import org.sonar.server.computation.task.step.ComputationStep;
import org.sonar.server.organization.DefaultOrganizationProvider;
import org.sonar.server.organization.TestDefaultOrganizationProvider;

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
@@ -73,13 +72,15 @@ public class ViewsPersistComponentsStepTest extends BaseStepTest {
public TreeRootHolderRule treeRootHolder = new TreeRootHolderRule();
@Rule
public MutableDbIdsRepositoryRule dbIdsRepository = MutableDbIdsRepositoryRule.create(treeRootHolder);
@Rule
public AnalysisMetadataHolderRule analysisMetadataHolder = new AnalysisMetadataHolderRule()
.setOrganizationUuid("org1");

private System2 system2 = mock(System2.class);
private DbClient dbClient = dbTester.getDbClient();
private Date now;
private ComponentDbTester componentDbTester = new ComponentDbTester(dbTester);
private MutableDisabledComponentsHolder disabledComponentsHolder = mock(MutableDisabledComponentsHolder.class, RETURNS_DEEP_STUBS);
private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(dbTester);
private PersistComponentsStep underTest;

@Before
@@ -87,7 +88,7 @@ public class ViewsPersistComponentsStepTest extends BaseStepTest {
now = DATE_FORMAT.parse("2015-06-02");
when(system2.now()).thenReturn(now.getTime());

underTest = new PersistComponentsStep(dbClient, treeRootHolder, dbIdsRepository, system2, disabledComponentsHolder, defaultOrganizationProvider);
underTest = new PersistComponentsStep(dbClient, treeRootHolder, dbIdsRepository, system2, disabledComponentsHolder, analysisMetadataHolder);
}

@Override
@@ -249,7 +250,7 @@ public class ViewsPersistComponentsStepTest extends BaseStepTest {
ComponentDto project = newProjectDto();
persistComponents(view, project);
ComponentDto projectView = ComponentTesting.newProjectCopy(PROJECT_VIEW_1_UUID, project, view)
.setOrganizationUuid(defaultOrganizationProvider.get().getUuid())
.setOrganizationUuid(analysisMetadataHolder.getOrganizationUuid())
.setKey(PROJECT_VIEW_1_KEY)
.setName("Old name")
.setCreatedAt(now);
@@ -335,7 +336,7 @@ public class ViewsPersistComponentsStepTest extends BaseStepTest {

private ComponentDto newViewDto() {
return ComponentTesting.newView(VIEW_UUID)
.setOrganizationUuid(defaultOrganizationProvider.get().getUuid())
.setOrganizationUuid(analysisMetadataHolder.getOrganizationUuid())
.setKey(VIEW_KEY)
.setName(VIEW_NAME);
}
@@ -344,7 +345,7 @@ public class ViewsPersistComponentsStepTest extends BaseStepTest {
* Assertions to verify the DTO created from {@link #createViewBuilder()}
*/
private void assertDtoIsView(ComponentDto projectDto) {
assertThat(projectDto.getOrganizationUuid()).isEqualTo(defaultOrganizationProvider.get().getUuid());
assertThat(projectDto.getOrganizationUuid()).isEqualTo(analysisMetadataHolder.getOrganizationUuid());
assertThat(projectDto.name()).isEqualTo(VIEW_NAME);
assertThat(projectDto.longName()).isEqualTo(VIEW_NAME);
assertThat(projectDto.description()).isEqualTo(VIEW_DESCRIPTION);
@@ -364,7 +365,7 @@ public class ViewsPersistComponentsStepTest extends BaseStepTest {
* Assertions to verify the DTO created from {@link #createProjectView1Builder(ComponentDto, Long)}
*/
private void assertDtoIsSubView1(ComponentDto viewDto, ComponentDto sv1Dto) {
assertThat(sv1Dto.getOrganizationUuid()).isEqualTo(defaultOrganizationProvider.get().getUuid());
assertThat(sv1Dto.getOrganizationUuid()).isEqualTo(analysisMetadataHolder.getOrganizationUuid());
assertThat(sv1Dto.name()).isEqualTo(SUBVIEW_1_NAME);
assertThat(sv1Dto.longName()).isEqualTo(SUBVIEW_1_NAME);
assertThat(sv1Dto.description()).isEqualTo(SUBVIEW_1_DESCRIPTION);
@@ -381,7 +382,7 @@ public class ViewsPersistComponentsStepTest extends BaseStepTest {
}

private void assertDtoIsProjectView1(ComponentDto pv1Dto, ComponentDto viewDto, ComponentDto parentViewDto, ComponentDto project) {
assertThat(pv1Dto.getOrganizationUuid()).isEqualTo(defaultOrganizationProvider.get().getUuid());
assertThat(pv1Dto.getOrganizationUuid()).isEqualTo(analysisMetadataHolder.getOrganizationUuid());
assertThat(pv1Dto.name()).isEqualTo(PROJECT_VIEW_1_NAME);
assertThat(pv1Dto.longName()).isEqualTo(PROJECT_VIEW_1_NAME);
assertThat(pv1Dto.description()).isNull();

+ 1
- 0
server/sonar-server/src/test/java/org/sonar/server/computation/taskprocessor/CeTaskProcessorRepositoryImplTest.java View File

@@ -109,6 +109,7 @@ public class CeTaskProcessorRepositoryImplTest {

private static CeTask createCeTask(String ceTaskType, String key) {
return new CeTask.Builder()
.setOrganizationUuid("org1")
.setType(ceTaskType)
.setUuid("task_uuid_" + key)
.setComponentKey(key).setComponentUuid("uuid_" + key).setComponentName("name_" + key)

+ 11
- 6
server/sonar-server/src/test/java/org/sonar/server/computation/taskprocessor/CeWorkerCallableImplTest.java View File

@@ -49,11 +49,11 @@ public class CeWorkerCallableImplTest {
@Rule
public LogTester logTester = new LogTester();

InternalCeQueue queue = mock(InternalCeQueue.class);
ReportTaskProcessor taskProcessor = mock(ReportTaskProcessor.class);
CeLogging ceLogging = spy(CeLogging.class);
CeWorkerCallable underTest = new CeWorkerCallableImpl(queue, ceLogging, taskProcessorRepository);
InOrder inOrder = Mockito.inOrder(ceLogging, taskProcessor, queue);
private InternalCeQueue queue = mock(InternalCeQueue.class);
private ReportTaskProcessor taskProcessor = mock(ReportTaskProcessor.class);
private CeLogging ceLogging = spy(CeLogging.class);
private CeWorkerCallable underTest = new CeWorkerCallableImpl(queue, ceLogging, taskProcessorRepository);
private InOrder inOrder = Mockito.inOrder(ceLogging, taskProcessor, queue);

@Test
public void no_pending_tasks_in_queue() throws Exception {
@@ -212,7 +212,12 @@ public class CeWorkerCallableImplTest {
}

private static CeTask createCeTask(@Nullable String submitterLogin) {
return new CeTask.Builder().setUuid("TASK_1").setType(CeTaskTypes.REPORT).setComponentUuid("PROJECT_1").setSubmitterLogin(submitterLogin).build();
return new CeTask.Builder()
.setOrganizationUuid("org1")
.setUuid("TASK_1").setType(CeTaskTypes.REPORT)
.setComponentUuid("PROJECT_1")
.setSubmitterLogin(submitterLogin)
.build();
}

private IllegalStateException makeTaskProcessorFail(CeTask task) {

Loading…
Cancel
Save