diff --git a/pom.xml b/pom.xml index 2f88a1a..08b6d57 100644 --- a/pom.xml +++ b/pom.xml @@ -165,6 +165,16 @@ junit-jupiter test + + org.mockito + mockito-core + test + + + org.mockito + mockito-junit-jupiter + test + diff --git a/src/test/java/de/rub/nds/crawler/core/ControllerTest.java b/src/test/java/de/rub/nds/crawler/core/ControllerTest.java index 16405e4..5edef61 100644 --- a/src/test/java/de/rub/nds/crawler/core/ControllerTest.java +++ b/src/test/java/de/rub/nds/crawler/core/ControllerTest.java @@ -8,6 +8,8 @@ */ package de.rub.nds.crawler.core; +import static org.mockito.Mockito.*; + import de.rub.nds.crawler.config.ControllerCommandConfig; import de.rub.nds.crawler.data.ScanJobDescription; import de.rub.nds.crawler.dummy.DummyControllerCommandConfig; @@ -17,104 +19,155 @@ import java.io.File; import java.io.FileWriter; import java.io.IOException; +import java.net.InetAddress; import java.util.Arrays; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import org.mockito.MockedStatic; class ControllerTest { @Test void submitting() throws IOException, InterruptedException { - var persistenceProvider = new DummyPersistenceProvider(); - var orchestrationProvider = new DummyOrchestrationProvider(); - ControllerCommandConfig config = new DummyControllerCommandConfig(); - - File hostlist = File.createTempFile("hosts", "txt"); - hostlist.deleteOnExit(); - FileWriter writer = new FileWriter(hostlist); - writer.write("example.com\nexample.org:8000"); - writer.flush(); - writer.close(); - - config.setHostFile(hostlist.getAbsolutePath()); - - Controller controller = new Controller(config, orchestrationProvider, persistenceProvider); - controller.start(); - - Thread.sleep(1000); - - Assertions.assertEquals(2, orchestrationProvider.jobQueue.size()); - Assertions.assertEquals(0, orchestrationProvider.unackedJobs.size()); + try (MockedStatic mockedInetAddress = mockStatic(InetAddress.class)) { + InetAddress mockExampleCom = mock(InetAddress.class); + when(mockExampleCom.getHostAddress()).thenReturn("192.0.2.1"); + mockedInetAddress + .when(() -> InetAddress.getByName("example.com")) + .thenReturn(mockExampleCom); + + InetAddress mockExampleOrg = mock(InetAddress.class); + when(mockExampleOrg.getHostAddress()).thenReturn("192.0.2.2"); + mockedInetAddress + .when(() -> InetAddress.getByName("example.org")) + .thenReturn(mockExampleOrg); + + var persistenceProvider = new DummyPersistenceProvider(); + var orchestrationProvider = new DummyOrchestrationProvider(); + ControllerCommandConfig config = new DummyControllerCommandConfig(); + + File hostlist = File.createTempFile("hosts", "txt"); + hostlist.deleteOnExit(); + FileWriter writer = new FileWriter(hostlist); + writer.write("example.com\nexample.org:8000"); + writer.flush(); + writer.close(); + + config.setHostFile(hostlist.getAbsolutePath()); + + Controller controller = + new Controller(config, orchestrationProvider, persistenceProvider); + controller.start(); + + Thread.sleep(1000); + + Assertions.assertEquals(2, orchestrationProvider.jobQueue.size()); + Assertions.assertEquals(0, orchestrationProvider.unackedJobs.size()); + + mockedInetAddress.verify(() -> InetAddress.getByName("example.com")); + mockedInetAddress.verify(() -> InetAddress.getByName("example.org")); + mockedInetAddress.verifyNoMoreInteractions(); + } } @Test void submittingWithExcludedProbes() throws IOException, InterruptedException { - var persistenceProvider = new DummyPersistenceProvider(); - var orchestrationProvider = new DummyOrchestrationProvider(); - ControllerCommandConfig config = new DummyControllerCommandConfig(); + try (MockedStatic mockedInetAddress = mockStatic(InetAddress.class)) { + InetAddress mockExampleCom = mock(InetAddress.class); + when(mockExampleCom.getHostAddress()).thenReturn("192.0.2.1"); + mockedInetAddress + .when(() -> InetAddress.getByName("example.com")) + .thenReturn(mockExampleCom); + + InetAddress mockExampleOrg = mock(InetAddress.class); + when(mockExampleOrg.getHostAddress()).thenReturn("192.0.2.2"); + mockedInetAddress + .when(() -> InetAddress.getByName("example.org")) + .thenReturn(mockExampleOrg); + + var persistenceProvider = new DummyPersistenceProvider(); + var orchestrationProvider = new DummyOrchestrationProvider(); + ControllerCommandConfig config = new DummyControllerCommandConfig(); + + File hostlist = File.createTempFile("hosts", "txt"); + hostlist.deleteOnExit(); + FileWriter writer = new FileWriter(hostlist); + writer.write("example.com\nexample.org:443"); + writer.flush(); + writer.close(); + + config.setHostFile(hostlist.getAbsolutePath()); + + List excludedProbes = + Arrays.asList(new TestProbeType("probe1"), new TestProbeType("probe2")); + config.setExcludedProbes(excludedProbes); + + Controller controller = + new Controller(config, orchestrationProvider, persistenceProvider); + controller.start(); + + Thread.sleep(1000); + + Assertions.assertEquals(2, orchestrationProvider.jobQueue.size()); + Assertions.assertEquals(0, orchestrationProvider.unackedJobs.size()); + + for (ScanJobDescription job : orchestrationProvider.jobQueue) { + List jobExcludedProbes = + job.getBulkScanInfo().getScanConfig().getExcludedProbes(); + Assertions.assertNotNull(jobExcludedProbes); + Assertions.assertEquals(2, jobExcludedProbes.size()); + Assertions.assertEquals("probe1", jobExcludedProbes.get(0).getName()); + Assertions.assertEquals("probe2", jobExcludedProbes.get(1).getName()); + } + mockedInetAddress.verify(() -> InetAddress.getByName("example.com")); + mockedInetAddress.verify(() -> InetAddress.getByName("example.org")); + mockedInetAddress.verifyNoMoreInteractions(); + } + } - File hostlist = File.createTempFile("hosts", "txt"); - hostlist.deleteOnExit(); - FileWriter writer = new FileWriter(hostlist); - writer.write("example.com\nexample.org:443"); - writer.flush(); - writer.close(); + @Test + void submittingWithoutExcludedProbes() throws IOException, InterruptedException { + try (MockedStatic mockedInetAddress = mockStatic(InetAddress.class)) { + InetAddress mockExampleCom = mock(InetAddress.class); + when(mockExampleCom.getHostAddress()).thenReturn("192.0.2.1"); + mockedInetAddress + .when(() -> InetAddress.getByName("example.com")) + .thenReturn(mockExampleCom); - config.setHostFile(hostlist.getAbsolutePath()); + var persistenceProvider = new DummyPersistenceProvider(); + var orchestrationProvider = new DummyOrchestrationProvider(); + ControllerCommandConfig config = new DummyControllerCommandConfig(); - List excludedProbes = - Arrays.asList(new TestProbeType("probe1"), new TestProbeType("probe2")); - config.setExcludedProbes(excludedProbes); + File hostlist = File.createTempFile("hosts", "txt"); + hostlist.deleteOnExit(); + FileWriter writer = new FileWriter(hostlist); + writer.write("example.com"); + writer.flush(); + writer.close(); - Controller controller = new Controller(config, orchestrationProvider, persistenceProvider); - controller.start(); + config.setHostFile(hostlist.getAbsolutePath()); - Thread.sleep(1000); + Controller controller = + new Controller(config, orchestrationProvider, persistenceProvider); + controller.start(); - Assertions.assertEquals(2, orchestrationProvider.jobQueue.size()); - Assertions.assertEquals(0, orchestrationProvider.unackedJobs.size()); + Thread.sleep(1000); - for (ScanJobDescription job : orchestrationProvider.jobQueue) { + Assertions.assertEquals(1, orchestrationProvider.jobQueue.size()); + + ScanJobDescription job = orchestrationProvider.jobQueue.peek(); List jobExcludedProbes = job.getBulkScanInfo().getScanConfig().getExcludedProbes(); - Assertions.assertNotNull(jobExcludedProbes); - Assertions.assertEquals(2, jobExcludedProbes.size()); - Assertions.assertEquals("probe1", jobExcludedProbes.get(0).getName()); - Assertions.assertEquals("probe2", jobExcludedProbes.get(1).getName()); - } - } - - @Test - void submittingWithoutExcludedProbes() throws IOException, InterruptedException { - var persistenceProvider = new DummyPersistenceProvider(); - var orchestrationProvider = new DummyOrchestrationProvider(); - ControllerCommandConfig config = new DummyControllerCommandConfig(); - - File hostlist = File.createTempFile("hosts", "txt"); - hostlist.deleteOnExit(); - FileWriter writer = new FileWriter(hostlist); - writer.write("example.com"); - writer.flush(); - writer.close(); - - config.setHostFile(hostlist.getAbsolutePath()); - - Controller controller = new Controller(config, orchestrationProvider, persistenceProvider); - controller.start(); - - Thread.sleep(1000); - - Assertions.assertEquals(1, orchestrationProvider.jobQueue.size()); - - ScanJobDescription job = orchestrationProvider.jobQueue.peek(); - List jobExcludedProbes = - job.getBulkScanInfo().getScanConfig().getExcludedProbes(); - if (jobExcludedProbes == null) { - Assertions.assertNull(jobExcludedProbes, "Expected excluded probes to be null"); - } else { - Assertions.assertTrue( - jobExcludedProbes.isEmpty(), "Expected excluded probes to be empty"); + if (jobExcludedProbes == null) { + Assertions.assertNull(jobExcludedProbes, "Expected excluded probes to be null"); + } else { + Assertions.assertTrue( + jobExcludedProbes.isEmpty(), "Expected excluded probes to be empty"); + } + mockedInetAddress.verify(() -> InetAddress.getByName("example.com")); + mockedInetAddress.verify(() -> InetAddress.getByName("example.org")); + mockedInetAddress.verifyNoMoreInteractions(); } } }