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  }