/*
* Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package org.mule.runtime.core.util;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import org.mule.runtime.core.config.MuleManifest;
import org.mule.tck.junit4.AbstractMuleTestCase;
import org.mule.runtime.core.util.JdkVersionUtils.JdkVersion;
import java.lang.reflect.Field;
import java.util.jar.Attributes;
import java.util.jar.Manifest;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
public class JdkVersionUtilsTestCase extends AbstractMuleTestCase {
private String originalJavaVersion;
private Manifest originalManifest;
@Before
public void before() {
originalJavaVersion = System.getProperty("java.version");
originalManifest = MuleManifest.getManifest();
}
@After
public void after() throws Exception {
setJdkVersion(originalJavaVersion);
setManifest(originalManifest);
}
private static void setJdkVersion(String version) {
System.setProperty("java.version", version);
}
private void setManifest(Manifest manifest)
throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
Field field = MuleManifest.class.getDeclaredField("manifest");
field.setAccessible(true);
field.set(null, manifest);
}
@Test
public void testIsSupportedJdkVersion() {
// supported
assertTrue(JdkVersionUtils.isSupportedJdkVersion());
setJdkVersion("1.8.0");
assertTrue(JdkVersionUtils.isSupportedJdkVersion());
setJdkVersion("1.8.20");
assertTrue(JdkVersionUtils.isSupportedJdkVersion());
setJdkVersion("1.8.0_129");
assertTrue(JdkVersionUtils.isSupportedJdkVersion());
// not supported
setJdkVersion("1.7.2");
assertFalse(JdkVersionUtils.isSupportedJdkVersion());
setJdkVersion("1.7.2_12");
assertFalse(JdkVersionUtils.isSupportedJdkVersion());
setJdkVersion("1.9");
assertFalse(JdkVersionUtils.isSupportedJdkVersion());
}
@Test
public void testUndefinedJdkPreferences() throws Exception {
setJdkVersion("1.4.2");
// not defined - blank
setJdkPreferences("");
assertEquals("", JdkVersionUtils.getRecommendedJdks());
assertEquals("", JdkVersionUtils.getSupportedJdks());
assertTrue(JdkVersionUtils.isRecommendedJdkVersion());
assertTrue(JdkVersionUtils.isSupportedJdkVendor());
assertTrue(JdkVersionUtils.isSupportedJdkVersion());
// not defined - null
setJdkPreferences(null);
assertNull(JdkVersionUtils.getRecommendedJdks());
assertNull(JdkVersionUtils.getSupportedJdks());
assertTrue(JdkVersionUtils.isRecommendedJdkVersion());
assertTrue(JdkVersionUtils.isSupportedJdkVendor());
assertTrue(JdkVersionUtils.isSupportedJdkVersion());
}
private void setJdkPreferences(String preference) throws Exception {
// mock the manifest (this is where the jdk preferences are taken from
Manifest manifest = Mockito.mock(Manifest.class);
Attributes attributes = Mockito.mock(Attributes.class);
Mockito.when(attributes.getValue(Mockito.any(Attributes.Name.class))).thenReturn(preference);
Mockito.when(manifest.getMainAttributes()).thenReturn(attributes);
setManifest(manifest);
}
@Test
public void testSupportedJdkVendor() {
assertTrue(JdkVersionUtils.isSupportedJdkVendor());
}
@Test
public void testRecommendedJdkVersion() {
// recommended
setJdkVersion("1.8.0_129");
assertTrue(JdkVersionUtils.isRecommendedJdkVersion());
setJdkVersion("1.8.20");
assertTrue(JdkVersionUtils.isRecommendedJdkVersion());
// not recommended
setJdkVersion("1.4.2");
assertFalse(JdkVersionUtils.isRecommendedJdkVersion());
setJdkVersion("1.6");
assertFalse(JdkVersionUtils.isRecommendedJdkVersion());
setJdkVersion("1.6.0_5");
assertFalse(JdkVersionUtils.isRecommendedJdkVersion());
setJdkVersion("1.7.0");
assertFalse(JdkVersionUtils.isRecommendedJdkVersion());
setJdkVersion("1.9");
assertFalse(JdkVersionUtils.isRecommendedJdkVersion());
}
@Test
public void testJdkVersion() {
JdkVersion jdkVersion = new JdkVersion("1.7");
assertEquals(new Integer(1), jdkVersion.getMajor());
assertEquals(new Integer(7), jdkVersion.getMinor());
assertNull(jdkVersion.getMicro());
assertNull(jdkVersion.getUpdate());
assertNull(jdkVersion.getMilestone());
jdkVersion = new JdkVersion("1.7.0-ea");
assertEquals(new Integer(1), jdkVersion.getMajor());
assertEquals(new Integer(7), jdkVersion.getMinor());
assertEquals(new Integer(0), jdkVersion.getMicro());
assertNull(jdkVersion.getUpdate());
assertEquals("ea", jdkVersion.getMilestone());
jdkVersion = new JdkVersion("1.6.0_29-b05");
assertEquals(new Integer(1), jdkVersion.getMajor());
assertEquals(new Integer(6), jdkVersion.getMinor());
assertEquals(new Integer(0), jdkVersion.getMicro());
assertEquals(new Integer(29), jdkVersion.getUpdate());
assertEquals("b05", jdkVersion.getMilestone());
}
@Test
public void testJdkVersionComparison() {
JdkVersion jdk1_3 = new JdkVersion("1.3");
JdkVersion jdk1_6_0_5 = new JdkVersion("1.6.0_5");
JdkVersion jdk1_7 = new JdkVersion("1.7");
JdkVersion jdk1_6_0_29 = new JdkVersion("1.6.0_29");
JdkVersion jdk1_6_0_29_b04 = new JdkVersion("1.6.0_29-b04");
JdkVersion jdk1_6_0_29_b05 = new JdkVersion("1.6.0_29-b05");
assertTrue(jdk1_3.compareTo(jdk1_7) < 0);
assertTrue(jdk1_7.compareTo(jdk1_3) > 0);
assertTrue(jdk1_3.compareTo(jdk1_3) == 0);
assertTrue(jdk1_6_0_29_b05.compareTo(jdk1_6_0_29_b05) == 0);
assertTrue(jdk1_6_0_5.compareTo(jdk1_6_0_29_b04) < 0);
assertTrue(jdk1_6_0_29_b04.compareTo(jdk1_6_0_5) > 0);
assertTrue(jdk1_6_0_29.compareTo(jdk1_6_0_5) > 0);
assertTrue(jdk1_6_0_5.compareTo(jdk1_6_0_29) < 0);
assertTrue(jdk1_6_0_29.compareTo(jdk1_6_0_29_b04) < 0);
assertTrue(jdk1_6_0_29_b04.compareTo(jdk1_6_0_29) > 0);
assertTrue(jdk1_6_0_29_b04.compareTo(jdk1_6_0_29_b05) < 0);
assertTrue(jdk1_6_0_29_b05.compareTo(jdk1_6_0_29_b04) > 0);
assertTrue(jdk1_6_0_29_b04.compareTo(jdk1_7) < 0);
assertTrue(jdk1_7.compareTo(jdk1_6_0_29_b04) > 0);
}
@Test
public void testValidateJdk() {
JdkVersionUtils.validateJdk();
setJdkVersion("1.8.0");
JdkVersionUtils.validateJdk();
setJdkVersion("1.8.0_129");
JdkVersionUtils.validateJdk();
setJdkVersion("1.8.20");
JdkVersionUtils.validateJdk();
setJdkVersion("1.9.0");
JdkVersionUtils.validateJdk();
setJdkVersion("1.9.0_03");
JdkVersionUtils.validateJdk();
setJdkVersion("1.9.0_51");
JdkVersionUtils.validateJdk();
}
@Test(expected = java.lang.RuntimeException.class)
public void testValidateJdk5() {
setJdkVersion("1.5.1");
JdkVersionUtils.validateJdk();
}
@Test
public void testValidateJdk8() {
setJdkVersion("1.8.0");
JdkVersionUtils.validateJdk();
}
}