/** * This Source Code Form is subject to the terms of the Mozilla Public License, * v. 2.0. If a copy of the MPL was not distributed with this file, You can * obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under * the terms of the Healthcare Disclaimer located at http://openmrs.org/license. * * Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS * graphic logo is a trademark of OpenMRS Inc. */ package org.openmrs.module; import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.empty; import static org.junit.Assert.assertThat; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.List; import java.util.Properties; import java.util.jar.JarFile; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.junit.After; import org.junit.Assert; import org.junit.Test; import org.openmrs.GlobalProperty; import org.openmrs.api.context.Context; import org.openmrs.test.BaseContextSensitiveTest; import org.openmrs.util.OpenmrsConstants; /** * Tests methods on the {@link org.openmrs.module.ModuleUtil} class */ public class ModuleUtilTest extends BaseContextSensitiveTest { Properties initialRuntimeProperties; /** * @see org.openmrs.module.ModuleUtil#checkMandatoryModulesStarted() */ @Test(expected = MandatoryModuleException.class) public void checkMandatoryModulesStarted_shouldThrowModuleExceptionIfAMandatoryModuleIsNotStarted() { //given assertThat(ModuleFactory.getStartedModules(), empty()); GlobalProperty gp1 = new GlobalProperty("module1.mandatory", "true"); Context.getAdministrationService().saveGlobalProperty(gp1); //when ModuleUtil.checkMandatoryModulesStarted(); //then exception } @After public void revertRuntimeProperties() { if (initialRuntimeProperties != null) { Context.setRuntimeProperties(initialRuntimeProperties); initialRuntimeProperties = null; } } /** * @see org.openmrs.module.ModuleUtil#getMandatoryModules() */ @Test public void getMandatoryModules_shouldReturnMandatoryModuleIds() { //given GlobalProperty gp1 = new GlobalProperty("firstmodule.mandatory", "true"); GlobalProperty gp2 = new GlobalProperty("secondmodule.mandatory", "false"); Context.getAdministrationService().saveGlobalProperty(gp1); Context.getAdministrationService().saveGlobalProperty(gp2); //when //then assertThat(ModuleUtil.getMandatoryModules(), contains("firstmodule")); } /** * @see ModuleUtil#isOpenmrsVersionInVersions(String[]) */ @Test public void isOpenmrsVersionInVersions_shouldReturnFalseWhenVersionsIsNull() { Assert.assertFalse(ModuleUtil.isOpenmrsVersionInVersions((String[]) null)); } /** * @see ModuleUtil#isOpenmrsVersionInVersions(String[]) */ @Test public void isOpenmrsVersionInVersions_shouldReturnFalseWhenVersionsIsEmpty() { Assert.assertFalse(ModuleUtil.isOpenmrsVersionInVersions( new String[] {})); } /** * @throws SecurityException * @throws NoSuchFieldException * @see ModuleUtil#isOpenmrsVersionInVersions(String[]) */ @Test public void isOpenmrsVersionInVersions_shouldReturnTrueIfCurrentOpenmrsVersionMatchesOneElementInVersions() throws Exception { Field versionField = OpenmrsConstants.class.getDeclaredField("OPENMRS_VERSION_SHORT"); Field modifiersField = Field.class.getDeclaredField("modifiers"); modifiersField.setAccessible(true); modifiersField.setInt(versionField, versionField.getModifiers() & ~Modifier.FINAL); final String currentVersion = "1.9.8"; versionField.set(null, currentVersion); Assert.assertTrue(ModuleUtil.isOpenmrsVersionInVersions( currentVersion, "1.10.*")); } /** * @see ModuleUtil#isOpenmrsVersionInVersions(String[]) */ @Test public void isOpenmrsVersionInVersions_shouldReturnFalseIfCurrentOpenmrsVersionDoesNotMatchAnyElementInVersions() throws Exception { Field versionField = OpenmrsConstants.class.getDeclaredField("OPENMRS_VERSION_SHORT"); Field modifiersField = Field.class.getDeclaredField("modifiers"); modifiersField.setAccessible(true); modifiersField.setInt(versionField, versionField.getModifiers() & ~Modifier.FINAL); versionField.set(null, "1.9.8"); Assert.assertFalse(ModuleUtil.isOpenmrsVersionInVersions( new String[] { "1.11.*", "2.1.0" })); } /** * @see org.openmrs.module.ModuleUtil#matchRequiredVersions(String,String) */ @Test public void matchRequiredVersions_shouldAllowRangedRequiredVersion() { String openmrsVersion = "1.4.3"; String requiredOpenmrsVersion = "1.2.3 - 1.4.4"; Assert.assertTrue(ModuleUtil.matchRequiredVersions(openmrsVersion, requiredOpenmrsVersion)); } /** * @see org.openmrs.module.ModuleUtil#matchRequiredVersions(String,String) */ @Test public void matchRequiredVersions_shouldAllowRangedRequiredVersionWithWildCard() { String openmrsVersion = "1.4.3"; String requiredOpenmrsVersion = "1.2.* - 1.4.*"; Assert.assertTrue(ModuleUtil.matchRequiredVersions(openmrsVersion, requiredOpenmrsVersion)); } /** * @see org.openmrs.module.ModuleUtil#matchRequiredVersions(String,String) */ @Test public void matchRequiredVersions_shouldAllowRangedRequiredVersionWithWildCardOnOneEnd() { String openmrsVersion = "1.4.3"; String requiredOpenmrsVersion = "1.2.3 - 1.4.*"; Assert.assertTrue(ModuleUtil.matchRequiredVersions(openmrsVersion, requiredOpenmrsVersion)); requiredOpenmrsVersion = "1.4.* - 1.4.5"; Assert.assertTrue(ModuleUtil.matchRequiredVersions(openmrsVersion, requiredOpenmrsVersion)); } /** * @see org.openmrs.module.ModuleUtil#matchRequiredVersions(String,String) */ @Test public void matchRequiredVersions_shouldAllowSingleEntryForRequiredVersion() { String openmrsVersion = "1.4.3"; String requiredOpenmrsVersion = "1.4.2"; Assert.assertTrue(ModuleUtil.matchRequiredVersions(openmrsVersion, requiredOpenmrsVersion)); } /** * @see org.openmrs.module.ModuleUtil#matchRequiredVersions(String,String) */ @Test public void matchRequiredVersions_shouldAllowRequiredVersionWithWildCard() { String openmrsVersion = "1.4.3"; String requiredOpenmrsVersion = "1.4.*"; Assert.assertTrue(ModuleUtil.matchRequiredVersions(openmrsVersion, requiredOpenmrsVersion)); } /** * @see org.openmrs.module.ModuleUtil#matchRequiredVersions(String,String) */ @Test public void matchRequiredVersions_shouldAllowNonNumericCharacterRequiredVersion() { String openmrsVersion = "1.4.3"; String requiredOpenmrsVersion = "1.4.3a"; Assert.assertTrue(ModuleUtil.matchRequiredVersions(openmrsVersion, requiredOpenmrsVersion)); } /** * @see org.openmrs.module.ModuleUtil#matchRequiredVersions(String,String) */ @Test public void matchRequiredVersions_shouldAllowRangedNonNumericCharacterRequiredVersion() { String openmrsVersion = "1.4.3"; String requiredOpenmrsVersion = "1.4.1a - 1.4.3a"; Assert.assertTrue(ModuleUtil.matchRequiredVersions(openmrsVersion, requiredOpenmrsVersion)); } /** * @see org.openmrs.module.ModuleUtil#matchRequiredVersions(String,String) */ @Test public void matchRequiredVersions_shouldAllowRangedNonNumericCharacterWithWildCard() { String openmrsVersion = "1.4.3"; String requiredOpenmrsVersion = "1.3.*a - 1.4.*a"; Assert.assertTrue(ModuleUtil.matchRequiredVersions(openmrsVersion, requiredOpenmrsVersion)); } /** * @see org.openmrs.module.ModuleUtil#matchRequiredVersions(String,String) */ @Test public void matchRequiredVersions_shouldAllowRangedNonNumericCharacterWithWildCardOnOneEnd() { String openmrsVersion = "1.4.3"; String requiredOpenmrsVersion = "1.2.3 - 1.4.*a"; Assert.assertTrue(ModuleUtil.matchRequiredVersions(openmrsVersion, requiredOpenmrsVersion)); requiredOpenmrsVersion = "1.4.*a - 1.4.5a"; Assert.assertTrue(ModuleUtil.matchRequiredVersions(openmrsVersion, requiredOpenmrsVersion)); } /** * @see org.openmrs.module.ModuleUtil#matchRequiredVersions(String,String) */ @Test public void matchRequiredVersions_shouldReturnFalseWhenOpenmrsVersionBeyondWildCardRange() { String openmrsVersion = "1.4.3"; String requiredOpenmrsVersion = "1.3.*"; Assert.assertFalse(ModuleUtil.matchRequiredVersions(openmrsVersion, requiredOpenmrsVersion)); requiredOpenmrsVersion = "1.5.*"; Assert.assertFalse(ModuleUtil.matchRequiredVersions(openmrsVersion, requiredOpenmrsVersion)); } /** * @see org.openmrs.module.ModuleUtil#matchRequiredVersions(String,String) */ @Test public void matchRequiredVersions_shouldReturnFalseWhenRequiredVersionBeyondOpenmrsVersion() { String openmrsVersion = "1.4.3"; String requiredOpenmrsVersion = "1.5.*"; Assert.assertFalse(ModuleUtil.matchRequiredVersions(openmrsVersion, requiredOpenmrsVersion)); } /** * @see org.openmrs.module.ModuleUtil#matchRequiredVersions(String,String) */ @Test public void matchRequiredVersions_shouldReturnFalseWhenRequiredVersionWithWildCardBeyondOpenmrsVersion() { String openmrsVersion = "1.4.3"; String requiredOpenmrsVersion = "1.5.* - 1.6.*"; Assert.assertFalse(ModuleUtil.matchRequiredVersions(openmrsVersion, requiredOpenmrsVersion)); } /** * @see org.openmrs.module.ModuleUtil#matchRequiredVersions(String,String) */ @Test public void matchRequiredVersions_shouldReturnFalseWhenRequiredVersionWithWildCardOnOneEndBeyondOpenmrsVersion() { String openmrsVersion = "1.4.3"; String requiredOpenmrsVersion = "1.4.5 - 1.5.*"; Assert.assertFalse(ModuleUtil.matchRequiredVersions(openmrsVersion, requiredOpenmrsVersion)); requiredOpenmrsVersion = "1.5.* - 1.6.0"; Assert.assertFalse(ModuleUtil.matchRequiredVersions(openmrsVersion, requiredOpenmrsVersion)); } /** * @see org.openmrs.module.ModuleUtil#matchRequiredVersions(String,String) */ @Test public void matchRequiredVersions_shouldReturnFalseWhenSingleEntryRequiredVersionBeyondOpenmrsVersion() { String openmrsVersion = "1.4.3"; String requiredOpenmrsVersion = "1.5.0"; Assert.assertFalse(ModuleUtil.matchRequiredVersions(openmrsVersion, requiredOpenmrsVersion)); } /** * @see org.openmrs.module.ModuleUtil#matchRequiredVersions(String,String) */ @Test public void matchRequiredVersions_shouldAllowReleaseTypeInTheVersion() { String openmrsVersion = "1.4.3"; String requiredOpenmrsVersion = "1.4.1-dev - 1.5.*-alpha"; Assert.assertTrue(ModuleUtil.matchRequiredVersions(openmrsVersion, requiredOpenmrsVersion)); requiredOpenmrsVersion = "1.5.*-dev - 1.6.0-dev"; Assert.assertFalse(ModuleUtil.matchRequiredVersions(openmrsVersion, requiredOpenmrsVersion)); } /** * @see ModuleUtil#matchRequiredVersions(String,String) */ @Test public void matchRequiredVersions_shouldMatchWhenRevisionNumberIsBelowMaximumRevisionNumber() { String openmrsVersion = "1.4.1111"; String requiredVersion = "1.4.*"; Assert.assertTrue(ModuleUtil.matchRequiredVersions(openmrsVersion, requiredVersion)); } /** * @see ModuleUtil#matchRequiredVersions(String,String) */ @Test public void matchRequiredVersions_shouldNotMatchWhenRevisionNumberIsAboveMaximumRevisionNumber() { Long revisionNumber = (long) Integer.MAX_VALUE + 2; String openmrsVersion = "1.4." + revisionNumber; String requiredVersion = "1.4.*"; Assert.assertFalse(ModuleUtil.matchRequiredVersions(openmrsVersion, requiredVersion)); } /** * @see ModuleUtil#matchRequiredVersions(String,String) */ @Test public void matchRequiredVersions_shouldNotMatchWhenVersionHasWildCardAndIsOutsideBoundary() { String openmrsVersion = "1.*.4"; String requiredVersion = "1.4.0 - 1.4.10"; Assert.assertFalse(ModuleUtil.matchRequiredVersions(openmrsVersion, requiredVersion)); } /** * @see ModuleUtil#matchRequiredVersions(String,String) */ @Test public void matchRequiredVersions_shouldMatchWhenVersionHasWildCardAndIsWithinBoundary() { String openmrsVersion = "1.4.*"; String requiredVersion = "1.4.0 - 1.4.10"; Assert.assertTrue(ModuleUtil.matchRequiredVersions(openmrsVersion, requiredVersion)); } /** * @see ModuleUtil#matchRequiredVersions(String,String) */ @Test public void matchRequiredVersions_shouldNotMatchWhenVersionHasWildPlusQualifierCardAndIsOutsideBoundary() { String openmrsVersion = "1.*.4-SNAPSHOT"; String requiredVersion = "1.4.0 - 1.4.10"; Assert.assertFalse(ModuleUtil.matchRequiredVersions(openmrsVersion, requiredVersion)); } /** * @see ModuleUtil#matchRequiredVersions(String,String) */ @Test public void matchRequiredVersions_shouldMatchWhenVersionHasWildCardPlusQualifierAndIsWithinBoundary() { String openmrsVersion = "1.4.*-SNAPSHOT"; String requiredVersion = "1.4.0 - 1.4.10"; Assert.assertTrue(ModuleUtil.matchRequiredVersions(openmrsVersion, requiredVersion)); } /** * @see ModuleUtil#matchRequiredVersions(String,String) */ @Test public void matchRequiredVersions_shouldReturnTrueWhenRequiredVersionIsEmpty() { String openmrsVersion = "1.11.4"; String requiredVersion = ""; Assert.assertTrue(ModuleUtil.matchRequiredVersions(openmrsVersion, requiredVersion)); } /** * @see ModuleUtil#matchRequiredVersions(String,String) */ @Test public void matchRequiredVersions_shouldCorrectlySetUpperAndLoweLimitForVersionRangeWithQualifiersAndWildCard() { String openmrsVersion = "1.4.11111"; String requiredVersion = "1.4.200 - 1.4.*-SNAPSHOT"; Long revisionNumber = (long) Integer.MAX_VALUE + 2; Assert.assertTrue(ModuleUtil.matchRequiredVersions(openmrsVersion, requiredVersion)); requiredVersion = "1.4.*-SNAPSHOT - 1.4.*"; Assert.assertTrue(ModuleUtil.matchRequiredVersions(openmrsVersion, requiredVersion)); openmrsVersion = "1.4." + revisionNumber; Assert.assertFalse(ModuleUtil.matchRequiredVersions(openmrsVersion, requiredVersion)); } /** * @see org.openmrs.module.ModuleUtil#getPathForResource(org.openmrs.module.Module,String) */ @Test public void getPathForResource_shouldHandleUiSpringmvcCssUiDotCssExample() { Module module = new Module("Unit test"); module.setModuleId("ui.springmvc"); String path = "/ui/springmvc/css/ui.css"; Assert.assertEquals("/css/ui.css", ModuleUtil.getPathForResource(module, path)); } /** * @see org.openmrs.module.ModuleUtil#getModuleForPath(String) */ @Test public void getModuleForPath_shouldHandleUiSpringmvcCssUiDotCssWhenUiDotSpringmvcModuleIsRunning() { ModuleFactory.getStartedModulesMap().clear(); Module module = new Module("For Unit Test"); module.setModuleId("ui.springmvc"); ModuleFactory.getStartedModulesMap().put(module.getModuleId(), module); String path = "/ui/springmvc/css/ui.css"; Assert.assertEquals(module, ModuleUtil.getModuleForPath(path)); ModuleFactory.getStartedModulesMap().clear(); } /** * @see org.openmrs.module.ModuleUtil#getModuleForPath(String) */ @Test public void getModuleForPath_shouldHandleUiSpringmvcCssUiDotCssWhenUiModuleIsRunning() { ModuleFactory.getStartedModulesMap().clear(); Module module = new Module("For Unit Test"); module.setModuleId("ui"); ModuleFactory.getStartedModulesMap().put(module.getModuleId(), module); String path = "/ui/springmvc/css/ui.css"; Assert.assertEquals(module, ModuleUtil.getModuleForPath(path)); ModuleFactory.getStartedModulesMap().clear(); } /** * @see org.openmrs.module.ModuleUtil#getModuleForPath(String) */ @Test public void getModuleForPath_shouldReturnNullForUiSpringmvcCssUiDotCssWhenNoRelevantModuleIsRunning() { ModuleFactory.getStartedModulesMap().clear(); String path = "/ui/springmvc/css/ui.css"; Assert.assertNull(ModuleUtil.getModuleForPath(path)); } /** * @see org.openmrs.module.ModuleUtil#checkRequiredVersion(String, String) */ @Test(expected = ModuleException.class) public void checkRequiredVersion_shouldThrowModuleExceptionIfOpenmrsVersionBeyondWildCardRange() { String openmrsVersion = "1.4.3"; String requiredOpenmrsVersion = "1.3.*"; ModuleUtil.checkRequiredVersion(openmrsVersion, requiredOpenmrsVersion); } /** * @see org.openmrs.module.ModuleUtil#checkRequiredVersion(String, String) */ @Test(expected = ModuleException.class) public void checkRequiredVersion_shouldThrowModuleExceptionIfRequiredVersionBeyondOpenmrsVersion() { String openmrsVersion = "1.4.3"; String requiredOpenmrsVersion = "1.5.*"; ModuleUtil.checkRequiredVersion(openmrsVersion, requiredOpenmrsVersion); } /** * @see org.openmrs.module.ModuleUtil#checkRequiredVersion(String, String) */ @Test(expected = ModuleException.class) public void checkRequiredVersion_shouldThrowModuleExceptionIfRequiredVersionWithWildCardBeyondOpenmrsVersion() { String openmrsVersion = "1.4.3"; String requiredOpenmrsVersion = "1.5.* - 1.6.*"; ModuleUtil.checkRequiredVersion(openmrsVersion, requiredOpenmrsVersion); } /** * @see org.openmrs.module.ModuleUtil#checkRequiredVersion(String, String) */ @Test(expected = ModuleException.class) public void checkRequiredVersion_shouldThrowModuleExceptionIfRequiredVersionWithWildCardOnOneEndBeyondOpenmrsVersion() { String openmrsVersion = "1.4.3"; String requiredOpenmrsVersion = "1.4.5 - 1.5.*"; ModuleUtil.checkRequiredVersion(openmrsVersion, requiredOpenmrsVersion); } /** * @see org.openmrs.module.ModuleUtil#checkRequiredVersion(String, String) */ @Test(expected = ModuleException.class) public void checkRequiredVersion_shouldThrowModuleExceptionIfSingleEntryRequiredVersionBeyondOpenmrsVersion() { String openmrsVersion = "1.4.3"; String requiredOpenmrsVersion = "1.5.0"; ModuleUtil.checkRequiredVersion(openmrsVersion, requiredOpenmrsVersion); } /** * @see org.openmrs.module.ModuleUtil#compareVersion(String,String) */ @Test public void compareVersion_shouldCorrectlyComparingTwoVersionNumbers() { String olderVersion = "2.1.1"; String newerVersion = "2.1.10"; Assert.assertTrue(ModuleUtil.compareVersion(olderVersion, newerVersion) < 0); } /** * @see org.openmrs.module.ModuleUtil#compareVersion(String,String) */ @Test public void compareVersion_shouldTreatSNAPSHOTAsEarliestVersion() { String olderVersion = "1.8.3"; String newerVersion = "1.8.4-SNAPSHOT"; Assert.assertTrue(ModuleUtil.compareVersion(newerVersion, olderVersion) > 0); //should still return the correct value if the arguments are switched Assert.assertTrue(ModuleUtil.compareVersion(olderVersion, newerVersion) < 0); } /** * @see org.openmrs.module.ModuleUtil#checkRequiredVersion(String, String) */ @Test(expected = ModuleException.class) public void checkRequiredVersion_shouldThrowModuleExceptionIfSNAPSHOTNotHandledCorrectly() { String openmrsVersion = "1.4.3"; String requiredOpenmrsVersion = "1.4.5-SNAPSHOT"; ModuleUtil.checkRequiredVersion(openmrsVersion, requiredOpenmrsVersion); } /** * @see org.openmrs.module.ModuleUtil#checkRequiredVersion(String, String) */ @Test public void checkRequiredVersion_shouldHandleSnapshotVersion() { String openMRSVersion = "1.9.2-SNAPSHOT"; String requiredOpenmrsVersion = "1.9.2-SNAPSHOT"; ModuleUtil.checkRequiredVersion(openMRSVersion, requiredOpenmrsVersion); } /** * @see org.openmrs.module.ModuleUtil#checkRequiredVersion(String, String) */ @Test public void checkRequiredVersion_shouldHandleUuidSuffixVersion() { String openMRSVersion = "1.9.9-f4927f"; String requiredOpenmrsVersion = "1.9.9-SNAPSHOT"; ModuleUtil.checkRequiredVersion(openMRSVersion, requiredOpenmrsVersion); } @Test public void checkRequiredVersion_shouldHandleAlphaVersion() { String openMRSVersion = "1.9.2-ALPHA"; String requiredOpenmrsVersion = "1.9.2-ALPHA"; ModuleUtil.checkRequiredVersion(openMRSVersion, requiredOpenmrsVersion); } private JarFile loadModuleJarFile(String moduleId, String version) throws IOException { InputStream moduleStream = null; File tempFile = null; OutputStream tempFileStream = null; JarFile jarFile = null; try { moduleStream = getClass().getClassLoader().getResourceAsStream( "org/openmrs/module/include/" + moduleId + "-" + version + ".omod"); Assert.assertNotNull(moduleStream); tempFile = File.createTempFile("moduleTest", "omod"); tempFileStream = new FileOutputStream(tempFile); IOUtils.copy(moduleStream, tempFileStream); jarFile = new JarFile(tempFile); } finally { IOUtils.closeQuietly(moduleStream); IOUtils.closeQuietly(tempFileStream); if (tempFile != null) { tempFile.delete(); } } return jarFile; } /** * @throws IOException * @see ModuleUtil#getResourceFromApi(JarFile,String,String,String) */ @Test public void getResourceFromApi_shouldLoadFileFromApiAsInputStream() throws IOException { String moduleId = "test1"; String version = "1.0-SNAPSHOT"; String resource = "messages.properties"; JarFile moduleJarFile = loadModuleJarFile(moduleId, version); Assert.assertNotNull(moduleJarFile); InputStream resultStream = ModuleUtil.getResourceFromApi(moduleJarFile, moduleId, version, resource); Assert.assertNotNull(resultStream); } /** * @throws IOException * @see ModuleUtil#getResourceFromApi(JarFile,String,String,String) */ @Test public void getResourceFromApi_shouldReturnNullIfApiIsNotFound() throws IOException { String moduleId = "logic"; String version = "0.2"; String resource = "messages.properties"; JarFile moduleJarFile = loadModuleJarFile(moduleId, version); Assert.assertNotNull(moduleJarFile); InputStream resultStream = ModuleUtil.getResourceFromApi(moduleJarFile, moduleId, version, resource); Assert.assertNull(resultStream); } /** * @throws IOException * @see ModuleUtil#getResourceFromApi(JarFile,String,String,String) */ @Test public void getResourceFromApi_shouldReturnNullIfFileIsNotFoundInApi() throws IOException { String moduleId = "test1"; String version = "1.0-SNAPSHOT"; String resource = "messages_doesnotexist.properties"; JarFile moduleJarFile = loadModuleJarFile(moduleId, version); Assert.assertNotNull(moduleJarFile); InputStream resultStream = ModuleUtil.getResourceFromApi(moduleJarFile, moduleId, version, resource); Assert.assertNull(resultStream); } /** * @throws IOException * @see ModuleUtil#expandJar(File,File,String,boolean) */ @Test public void expandJar_shouldExpandDirectoryWithParentTreeIfNameIsDirectoryAndKeepFullPathIsTrue() throws IOException { final int numberOfFilesInSpecifiedJarDirectory = 2; String directoryPath = "META-INF/maven/org.openmrs.module/test1-api"; File destinationFolder = this.getEmptyJarDestinationFolder(); ModuleUtil.expandJar(getJarFile(), destinationFolder, directoryPath, true); List<File> actualExpandedFiles = (List<File>)FileUtils.listFiles(destinationFolder, null, true); Assert.assertEquals(numberOfFilesInSpecifiedJarDirectory, actualExpandedFiles.size()); File expectedPath = new File(destinationFolder, directoryPath); Assert.assertEquals(expectedPath.toString(), actualExpandedFiles.get(0).getParent()); FileUtils.deleteDirectory(destinationFolder); } /** * @throws IOException * @see ModuleUtil#expandJar(File,File,String,boolean) */ @Test public void expandJar_shouldExpandDirectoryWithoutParentTreeIfNameIsDirectoryAndKeepFullPathIsFalse() throws IOException { final int numberOfFilesInSpecifiedDirectory = 2; String directoryPath = "META-INF/maven/org.openmrs.module/test1-api"; File destinationFolder = this.getEmptyJarDestinationFolder(); ModuleUtil.expandJar(getJarFile(), destinationFolder, directoryPath, false); List<File> actualExpandedFiles = (List<File>)FileUtils.listFiles(destinationFolder, null, true); Assert.assertEquals(numberOfFilesInSpecifiedDirectory, actualExpandedFiles.size()); Assert.assertEquals(destinationFolder.toString(), actualExpandedFiles.get(0).getParent()); FileUtils.deleteDirectory(destinationFolder); } /** * @throws IOException * @see ModuleUtil#expandJar(File,File,String,boolean) */ @Test public void expandJar_shouldExpandEntireJarIfNameIsEmptyString() throws IOException { final int numberOfFilesInJar = 6; File destinationFolder = this.getEmptyJarDestinationFolder(); ModuleUtil.expandJar(getJarFile(), destinationFolder, "", false); Assert.assertEquals(numberOfFilesInJar, FileUtils.listFiles(destinationFolder, null, true).size()); FileUtils.deleteDirectory(destinationFolder); } /** * @throws IOException * @see ModuleUtil#expandJar(File,File,String,boolean) */ @Test public void expandJar_shouldExpandEntireJarIfNameIsNull() throws IOException { final int numberOfFilesInJar = 6; File destinationFolder = this.getEmptyJarDestinationFolder(); ModuleUtil.expandJar(getJarFile(), destinationFolder, null, false); Assert.assertEquals(numberOfFilesInJar, FileUtils.listFiles(destinationFolder, null, true).size()); FileUtils.deleteDirectory(destinationFolder); } /** * @throws IOException * @see ModuleUtil#expandJar(File,File,String,boolean) */ @Test public void expandJar_shouldExpandFileWithParentTreeIfNameIsFileAndKeepFullPathIsTrue() throws IOException { String fileName = "META-INF/maven/org.openmrs.module/test1-api/pom.properties"; File destinationFolder = this.getEmptyJarDestinationFolder(); ModuleUtil.expandJar(getJarFile(), destinationFolder, fileName, true); List<File> actualExpandedFiles = (List<File>)FileUtils.listFiles(destinationFolder, null, true); Assert.assertEquals(1, actualExpandedFiles.size()); File expectedPath = new File(destinationFolder, fileName); Assert.assertEquals(expectedPath.toString(), actualExpandedFiles.get(0).toString()); FileUtils.deleteDirectory(destinationFolder); } /** * Gets Jar file to be expanded. * * @return <code>File</code> containing Jar file. */ protected File getJarFile() { return new File(this.getClass().getResource("/org/openmrs/module/include/testJarExpand.omod").getFile()); } /** * Gets folder to which Jar should be extracted. * * @return <code>File</code> containing folder for Jar tests. */ protected File getEmptyJarDestinationFolder() throws IOException { File destinationFolder = new File(System.getProperty("java.io.tmpdir"), "expandedJar"); if (destinationFolder.exists()) { FileUtils.cleanDirectory(destinationFolder); } else { destinationFolder.mkdirs(); } return destinationFolder; } }