*/
package org.sonar.ce.queue;
+import java.nio.charset.Charset;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
+import java.util.Collections;
+import java.util.List;
import java.util.Optional;
+import org.apache.commons.io.IOUtils;
import org.junit.Rule;
import org.junit.Test;
import org.sonar.api.utils.System2;
+import org.sonar.core.util.UuidFactoryFast;
import org.sonar.db.DbTester;
import org.sonar.db.ce.CeActivityDto;
import org.sonar.db.ce.CeQueueDto;
+import org.sonar.db.ce.CeTaskCharacteristicDto;
+import org.sonar.db.ce.CeTaskInputDao;
import org.sonar.db.ce.CeTaskTypes;
import static java.time.ZoneOffset.UTC;
+import static org.apache.commons.lang.RandomStringUtils.randomAlphanumeric;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
underTest.start();
assertThat(selectActivity("VERY_OLD").isPresent()).isFalse();
+ assertThat(selectTaskInput("VERY_OLD").isPresent()).isFalse();
+ assertThat(selectTaskCharecteristic("VERY_OLD")).hasSize(0);
assertThat(scannerContextExists("VERY_OLD")).isFalse();
+
assertThat(selectActivity("JUST_OLD_ENOUGH").isPresent()).isFalse();
+ assertThat(selectTaskInput("JUST_OLD_ENOUGH").isPresent()).isFalse();
+ assertThat(selectTaskCharecteristic("JUST_OLD_ENOUGH")).hasSize(0);
assertThat(scannerContextExists("JUST_OLD_ENOUGH")).isFalse();
+
assertThat(selectActivity("NOT_OLD_ENOUGH").isPresent()).isTrue();
+ assertThat(selectTaskInput("NOT_OLD_ENOUGH").isPresent()).isTrue();
+ assertThat(selectTaskCharecteristic("NOT_OLD_ENOUGH")).hasSize(1);
assertThat(scannerContextExists("NOT_OLD_ENOUGH")).isFalse(); // because more than 4 weeks old
+
assertThat(selectActivity("RECENT").isPresent()).isTrue();
+ assertThat(selectTaskInput("RECENT").isPresent()).isTrue();
+ assertThat(selectTaskCharecteristic("RECENT")).hasSize(1);
assertThat(scannerContextExists("RECENT")).isTrue();
+
}
@Test
assertThat(scannerContextExists("RECENT")).isTrue();
}
- private Optional<CeActivityDto> selectActivity(String very_old) {
- return dbTester.getDbClient().ceActivityDao().selectByUuid(dbTester.getSession(), very_old);
+ private Optional<CeActivityDto> selectActivity(String taskUuid) {
+ return dbTester.getDbClient().ceActivityDao().selectByUuid(dbTester.getSession(), taskUuid);
+ }
+
+ private List<CeTaskCharacteristicDto> selectTaskCharecteristic(String taskUuid) {
+ return dbTester.getDbClient().ceTaskCharacteristicsDao().selectByTaskUuids(dbTester.getSession(), Collections.singletonList(taskUuid));
+ }
+
+ private Optional<CeTaskInputDao.DataStream> selectTaskInput(String taskUuid) {
+ return dbTester.getDbClient().ceTaskInputDao().selectData(dbTester.getSession(), taskUuid);
}
private boolean scannerContextExists(String uuid) {
CeActivityDto dto = new CeActivityDto(queueDto);
dto.setStatus(CeActivityDto.Status.SUCCESS);
when(system2.now()).thenReturn(date);
+ CeTaskCharacteristicDto ceTaskCharacteristicDto = new CeTaskCharacteristicDto()
+ .setUuid(UuidFactoryFast.getInstance().create())
+ .setValue(randomAlphanumeric(10))
+ .setKey(randomAlphanumeric(10))
+ .setTaskUuid(dto.getUuid());
+
+ dbTester.getDbClient().ceTaskInputDao().insert(dbTester.getSession(), dto.getUuid(), IOUtils.toInputStream(randomAlphanumeric(10), Charset.forName("UTF-8")));
dbTester.getDbClient().ceActivityDao().insert(dbTester.getSession(), dto);
+ dbTester.getDbClient().ceTaskCharacteristicsDao().insert(dbTester.getSession(), Collections.singletonList(ceTaskCharacteristicDto));
dbTester.getSession().commit();
insertScannerContext(uuid, date);
*/
package org.sonar.db.ce;
+import com.google.common.collect.ImmutableSet;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.sonar.db.DbTester;
import static java.util.Arrays.asList;
+import static java.util.Collections.singleton;
import static java.util.Collections.singletonList;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.tuple;
@Test
public void selectByTaskUuids() {
- CeTaskCharacteristicDto dto1 = new CeTaskCharacteristicDto()
- .setKey("key1")
- .setValue("value1")
- .setUuid("uuid1")
- .setTaskUuid("task1");
- CeTaskCharacteristicDto dto2 = new CeTaskCharacteristicDto()
- .setKey("key2")
- .setValue("value2")
- .setUuid("uuid2")
- .setTaskUuid("task2");
- underTest.insert(dbTester.getSession(), asList(dto1, dto2));
+ insert("key1", "value1", "uuid1", "task1");
+ insert("key2", "value2", "uuid2", "task2");
+
dbTester.getSession().commit();
assertThat(underTest.selectByTaskUuids(dbTester.getSession(), asList("task1", "task2")))
assertThat(underTest.selectByTaskUuids(dbTester.getSession(), singletonList("unknown"))).isEmpty();
}
+
+ @Test
+ public void deleteByTaskUuids() {
+ insert("key1", "value1", "uuid1", "task1");
+ insert("key2", "value2", "uuid2", "task2");
+ insert("key3", "value3", "uuid3", "task3");
+
+ underTest.deleteByTaskUuids(dbTester.getSession(), ImmutableSet.of("task1", "task3"));
+ assertThat(underTest.selectByTaskUuids(dbTester.getSession(), singletonList("task1"))).hasSize(0);
+ assertThat(underTest.selectByTaskUuids(dbTester.getSession(), singletonList("task2"))).hasSize(1);
+ assertThat(underTest.selectByTaskUuids(dbTester.getSession(), singletonList("task3"))).hasSize(0);
+ }
+
+ @Test
+ public void deleteByTaskUuids_does_nothing_if_uuid_does_not_exist() {
+ insert("key1", "value1", "uuid1", "task1");
+
+ // must not fail
+ underTest.deleteByTaskUuids(dbTester.getSession(), singleton("task2"));
+
+ assertThat(underTest.selectByTaskUuids(dbTester.getSession(), singletonList("task1"))).hasSize(1);
+ }
+
+ private void insert(String key, String value, String uuid, String taskUuid) {
+ CeTaskCharacteristicDto dto1 = new CeTaskCharacteristicDto()
+ .setKey(key)
+ .setValue(value)
+ .setUuid(uuid)
+ .setTaskUuid(taskUuid);
+ underTest.insert(dbTester.getSession(), singleton(dto1));
+ }
}