Skip to content

Commit

Permalink
fix: remove PR if max attempt reached (#430)
Browse files Browse the repository at this point in the history
* fix: remove PR if max attempt reached

Signed-off-by: Mykola Rudyk <[email protected]>

* test: update tests to keep coverage

Signed-off-by: Mykola Rudyk <[email protected]>

* fix: add changes after review comment, remove unnecessary check

Signed-off-by: Mykola Rudyk <[email protected]>

---------

Signed-off-by: Mykola Rudyk <[email protected]>
  • Loading branch information
m-rudyk authored Feb 15, 2024
1 parent 54e90ce commit c44618e
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 58 deletions.
73 changes: 32 additions & 41 deletions src/main/java/com/lpvs/service/LPVSQueueService.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.util.*;
import java.util.concurrent.BlockingDeque;
import java.util.concurrent.LinkedBlockingDeque;
Expand Down Expand Up @@ -146,40 +147,7 @@ public BlockingDeque<LPVSQueue> getQueue() {
public void checkForQueue() throws InterruptedException {
log.debug("Checking for previous queue");
List<LPVSQueue> webhookConfigList = queueRepository.getQueueList();
if (webhookConfigList.size() > 0) {
LPVSQueue webhookConfig = getLatestScan(webhookConfigList);
webhookConfig.setAttempts(webhookConfig.getAttempts() + 1);
queueRepository.save(webhookConfig);
}
for (LPVSQueue webhook : webhookConfigList) {
log.info("PROCESSING WebHook id = " + webhook.getId());
if (webhook.getAttempts() > maxAttempts) {
LPVSPullRequest pullRequest = new LPVSPullRequest();
pullRequest.setPullRequestUrl(webhook.getPullRequestUrl());
pullRequest.setUser(webhook.getUserId());
pullRequest.setPullRequestFilesUrl(webhook.getPullRequestFilesUrl());
pullRequest.setRepositoryName(
LPVSWebhookUtil.getRepositoryOrganization(webhook)
+ "/"
+ LPVSWebhookUtil.getRepositoryName(webhook));
pullRequest.setDate(webhook.getDate());
pullRequest.setStatus(LPVSPullRequestStatus.NO_ACCESS.toString());
pullRequest.setPullRequestHead(webhook.getPullRequestHead());
pullRequest.setPullRequestBase(webhook.getPullRequestBase());
pullRequest.setSender(webhook.getSender());
pullRequest = lpvsPullRequestRepository.saveAndFlush(pullRequest);

if (webhook.getUserId().equals("GitHub hook")) {
gitHubService.setErrorCheck(webhook);
}
queueRepository.deleteById(webhook.getId());
log.info(
"Webhook id = "
+ webhook.getId()
+ " is deleted. Details on PR #"
+ pullRequest.getId());
continue;
}
log.info("Add WebHook id = " + webhook.getId() + " to the queue.");
QUEUE.putFirst(webhook);
}
Expand Down Expand Up @@ -210,8 +178,13 @@ public LPVSQueue getLatestScan(List<LPVSQueue> webhookConfigList) {
public void processWebHook(LPVSQueue webhookConfig) {
LPVSPullRequest pullRequest = new LPVSPullRequest();
try {
log.info("GitHub queue processing...");
log.debug(webhookConfig.toString());
log.info(
"Processing webhook ID: "
+ webhookConfig.getId()
+ ", attempt: "
+ webhookConfig.getAttempts()
+ " for PR: "
+ webhookConfig.getPullRequestUrl());

String filePath = gitHubService.getPullRequestFiles(webhookConfig);

Expand Down Expand Up @@ -258,20 +231,38 @@ public void processWebHook(LPVSQueue webhookConfig) {
log.debug("Creating comment");
gitHubService.commentResults(webhookConfig, files, detectedConflicts, pullRequest);
log.debug("Results posted on GitHub");
delete(webhookConfig);
} else {
log.warn("Files are not found. Probably pull request is not exists.");
gitHubService.commentResults(webhookConfig, null, null, pullRequest);
delete(webhookConfig);
throw new Exception(
"Files are not found. Probably pull request does not exist. Terminating.");
}
delete(webhookConfig);
} catch (Exception | Error e) {
pullRequest.setStatus(LPVSPullRequestStatus.INTERNAL_ERROR.toString());
pullRequest = lpvsPullRequestRepository.saveAndFlush(pullRequest);
log.error("Can't authorize commentResults() " + e);
e.printStackTrace();
delete(webhookConfig);
log.error("Can't authorize commentResults() " + e.getMessage());
int currentAttempts = webhookConfig.getAttempts();
if (currentAttempts < maxAttempts) {
webhookConfig.setAttempts(currentAttempts + 1);
try {
addFirst(webhookConfig);
} catch (InterruptedException e1) {
log.warn("Failed to update Queue element");
}
queueRepository.save(webhookConfig);
} else {
log.warn(
"Maximum amount of processing webhook reached for pull request: "
+ pullRequest.getId()
+ " "
+ pullRequest.getPullRequestUrl());
try {
gitHubService.commentResults(webhookConfig, null, null, pullRequest);
} catch (IOException e1) {
log.warn("Failed to post FAIL result " + e.getMessage());
}
delete(webhookConfig);
}
}
}
}
3 changes: 3 additions & 0 deletions src/main/resources/application.properties
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ scanner=scanoss
# Corresponding env. variable LPVS_LICENSE_CONFLICT
license_conflict=db

# Logger configuration
logging.pattern.console=%d{dd-MM-yyyy HH:mm:ss.SSS} %magenta([%thread]) %highlight(%-5level) %logger.%M - %msg%n

# GitHub settings
# Corresponding env. variable LPVS_GITHUB_LOGIN
github.login=
Expand Down
25 changes: 8 additions & 17 deletions src/test/java/com/lpvs/service/LPVSQueueServiceTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -150,12 +150,18 @@ public void testProcessWebHook__NoPRDownloaded() throws IOException {
queueService.processWebHook(webhookConfig);

verify(mockGitHubService, times(1)).getPullRequestFiles(webhookConfig);
verify(mockGitHubService, times(1))
.commentResults(eq(webhookConfig), any(), any(), eq(lpvsPullRequest));

verifyNoMoreInteractions(mockGitHubService);
verifyNoMoreInteractions(mockDetectService);
verifyNoMoreInteractions(mockLicenseService);

// test when max attempts reached
webhookConfig.setAttempts(maxAttempts);
queueService.processWebHook(webhookConfig);

verify(mockGitHubService, times(2)).getPullRequestFiles(webhookConfig);
verify(mockGitHubService, times(1))
.commentResults(eq(webhookConfig), any(), any(), eq(lpvsPullRequest));
}
}

Expand Down Expand Up @@ -835,26 +841,11 @@ void setUp() {

@Test
public void testCheckForQueue() {
LPVSQueue webhookConfig = new LPVSQueue();
webhookConfig.setAttempts(0);
webhookConfig.setDate(new Date());
when(mocked_queueRepository.getQueueList()).thenReturn(List.of(webhookConfig));
assertDoesNotThrow(() -> queueService.checkForQueue());
verify(mocked_queueRepository).save(webhookConfig);
}

@Test
public void testCheckForQueue__Alternative() {
LPVSQueue webhookConfig = new LPVSQueue();
webhookConfig.setAttempts(100);
webhookConfig.setDate(new Date());
webhookConfig.setUserId("id");
webhookConfig.setRepositoryUrl("https://github.com/Samsung/LPVS");
when(mocked_queueRepository.getQueueList()).thenReturn(List.of(webhookConfig));
when(mocked_lpvsPullRequestRepository.saveAndFlush(Mockito.any(LPVSPullRequest.class)))
.thenAnswer(i -> i.getArguments()[0]);
assertDoesNotThrow(() -> queueService.checkForQueue());
verify(mocked_queueRepository).save(webhookConfig);
}

@Test
Expand Down

0 comments on commit c44618e

Please sign in to comment.