/*
* 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.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.config.MuleManifest;
import org.mule.tck.junit4.AbstractMuleTestCase;
import org.mule.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.6");
assertTrue(JdkVersionUtils.isSupportedJdkVersion());
setJdkVersion("1.6.20");
assertTrue(JdkVersionUtils.isSupportedJdkVersion());
setJdkVersion("1.6.0_129");
assertTrue(JdkVersionUtils.isSupportedJdkVersion());
setJdkVersion("1.7");
assertTrue(JdkVersionUtils.isSupportedJdkVersion());
//not supported
setJdkVersion("1.4.2");
assertFalse(JdkVersionUtils.isSupportedJdkVersion());
setJdkVersion("1.4.2_12");
assertFalse(JdkVersionUtils.isSupportedJdkVersion());
setJdkVersion("1.8");
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.6.0_129");
assertTrue(JdkVersionUtils.isRecommendedJdkVersion());
setJdkVersion("1.6.20");
assertTrue(JdkVersionUtils.isRecommendedJdkVersion());
setJdkVersion("1.7.0_03");
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.8");
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.6.0");
JdkVersionUtils.validateJdk();
setJdkVersion("1.6.0_129");
JdkVersionUtils.validateJdk();
setJdkVersion("1.6.20");
JdkVersionUtils.validateJdk();
setJdkVersion("1.7.0");
JdkVersionUtils.validateJdk();
setJdkVersion("1.7.0_03");
JdkVersionUtils.validateJdk();
setJdkVersion("1.7.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");
JdkVersionUtils.validateJdk();
}
}