1 /*
   2  * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
   3  * 
   4  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   5  *
   6  * The contents of this file are subject to the terms of either the Universal Permissive License
   7  * v 1.0 as shown at http://oss.oracle.com/licenses/upl
   8  *
   9  * or the following license:
  10  *
  11  * Redistribution and use in source and binary forms, with or without modification, are permitted
  12  * provided that the following conditions are met:
  13  * 
  14  * 1. Redistributions of source code must retain the above copyright notice, this list of conditions
  15  * and the following disclaimer.
  16  * 
  17  * 2. Redistributions in binary form must reproduce the above copyright notice, this list of
  18  * conditions and the following disclaimer in the documentation and/or other materials provided with
  19  * the distribution.
  20  * 
  21  * 3. Neither the name of the copyright holder nor the names of its contributors may be used to
  22  * endorse or promote products derived from this software without specific prior written permission.
  23  * 
  24  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
  25  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  26  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
  27  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  28  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  29  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  30  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
  31  * WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  32  */
  33 package org.openjdk.jmc.common.version;
  34 
  35 import static org.junit.Assert.assertEquals;
  36 import static org.junit.Assert.assertFalse;
  37 import static org.junit.Assert.assertTrue;
  38 
  39 import org.junit.Test;
  40 
  41 public class JavaVersionTest {
  42 
  43         @Test
  44         public void testJava9NewShortGEQJava9OldVersion() {
  45                 JavaVersion ver1 = new JavaVersion("9");
  46                 JavaVersion ver2 = new JavaVersion("1.9.foo");
  47 
  48                 assertTrue(ver1.isGreaterOrEqualThan(ver2));
  49         }
  50 
  51         @Test
  52         public void testJava9NewShortEQJava9NewLongSameVersion() {
  53                 JavaVersion version9 = new JavaVersion("9-ea");
  54                 JavaVersion version9000 = new JavaVersion("9.0.0.0-ea");
  55 
  56                 assertTrue(version9000.equals(version9));
  57         }
  58 
  59         @Test
  60         public void testJava9NewShortWithExtraEQJava9NewLongSameVersion() {
  61                 JavaVersion version190 = new JavaVersion("9-ea+19-BR-435345");
  62                 JavaVersion version900 = new JavaVersion("9.0.0.0-ea");
  63 
  64                 assertTrue(version900.equals(version190));
  65         }
  66 
  67         @Test
  68         public void testJava9NewWithExtraGEQJava9OldVersion() {
  69                 JavaVersion version913 = new JavaVersion("9.1.3.0");
  70                 JavaVersion version190 = new JavaVersion("1.9.0-ea+19-BR-435345");
  71 
  72                 assertTrue(version913.isGreaterOrEqualThan(version190));
  73         }
  74 
  75         /*
  76          * NOTE: This test does not really have to pass when the new Java 9 version is committed, but
  77          * since we are using this for testing before that happens, we need this to work.
  78          */
  79         @Test
  80         public void testJava9OldVersionGEQJava9NewWithExtra() {
  81                 JavaVersion version913 = new JavaVersion("9.1.3.0");
  82                 JavaVersion version192 = new JavaVersion("1.9.2-ea+19-BR-435345");
  83 
  84                 assertTrue(version192.isGreaterOrEqualThan(version913));
  85         }
  86 
  87         @Test
  88         public void testJava9LongVersionisGreaterOrEqualsJava9ShortVersion() {
  89                 JavaVersion version9 = new JavaVersion("9");
  90                 JavaVersion version921 = new JavaVersion("9.2.1.0");
  91 
  92                 assertTrue(version921.isGreaterOrEqualThan(version9));
  93         }
  94 
  95         @Test
  96         public void testJava9isGreaterOrEqualsVersion() {
  97                 JavaVersion version913 = new JavaVersion("9.1.3.0-ea");
  98                 JavaVersion version921 = new JavaVersion("9.2.1.0");
  99 
 100                 assertTrue(version921.isGreaterOrEqualThan(version913));
 101         }
 102 
 103         @Test
 104         public void testJava9isGreaterOrEqualsVersionEA() {
 105                 JavaVersion version921ea = new JavaVersion("9.2.1.0-ea");
 106                 JavaVersion version921 = new JavaVersion("9.2.1.0");
 107 
 108                 assertTrue(version921.isGreaterOrEqualThan(version921ea));
 109                 assertTrue(!version921ea.isGreaterOrEqualThan(version921));
 110         }
 111 
 112         @Test
 113         public void testGreaterOrEqualsMediumVsLongVersion() {
 114                 JavaVersion version123 = new JavaVersion("1.2.3");
 115                 JavaVersion version12245 = new JavaVersion("1.2.2.4.5");
 116 
 117                 assertTrue(version123.isGreaterOrEqualThan(version12245));
 118         }
 119 
 120         @Test
 121         public void testGreaterOrEqualsLongVsMediumVersion() {
 122                 JavaVersion version12345 = new JavaVersion("1.2.3.4.5");
 123                 JavaVersion version12 = new JavaVersion("1.2");
 124 
 125                 assertTrue(version12345.isGreaterOrEqualThan(version12));
 126         }
 127 
 128         @Test
 129         public void testJava9isGreaterOrEqualsThanJava8Version() {
 130                 JavaVersion version903 = new JavaVersion("9.0.3.0-ea");
 131                 JavaVersion version8u40 = new JavaVersion("1.8.0_40");
 132 
 133                 assertTrue(version903.isGreaterOrEqualThan(version8u40));
 134         }
 135 
 136         @Test
 137         public void testGEQ() {
 138                 JavaVersion version16 = new JavaVersion("1.6.0_14ea");
 139                 JavaVersion version17 = new JavaVersion("1.7.0_0");
 140 
 141                 assertTrue(version17.isGreaterOrEqualThan(version16));
 142                 assertFalse(version16.isGreaterOrEqualThan(version17));
 143                 assertTrue(version16.isGreaterOrEqualThan(version16));
 144                 assertTrue(version17.equals(version17));
 145         }
 146 
 147         @Test
 148         public void testGEQJava7EA() {
 149                 JavaVersion version17ea = new JavaVersion("1.7.0_0ea");
 150                 JavaVersion version17 = new JavaVersion("1.7.0_0");
 151 
 152                 assertTrue(version17.isGreaterOrEqualThan(version17ea));
 153                 assertFalse(version17ea.isGreaterOrEqualThan(version17));
 154         }
 155 
 156         @Test
 157         public void testGEQWithMicro() {
 158                 JavaVersion version142 = new JavaVersion("1.4.2_14");
 159                 JavaVersion version131 = new JavaVersion("1.3.1_67");
 160 
 161                 assertTrue(version142.isGreaterOrEqualThan(version131));
 162                 assertFalse(version131.isGreaterOrEqualThan(version142));
 163                 assertTrue(version131.isGreaterOrEqualThan(version131));
 164                 assertTrue(version142.equals(version142));
 165         }
 166 
 167         @Test
 168         public void testGEQCropped() {
 169                 JavaVersion version17 = new JavaVersion("1.7");
 170                 JavaVersion version17u12 = new JavaVersion("1.7.0_12");
 171 
 172                 assertTrue(version17u12.isGreaterOrEqualThan(version17));
 173                 assertFalse(version17u12.equals(version17));
 174         }
 175 
 176         @Test
 177         public void testIsReverseNumbers() {
 178                 JavaVersion version17u13 = new JavaVersion("1.7.12_13ea");
 179                 JavaVersion version17u31 = new JavaVersion("1.7.12_31");
 180 
 181                 assertTrue(version17u31.isGreaterOrEqualThan(version17u13));
 182                 assertFalse(version17u31.equals(version17u13));
 183         }
 184 
 185         @Test
 186         public void testOldVersionShortAndLongEquals() {
 187                 JavaVersion version17u0 = new JavaVersion("1.7.0_0");
 188                 JavaVersion version17 = new JavaVersion("1.7");
 189 
 190                 assertTrue(version17u0.equals(version17));
 191         }
 192         
 193         @Test
 194         public void testNullStringArgument() {
 195                 JavaVersion nullVersion = new JavaVersion((String) null);
 196                 assertEquals(JavaVersion.UNKNOWN, nullVersion.getMajorVersion());
 197         }
 198 }