github.com/anth0d/nomad@v0.0.0-20221214183521-ae3a0a2cad06/drivers/java/utils_test.go (about) 1 package java 2 3 import ( 4 "fmt" 5 "runtime" 6 "testing" 7 8 "github.com/hashicorp/nomad/ci" 9 "github.com/stretchr/testify/require" 10 ) 11 12 func TestDriver_parseJavaVersionOutput(t *testing.T) { 13 ci.Parallel(t) 14 15 cases := []struct { 16 name string 17 output string 18 version string 19 runtime string 20 vm string 21 }{ 22 { 23 "OracleJDK", 24 `java version "1.7.0_80" 25 Java(TM) SE Runtime Environment (build 1.7.0_80-b15) 26 Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)`, 27 "1.7.0_80", 28 "Java(TM) SE Runtime Environment (build 1.7.0_80-b15)", 29 "Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)", 30 }, 31 { 32 "OpenJDK", 33 `openjdk version "11.0.1" 2018-10-16 34 OpenJDK Runtime Environment 18.9 (build 11.0.1+13) 35 OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)`, 36 "11.0.1", 37 "OpenJDK Runtime Environment 18.9 (build 11.0.1+13)", 38 "OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)", 39 }, 40 { 41 "OpenJDK", 42 `Picked up _JAVA_OPTIONS: -Xmx2048m -Xms512m 43 openjdk version "11.0.1" 2018-10-16 44 OpenJDK Runtime Environment 18.9 (build 11.0.1+13) 45 OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)`, 46 "11.0.1", 47 "OpenJDK Runtime Environment 18.9 (build 11.0.1+13)", 48 "OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)", 49 }, 50 { 51 "IcedTea", 52 `java version "1.6.0_36" 53 OpenJDK Runtime Environment (IcedTea6 1.13.8) (6b36-1.13.8-0ubuntu1~12.04) 54 OpenJDK 64-Bit Server VM (build 23.25-b01, mixed mode)`, 55 "1.6.0_36", 56 "OpenJDK Runtime Environment (IcedTea6 1.13.8) (6b36-1.13.8-0ubuntu1~12.04)", 57 "OpenJDK 64-Bit Server VM (build 23.25-b01, mixed mode)", 58 }, 59 { 60 "Eclipse OpenJ9", 61 `openjdk version "1.8.0_192" 62 OpenJDK Runtime Environment (build 1.8.0_192-b12_openj9) 63 Eclipse OpenJ9 VM (build openj9-0.11.0, JRE 1.8.0 Linux amd64-64-Bit Compressed References 64 20181107_95 (JIT enabled, AOT enabled) 65 OpenJ9 - 090ff9dcd 66 OMR - ea548a66 67 JCL - b5a3affe73 based on jdk8u192-b12)`, 68 "1.8.0_192", 69 "OpenJDK Runtime Environment (build 1.8.0_192-b12_openj9)", 70 "Eclipse OpenJ9 VM (build openj9-0.11.0, JRE 1.8.0 Linux amd64-64-Bit Compressed References", 71 }, 72 { 73 "OpenJDK on CentOS 7", 74 `openjdk 11.0.11 2021-04-20 LTS 75 OpenJDK Runtime Environment 18.9 (build 11.0.11+9-LTS) 76 OpenJDK 64-Bit Server VM 18.9 (build 11.0.11+9-LTS, mixed mode, sharing)`, 77 `11.0.11`, 78 `OpenJDK Runtime Environment 18.9 (build 11.0.11+9-LTS)`, 79 `OpenJDK 64-Bit Server VM 18.9 (build 11.0.11+9-LTS, mixed mode, sharing)`, 80 }, 81 { 82 "Corretto 17 on Ubuntu 22.04", 83 `openjdk version "17.0.4.1" 2022-08-12 LTS 84 OpenJDK Runtime Environment Corretto-17.0.4.9.1 (build 17.0.4.1+9-LTS) 85 OpenJDK 64-Bit Server VM Corretto-17.0.4.9.1 (build 17.0.4.1+9-LTS, mixed mode, sharing)`, 86 `17.0.4.1`, 87 `OpenJDK Runtime Environment Corretto-17.0.4.9.1 (build 17.0.4.1+9-LTS)`, 88 `OpenJDK 64-Bit Server VM Corretto-17.0.4.9.1 (build 17.0.4.1+9-LTS, mixed mode, sharing)`, 89 }, 90 } 91 92 for _, c := range cases { 93 t.Run(c.name, func(t *testing.T) { 94 jdkVersion, jdkJRE, vm := parseJavaVersionOutput(c.output) 95 require.Equal(t, c.version, jdkVersion) 96 require.Equal(t, c.runtime, jdkJRE) 97 require.Equal(t, c.vm, vm) 98 }) 99 } 100 } 101 102 func TestDriver_javaVersionInfo(t *testing.T) { 103 ci.Parallel(t) 104 if runtime.GOOS == "windows" { 105 t.Skip("test requires bash to run") 106 } 107 108 initCmd := javaVersionCommand 109 defer func() { 110 javaVersionCommand = initCmd 111 }() 112 113 javaVersionCommand = []string{ 114 "/bin/sh", "-c", 115 fmt.Sprintf("printf '%%s\n' '%s' >/dev/stderr", 116 `java version "1.7.0_80" 117 Java(TM) SE Runtime Environment (build 1.7.0_80-b15) 118 Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)`), 119 } 120 121 version, jdkJRE, vm, err := javaVersionInfo() 122 require.NoError(t, err) 123 require.Equal(t, "1.7.0_80", version) 124 require.Equal(t, "Java(TM) SE Runtime Environment (build 1.7.0_80-b15)", jdkJRE) 125 require.Equal(t, "Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)", vm) 126 127 } 128 129 func TestDriver_javaVersionInfo_UnexpectedOutput(t *testing.T) { 130 ci.Parallel(t) 131 if runtime.GOOS == "windows" { 132 t.Skip("test requires bash to run") 133 } 134 135 initCmd := javaVersionCommand 136 defer func() { 137 javaVersionCommand = initCmd 138 }() 139 140 javaVersionCommand = []string{ 141 "/bin/sh", "-c", 142 fmt.Sprintf("printf '%%s\n' '%s' >/dev/stderr", "unexpected java -version output"), 143 } 144 145 version, jdkJRE, vm, err := javaVersionInfo() 146 require.NoError(t, err) 147 require.Equal(t, "", version) 148 require.Equal(t, "", jdkJRE) 149 require.Equal(t, "", vm) 150 } 151 152 func TestDriver_javaVersionInfo_JavaVersionFails(t *testing.T) { 153 ci.Parallel(t) 154 if runtime.GOOS == "windows" { 155 t.Skip("test requires bash to run") 156 } 157 158 initCmd := javaVersionCommand 159 defer func() { 160 javaVersionCommand = initCmd 161 }() 162 163 javaVersionCommand = []string{ 164 "/bin/sh", "-c", 165 "exit 127", 166 } 167 168 version, jdkJRE, vm, err := javaVersionInfo() 169 require.Error(t, err) 170 require.Contains(t, err.Error(), "failed to check java version") 171 172 require.Equal(t, "", version) 173 require.Equal(t, "", jdkJRE) 174 require.Equal(t, "", vm) 175 }