package com.constellio.app.services.extensions.plugins.utils; import static com.constellio.app.services.extensions.plugins.JSPFPluginServices.NEW_JAR_EXTENSION; import static org.assertj.core.api.Assertions.assertThat; import java.io.File; import java.io.IOException; import java.util.Arrays; import java.util.List; import java.util.Set; import org.apache.commons.io.FileUtils; import org.junit.Before; import org.junit.Test; import com.constellio.sdk.tests.ConstellioTest; public class PluginManagementUtilsAcceptanceTest extends ConstellioTest { File pluginsFolder, libFolder1, libFolder2, pluginsToMove1FileInexisting, pluginsToMove2FileWithPlugins; File plugin1, plugin2, plugin2Updated, newPlugin4, notAPlugin; private PluginManagementUtils utils1WithoutPluginsToMoveFile, utils2WithPluginsToMoveFile; private List<String> pluginsList; @Before public void setup() throws IOException { addDummyPlugins(); libFolder1 = newTempFolder(); libFolder2 = newTempFolder(); pluginsToMove1FileInexisting = new File(newTempFolder(), "inexistingFile"); pluginsToMove2FileWithPlugins = newTempFileWithContent("existingFile", "plugin1\n"); utils1WithoutPluginsToMoveFile = new PluginManagementUtils(pluginsFolder, libFolder1, pluginsToMove1FileInexisting); utils2WithPluginsToMoveFile = new PluginManagementUtils(pluginsFolder, libFolder2, pluginsToMove2FileWithPlugins); } private void addDummyPlugins() throws IOException { pluginsFolder = newTempFolder(); plugin1 = new File(pluginsFolder, "plugin1.jar"); plugin2 = new File(pluginsFolder, "PLUGIN2.jar"); plugin2Updated = new File(pluginsFolder, "PLUGIN2." + NEW_JAR_EXTENSION); newPlugin4 = new File(pluginsFolder, "plugin4." + NEW_JAR_EXTENSION); notAPlugin = new File(pluginsFolder, "plugin3.zip"); FileUtils.write(plugin1, "A plugin"); FileUtils.write(plugin2, "Another plugin"); FileUtils.write(plugin2, "Another plugin updated"); FileUtils.write(newPlugin4, "plugin 4"); FileUtils.write(notAPlugin, "I am not a plugin - Mouhahahaha"); pluginsList = Arrays.asList("plugin1", "PLUGIN2", "plugin4"); } @Test public void whenAddPluginToMoveThenOk() throws Exception { utils2WithPluginsToMoveFile.addPluginToMove("plugin2"); assertThat(FileUtils.readLines(pluginsToMove2FileWithPlugins)).containsOnly("plugin1", "plugin2"); utils1WithoutPluginsToMoveFile.addPluginToMove("plugin2"); assertThat(FileUtils.readLines(pluginsToMove1FileInexisting)).containsOnly("plugin1", "PLUGIN2", "plugin4"); } @Test public void whenFillFileWithAllPluginsThenOk() throws Exception { utils2WithPluginsToMoveFile.fillFileWithAllPlugins(); assertThat(FileUtils.readLines(pluginsToMove2FileWithPlugins)).containsOnly("plugin1", "PLUGIN2", "plugin4"); utils1WithoutPluginsToMoveFile.fillFileWithAllPlugins(); assertThat(FileUtils.readLines(pluginsToMove1FileInexisting)).containsOnly("plugin1", "PLUGIN2", "plugin4"); } @Test public void whenMovePluginsAndSetNoPluginToMoveThenOk() throws Exception { utils1WithoutPluginsToMoveFile.movePlugins(pluginsList); assertThat(FileUtils.readLines(pluginsToMove1FileInexisting)).isEmpty(); File plugin1FromLib1 = new File(libFolder1, "plugin1.jar"); assertThat(plugin1FromLib1).hasContent("A plugin"); File plugin2FromLib1 = new File(libFolder1, "PLUGIN2.jar"); assertThat(plugin2FromLib1).hasContent("Another plugin updated"); File plugin4FromLib1 = new File(libFolder1, "plugin4.jar"); assertThat(plugin4FromLib1).hasContent("plugin 4"); assertThat(FileUtils.listFiles(libFolder1, new String[] { "jar" }, false)).containsOnly( plugin1FromLib1, plugin2FromLib1, plugin4FromLib1 ); utils2WithPluginsToMoveFile.movePlugins(pluginsList); assertThat(FileUtils.readLines(pluginsToMove2FileWithPlugins)).isEmpty(); File plugin1FromLib2 = new File(libFolder2, "plugin1.jar"); assertThat(plugin1FromLib2).hasContent("A plugin"); File plugin2FromLib2 = new File(libFolder2, "PLUGIN2.jar"); assertThat(plugin2FromLib2).hasContent("Another plugin updated"); File plugin4FromLib2 = new File(libFolder2, "plugin4.jar"); assertThat(plugin4FromLib2).hasContent("plugin 4"); assertThat(FileUtils.listFiles(libFolder2, new String[] { "jar" }, false)).containsOnly( plugin1FromLib2, plugin2FromLib2, plugin4FromLib2 ); } @Test public void whenCopyPluginFromPluginsFolderToLibFolderThenOk() throws Exception { utils1WithoutPluginsToMoveFile.copyPluginFromPluginsFolderToLibFolder("PLUGIN2"); assertThat(pluginsToMove1FileInexisting.exists()).isFalse(); File plugin2FromLib1 = new File(libFolder1, "PLUGIN2.jar"); assertThat(plugin2FromLib1).hasContent("Another plugin updated"); assertThat(FileUtils.listFiles(libFolder1, new String[] { "jar" }, false)).containsOnly(plugin2FromLib1); utils2WithPluginsToMoveFile.copyPluginFromPluginsFolderToLibFolder("PLUGIN2"); assertThat(FileUtils.readLines(pluginsToMove2FileWithPlugins)).containsOnly("plugin1"); File plugin2FromLib2 = new File(libFolder2, "PLUGIN2.jar"); assertThat(plugin2FromLib2).hasContent("Another plugin updated"); assertThat(FileUtils.listFiles(libFolder2, new String[] { "jar" }, false)).containsOnly(plugin2FromLib2); } @Test public void whenSetNoPluginToUpdateThenOk() throws Exception { utils1WithoutPluginsToMoveFile.setNoPluginToMove(); assertThat(FileUtils.readLines(pluginsToMove1FileInexisting)).isEmpty(); utils2WithPluginsToMoveFile.setNoPluginToMove(); assertThat(FileUtils.readLines(pluginsToMove2FileWithPlugins)).isEmpty(); } @Test public void whenGetPluginsToUpdateThenOk() throws Exception { Set<String> pluginsToUpdate = utils1WithoutPluginsToMoveFile.getPluginsToMove(); assertThat(pluginsToUpdate).containsAll(pluginsList); Set<String> pluginsToUpdate2 = utils2WithPluginsToMoveFile.getPluginsToMove(); assertThat(pluginsToUpdate2).containsOnly("plugin1"); } @Test public void whenMarkPluginsToInstallThenMarked() throws Exception { File tempFolder = newTempFolder(); File otherTempFolder = newTempFolder(); PluginManagementUtils.markNewPluginsInNewWar(tempFolder, "plugin1.jar"); PluginManagementUtils.markNewPluginsInNewWar(tempFolder, "plugin2.jar"); PluginManagementUtils.markNewPluginsInNewWar(otherTempFolder, "plugin3.jar"); assertThat(PluginManagementUtils.getNewPluginsInNewWar(tempFolder)).containsOnly("plugin1.jar", "plugin2.jar"); PluginManagementUtils.clearNewPluginsInNewWar(tempFolder); assertThat(PluginManagementUtils.getNewPluginsInNewWar(tempFolder)).isEmpty(); } }