package dk.kb.yggdrasil; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verifyNoMoreInteractions; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; import dk.kb.yggdrasil.bitmag.Bitrepository; import dk.kb.yggdrasil.config.Config; import dk.kb.yggdrasil.config.YggdrasilConfig; import dk.kb.yggdrasil.db.StateDatabase; import dk.kb.yggdrasil.exceptions.YggdrasilException; import dk.kb.yggdrasil.messaging.MQ; import dk.kb.yggdrasil.utils.TravisUtils; /** * Tests for {@link dk.kb.yggdrasil.Main } */ @RunWith(JUnit4.class) public class MainTest { File goodConfigDir = new File("src/test/resources/config"); protected static File tmpDir = new File("temporarydir"); @BeforeClass public static void beforeClass() throws YggdrasilException, IOException { System.setProperty("dk.kb.yggdrasil.runningmode", "test"); if(tmpDir.isDirectory()) { FileUtils.cleanDirectory(tmpDir); } } @Test public void testMainMethodWithGoodConfigDir() throws Exception { if (TravisUtils.runningOnTravis()) { return; } System.setProperty(Config.CONFIGURATION_DIRECTORY_PROPERTY, goodConfigDir.getAbsolutePath()); YggdrasilConfig c = new YggdrasilConfig(new File(goodConfigDir, Config.YGGDRASIL_CONF_FILENAME)); FileUtils.deleteDirectory(c.getDatabaseDir()); Main.main(new String[]{"test"}); } @Test(expected = YggdrasilException.class) public void testMainMethodWithBadConfigDir() throws Exception { String userHome = System.getProperty("user.home"); File badConfigDir = new File(userHome + "/configconfig"); Assert.assertFalse(badConfigDir.exists()); System.setProperty(Config.CONFIGURATION_DIRECTORY_PROPERTY, badConfigDir.getAbsolutePath()); Main.main(new String[]{}); } @Test public void testRunningWorkflow() throws Exception { StateDatabase stateDatabase = mock(StateDatabase.class); Bitrepository bitrepository = mock(Bitrepository.class); HttpCommunication httpCommunication = mock(HttpCommunication.class); Main m = new Main(stateDatabase, bitrepository); System.setProperty(Config.CONFIGURATION_DIRECTORY_PROPERTY, goodConfigDir.getAbsolutePath()); Config config = new Config(); MQ mq = new MQ(config.getMqSettings()); mq.publishOnQueue(config.getMqSettings().getPreservationDestination(), "Please terminate Yggdrasil".getBytes(), MQ.SHUTDOWN_MESSAGE_TYPE); mq.close(); m.runWorkflow(config, httpCommunication); verifyNoMoreInteractions(bitrepository); verifyNoMoreInteractions(stateDatabase); verifyNoMoreInteractions(httpCommunication); } }