use of org.mockito.ArgumentCaptor in project hippo by NHS-digital-website.
the class S3SdkConnectorTest method abortsS3MultipartUploadRequest_onChunkUploadFailure.
@Test
public void abortsS3MultipartUploadRequest_onChunkUploadFailure() throws Exception {
// given
final String contentType = newRandomString();
final String uploadId = newRandomString();
given(s3ObjectKeyGenerator.generateObjectKey(fileName)).willReturn(objectKey);
final InitiateMultipartUploadResult result = mock(InitiateMultipartUploadResult.class);
given(result.getUploadId()).willReturn(uploadId);
given(s3.initiateMultipartUpload(any())).willReturn(result);
final InputStream uploadedFileInputStream = mock(InputStream.class);
final RuntimeException expectedCauseException = new RuntimeException(newRandomString());
given(s3.uploadPart(any(UploadPartRequest.class))).willThrow(expectedCauseException);
try {
// when
s3Connector.uploadFile(uploadedFileInputStream, fileName, contentType);
// then
fail("Exception was expected but none has been thrown.");
} catch (final RuntimeException actualException) {
// assert upload request - abort
final ArgumentCaptor<AbortMultipartUploadRequest> abortMultipartUploadRequestArgumentCaptor = ArgumentCaptor.forClass(AbortMultipartUploadRequest.class);
then(s3).should().abortMultipartUpload(abortMultipartUploadRequestArgumentCaptor.capture());
final AbortMultipartUploadRequest actualAbortRequest = abortMultipartUploadRequestArgumentCaptor.getValue();
assertThat("Request aborted with correct bucket name", actualAbortRequest.getBucketName(), is(bucketName));
assertThat("Request aborted with correct object key", actualAbortRequest.getKey(), is(objectKey));
assertThat("Request aborted with correct upload id", actualAbortRequest.getUploadId(), is(uploadId));
// assert upload request - exception
assertThat("Exception is thrown with correct message.", actualException.getMessage(), is("Failed to upload file " + objectKey));
assertThat("Exception is thrown with correct cause.", actualException.getCause(), is(sameInstance(expectedCauseException)));
}
}
use of org.mockito.ArgumentCaptor in project sonarqube by SonarSource.
the class XooBlameCommandTest method testBlameWithRelativeDate.
@Test
public void testBlameWithRelativeDate() throws IOException {
File source = new File(baseDir, "src/foo.xoo");
FileUtils.write(source, "sample content");
File scm = new File(baseDir, "src/foo.xoo.scm");
FileUtils.write(scm, "123,julien,-10\n234,julien,-10");
DefaultInputFile inputFile = new TestInputFileBuilder("foo", "src/foo.xoo").setLanguage(Xoo.KEY).setModuleBaseDir(baseDir.toPath()).build();
fs.add(inputFile);
BlameOutput result = mock(BlameOutput.class);
when(input.filesToBlame()).thenReturn(Arrays.asList(inputFile));
new XooBlameCommand().blame(input, result);
Predicate<Date> datePredicate = argument -> {
Date approximate = DateUtils.addDays(new Date(), -10);
return argument.getTime() > approximate.getTime() - 5000 && argument.getTime() < approximate.getTime() + 5000;
};
ArgumentCaptor<List<BlameLine>> blameLinesCaptor = ArgumentCaptor.forClass(List.class);
verify(result).blameResult(eq(inputFile), blameLinesCaptor.capture());
assertThat(blameLinesCaptor.getValue()).extracting(BlameLine::date).allMatch(datePredicate);
}
use of org.mockito.ArgumentCaptor in project sonarqube by SonarSource.
the class FileSourceDataComputerTest method compute_calls_read_for_each_line_and_passe_read_error_to_fileSourceDataWarnings.
@Test
public void compute_calls_read_for_each_line_and_passe_read_error_to_fileSourceDataWarnings() {
int lineCount = 1 + new Random().nextInt(10);
List<String> lines = IntStream.range(0, lineCount).mapToObj(i -> "line" + i).collect(toList());
when(sourceLinesRepository.readLines(FILE)).thenReturn(CloseableIterator.from(lines.iterator()));
when(sourceLineReadersFactory.getLineReaders(FILE)).thenReturn(lineReaders);
when(sourceLinesHashRepository.getLineHashesComputerToPersist(FILE)).thenReturn(lineHashesComputer);
// mock an implementation that will call the ReadErrorConsumer in order to verify that the provided consumer is
// doing what we expect: pass readError to fileSourceDataWarnings
int randomStartPoint = new Random().nextInt(500);
doAnswer(new Answer() {
int i = randomStartPoint;
@Override
public Object answer(InvocationOnMock invocation) {
Consumer<LineReader.ReadError> readErrorConsumer = invocation.getArgument(1);
readErrorConsumer.accept(new LineReader.ReadError(LineReader.Data.SYMBOLS, i++));
return null;
}
}).when(lineReaders).read(any(), any());
underTest.compute(FILE, fileSourceDataWarnings);
ArgumentCaptor<DbFileSources.Line.Builder> lineBuilderCaptor = ArgumentCaptor.forClass(DbFileSources.Line.Builder.class);
verify(lineReaders, times(lineCount)).read(lineBuilderCaptor.capture(), any());
assertThat(lineBuilderCaptor.getAllValues()).extracting(DbFileSources.Line.Builder::getSource).containsOnlyElementsOf(lines);
assertThat(lineBuilderCaptor.getAllValues()).extracting(DbFileSources.Line.Builder::getLine).containsExactly(IntStream.range(1, lineCount + 1).boxed().toArray(Integer[]::new));
ArgumentCaptor<LineReader.ReadError> readErrorCaptor = ArgumentCaptor.forClass(LineReader.ReadError.class);
verify(fileSourceDataWarnings, times(lineCount)).addWarning(same(FILE), readErrorCaptor.capture());
assertThat(readErrorCaptor.getAllValues()).extracting(LineReader.ReadError::getLine).containsExactly(IntStream.range(randomStartPoint, randomStartPoint + lineCount).boxed().toArray(Integer[]::new));
}
use of org.mockito.ArgumentCaptor in project sonarqube by SonarSource.
the class SendIssueNotificationsStepTest method send_new_issues_notification_to_user_only_for_non_backdated_issues.
@Test
public void send_new_issues_notification_to_user_only_for_non_backdated_issues() {
UserDto user = db.users().insertUser();
Random random = new Random();
Integer[] efforts = IntStream.range(0, 1 + random.nextInt(10)).mapToObj(i -> 10_000 * i).toArray(Integer[]::new);
Integer[] backDatedEfforts = IntStream.range(0, 1 + random.nextInt(10)).mapToObj(i -> 10 + random.nextInt(100)).toArray(Integer[]::new);
Duration expectedEffort = Duration.create(stream(efforts).mapToInt(i -> i).sum());
List<DefaultIssue> issues = concat(stream(efforts).map(effort -> createIssue().setType(randomRuleType).setEffort(Duration.create(effort)).setAssigneeUuid(user.getUuid()).setCreationDate(new Date(ANALYSE_DATE))), stream(backDatedEfforts).map(effort -> createIssue().setType(randomRuleType).setEffort(Duration.create(effort)).setAssigneeUuid(user.getUuid()).setCreationDate(new Date(ANALYSE_DATE - FIVE_MINUTES_IN_MS)))).collect(toList());
shuffle(issues);
DiskCache.CacheAppender issueCache = this.protoIssueCache.newAppender();
issues.forEach(issueCache::append);
issueCache.close();
analysisMetadataHolder.setProject(new Project(PROJECT.getUuid(), PROJECT.getKey(), PROJECT.getName(), null, emptyList()));
when(notificationService.hasProjectSubscribersForTypes(PROJECT.getUuid(), NOTIF_TYPES)).thenReturn(true);
TestComputationStepContext context = new TestComputationStepContext();
underTest.execute(context);
verify(notificationService).deliver(newIssuesNotificationMock);
verify(notificationService).deliverEmails(ImmutableSet.of(myNewIssuesNotificationMock));
// old API compatibility
verify(notificationService).deliver(myNewIssuesNotificationMock);
verify(notificationFactory).newNewIssuesNotification(assigneeCacheCaptor.capture());
verify(notificationFactory).newMyNewIssuesNotification(assigneeCacheCaptor.capture());
verifyNoMoreInteractions(notificationFactory);
verifyAssigneeCache(assigneeCacheCaptor, user);
verify(myNewIssuesNotificationMock).setAssignee(any(UserDto.class));
ArgumentCaptor<NewIssuesStatistics.Stats> statsCaptor = forClass(NewIssuesStatistics.Stats.class);
verify(myNewIssuesNotificationMock).setStatistics(eq(PROJECT.getName()), statsCaptor.capture());
verify(myNewIssuesNotificationMock).setDebt(expectedEffort);
NewIssuesStatistics.Stats stats = statsCaptor.getValue();
assertThat(stats.hasIssues()).isTrue();
// just checking all issues have been added to the stats
DistributedMetricStatsInt severity = stats.getDistributedMetricStats(NewIssuesStatistics.Metric.RULE_TYPE);
assertThat(severity.getOnCurrentAnalysis()).isEqualTo(efforts.length);
assertThat(severity.getTotal()).isEqualTo(backDatedEfforts.length + efforts.length);
verifyStatistics(context, 1, 1, 0);
}
use of org.mockito.ArgumentCaptor in project sonarqube by SonarSource.
the class SendIssueNotificationsStepTest method sends_one_issue_change_notification_every_1000_issues.
@Test
public void sends_one_issue_change_notification_every_1000_issues() {
UserDto user = db.users().insertUser();
ComponentDto project = newPrivateProjectDto().setDbKey(PROJECT.getDbKey()).setLongName(PROJECT.getName());
ComponentDto file = newFileDto(project).setDbKey(FILE.getDbKey()).setLongName(FILE.getName());
RuleDefinitionDto ruleDefinitionDto = newRule();
RuleType randomTypeExceptHotspot = RuleType.values()[nextInt(RuleType.values().length - 1)];
List<DefaultIssue> issues = IntStream.range(0, 2001 + new Random().nextInt(10)).mapToObj(i -> newIssue(ruleDefinitionDto, project, file).setKee("uuid_" + i).setType(randomTypeExceptHotspot).toDefaultIssue().setNew(false).setChanged(true).setSendNotifications(true).setAssigneeUuid(user.getUuid())).collect(toList());
DiskCache.CacheAppender cacheAppender = protoIssueCache.newAppender();
issues.forEach(cacheAppender::append);
cacheAppender.close();
analysisMetadataHolder.setProject(Project.from(project));
NewIssuesFactoryCaptor newIssuesFactoryCaptor = new NewIssuesFactoryCaptor(() -> mock(IssuesChangesNotification.class));
when(notificationFactory.newIssuesChangesNotification(anySet(), anyMap())).thenAnswer(newIssuesFactoryCaptor);
when(notificationService.hasProjectSubscribersForTypes(PROJECT.getUuid(), NOTIF_TYPES)).thenReturn(true);
when(notificationService.hasProjectSubscribersForTypes(project.uuid(), NOTIF_TYPES)).thenReturn(true);
underTest.execute(new TestComputationStepContext());
verify(notificationFactory, times(3)).newIssuesChangesNotification(anySet(), anyMap());
assertThat(newIssuesFactoryCaptor.issuesSetCaptor).hasSize(3);
assertThat(newIssuesFactoryCaptor.issuesSetCaptor.get(0)).hasSize(1000);
assertThat(newIssuesFactoryCaptor.issuesSetCaptor.get(1)).hasSize(1000);
assertThat(newIssuesFactoryCaptor.issuesSetCaptor.get(2)).hasSize(issues.size() - 2000);
assertThat(newIssuesFactoryCaptor.assigneeCacheCaptor).hasSize(3);
assertThat(newIssuesFactoryCaptor.assigneeCacheCaptor).containsOnly(newIssuesFactoryCaptor.assigneeCacheCaptor.iterator().next());
ArgumentCaptor<Collection> collectionCaptor = forClass(Collection.class);
verify(notificationService, times(3)).deliverEmails(collectionCaptor.capture());
assertThat(collectionCaptor.getAllValues()).hasSize(3);
assertThat(collectionCaptor.getAllValues().get(0)).hasSize(1);
assertThat(collectionCaptor.getAllValues().get(1)).hasSize(1);
assertThat(collectionCaptor.getAllValues().get(2)).hasSize(1);
verify(notificationService, times(3)).deliver(any(IssuesChangesNotification.class));
}
Aggregations