/**
* 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.is;
import static org.junit.Assert.assertThat;
import java.net.MalformedURLException;
import java.net.URI;
import java.util.HashMap;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import org.openmrs.test.BaseContextSensitiveTest;
public class ModuleClassLoaderTest extends BaseContextSensitiveTest {
Module mockModule;
Map<String, String> mockModules;
@Before
public void before() {
mockModule = new Module("mockmodule", "mockmodule", "org.openmrs.module.mockmodule", "author", "description", "1.0");
mockModules = new HashMap<>();
}
/**
* @throws MalformedURLException
* @see ModuleClassLoader#shouldResourceBeIncluded(Module, java.net.URL, String, java.util.Map)
*/
@Test
public void shouldResourceBeIncluded_shouldReturnTrueIfFileMatchesAndOpenmrsVersionMatches()
throws MalformedURLException {
ModuleConditionalResource resource = new ModuleConditionalResource();
resource.setPath("lib/mockmodule-api-1.10.jar");
resource.setOpenmrsPlatformVersion("1.7-1.8,1.10-1.11");
mockModule.getConditionalResources().add(resource);
boolean result = ModuleClassLoader.shouldResourceBeIncluded(mockModule, URI.create(
"file://module/mockmodule/lib/mockmodule-api-1.10.jar").toURL(), "1.10.0-SNAPSHOT", mockModules);
assertThat(result, is(true));
}
/**
* @throws MalformedURLException
* @see ModuleClassLoader#shouldResourceBeIncluded(Module, java.net.URL, String, java.util.Map)
*/
@Test
public void shouldResourceBeIncluded_shouldReturnFalseIfFileMatchesButOpenmrsVersionDoesNot()
throws MalformedURLException {
ModuleConditionalResource resource = new ModuleConditionalResource();
resource.setPath("lib/mockmodule-api-1.10.jar");
resource.setOpenmrsPlatformVersion("1.7-1.8, 1.10-1.11");
mockModule.getConditionalResources().add(resource);
boolean result = ModuleClassLoader.shouldResourceBeIncluded(mockModule, URI.create(
"file://module/mockmodule/lib/mockmodule-api-1.10.jar").toURL(), "1.12.0-SNAPSHOT", mockModules);
assertThat(result, is(false));
}
/**
* @throws MalformedURLException
* @see ModuleClassLoader#shouldResourceBeIncluded(Module, java.net.URL, String, java.util.Map)
*/
@Test
public void shouldResourceBeIncluded_shouldReturnTrueIfFileDoesNotMatchAndOpenmrsVersionDoesNotMatch()
throws MalformedURLException {
ModuleConditionalResource resource = new ModuleConditionalResource();
resource.setPath("lib/mockmodule-api.jar");
resource.setOpenmrsPlatformVersion("1.10-1.11");
mockModule.getConditionalResources().add(resource);
boolean result = ModuleClassLoader.shouldResourceBeIncluded(mockModule, URI.create(
"file://module/mockmodule/lib/mockmodule-api-1.10.jar").toURL(), "1.9.8-SNAPSHOT", mockModules);
assertThat(result, is(true));
}
/**
* @throws MalformedURLException
* @see ModuleClassLoader#shouldResourceBeIncluded(Module, java.net.URL, String, java.util.Map)
*/
@Test
public void shouldResourceBeIncluded_shouldReturnTrueIfFileMatchesAndModuleVersionMatches()
throws MalformedURLException {
ModuleConditionalResource resource = new ModuleConditionalResource();
resource.setPath("lib/mockmodule-api-1.10.jar");
ModuleConditionalResource.ModuleAndVersion module = new ModuleConditionalResource.ModuleAndVersion();
module.setModuleId("module");
module.setVersion("3.0-4.0,1.0-2.0");
resource.getModules().add(module);
mockModule.getConditionalResources().add(resource);
mockModules.put("module", "1.1");
boolean result = ModuleClassLoader.shouldResourceBeIncluded(mockModule, URI.create(
"file://module/mockmodule/lib/mockmodule-api-1.10.jar").toURL(), "1.10.0-SNAPSHOT", mockModules);
assertThat(result, is(true));
}
/**
* @throws MalformedURLException
* @see ModuleClassLoader#shouldResourceBeIncluded(Module, java.net.URL, String, java.util.Map)
*/
@Test
public void shouldResourceBeIncluded_shouldReturnFalseIfFileMatchesAndModuleVersionDoesNotMatch()
throws MalformedURLException {
ModuleConditionalResource resource = new ModuleConditionalResource();
resource.setPath("lib/mockmodule-api-1.10.jar");
ModuleConditionalResource.ModuleAndVersion module = new ModuleConditionalResource.ModuleAndVersion();
module.setModuleId("module");
module.setVersion("1.0-2.0");
resource.getModules().add(module);
mockModule.getConditionalResources().add(resource);
mockModules.put("module", "3.0");
boolean result = ModuleClassLoader.shouldResourceBeIncluded(mockModule, URI.create(
"file://module/mockmodule/lib/mockmodule-api-1.10.jar").toURL(), "1.10.0-SNAPSHOT", mockModules);
assertThat(result, is(false));
}
/**
* @throws MalformedURLException
* @see ModuleClassLoader#shouldResourceBeIncluded(Module, java.net.URL, String, java.util.Map)
*/
@Test
public void shouldResourceBeIncluded_shouldReturnFalseIfFileMatchesAndOpenmrsVersionMatchesButModuleVersionDoesNotMatch()
throws MalformedURLException {
ModuleConditionalResource resource = new ModuleConditionalResource();
resource.setPath("lib/mockmodule-api-1.10.jar");
resource.setOpenmrsPlatformVersion("1.10");
ModuleConditionalResource.ModuleAndVersion module = new ModuleConditionalResource.ModuleAndVersion();
module.setModuleId("module");
module.setVersion("1.0-2.0,4.0");
resource.getModules().add(module);
mockModule.getConditionalResources().add(resource);
mockModules.put("module", "3.0");
boolean result = ModuleClassLoader.shouldResourceBeIncluded(mockModule, URI.create(
"file://module/mockmodule/lib/mockmodule-api-1.10.jar").toURL(), "1.10.0-SNAPSHOT", mockModules);
assertThat(result, is(false));
}
/**
* @throws MalformedURLException
* @see ModuleClassLoader#shouldResourceBeIncluded(Module, java.net.URL, String, java.util.Map)
*/
@Test
public void shouldResourceBeIncluded_shouldReturnFalseIfFileMatchesAndModuleNotFound() throws MalformedURLException {
ModuleConditionalResource resource = new ModuleConditionalResource();
resource.setPath("lib/mockmodule-api-1.10.jar");
ModuleConditionalResource.ModuleAndVersion module = new ModuleConditionalResource.ModuleAndVersion();
module.setModuleId("module");
module.setVersion("1.0-2.0");
resource.getModules().add(module);
mockModule.getConditionalResources().add(resource);
mockModules.put("differentModule", "1.0");
boolean result = ModuleClassLoader.shouldResourceBeIncluded(mockModule, URI.create(
"file://module/mockmodule/lib/mockmodule-api-1.10.jar").toURL(), "1.10.0-SNAPSHOT", mockModules);
assertThat(result, is(false));
}
/**
* @throws MalformedURLException
* @see ModuleClassLoader#shouldResourceBeIncluded(Module, java.net.URL, String, java.util.Map)
*/
@Test
public void shouldResourceBeIncluded_shouldReturnTrueIfFileDoesNotMatchAndModuleVersionDoesNotMatch()
throws MalformedURLException {
ModuleConditionalResource resource = new ModuleConditionalResource();
resource.setPath("lib/mockmodule-api.jar");
ModuleConditionalResource.ModuleAndVersion module = new ModuleConditionalResource.ModuleAndVersion();
module.setModuleId("module");
module.setVersion("1.0-2.0");
resource.getModules().add(module);
mockModule.getConditionalResources().add(resource);
mockModules.put("module", "3.0");
boolean result = ModuleClassLoader.shouldResourceBeIncluded(mockModule, URI.create(
"file://module/mockmodule/lib/mockmodule-api-1.10.jar").toURL(), "1.10.0-SNAPSHOT", mockModules);
assertThat(result, is(true));
}
}