/* * Copyright 2015-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazonaws.util; import static org.hamcrest.Matchers.comparesEqualTo; import static com.amazonaws.util.JavaVersionParser.JAVA_VERSION_PROPERTY; import static org.hamcrest.Matchers.greaterThan; import static org.hamcrest.Matchers.lessThan; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; import org.junit.Test; import com.amazonaws.util.JavaVersionParser.JavaVersion; import com.amazonaws.util.JavaVersionParser.KnownJavaVersions; import nl.jqno.equalsverifier.EqualsVerifier; public class JavaVersionParserTest { @Test public void verifyHashCodeAndEquals_JavaVersion() { EqualsVerifier.forClass(JavaVersion.class).verify(); } @Test public void getCurrentVersion_VersionIsCachedInMemory() { System.setProperty(JAVA_VERSION_PROPERTY, "1.6.0_40"); JavaVersion currentVersion = JavaVersionParser.getCurrentJavaVersion(); System.setProperty(JAVA_VERSION_PROPERTY, "1.7.1_80"); JavaVersion versionAfterChangingProperty = JavaVersionParser.getCurrentJavaVersion(); assertEquals(currentVersion, versionAfterChangingProperty); } @Test public void nullVersion_ReturnsUnknownVersion() { JavaVersion version = JavaVersionParser.parseJavaVersion(null); assertJavaVersionsEqual(jv(null, null, null, null), version); assertEquals(KnownJavaVersions.UNKNOWN, version.getKnownVersion()); } @Test public void emptyVersion_ReturnsUnknownVersion() { JavaVersion version = JavaVersionParser.parseJavaVersion(""); assertJavaVersionsEqual(jv(null, null, null, null), version); assertEquals(KnownJavaVersions.UNKNOWN, version.getKnownVersion()); } @Test public void garbageVersion_ReturnsUnknownVersion() { JavaVersion version = JavaVersionParser.parseJavaVersion("invalid-version"); assertJavaVersionsEqual(jv(null, null, null, null), version); assertEquals(KnownJavaVersions.UNKNOWN, version.getKnownVersion()); } @Test public void validJava6Version_WithUpdateNumber() { JavaVersion version = JavaVersionParser.parseJavaVersion("1.6.0_65"); assertJavaVersionsEqual(jv(1, 6, 0, 65), version); assertEquals(KnownJavaVersions.JAVA_6, version.getKnownVersion()); } @Test public void validJava6Version_WithMultiDigitMaintenanceNumber() { JavaVersion version = JavaVersionParser.parseJavaVersion("1.6.101_65"); assertJavaVersionsEqual(jv(1, 6, 101, 65), version); assertEquals(KnownJavaVersions.JAVA_6, version.getKnownVersion()); } @Test public void validJava6Version_WithoutUpdateNumber_WithIdentifier() { JavaVersion version = JavaVersionParser.parseJavaVersion("1.6.3-65"); assertJavaVersionsEqual(jv(1, 6, 3, null), version); assertEquals(KnownJavaVersions.JAVA_6, version.getKnownVersion()); } @Test public void validJava7Version_WithUpdateNumber() { JavaVersion version = JavaVersionParser.parseJavaVersion("1.7.0_1234"); assertJavaVersionsEqual(jv(1, 7, 0, 1234), version); assertEquals(KnownJavaVersions.JAVA_7, version.getKnownVersion()); } @Test public void validJava7Version_WithoutUpdateNumber() { JavaVersion version = JavaVersionParser.parseJavaVersion("1.7.0"); assertJavaVersionsEqual(jv(1, 7, 0, null), version); assertEquals(KnownJavaVersions.JAVA_7, version.getKnownVersion()); } @Test public void validJava8Version_WithUpdateNumberAndIdentifier() { JavaVersion version = JavaVersionParser.parseJavaVersion("1.8.0_12-b24"); assertJavaVersionsEqual(jv(1, 8, 0, 12), version); assertEquals(KnownJavaVersions.JAVA_8, version.getKnownVersion()); } @Test public void validJava9Version_NonZeroMaintenanceNumber_WithUpdateNumberAndIdentifier() { JavaVersion version = JavaVersionParser.parseJavaVersion("1.9.1_00-someIdentifier"); assertJavaVersionsEqual(jv(1, 9, 1, 0), version); assertEquals(KnownJavaVersions.JAVA_9, version.getKnownVersion()); } @Test public void doubleDigitMajorVersion_ParsesMajorVersionCorrectly() { JavaVersion version = JavaVersionParser.parseJavaVersion("1.10.1_00"); assertJavaVersionsEqual(jv(1, 10, 1, 0), version); assertEquals(KnownJavaVersions.UNKNOWN, version.getKnownVersion()); } @Test public void compare_DifferentMajorVersions() { JavaVersion first = jv(1, 7, 0, 0); JavaVersion second = jv(1, 6, 0, 0); assertThat(first, greaterThan(second)); assertThat(second, lessThan(first)); } @Test public void compare_DifferentMaintenanceVersions() { JavaVersion first = jv(1, 7, 5, 0); JavaVersion second = jv(1, 7, 1, 0); assertThat(first, greaterThan(second)); assertThat(second, lessThan(first)); } @Test public void compare_DifferentUpdateNumbers() { JavaVersion first = jv(1, 7, 0, 60); JavaVersion second = jv(1, 7, 0, 40); assertThat(first, greaterThan(second)); assertThat(second, lessThan(first)); } @Test public void compare_NullUpdateNumbers() { JavaVersion first = jv(1, 7, 0, null); JavaVersion second = jv(1, 7, 0, null); assertThat(first, comparesEqualTo(second)); } @Test public void compare_NullMaintenanceNumbers() { JavaVersion first = jv(1, 7, null, 0); JavaVersion second = jv(1, 7, null, 0); assertThat(first, comparesEqualTo(second)); } @Test public void compare_NullMajorVersions() { JavaVersion first = jv(1, null, 0, 0); JavaVersion second = jv(1, null, 0, 0); assertThat(first, comparesEqualTo(second)); } @Test public void compare_NullMajorVersionFamilies() { JavaVersion first = jv(null, 7, 0, 0); JavaVersion second = jv(null, 7, 0, 0); assertThat(first, comparesEqualTo(second)); } @Test public void compare_EqualVersions() { JavaVersion first = jv(1, 7, 0, 60); JavaVersion second = jv(1, 7, 0, 60); assertThat(first, comparesEqualTo(second)); } @Test public void compare_FirstVersionUnknown() { JavaVersion first = jv(1, 10, 0, 60); JavaVersion second = jv(1, 7, 0, 0); assertThat(first, greaterThan(second)); assertThat(second, lessThan(first)); } @Test public void compare_SecondVersionUnknown() { JavaVersion first = jv(1, 7, 0, 60); JavaVersion second = jv(1, 5, 0, 60); assertThat(first, greaterThan(second)); assertThat(second, lessThan(first)); } @Test public void compare_BothVersionsUnknown() { JavaVersion first = jv(1, 99, 0, 0); JavaVersion second = jv(1, 5, 0, 60); assertThat(first, greaterThan(second)); assertThat(second, lessThan(first)); } public static void assertIntEquals(int expected, Integer actual) { assertEquals(Integer.valueOf(expected), actual); } @Test public void knownJavaVersions_Java6() { assertEquals(KnownJavaVersions.JAVA_6, KnownJavaVersions.fromMajorVersion(1, 6)); } @Test public void knownJavaVersions_Java7() { assertEquals(KnownJavaVersions.JAVA_7, KnownJavaVersions.fromMajorVersion(1, 7)); } @Test public void knownJavaVersions_Java8() { assertEquals(KnownJavaVersions.JAVA_8, KnownJavaVersions.fromMajorVersion(1, 8)); } @Test public void knownJavaVersions_Java9() { assertEquals(KnownJavaVersions.JAVA_9, KnownJavaVersions.fromMajorVersion(1, 9)); } @Test public void unknownJavaVersions() { assertEquals(KnownJavaVersions.UNKNOWN, KnownJavaVersions.fromMajorVersion(1, 10)); assertEquals(KnownJavaVersions.UNKNOWN, KnownJavaVersions.fromMajorVersion(-8, 0)); assertEquals(KnownJavaVersions.UNKNOWN, KnownJavaVersions.fromMajorVersion(1, 91)); assertEquals(KnownJavaVersions.UNKNOWN, KnownJavaVersions.fromMajorVersion(2, 0)); } private static void assertJavaVersionsEqual(JavaVersion expected, JavaVersion actual) { assertEquals(expected.getMajorVersionFamily(), actual.getMajorVersionFamily()); assertEquals(expected.getMajorVersion(), actual.getMajorVersion()); assertEquals(expected.getMaintenanceNumber(), actual.getMaintenanceNumber()); assertEquals(expected.getUpdateNumber(), actual.getUpdateNumber()); assertEquals(expected.getMajorVersionString(), actual.getMajorVersionString()); assertEquals(expected, actual); } /** * Convenience factory method for a {@link JavaVersion} */ private static JavaVersion jv(Integer majorVersionFamily, Integer majorVersion, Integer maintenanceNumber, Integer updateNumber) { return new JavaVersion(majorVersionFamily, majorVersion, maintenanceNumber, updateNumber); } }