From 82a51ec81d56acda5ecdfe0088a0bdae322d26d5 Mon Sep 17 00:00:00 2001 From: kerenr-jfrog Date: Sun, 6 Apr 2025 18:44:30 +0300 Subject: [PATCH 01/16] initial commit --- .../ide/eclipse/scan/ScanManagerTest.java | 24 ++++++++++--------- .../com/jfrog/ide/eclipse/utils/Utils.java | 14 ----------- 2 files changed, 13 insertions(+), 25 deletions(-) diff --git a/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java b/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java index 9522669..e403790 100644 --- a/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java +++ b/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java @@ -12,37 +12,39 @@ import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.jobs.JobChangeAdapter; -import com.jfrog.ide.eclipse.scheduling.ScanJob; +import com.jfrog.ide.eclipse.scheduling.CliJob; import com.jfrog.ide.eclipse.utils.Utils; import junit.framework.TestCase; public class ScanManagerTest extends TestCase { + private ScanManager scanManager = ScanManager.getInstance(); + + // TODO: generate test for scanning: Maven, Gradle and NPM projects. + // TODO: add resources dir with example projects to scan public void testSchedulingAJob() throws IOException, CoreException, OperationCanceledException, InterruptedException { String projectName = "gradleIsApplicable"; JobListener jobListener = new JobListener(); IProject project = Utils.createProject(projectName, "gradle"); - ScanManager scanManager = new GradleScanManager(project); Job.getJobManager().addJobChangeListener(jobListener); - scanManager.scanAndUpdateResults(false, null, null, null); - Job.getJobManager().join(ScanJob.FAMILY, new NullProgressMonitor()); + scanManager.scanAndUpdateResults(null, null, null, null); + Job.getJobManager().join(CliJob.FAMILY, new NullProgressMonitor()); assertJobInformation(projectName, jobListener); cleanup(jobListener); } public void testScanFinished() throws IOException, CoreException, OperationCanceledException, InterruptedException { - ScanManagersFactory.getInstance().getScanInProgress().set(true); + scanManager.getScanInProgress().set(true); String projectName = "gradleIsApplicable"; JobListener jobListener = new JobListener(); Job.getJobManager().addJobChangeListener(jobListener); IProject project = Utils.createProject(projectName, "gradle"); - ScanManager scanManager = new GradleScanManager(project); - scanManager.scanAndUpdateResults(false, null, null, null); - Job.getJobManager().join(ScanJob.FAMILY, new NullProgressMonitor()); + scanManager.scanAndUpdateResults(null, null, null, null); + Job.getJobManager().join(CliJob.FAMILY, new NullProgressMonitor()); assertJobInformation(projectName, jobListener); - assertFalse(ScanManagersFactory.getInstance().getScanInProgress().get()); + assertFalse(scanManager.getScanInProgress().get()); cleanup(jobListener); } @@ -66,7 +68,7 @@ static class JobListener extends JobChangeAdapter { @Override public void scheduled(IJobChangeEvent event) { - if (event.getJob().belongsTo(ScanJob.FAMILY)) { + if (event.getJob().belongsTo(CliJob.FAMILY)) { this.jobName = event.getJob().getName(); numOfJobs.incrementAndGet(); } @@ -74,7 +76,7 @@ public void scheduled(IJobChangeEvent event) { @Override public void done(IJobChangeEvent event) { - if (event.getJob().belongsTo(ScanJob.FAMILY)) { + if (event.getJob().belongsTo(CliJob.FAMILY)) { jobExists.set(true); } } diff --git a/tests/src/main/java/com/jfrog/ide/eclipse/utils/Utils.java b/tests/src/main/java/com/jfrog/ide/eclipse/utils/Utils.java index 89a46dc..4216559 100644 --- a/tests/src/main/java/com/jfrog/ide/eclipse/utils/Utils.java +++ b/tests/src/main/java/com/jfrog/ide/eclipse/utils/Utils.java @@ -1,10 +1,8 @@ package com.jfrog.ide.eclipse.utils; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; import java.nio.file.Files; -import java.nio.file.Paths; import org.apache.commons.io.FileUtils; import org.eclipse.core.resources.IProject; @@ -18,8 +16,6 @@ import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; -import com.jfrog.ide.eclipse.scan.GradleScanManager; - /** * Utils class for testing * @author alexeiv @@ -60,16 +56,6 @@ public void run(IProgressMonitor monitor) throws CoreException { return project; } - /** - * Returns the gradle init script file location - */ - public static String getGradleInitScriptLocation(GradleScanManager gradleScanManager) throws IOException { - File currentDir = new File(System.getProperty("user.dir")); - File parentDir = currentDir.getParentFile(); - File pathToGradleScriptFile = Paths.get(parentDir.getAbsolutePath(), "bundle", "src", "main", "resources", "gradle", GradleScanManager.GRADLE_INIT_SCRIPT).toFile(); - return gradleScanManager.createGradleFile(new FileInputStream(pathToGradleScriptFile)); - } - /** * Returns the expected result content from the test resources. * @param folderName - The folder name where the file located From fac689dd19ff181e1b5315888327b79ea5a22c70 Mon Sep 17 00:00:00 2001 From: kerenr-jfrog Date: Mon, 7 Apr 2025 11:50:52 +0300 Subject: [PATCH 02/16] added initial tests workflow + PR template --- .github/PULL_REQUEST_TEMPLATE.md | 2 ++ .github/workflows/tests.yml | 52 ++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/workflows/tests.yml diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..bef79ea --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,2 @@ +- [ ] All [tests](https://github.com/jfrog/jfrog-eclipse-plugin/actions/workflows/tests.yml) passed. If this feature is not already covered by the tests, I added new tests. +----- \ No newline at end of file diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 0000000..f35eb4e --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,52 @@ +name: Test + +on: + push: + # Triggers the workflow on labeled PRs only. + pull_request_target: + types: [labeled] + +# Ensures that only the latest commit is running for each PR at a time. +# Ignores this rule for push events. +concurrency: + group: ${{ github.event.pull_request.number || github.sha }} + cancel-in-progress: true +jobs: + test: + if: contains(github.event.pull_request.labels.*.name, 'safe to test') || github.event_name == 'push' + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macOS-latest] + node: [18, 20, 22] + + steps: + - uses: actions/checkout@v3 + with: + submodules: true + ref: ${{ github.event.pull_request.head.sha }} + - name: Unlabel 'safe to test' + uses: actions-ecosystem/action-remove-labels@v1 + if: ${{ github.event_name != 'push' }} + with: + labels: "safe to test" + # Install required tools + - name: Set up Java + uses: actions/setup-java@v3 + with: + distribution: "temurin" + java-version: "17" + - name: Setup Gradle + uses: gradle/gradle-build-action@v2 + with: + gradle-version: 7.6 + - name: Setup NodeJS + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node }} + check-latest: true + + # Run tests + - name: Tests on macOS, Linux, Windows + run: mvn clean test From 7c20545c16b4472f16bb996463ca948516c8cd9a Mon Sep 17 00:00:00 2001 From: kerenr-jfrog Date: Mon, 7 Apr 2025 13:28:08 +0300 Subject: [PATCH 03/16] progress --- .../jfrog/ide/eclipse/scan/ScanManagerTest.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java b/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java index e403790..43237c0 100644 --- a/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java +++ b/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java @@ -1,6 +1,7 @@ package com.jfrog.ide.eclipse.scan; import java.io.IOException; +import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; @@ -11,7 +12,9 @@ import org.eclipse.core.runtime.jobs.IJobChangeEvent; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.jobs.JobChangeAdapter; +import org.eclipse.swt.widgets.Composite; +import com.jfrog.ide.common.nodes.FileTreeNode; import com.jfrog.ide.eclipse.scheduling.CliJob; import com.jfrog.ide.eclipse.utils.Utils; @@ -19,17 +22,29 @@ public class ScanManagerTest extends TestCase { private ScanManager scanManager = ScanManager.getInstance(); + private ScanCache scanCache = ScanCache.getInstance(); // TODO: generate test for scanning: Maven, Gradle and NPM projects. // TODO: add resources dir with example projects to scan + public void testScanMavenProject() throws IOException, CoreException { + String projectName = "mavenIsApplicable"; + JobListener jobListener = new JobListener(); + IProject project = Utils.createProject(projectName, "maven"); + Job.getJobManager().addJobChangeListener(jobListener); + + scanManager.startScan(null, false); + List scanResults = scanCache.getScanResults(); + + } + public void testSchedulingAJob() throws IOException, CoreException, OperationCanceledException, InterruptedException { String projectName = "gradleIsApplicable"; JobListener jobListener = new JobListener(); IProject project = Utils.createProject(projectName, "gradle"); Job.getJobManager().addJobChangeListener(jobListener); - scanManager.scanAndUpdateResults(null, null, null, null); + scanManager.scanAndUpdateResults(null, new Composite(null, 0), null, null); Job.getJobManager().join(CliJob.FAMILY, new NullProgressMonitor()); assertJobInformation(projectName, jobListener); cleanup(jobListener); From 74ca58b8daa763cae5c96f6d754450c7f94d0f3e Mon Sep 17 00:00:00 2001 From: kerenr-jfrog Date: Sun, 6 Apr 2025 18:44:30 +0300 Subject: [PATCH 04/16] initial commit --- .../ide/eclipse/scan/ScanManagerTest.java | 24 ++++++++++--------- .../com/jfrog/ide/eclipse/utils/Utils.java | 14 ----------- 2 files changed, 13 insertions(+), 25 deletions(-) diff --git a/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java b/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java index 9522669..e403790 100644 --- a/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java +++ b/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java @@ -12,37 +12,39 @@ import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.jobs.JobChangeAdapter; -import com.jfrog.ide.eclipse.scheduling.ScanJob; +import com.jfrog.ide.eclipse.scheduling.CliJob; import com.jfrog.ide.eclipse.utils.Utils; import junit.framework.TestCase; public class ScanManagerTest extends TestCase { + private ScanManager scanManager = ScanManager.getInstance(); + + // TODO: generate test for scanning: Maven, Gradle and NPM projects. + // TODO: add resources dir with example projects to scan public void testSchedulingAJob() throws IOException, CoreException, OperationCanceledException, InterruptedException { String projectName = "gradleIsApplicable"; JobListener jobListener = new JobListener(); IProject project = Utils.createProject(projectName, "gradle"); - ScanManager scanManager = new GradleScanManager(project); Job.getJobManager().addJobChangeListener(jobListener); - scanManager.scanAndUpdateResults(false, null, null, null); - Job.getJobManager().join(ScanJob.FAMILY, new NullProgressMonitor()); + scanManager.scanAndUpdateResults(null, null, null, null); + Job.getJobManager().join(CliJob.FAMILY, new NullProgressMonitor()); assertJobInformation(projectName, jobListener); cleanup(jobListener); } public void testScanFinished() throws IOException, CoreException, OperationCanceledException, InterruptedException { - ScanManagersFactory.getInstance().getScanInProgress().set(true); + scanManager.getScanInProgress().set(true); String projectName = "gradleIsApplicable"; JobListener jobListener = new JobListener(); Job.getJobManager().addJobChangeListener(jobListener); IProject project = Utils.createProject(projectName, "gradle"); - ScanManager scanManager = new GradleScanManager(project); - scanManager.scanAndUpdateResults(false, null, null, null); - Job.getJobManager().join(ScanJob.FAMILY, new NullProgressMonitor()); + scanManager.scanAndUpdateResults(null, null, null, null); + Job.getJobManager().join(CliJob.FAMILY, new NullProgressMonitor()); assertJobInformation(projectName, jobListener); - assertFalse(ScanManagersFactory.getInstance().getScanInProgress().get()); + assertFalse(scanManager.getScanInProgress().get()); cleanup(jobListener); } @@ -66,7 +68,7 @@ static class JobListener extends JobChangeAdapter { @Override public void scheduled(IJobChangeEvent event) { - if (event.getJob().belongsTo(ScanJob.FAMILY)) { + if (event.getJob().belongsTo(CliJob.FAMILY)) { this.jobName = event.getJob().getName(); numOfJobs.incrementAndGet(); } @@ -74,7 +76,7 @@ public void scheduled(IJobChangeEvent event) { @Override public void done(IJobChangeEvent event) { - if (event.getJob().belongsTo(ScanJob.FAMILY)) { + if (event.getJob().belongsTo(CliJob.FAMILY)) { jobExists.set(true); } } diff --git a/tests/src/main/java/com/jfrog/ide/eclipse/utils/Utils.java b/tests/src/main/java/com/jfrog/ide/eclipse/utils/Utils.java index 89a46dc..4216559 100644 --- a/tests/src/main/java/com/jfrog/ide/eclipse/utils/Utils.java +++ b/tests/src/main/java/com/jfrog/ide/eclipse/utils/Utils.java @@ -1,10 +1,8 @@ package com.jfrog.ide.eclipse.utils; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; import java.nio.file.Files; -import java.nio.file.Paths; import org.apache.commons.io.FileUtils; import org.eclipse.core.resources.IProject; @@ -18,8 +16,6 @@ import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; -import com.jfrog.ide.eclipse.scan.GradleScanManager; - /** * Utils class for testing * @author alexeiv @@ -60,16 +56,6 @@ public void run(IProgressMonitor monitor) throws CoreException { return project; } - /** - * Returns the gradle init script file location - */ - public static String getGradleInitScriptLocation(GradleScanManager gradleScanManager) throws IOException { - File currentDir = new File(System.getProperty("user.dir")); - File parentDir = currentDir.getParentFile(); - File pathToGradleScriptFile = Paths.get(parentDir.getAbsolutePath(), "bundle", "src", "main", "resources", "gradle", GradleScanManager.GRADLE_INIT_SCRIPT).toFile(); - return gradleScanManager.createGradleFile(new FileInputStream(pathToGradleScriptFile)); - } - /** * Returns the expected result content from the test resources. * @param folderName - The folder name where the file located From bb4059ee615a45edd1a6acea5cb5bfcca26b1dc2 Mon Sep 17 00:00:00 2001 From: kerenr-jfrog Date: Mon, 7 Apr 2025 11:50:52 +0300 Subject: [PATCH 05/16] added initial tests workflow + PR template --- .github/PULL_REQUEST_TEMPLATE.md | 2 ++ .github/workflows/tests.yml | 52 ++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/workflows/tests.yml diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..bef79ea --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,2 @@ +- [ ] All [tests](https://github.com/jfrog/jfrog-eclipse-plugin/actions/workflows/tests.yml) passed. If this feature is not already covered by the tests, I added new tests. +----- \ No newline at end of file diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 0000000..f35eb4e --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,52 @@ +name: Test + +on: + push: + # Triggers the workflow on labeled PRs only. + pull_request_target: + types: [labeled] + +# Ensures that only the latest commit is running for each PR at a time. +# Ignores this rule for push events. +concurrency: + group: ${{ github.event.pull_request.number || github.sha }} + cancel-in-progress: true +jobs: + test: + if: contains(github.event.pull_request.labels.*.name, 'safe to test') || github.event_name == 'push' + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macOS-latest] + node: [18, 20, 22] + + steps: + - uses: actions/checkout@v3 + with: + submodules: true + ref: ${{ github.event.pull_request.head.sha }} + - name: Unlabel 'safe to test' + uses: actions-ecosystem/action-remove-labels@v1 + if: ${{ github.event_name != 'push' }} + with: + labels: "safe to test" + # Install required tools + - name: Set up Java + uses: actions/setup-java@v3 + with: + distribution: "temurin" + java-version: "17" + - name: Setup Gradle + uses: gradle/gradle-build-action@v2 + with: + gradle-version: 7.6 + - name: Setup NodeJS + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node }} + check-latest: true + + # Run tests + - name: Tests on macOS, Linux, Windows + run: mvn clean test From d207ba7d2346c1938dfe870816afeab427e6a6c7 Mon Sep 17 00:00:00 2001 From: kerenr-jfrog Date: Mon, 7 Apr 2025 13:28:08 +0300 Subject: [PATCH 06/16] progress --- .../jfrog/ide/eclipse/scan/ScanManagerTest.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java b/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java index e403790..43237c0 100644 --- a/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java +++ b/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java @@ -1,6 +1,7 @@ package com.jfrog.ide.eclipse.scan; import java.io.IOException; +import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; @@ -11,7 +12,9 @@ import org.eclipse.core.runtime.jobs.IJobChangeEvent; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.jobs.JobChangeAdapter; +import org.eclipse.swt.widgets.Composite; +import com.jfrog.ide.common.nodes.FileTreeNode; import com.jfrog.ide.eclipse.scheduling.CliJob; import com.jfrog.ide.eclipse.utils.Utils; @@ -19,17 +22,29 @@ public class ScanManagerTest extends TestCase { private ScanManager scanManager = ScanManager.getInstance(); + private ScanCache scanCache = ScanCache.getInstance(); // TODO: generate test for scanning: Maven, Gradle and NPM projects. // TODO: add resources dir with example projects to scan + public void testScanMavenProject() throws IOException, CoreException { + String projectName = "mavenIsApplicable"; + JobListener jobListener = new JobListener(); + IProject project = Utils.createProject(projectName, "maven"); + Job.getJobManager().addJobChangeListener(jobListener); + + scanManager.startScan(null, false); + List scanResults = scanCache.getScanResults(); + + } + public void testSchedulingAJob() throws IOException, CoreException, OperationCanceledException, InterruptedException { String projectName = "gradleIsApplicable"; JobListener jobListener = new JobListener(); IProject project = Utils.createProject(projectName, "gradle"); Job.getJobManager().addJobChangeListener(jobListener); - scanManager.scanAndUpdateResults(null, null, null, null); + scanManager.scanAndUpdateResults(null, new Composite(null, 0), null, null); Job.getJobManager().join(CliJob.FAMILY, new NullProgressMonitor()); assertJobInformation(projectName, jobListener); cleanup(jobListener); From 9e6fccf185ddc76601ac566f486ad698433f9e49 Mon Sep 17 00:00:00 2001 From: kerenr-jfrog Date: Tue, 13 May 2025 18:25:18 +0300 Subject: [PATCH 07/16] added integration test --- .../ide/eclipse/scan/ScanManagerTest.java | 41 +++++++++++++++---- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java b/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java index 43237c0..83d138e 100644 --- a/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java +++ b/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java @@ -2,6 +2,7 @@ import java.io.IOException; import java.util.List; +import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; @@ -16,6 +17,7 @@ import com.jfrog.ide.common.nodes.FileTreeNode; import com.jfrog.ide.eclipse.scheduling.CliJob; +import com.jfrog.ide.eclipse.ui.issues.IssuesTree; import com.jfrog.ide.eclipse.utils.Utils; import junit.framework.TestCase; @@ -23,28 +25,41 @@ public class ScanManagerTest extends TestCase { private ScanManager scanManager = ScanManager.getInstance(); private ScanCache scanCache = ScanCache.getInstance(); + private IssuesTree issuesTree = IssuesTree.getInstance(); // TODO: generate test for scanning: Maven, Gradle and NPM projects. // TODO: add resources dir with example projects to scan - public void testScanMavenProject() throws IOException, CoreException { + public void testScanMavenProject() throws IOException, CoreException, InterruptedException { String projectName = "mavenIsApplicable"; - JobListener jobListener = new JobListener(); + CountDownLatch latch = new CountDownLatch(1); + + JobListener jobListener = new JobListener(latch); IProject project = Utils.createProject(projectName, "maven"); + Job.getJobManager().addJobChangeListener(jobListener); - scanManager.startScan(null, false); - List scanResults = scanCache.getScanResults(); + scanManager.scanAndUpdateResults(issuesTree, new Composite(null, 0), project, null); + + // wait for scanAndUpdateResults to return, then check issuesTree has results + boolean completed = latch.await(60, java.util.concurrent.TimeUnit.SECONDS); + + // Ensure the job completed + assertTrue(completed); + + // Check the issuesTree has results + assertNotNull(issuesTree.getChildren()); + assertTrue(issuesTree.getChildren().length > 0); } public void testSchedulingAJob() throws IOException, CoreException, OperationCanceledException, InterruptedException { String projectName = "gradleIsApplicable"; - JobListener jobListener = new JobListener(); + JobListener jobListener = new JobListener(null); IProject project = Utils.createProject(projectName, "gradle"); Job.getJobManager().addJobChangeListener(jobListener); - scanManager.scanAndUpdateResults(null, new Composite(null, 0), null, null); + scanManager.scanAndUpdateResults(null, null, project, null); Job.getJobManager().join(CliJob.FAMILY, new NullProgressMonitor()); assertJobInformation(projectName, jobListener); cleanup(jobListener); @@ -53,10 +68,10 @@ public void testSchedulingAJob() public void testScanFinished() throws IOException, CoreException, OperationCanceledException, InterruptedException { scanManager.getScanInProgress().set(true); String projectName = "gradleIsApplicable"; - JobListener jobListener = new JobListener(); + JobListener jobListener = new JobListener(null); Job.getJobManager().addJobChangeListener(jobListener); IProject project = Utils.createProject(projectName, "gradle"); - scanManager.scanAndUpdateResults(null, null, null, null); + scanManager.scanAndUpdateResults(null, null, project, null); Job.getJobManager().join(CliJob.FAMILY, new NullProgressMonitor()); assertJobInformation(projectName, jobListener); assertFalse(scanManager.getScanInProgress().get()); @@ -71,7 +86,7 @@ private void cleanup(JobListener jobListener) { private void assertJobInformation(String projectName, JobListener jobListener) { assertTrue(jobListener.isJobExists()); - assertEquals(projectName, jobListener.getJobName()); + assertEquals("Performing Scan: " + projectName, jobListener.getJobName()); assertEquals(1, jobListener.numOfJobs()); } @@ -80,7 +95,12 @@ static class JobListener extends JobChangeAdapter { private static AtomicBoolean jobExists = new AtomicBoolean(false); private String jobName; private static AtomicInteger numOfJobs = new AtomicInteger(); + private final CountDownLatch latch; + public JobListener(CountDownLatch latch) { + this.latch = latch; + } + @Override public void scheduled(IJobChangeEvent event) { if (event.getJob().belongsTo(CliJob.FAMILY)) { @@ -94,6 +114,9 @@ public void done(IJobChangeEvent event) { if (event.getJob().belongsTo(CliJob.FAMILY)) { jobExists.set(true); } + if (latch != null) { + latch.countDown(); + } } public boolean isJobExists() { From 1fb1b5bf0e297d203f0aea35633909fa7559cc7f Mon Sep 17 00:00:00 2001 From: kerenr-jfrog Date: Thu, 15 May 2025 15:19:52 +0300 Subject: [PATCH 08/16] tests pass locally --- tests/META-INF/MANIFEST.MF | 7 ++++--- .../jfrog/ide/eclipse/scan/ScanManagerTest.java | 15 ++++++--------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/tests/META-INF/MANIFEST.MF b/tests/META-INF/MANIFEST.MF index d3c18a4..068a9c0 100644 --- a/tests/META-INF/MANIFEST.MF +++ b/tests/META-INF/MANIFEST.MF @@ -3,10 +3,11 @@ Bundle-ManifestVersion: 2 Bundle-Name: XRay Plugin Tests Bundle-SymbolicName: com.jfrog.ide.eclipse.tests;singleton:=true Bundle-Version: 2.0.1 -nEnvironment: JavaSE-1.8 -Import-Package: org.apache.commons.io;version="2.2.0" +nEnvironment: JavaSE-17 +Import-Package: org.apache.commons.io;version="2.2.0", + org.eclipse.swt.widgets Automatic-Module-Name: org.jfrog.plugin.rcp -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-17 Bundle-ClassPath: ., lib/ide-plugins-common.jar Bundle-Vendor: JFrog diff --git a/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java b/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java index 83d138e..096fe66 100644 --- a/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java +++ b/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java @@ -1,11 +1,9 @@ package com.jfrog.ide.eclipse.scan; import java.io.IOException; -import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; - import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.NullProgressMonitor; @@ -14,22 +12,22 @@ import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.jobs.JobChangeAdapter; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.DateTime; -import com.jfrog.ide.common.nodes.FileTreeNode; import com.jfrog.ide.eclipse.scheduling.CliJob; +import com.jfrog.ide.eclipse.ui.Panel; import com.jfrog.ide.eclipse.ui.issues.IssuesTree; import com.jfrog.ide.eclipse.utils.Utils; - import junit.framework.TestCase; public class ScanManagerTest extends TestCase { private ScanManager scanManager = ScanManager.getInstance(); private ScanCache scanCache = ScanCache.getInstance(); private IssuesTree issuesTree = IssuesTree.getInstance(); +// private Composite parent = Utils.createComposite(); // TODO: generate test for scanning: Maven, Gradle and NPM projects. - // TODO: add resources dir with example projects to scan public void testScanMavenProject() throws IOException, CoreException, InterruptedException { String projectName = "mavenIsApplicable"; CountDownLatch latch = new CountDownLatch(1); @@ -39,7 +37,7 @@ public void testScanMavenProject() throws IOException, CoreException, Interrupte Job.getJobManager().addJobChangeListener(jobListener); - scanManager.scanAndUpdateResults(issuesTree, new Composite(null, 0), project, null); + scanManager.scanAndUpdateResults(issuesTree, null, project, null); // wait for scanAndUpdateResults to return, then check issuesTree has results boolean completed = latch.await(60, java.util.concurrent.TimeUnit.SECONDS); @@ -48,9 +46,8 @@ public void testScanMavenProject() throws IOException, CoreException, Interrupte assertTrue(completed); // Check the issuesTree has results - assertNotNull(issuesTree.getChildren()); - assertTrue(issuesTree.getChildren().length > 0); - +// assertTrue(scanCache.getScanResults().size() > 0); + cleanup(jobListener); } public void testSchedulingAJob() From 502bb020dbc0c20a796b2ade1dcc2f07455e0dc0 Mon Sep 17 00:00:00 2001 From: kerenr-jfrog Date: Thu, 15 May 2025 15:40:29 +0300 Subject: [PATCH 09/16] update setup --- tests/.classpath | 9 +++++++-- .../java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java | 3 --- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/tests/.classpath b/tests/.classpath index 7f457fa..aef5169 100644 --- a/tests/.classpath +++ b/tests/.classpath @@ -1,7 +1,12 @@ - + - + + + + + + diff --git a/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java b/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java index 096fe66..6d2b10b 100644 --- a/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java +++ b/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java @@ -11,11 +11,8 @@ import org.eclipse.core.runtime.jobs.IJobChangeEvent; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.jobs.JobChangeAdapter; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.DateTime; import com.jfrog.ide.eclipse.scheduling.CliJob; -import com.jfrog.ide.eclipse.ui.Panel; import com.jfrog.ide.eclipse.ui.issues.IssuesTree; import com.jfrog.ide.eclipse.utils.Utils; import junit.framework.TestCase; From 144ce5cd29b64e92d3fc1d0a94e93427b8dca018 Mon Sep 17 00:00:00 2001 From: kerenr-jfrog Date: Sun, 18 May 2025 16:48:31 +0300 Subject: [PATCH 10/16] removed setup gradle and node --- .github/workflows/tests.yml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index f35eb4e..765b6d6 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -37,15 +37,6 @@ jobs: with: distribution: "temurin" java-version: "17" - - name: Setup Gradle - uses: gradle/gradle-build-action@v2 - with: - gradle-version: 7.6 - - name: Setup NodeJS - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node }} - check-latest: true # Run tests - name: Tests on macOS, Linux, Windows From 5428dfcdd90de90701ac71d875709983f9c36dc0 Mon Sep 17 00:00:00 2001 From: kerenr-jfrog Date: Sun, 18 May 2025 16:56:47 +0300 Subject: [PATCH 11/16] run mvn clean verify --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 765b6d6..48d46b0 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -40,4 +40,4 @@ jobs: # Run tests - name: Tests on macOS, Linux, Windows - run: mvn clean test + run: mvn clean verify From ea9702c6864794dcaa83e4ef5af469d05f4b9518 Mon Sep 17 00:00:00 2001 From: kerenr-jfrog Date: Sun, 18 May 2025 17:06:59 +0300 Subject: [PATCH 12/16] update --- tests/.settings/org.eclipse.jdt.core.prefs | 11 +++++++---- .../com/jfrog/ide/eclipse/scan/ScanManagerTest.java | 4 ---- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/tests/.settings/org.eclipse.jdt.core.prefs b/tests/.settings/org.eclipse.jdt.core.prefs index 9f6ece8..d089a9b 100644 --- a/tests/.settings/org.eclipse.jdt.core.prefs +++ b/tests/.settings/org.eclipse.jdt.core.prefs @@ -1,8 +1,11 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 +org.eclipse.jdt.core.compiler.compliance=17 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.release=disabled -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=17 diff --git a/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java b/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java index 90b795b..be495d2 100644 --- a/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java +++ b/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java @@ -2,7 +2,6 @@ import java.io.IOException; import java.util.concurrent.CountDownLatch; -import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import org.eclipse.core.resources.IProject; @@ -12,18 +11,15 @@ import org.eclipse.core.runtime.jobs.IJobChangeEvent; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.jobs.JobChangeAdapter; -import org.eclipse.swt.widgets.Composite; import com.jfrog.ide.eclipse.scheduling.CliJob; import com.jfrog.ide.eclipse.ui.issues.IssuesTree; -import com.jfrog.ide.common.nodes.FileTreeNode; import com.jfrog.ide.eclipse.utils.Utils; import junit.framework.TestCase; public class ScanManagerTest extends TestCase { private ScanManager scanManager = ScanManager.getInstance(); - private ScanCache scanCache = ScanCache.getInstance(); private IssuesTree issuesTree = IssuesTree.getInstance(); // TODO: generate test for scanning: Maven, Gradle and NPM projects. From 4ffdc631107c957d5a738aa16cd655f8eaeafe90 Mon Sep 17 00:00:00 2001 From: kerenr-jfrog Date: Mon, 19 May 2025 11:02:34 +0300 Subject: [PATCH 13/16] update test workflow and ScanManagerTest --- .github/workflows/tests.yml | 7 +++-- .../ide/eclipse/scan/ScanManagerTest.java | 26 +------------------ 2 files changed, 4 insertions(+), 29 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 48d46b0..005509a 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -19,25 +19,24 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest, windows-latest, macOS-latest] - node: [18, 20, 22] steps: - uses: actions/checkout@v3 with: submodules: true ref: ${{ github.event.pull_request.head.sha }} + - name: Unlabel 'safe to test' uses: actions-ecosystem/action-remove-labels@v1 if: ${{ github.event_name != 'push' }} with: labels: "safe to test" - # Install required tools + - name: Set up Java uses: actions/setup-java@v3 with: distribution: "temurin" java-version: "17" - # Run tests - - name: Tests on macOS, Linux, Windows + - name: Run tests run: mvn clean verify diff --git a/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java b/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java index be495d2..8c79905 100644 --- a/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java +++ b/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java @@ -13,38 +13,14 @@ import org.eclipse.core.runtime.jobs.JobChangeAdapter; import com.jfrog.ide.eclipse.scheduling.CliJob; -import com.jfrog.ide.eclipse.ui.issues.IssuesTree; import com.jfrog.ide.eclipse.utils.Utils; import junit.framework.TestCase; public class ScanManagerTest extends TestCase { private ScanManager scanManager = ScanManager.getInstance(); - private IssuesTree issuesTree = IssuesTree.getInstance(); - // TODO: generate test for scanning: Maven, Gradle and NPM projects. - - public void testScanMavenProject() throws IOException, CoreException, InterruptedException { - String projectName = "mavenIsApplicable"; - CountDownLatch latch = new CountDownLatch(1); - - JobListener jobListener = new JobListener(latch); - IProject project = Utils.createProject(projectName, "maven"); - - Job.getJobManager().addJobChangeListener(jobListener); - - scanManager.scanAndUpdateResults(issuesTree, null, project, null); - - // wait for scanAndUpdateResults to return, then check issuesTree has results - boolean completed = latch.await(60, java.util.concurrent.TimeUnit.SECONDS); - - // Ensure the job completed - assertTrue(completed); - - // Check the issuesTree has results -// assertTrue(scanCache.getScanResults().size() > 0); - cleanup(jobListener); - } + // TODO: add integration test for scanning: Maven, Gradle and NPM projects. public void testSchedulingAJob() throws IOException, CoreException, OperationCanceledException, InterruptedException { From 06e35a60286f0835f09551f42aa0d0cafeaf7be5 Mon Sep 17 00:00:00 2001 From: kerenr-jfrog Date: Mon, 19 May 2025 11:59:15 +0300 Subject: [PATCH 14/16] project setup files --- tests/.classpath | 6 +----- tests/.settings/org.eclipse.jdt.core.prefs | 3 --- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/tests/.classpath b/tests/.classpath index aef5169..9e101bc 100644 --- a/tests/.classpath +++ b/tests/.classpath @@ -2,11 +2,7 @@ - - - - - + diff --git a/tests/.settings/org.eclipse.jdt.core.prefs b/tests/.settings/org.eclipse.jdt.core.prefs index d089a9b..a84e30e 100644 --- a/tests/.settings/org.eclipse.jdt.core.prefs +++ b/tests/.settings/org.eclipse.jdt.core.prefs @@ -3,9 +3,6 @@ org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 org.eclipse.jdt.core.compiler.compliance=17 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.release=enabled org.eclipse.jdt.core.compiler.source=17 From e5e7916619c5bd3dab1b67b49b140ed7daf114ec Mon Sep 17 00:00:00 2001 From: kerenr-jfrog Date: Mon, 19 May 2025 12:13:55 +0300 Subject: [PATCH 15/16] final fix --- .../com/jfrog/ide/eclipse/scan/ScanManagerTest.java | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java b/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java index 8c79905..ffbaab0 100644 --- a/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java +++ b/tests/src/main/java/com/jfrog/ide/eclipse/scan/ScanManagerTest.java @@ -25,7 +25,7 @@ public class ScanManagerTest extends TestCase { public void testSchedulingAJob() throws IOException, CoreException, OperationCanceledException, InterruptedException { String projectName = "gradleIsApplicable"; - JobListener jobListener = new JobListener(null); + JobListener jobListener = new JobListener(); IProject project = Utils.createProject(projectName, "gradle"); Job.getJobManager().addJobChangeListener(jobListener); scanManager.scanAndUpdateResults(null, null, project, null); @@ -37,7 +37,7 @@ public void testSchedulingAJob() public void testScanFinished() throws IOException, CoreException, OperationCanceledException, InterruptedException { scanManager.getScanInProgress().set(true); String projectName = "gradleIsApplicable"; - JobListener jobListener = new JobListener(null); + JobListener jobListener = new JobListener(); Job.getJobManager().addJobChangeListener(jobListener); IProject project = Utils.createProject(projectName, "gradle"); scanManager.scanAndUpdateResults(null, null, project, null); @@ -64,11 +64,6 @@ static class JobListener extends JobChangeAdapter { private static AtomicBoolean jobExists = new AtomicBoolean(false); private String jobName; private static AtomicInteger numOfJobs = new AtomicInteger(); - private final CountDownLatch latch; - - public JobListener(CountDownLatch latch) { - this.latch = latch; - } @Override public void scheduled(IJobChangeEvent event) { @@ -83,9 +78,6 @@ public void done(IJobChangeEvent event) { if (event.getJob().belongsTo(CliJob.FAMILY)) { jobExists.set(true); } - if (latch != null) { - latch.countDown(); - } } public boolean isJobExists() { From ea06566c31f7a6037d53f48af4fd22ebe0547e13 Mon Sep 17 00:00:00 2001 From: kerenr-jfrog Date: Wed, 4 Jun 2025 15:37:32 +0300 Subject: [PATCH 16/16] fix code review comments --- .github/workflows/tests.yml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 005509a..5f8f99b 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -2,9 +2,12 @@ name: Test on: push: - # Triggers the workflow on labeled PRs only. - pull_request_target: - types: [labeled] + branches: + - '**' + tags-ignore: + - '**' + pull_request: + types: [labeled] # Ensures that only the latest commit is running for each PR at a time. # Ignores this rule for push events. @@ -13,7 +16,6 @@ concurrency: cancel-in-progress: true jobs: test: - if: contains(github.event.pull_request.labels.*.name, 'safe to test') || github.event_name == 'push' runs-on: ${{ matrix.os }} strategy: fail-fast: false @@ -21,7 +23,7 @@ jobs: os: [ubuntu-latest, windows-latest, macOS-latest] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true ref: ${{ github.event.pull_request.head.sha }} @@ -33,7 +35,7 @@ jobs: labels: "safe to test" - name: Set up Java - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: "temurin" java-version: "17"