From 1945a6d9d1fba6f9225e3d739a4233ccfe6a8654 Mon Sep 17 00:00:00 2001 From: Yash Pal <112522911+yashpal2104@users.noreply.github.com> Date: Sat, 28 Dec 2024 22:49:42 +0530 Subject: [PATCH 1/2] Add test for FolderBasedJobInclusionStrategy class (#422) * Add test for FolderBasedJobInclusionStrategy class * Changed FreestyleProject from project to j * Changed FreestyleProject from project to j * Assert decision logger contents Use ClassRule to only initialize the JenkinsRule once for all tests in the class. Makes the tests faster on Linux and much faster on Windows. Remove unused variable declarations Split the BeforeClass tasks to separate methods for clarity. --------- Co-authored-by: Mark Waite --- .../FolderBasedJobInclusionStrategyTest.java | 120 ++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 src/test/java/jenkins/advancedqueue/jobinclusion/strategy/FolderBasedJobInclusionStrategyTest.java diff --git a/src/test/java/jenkins/advancedqueue/jobinclusion/strategy/FolderBasedJobInclusionStrategyTest.java b/src/test/java/jenkins/advancedqueue/jobinclusion/strategy/FolderBasedJobInclusionStrategyTest.java new file mode 100644 index 00000000..b4c9458b --- /dev/null +++ b/src/test/java/jenkins/advancedqueue/jobinclusion/strategy/FolderBasedJobInclusionStrategyTest.java @@ -0,0 +1,120 @@ +package jenkins.advancedqueue.jobinclusion.strategy; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.empty; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import com.cloudbees.hudson.plugins.folder.Folder; +import hudson.model.FreeStyleProject; +import hudson.util.ListBoxModel; +import java.util.ArrayList; +import java.util.List; +import jenkins.advancedqueue.DecisionLogger; +import org.junit.After; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.ClassRule; +import org.junit.Test; +import org.jvnet.hudson.test.JenkinsRule; + +public class FolderBasedJobInclusionStrategyTest { + + @ClassRule + public static JenkinsRule j = new JenkinsRule(); + + private static FolderBasedJobInclusionStrategy strategy; + private static DecisionLogger decisionLogger; + private static List loggedMessages; + + @BeforeClass + public static void createStrategy() throws Exception { + strategy = new FolderBasedJobInclusionStrategy("testFolder"); + } + + @BeforeClass + public static void createDecisionLogger() throws Exception { + decisionLogger = new DecisionLogger() { + @Override + public DecisionLogger addDecisionLog(int indent, String log) { + loggedMessages.add(log); + return this; + } + }; + } + + @Before + public void clearLoggedMessages() throws Exception { + loggedMessages = new ArrayList<>(); + } + + @After + public void checkLoggedMessages() throws Exception { + assertThat(loggedMessages, is(empty())); + } + + @Test + public void getDescriptor() { + assertNotNull(strategy.getDescriptor()); + assertTrue( + strategy.getDescriptor() + instanceof FolderBasedJobInclusionStrategy.FolderBasedJobInclusionStrategyDescriptor); + } + + @Test + public void all() { + assertFalse(FolderBasedJobInclusionStrategy.all().isEmpty()); + } + + @Test + public void getFolderName() { + assertEquals("testFolder", strategy.getFolderName()); + } + + @Test + public void contains() throws Exception { + FreeStyleProject project = this.j.createFreeStyleProject("testFolder_jobName"); + + assertTrue(strategy.contains(decisionLogger, project)); + } + + @Test + public void containsReturnsFalseForJobNotInFolder() throws Exception { + FreeStyleProject project = j.createFreeStyleProject("otherFolder_jobName"); + + assertFalse(strategy.contains(decisionLogger, project)); + } + + @Test + public void containsReturnsTrueForJobInSubFolder() throws Exception { + FreeStyleProject project = j.createFreeStyleProject("testFolder_subFolder_jobName"); + + assertTrue(strategy.contains(decisionLogger, project)); + } + + @Test + public void getListFolderItemsReturnsNonNullListBoxModel() { + FolderBasedJobInclusionStrategy.FolderBasedJobInclusionStrategyDescriptor descriptor = + new FolderBasedJobInclusionStrategy.FolderBasedJobInclusionStrategyDescriptor(); + ListBoxModel items = descriptor.getListFolderItems(); + assertNotNull(items); + } + + @Test + public void getListFolderItemsReturnsCorrectFolderNames() throws Exception { + + j.jenkins.createProject(Folder.class, "folder1"); + j.jenkins.createProject(Folder.class, "folder2"); + + FolderBasedJobInclusionStrategy.FolderBasedJobInclusionStrategyDescriptor descriptor = + new FolderBasedJobInclusionStrategy.FolderBasedJobInclusionStrategyDescriptor(); + ListBoxModel items = descriptor.getListFolderItems(); + + assertEquals(2, items.size()); + assertEquals("folder1", items.get(0).name); + assertEquals("folder2", items.get(1).name); + } +} From 31acb9d60032596ee75a983defb809932b60983b Mon Sep 17 00:00:00 2001 From: Mark Waite Date: Sat, 28 Dec 2024 11:58:25 -0700 Subject: [PATCH 2/2] Do not require TestRunListener.init() before use (#425) New tests do not need to initialize the test run listener --- .../jenkins/advancedqueue/testutil/TestRunListener.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/test/java/jenkins/advancedqueue/testutil/TestRunListener.java b/src/test/java/jenkins/advancedqueue/testutil/TestRunListener.java index d3dfeea7..b0fc384d 100644 --- a/src/test/java/jenkins/advancedqueue/testutil/TestRunListener.java +++ b/src/test/java/jenkins/advancedqueue/testutil/TestRunListener.java @@ -22,7 +22,7 @@ public class TestRunListener extends RunListener { public static void init(ExpectedItem... expected) { TestRunListener.expected = expected; - actual = new ArrayList(expected.length); + actual = new ArrayList<>(expected.length); } @Override @@ -30,6 +30,11 @@ public void onStarted(Run r, TaskListener listener) { LOGGER.info("ON STARTED: " + r.getParent().getName()); try { ItemInfo item = QueueItemCache.get().getItem(r.getParent().getName()); + if (actual == null) { + // Init was not called, initialize + TestRunListener.expected = null; + actual = new ArrayList<>(); + } actual.add(item); } catch (Throwable e) { LOGGER.log(Level.INFO, "###########", e);