Refactor and improve code with experience from testing.

Add spec and acceptance tests for new code.
Extend documentation for new AdoptOpenJDK feature.
This commit is contained in:
Tim Eilers
2019-06-25 14:59:09 +02:00
committed by lionce
parent a88f01321d
commit c0748f164f
4 changed files with 685 additions and 71 deletions

View File

@@ -55,6 +55,56 @@ java::download { 'jdk8' :
} }
``` ```
The defined type `java::adopt` installs one or more versions of AdoptOpenJDK Java. `java::adopt` depends on [puppet/archive](https://github.com/voxpupuli/puppet-archive).
```puppet
java::adopt { 'jdk8' :
ensure => 'present',
version => '8',
java => 'jdk',
}
java::adopt { 'jdk11' :
ensure => 'present',
version => '11',
java => 'jdk',
}
```
#TODO
To install a specific release of a AdoptOpenJDK Java version, e.g. 8u202-b08, provide both parameters `version_major` and `version_minor` as follows:
```puppet
java::adopt { 'jdk8' :
ensure => 'present',
version_major => '8u202',
version_minor => 'b08',
java => 'jdk',
}
```
To install AdoptOpenJDK Java to a non-default basedir (defaults: /usr/lib/jvm for Debian; /usr/java for RedHat):
```puppet
java::adopt { 'jdk8' :
ensure => 'present',
version_major => '8u202',
version_minor => 'b08',
java => 'jdk',
basedir => '/custom/java',
}
```
To ensure that a custom basedir is a directory before AdoptOpenJDK Java is installed (note: manage separately for custom ownership or perms):
```puppet
java::adopt { 'jdk8' :
ensure => 'present',
version_major => '8u202',
version_minor => 'b08',
java => 'jdk',
manage_basedir => true,
basedir => '/custom/java',
}
```
## Reference ## Reference
For information on the classes and types, see the [REFERENCE.md](https://github.com/puppetlabs/puppetlabs-java/blob/master/REFERENCE.md). For information on the facts, see below. For information on the classes and types, see the [REFERENCE.md](https://github.com/puppetlabs/puppetlabs-java/blob/master/REFERENCE.md). For information on the facts, see below.
@@ -104,6 +154,13 @@ Oracle Java is supported on:
* CentOS 7 * CentOS 7
* Red Hat Enterprise Linux (RHEL) 7 * Red Hat Enterprise Linux (RHEL) 7
AdoptOpenJDK Java is supported on:
* CentOS
* Red Hat Enterprise Linux (RHEL)
* Amazon Linux
* Debian
### Known issues ### Known issues
Where Oracle change the format of the URLs to different installer packages, the curl to fetch the package may fail with a HTTP/404 error. In this case, passing a full known good URL using the `url` parameter will allow the module to still be able to install specific versions of the JRE/JDK. Note the `version_major` and `version_minor` parameters must be passed and must match the version downloaded using the known URL in the `url` parameter. Where Oracle change the format of the URLs to different installer packages, the curl to fetch the package may fail with a HTTP/404 error. In this case, passing a full known good URL using the `url` parameter will allow the module to still be able to install specific versions of the JRE/JDK. Note the `version_major` and `version_minor` parameters must be passed and must match the version downloaded using the known URL in the `url` parameter.

View File

@@ -5,18 +5,20 @@
# #
# Install one or more versions of AdoptOpenJDK Java. # Install one or more versions of AdoptOpenJDK Java.
# #
# Currently only Linux RedHat, Amazon and Debian are supported.
#
# Parameters # Parameters
# [*version*] # [*version*]
# Version of Java to install, e.g. '7' or '8'. Default values for major and minor # Version of Java to install, e.g. '8' or '9'. Default values for major and minor
# versions will be used. # versions will be used.
# #
# [*version_major*] # [*version_major*]
# Major version which should be installed, e.g. '8u101'. Must be used together with # Major version which should be installed, e.g. '8u101' or '9.0.4'. Must be used together with
# version_minor. # version_minor.
# #
# [*version_minor*] # [*version_minor*]
# Minor version which should be installed, e.g. 'b12'. Must be used together with # Minor version which should be installed, e.g. 'b12' (for version = '8') or '11' (for version != '8').
# version_major. # Must be used together with version_major.
# #
# [*java_edition*] # [*java_edition*]
# Type of Java Edition to install, jdk or jre. # Type of Java Edition to install, jdk or jre.
@@ -30,45 +32,6 @@
# [*proxy_type*] # [*proxy_type*]
# Proxy server type (none|http|https|ftp). (passed to archive) # Proxy server type (none|http|https|ftp). (passed to archive)
# #
# Variables
# [*release_major*]
# Major version release number for java_se. Used to construct download URL.
#
# [*release_minor*]
# Minor version release number for java_se. Used to construct download URL.
#
# [*install_path*]
# Base install path for specified version of java_se. Used to determine if java_se
# has already been installed.
#
# [*package_type*]
# Type of installation package for specified version of java_se. java_se 6 comes
# in a few installation package flavors and we need to account for them.
# Optional forced package types: rpm, rpmbin, tar.gz
#
# [*os*]
# Oracle java_se OS type.
#
# [*destination*]
# Destination directory to save java_se installer to. Usually /tmp on Linux and
# C:\TEMP on Windows.
#
# [*creates_path*]
# Fully qualified path to java_se after it is installed. Used to determine if
# java_se is already installed.
#
# [*arch*]
# Oracle java_se architecture type.
#
# [*package_name*]
# Name of the java_se installation package to download from Oracle's website.
#
# [*install_command*]
# Installation command used to install Oracle java_se. Installation commands
# differ by package_type. 'bin' types are installed via shell command. 'rpmbin'
# types have the rpms extracted and then forcibly installed. 'rpm' types are
# forcibly installed.
#
# [*basedir*] # [*basedir*]
# Directory under which the installation will occur. If not set, defaults to # Directory under which the installation will occur. If not set, defaults to
# /usr/lib/jvm for Debian and /usr/java for RedHat. # /usr/lib/jvm for Debian and /usr/java for RedHat.
@@ -77,6 +40,78 @@
# Whether to manage the basedir directory. Defaults to false. # Whether to manage the basedir directory. Defaults to false.
# Note: /usr/lib/jvm is managed for Debian by default, separate from this parameter. # Note: /usr/lib/jvm is managed for Debian by default, separate from this parameter.
# #
# [*package_type*]
# Type of installation package for specified version of java. java 6 comes
# in a few installation package flavors and we need to account for them.
# Optional forced package types: rpm, rpmbin, tar.gz
#
# Variables
# [*release_major*]
# Major version release number for java. Used to construct download URL.
#
# [*release_minor*]
# Minor version release number for java. Used to construct download URL.
#
# [*install_path*]
# Base install path for specified version of java. Used to determine if java
# has already been installed.
#
# [*os*]
# java OS type.
#
# [*destination*]
# Destination directory to save java installer to. Usually /tmp on Linux and
# C:\TEMP on Windows.
#
# [*creates_path*]
# Fully qualified path to java after it is installed. Used to determine if
# java is already installed.
#
# [*arch*]
# java architecture type.
#
# [*package_name*]
# Name of the java installation package to download from github.
#
# [*install_command*]
# Installation command used to install java. Installation commands
# differ by package_type. 'bin' types are installed via shell command. 'rpmbin'
# types have the rpms extracted and then forcibly installed. 'rpm' types are
# forcibly installed.
#
# [*spacer*]
# Spacer to be used in github download url. In major version 8 this is a simple dash
# in later versions they use a crazy plus sign, which needs to be used in urlencoded
# format
#
# [*download_folder_prefix*]
# Download folder name begins differently depending on the release. After major release
# 8, they have given it a dash. Be aware that even if you want to have a JRE, the folder
# still begins with "jdk"
#
# [*release_minor_url*]
# filled depending on major release. Until major release 8 the minor part needs to be given
# with a 'b' for build, in later versions it is a underscore or a plus sign, which needs
# to be stripped for the download url and is replaced with the given spaces (see above)
#
# [*_package_type*]
# Helper variable which gets filled depending on parameter package_type
#
# [*_basedir*]
# Helper variable which gets filled depending on parameter basedir
#
# [*_version*]
# Helper variable which gets filled depending on parameter version
#
# [*_version_int*]
# Helper variable which gets the value of $_version converted to integer
#
# [*_append_jre*]
# Helper variable which gets filled with the string "-jre" if jre was selected to build the correct install path
#
# [*_release_minor_package_name*]
# Helper variable which gets filled with the right minor string depending on the major version
#
define java::adopt ( define java::adopt (
$ensure = 'present', $ensure = 'present',
$version = '8', $version = '8',
@@ -101,40 +136,75 @@ define java::adopt (
# determine AdoptOpenJDK Java major and minor version, and installation path # determine AdoptOpenJDK Java major and minor version, and installation path
if $version_major and $version_minor { if $version_major and $version_minor {
$label = $version_major
$release_major = $version_major $release_major = $version_major
$release_minor = $version_minor $release_minor = $version_minor
$install_path = "${java}${release_major}${release_minor}" if ( $version_major[0] == '8' or $version_major[0] == '9' ) {
$_version = $version_major[0]
} else {
$_version = $version_major[0,2]
}
$_version_int = Numeric($_version)
if ( $java == 'jre' ) {
$_append_jre = '-jre'
} else {
$_append_jre = ''
}
# extracted folders look like this:
# jdk8u202-b08
# jdk-9.0.4+11
# jdk-10.0.2+13
# jdk-11.0.2+9
# jdk-12.0.1+12
# jdk8u202-b08-jre
# jdk-9.0.4+11-jre
# hence we need to check for the major version and build the install path according to it
if ( $_version_int == 8 ) {
$install_path = "jdk${release_major}-${release_minor}${_append_jre}"
} elsif ( $_version_int > 8 ) {
$install_path = "jdk-${release_major}+${release_minor}${_append_jre}"
} else {
fail ("unsupported version ${_version}")
}
} else { } else {
$_version = $version
# use default versions if no specific major and minor version parameters are provided # use default versions if no specific major and minor version parameters are provided
$label = $version
case $version { case $version {
'8' : { '8' : {
$release_major = '8u202' $release_major = '8u202'
$release_minor = 'b08' $release_minor = 'b08'
$install_path = "${java}1.8.0_202" $install_path = "${java}8u202-b08"
} }
'9' : { '9' : {
$release_major = '9.0.4' $release_major = '9.0.4'
$release_minor = '_11' $release_minor = '11'
$install_path = "${java}9.0.4_11" $install_path = "${java}-9.0.4+11"
} }
# minor release is given with +<number>, however package etc. works with underscore, so we use underscore here
'10' : { '10' : {
$release_major = '10.0.2' $release_major = '10.0.2'
$release_minor = '+13' $release_minor = '13'
$install_path = "${java}10.0.2_13" $install_path = "${java}-10.0.2+13"
} }
'11' : { '11' : {
$release_major = '11.0.2' $release_major = '11.0.2'
$release_minor = '_9' $release_minor = '9'
$install_path = "${java}11.0.2_9" $install_path = "${java}-11.0.2+9"
}
# minor release is given with +<number>, however package etc. works with underscore, so we use underscore here
'12' : {
$release_major = '12.0.1'
$release_minor = '12'
$install_path = "${java}-12.0.1+12"
} }
default : { default : {
$release_major = '8u202' $release_major = '8u202'
$release_minor = 'b08' $release_minor = 'b08'
$install_path = "${java}1.8.0_202" $install_path = "${java}8u202-b08"
} }
} }
} }
@@ -194,34 +264,43 @@ define java::adopt (
} }
} }
# following are based on this example: # package name and path for download from github
#
# following are build based on this real life example full URLs:
#
# https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u202-b08/OpenJDK8U-jdk_x64_linux_hotspot_8u202b08.tar.gz # https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u202-b08/OpenJDK8U-jdk_x64_linux_hotspot_8u202b08.tar.gz
#
# or
#
# https://github.com/AdoptOpenJDK/openjdk9-binaries/releases/download/jdk-9.0.4%2B11/OpenJDK9U-jdk_x64_linux_hotspot_9.0.4_11.tar.gz # https://github.com/AdoptOpenJDK/openjdk9-binaries/releases/download/jdk-9.0.4%2B11/OpenJDK9U-jdk_x64_linux_hotspot_9.0.4_11.tar.gz
# https://github.com/AdoptOpenJDK/openjdk10-binaries/releases/download/jdk-10.0.2%2B13/OpenJDK10U-jdk_x64_linux_hotspot_10.0.2_13.tar.gz
# https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.2%2B9/OpenJDK11U-jdk_x64_linux_hotspot_11.0.2_9.tar.gz # https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.2%2B9/OpenJDK11U-jdk_x64_linux_hotspot_11.0.2_9.tar.gz
# # https://github.com/AdoptOpenJDK/openjdk12-binaries/releases/download/jdk-12.0.1%2B12/OpenJDK12U-jdk_x64_linux_hotspot_12.0.1_12.tar.gz
# package name to download from github # jre just replaces jdk with jre in the archive name, but not in the path name!
# https://github.com/AdoptOpenJDK/openjdk9-binaries/releases/download/jdk-9.0.4%2B11/OpenJDK9U-jre_x64_linux_hotspot_9.0.4_11.tar.gz
if ( "${_version}" == '8' ) {
$_release_minor_package_name = $release_minor
} else {
$_release_minor_package_name = "_${release_minor}"
}
case $_package_type { case $_package_type {
'tar.gz': { 'tar.gz': {
$package_name = "OpenJDK${version}U-${java}_${arch}_${os}_hotspot_${release_major}${release_minor}.tar.gz" $package_name = "OpenJDK${_version}U-${java}_${arch}_${os}_hotspot_${release_major}${_release_minor_package_name}.tar.gz"
} }
default: { default: {
$package_name = "OpenJDK${version}U-${java}_${arch}_${os}_hotspot_${release_major}${release_minor}.tar.gz" $package_name = "OpenJDK${_version}U-${java}_${arch}_${os}_hotspot_${release_major}${_release_minor_package_name}.tar.gz"
} }
} }
if ( "${version}" == '8' ) { # naming convention changed after major version 8, setting variables to consider that
# download_folder_prefix always begins with "jdk", even for jre! see comments for package_name above
if ( "${_version}" == '8' ) {
$spacer = '-' $spacer = '-'
$download_folder_prefix = 'jdk' $download_folder_prefix = 'jdk'
$release_minor_url = $release_minor
} else { } else {
$spacer = '%2B' $spacer = '%2B'
$download_folder_prefix = 'jdk-' $download_folder_prefix = 'jdk-'
$release_minor_url = $release_minor[1,-1]
} }
$source = "https://github.com/AdoptOpenJDK/openjdk${version}-binaries/releases/download/${download_folder_prefix}${release_major}${spacer}${release_minor_url}/${package_name}" $source = "https://github.com/AdoptOpenJDK/openjdk${_version}-binaries/releases/download/${download_folder_prefix}${release_major}${spacer}${release_minor}/${package_name}"
# full path to the installer # full path to the installer
$destination = "${destination_dir}${package_name}" $destination = "${destination_dir}${package_name}"
@@ -262,10 +341,10 @@ define java::adopt (
} }
if $manage_basedir { if $manage_basedir {
ensure_resource('file', $_basedir, {'ensure' => 'directory', 'before' => Exec["Install AdoptOpenJDK java ${java} ${version} ${release_major} ${release_minor}"]}) ensure_resource('file', $_basedir, {'ensure' => 'directory', 'before' => Exec["Install AdoptOpenJDK java ${java} ${_version} ${release_major} ${release_minor}"]})
} }
exec { "Install AdoptOpenJDK java ${java} ${version} ${release_major} ${release_minor}" : exec { "Install AdoptOpenJDK java ${java} ${_version} ${release_major} ${release_minor}" :
path => '/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin', path => '/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin',
command => $install_command, command => $install_command,
creates => $creates_path, creates => $creates_path,

View File

@@ -42,6 +42,103 @@ bogus_alternative = "class { 'java':\n"\
'}' '}'
context 'installing java jre', unless: UNSUPPORTED_PLATFORMS.include?(os[:family]) do context 'installing java jre', unless: UNSUPPORTED_PLATFORMS.include?(os[:family]) do
# Oracle installs are disabled by default, because the links to valid oracle installations
# change often. Look the parameters up from the Oracle download URLs at https://java.oracle.com and
# enable the tests:
oracle_enabled = false
oracle_version_major = '8'
oracle_version_minor = '201'
oracle_version_build = '09'
oracle_hash = '42970487e3af4f5aa5bca3f542482c60'
install_oracle_jdk_jre = <<EOL
java::oracle {
'test_oracle_jre':
version => '#{oracle_version_major}',
version_major => '#{oracle_version_major}u#{oracle_version_minor}',
version_minor => 'b#{oracle_version_build}',
url_hash => '#{oracle_hash}',
java_se => 'jre',
}
java::oracle {
'test_oracle_jdk':
version => '#{oracle_version_major}',
version_major => '#{oracle_version_major}u#{oracle_version_minor}',
version_minor => 'b#{oracle_version_build}',
url_hash => '#{oracle_hash}',
java_se => 'jdk',
}
EOL
install_oracle_jre_jce = <<EOL
java::oracle {
'test_oracle_jre':
version => '#{oracle_version_major}',
version_major => '#{oracle_version_major}u#{oracle_version_minor}',
version_minor => 'b#{oracle_version_build}',
url_hash => '#{oracle_hash}',
java_se => 'jre',
jce => true,
}
EOL
install_oracle_jdk_jce = <<EOL
java::oracle {
'test_oracle_jdk':
version => '#{oracle_version_major}',
version_major => '#{oracle_version_major}u#{oracle_version_minor}',
version_minor => 'b#{oracle_version_build}',
url_hash => '#{oracle_hash}',
java_se => 'jdk',
jce => true,
}
EOL
# AdoptOpenJDK URLs are quite generic, so tests are enabled by default
# We need to test version 8 and >8 (here we use 9), because namings are different after version 8
adopt_enabled = true
adopt_version8_major = '8'
adopt_version8_minor = '202'
adopt_version8_build = '08'
adopt_version9_major = '9'
adopt_version9_full = '9.0.4'
adopt_version9_build = '11'
install_adopt_jdk_jre = <<EOL
java::adopt {
'test_adopt_jre_version8':
version => '#{adopt_version8_major}',
version_major => '#{adopt_version8_major}u#{adopt_version8_minor}',
version_minor => 'b#{adopt_version8_build}',
java => 'jre',
}
java::adopt {
'test_adopt_jdk_version8':
version => '#{adopt_version8_major}',
version_major => '#{adopt_version8_major}u#{adopt_version8_minor}',
version_minor => 'b#{adopt_version8_build}',
java => 'jdk',
}
java::adopt {
'test_adopt_jre_version9':
version => '#{adopt_version9_major}',
version_major => '#{adopt_version9_full}',
version_minor => '#{adopt_version9_build}',
java => 'jre',
}
java::adopt {
'test_adopt_jdk_version9':
version => '#{adopt_version9_major}',
version_major => '#{adopt_version9_full}',
version_minor => '#{adopt_version9_build}',
java => 'jdk',
}
EOL
context 'installing java jre', unless: UNSUPPORTED_PLATFORMS.include?(fact('osfamily')) do
it 'installs jre' do it 'installs jre' do
idempotent_apply(java_class_jre) idempotent_apply(java_class_jre)
end end
@@ -78,3 +175,47 @@ context 'with failure cases' do
end end
end end
end end
context 'java::oracle', if: oracle_enabled, unless: UNSUPPORTED_PLATFORMS.include?(fact('osfamily')) do
let(:install_path) do
(fact('osfamily') == 'RedHat') ? '/usr/java' : '/usr/lib/jvm'
end
let(:version_suffix) do
(fact('osfamily') == 'RedHat') ? '-amd64' : ''
end
it 'installs oracle jdk and jre' do
idempotent_apply(default, install_oracle_jdk_jre)
jdk_result = shell("test ! -e #{install_path}/jdk1.#{oracle_version_major}.0_#{oracle_version_minor}#{version_suffix}/jre/lib/security/local_policy.jar")
jre_result = shell("test ! -e #{install_path}/jre1.#{oracle_version_major}.0_#{oracle_version_minor}#{version_suffix}/lib/security/local_policy.jar")
expect(jdk_result.exit_code).to eq(0)
expect(jre_result.exit_code).to eq(0)
end
it 'installs oracle jdk with jce' do
idempotent_apply(default, install_oracle_jdk_jce)
result = shell("test -e #{install_path}/jdk1.#{oracle_version_major}.0_#{oracle_version_minor}#{version_suffix}/jre/lib/security/local_policy.jar")
expect(result.exit_code).to eq(0)
end
it 'installs oracle jre with jce' do
idempotent_apply(default, install_oracle_jre_jce)
result = shell("test -e #{install_path}/jre1.#{oracle_version_major}.0_#{oracle_version_minor}#{version_suffix}/lib/security/local_policy.jar")
expect(result.exit_code).to eq(0)
end
end
context 'java::adopt', if: adopt_enabled, unless: UNSUPPORTED_PLATFORMS.include?(fact('osfamily')) do
let(:install_path) do
(fact('osfamily') == 'RedHat') ? '/usr/java' : '/usr/lib/jvm'
end
let(:version_suffix) do
(fact('osfamily') == 'RedHat') ? '-amd64' : ''
end
it 'installs adopt jdk and jre' do
idempotent_apply(default, install_adopt_jdk_jre)
end
end

337
spec/defines/adopt_spec.rb Normal file
View File

@@ -0,0 +1,337 @@
require 'spec_helper'
describe 'java::adopt', type: :define do
context 'with CentOS 64-bit' do
let(:facts) { { kernel: 'Linux', os: { family: 'RedHat', architecture: 'x86_64', name: 'CentOS', release: { full: '6.0' } } } }
context 'when AdoptOpenJDK Java 8 JDK' do
let(:params) { { ensure: 'present', version: '8', java: 'jdk' } }
let(:title) { 'jdk8' }
it { is_expected.to contain_archive('/tmp/OpenJDK8U-jdk_x64_linux_hotspot_8u202b08.tar.gz') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jdk 8 8u202 b08').with_command('tar -zxf /tmp/OpenJDK8U-jdk_x64_linux_hotspot_8u202b08.tar.gz -C /usr/java') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jdk 8 8u202 b08').that_requires('Archive[/tmp/OpenJDK8U-jdk_x64_linux_hotspot_8u202b08.tar.gz]') }
end
context 'when AdoptOpenJDK Java 9 JDK' do
let(:params) { { ensure: 'present', version: '9', java: 'jdk' } }
let(:title) { 'jdk9' }
it { is_expected.to contain_archive('/tmp/OpenJDK9U-jdk_x64_linux_hotspot_9.0.4_11.tar.gz') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jdk 9 9.0.4 11').with_command('tar -zxf /tmp/OpenJDK9U-jdk_x64_linux_hotspot_9.0.4_11.tar.gz -C /usr/java') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jdk 9 9.0.4 11').that_requires('Archive[/tmp/OpenJDK9U-jdk_x64_linux_hotspot_9.0.4_11.tar.gz]') }
end
context 'when AdoptOpenJDK Java 10 JDK' do
let(:params) { { ensure: 'present', version: '10', java: 'jdk' } }
let(:title) { 'jdk10' }
it { is_expected.to contain_archive('/tmp/OpenJDK10U-jdk_x64_linux_hotspot_10.0.2_13.tar.gz') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jdk 10 10.0.2 13').with_command('tar -zxf /tmp/OpenJDK10U-jdk_x64_linux_hotspot_10.0.2_13.tar.gz -C /usr/java') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jdk 10 10.0.2 13').that_requires('Archive[/tmp/OpenJDK10U-jdk_x64_linux_hotspot_10.0.2_13.tar.gz]') }
end
context 'when AdoptOpenJDK Java 11 JDK' do
let(:params) { { ensure: 'present', version: '11', java: 'jdk' } }
let(:title) { 'jdk11' }
it { is_expected.to contain_archive('/tmp/OpenJDK11U-jdk_x64_linux_hotspot_11.0.2_9.tar.gz') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jdk 11 11.0.2 9').with_command('tar -zxf /tmp/OpenJDK11U-jdk_x64_linux_hotspot_11.0.2_9.tar.gz -C /usr/java') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jdk 11 11.0.2 9').that_requires('Archive[/tmp/OpenJDK11U-jdk_x64_linux_hotspot_11.0.2_9.tar.gz]') }
end
context 'when AdoptOpenJDK Java 12 JDK' do
let(:params) { { ensure: 'present', version: '12', java: 'jdk' } }
let(:title) { 'jdk12' }
it { is_expected.to contain_archive('/tmp/OpenJDK12U-jdk_x64_linux_hotspot_12.0.1_12.tar.gz') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jdk 12 12.0.1 12').with_command('tar -zxf /tmp/OpenJDK12U-jdk_x64_linux_hotspot_12.0.1_12.tar.gz -C /usr/java') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jdk 12 12.0.1 12').that_requires('Archive[/tmp/OpenJDK12U-jdk_x64_linux_hotspot_12.0.1_12.tar.gz]') }
end
context 'when AdoptOpenJDK Java 8 JRE' do
let(:params) { { ensure: 'present', version: '8', java: 'jre' } }
let(:title) { 'jre8' }
it { is_expected.to contain_archive('/tmp/OpenJDK8U-jre_x64_linux_hotspot_8u202b08.tar.gz') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jre 8 8u202 b08').with_command('tar -zxf /tmp/OpenJDK8U-jre_x64_linux_hotspot_8u202b08.tar.gz -C /usr/java') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jre 8 8u202 b08').that_requires('Archive[/tmp/OpenJDK8U-jre_x64_linux_hotspot_8u202b08.tar.gz]') }
end
context 'when AdoptOpenJDK Java 9 JRE' do
let(:params) { { ensure: 'present', version: '9', java: 'jre' } }
let(:title) { 'jre9' }
it { is_expected.to contain_archive('/tmp/OpenJDK9U-jre_x64_linux_hotspot_9.0.4_11.tar.gz') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jre 9 9.0.4 11').with_command('tar -zxf /tmp/OpenJDK9U-jre_x64_linux_hotspot_9.0.4_11.tar.gz -C /usr/java') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jre 9 9.0.4 11').that_requires('Archive[/tmp/OpenJDK9U-jre_x64_linux_hotspot_9.0.4_11.tar.gz]') }
end
context 'when AdoptOpenJDK Java 10 JRE' do
let(:params) { { ensure: 'present', version: '10', java: 'jre' } }
let(:title) { 'jre11' }
it { is_expected.to contain_archive('/tmp/OpenJDK10U-jre_x64_linux_hotspot_10.0.2_13.tar.gz') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jre 10 10.0.2 13').with_command('tar -zxf /tmp/OpenJDK10U-jre_x64_linux_hotspot_10.0.2_13.tar.gz -C /usr/java') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jre 10 10.0.2 13').that_requires('Archive[/tmp/OpenJDK10U-jre_x64_linux_hotspot_10.0.2_13.tar.gz]') }
end
context 'when AdoptOpenJDK Java 11 JRE' do
let(:params) { { ensure: 'present', version: '11', java: 'jre' } }
let(:title) { 'jre11' }
it { is_expected.to contain_archive('/tmp/OpenJDK11U-jre_x64_linux_hotspot_11.0.2_9.tar.gz') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jre 11 11.0.2 9').with_command('tar -zxf /tmp/OpenJDK11U-jre_x64_linux_hotspot_11.0.2_9.tar.gz -C /usr/java') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jre 11 11.0.2 9').that_requires('Archive[/tmp/OpenJDK11U-jre_x64_linux_hotspot_11.0.2_9.tar.gz]') }
end
context 'when AdoptOpenJDK Java 12 JRE' do
let(:params) { { ensure: 'present', version: '12', java: 'jre' } }
let(:title) { 'jre12' }
it { is_expected.to contain_archive('/tmp/OpenJDK12U-jre_x64_linux_hotspot_12.0.1_12.tar.gz') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jre 12 12.0.1 12').with_command('tar -zxf /tmp/OpenJDK12U-jre_x64_linux_hotspot_12.0.1_12.tar.gz -C /usr/java') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jre 12 12.0.1 12').that_requires('Archive[/tmp/OpenJDK12U-jre_x64_linux_hotspot_12.0.1_12.tar.gz]') }
end
context 'when installing multiple versions' do
let(:params) do
{
ensure: 'present',
version_major: '8u202',
version_minor: 'b08',
java: 'jdk',
}
end
let(:title) { 'jdk8' }
let(:pre_condition) do
<<-EOL
java::adopt {
'jdk8172':
ensure => 'present',
version_major => '8u172',
version_minor => 'b11',
java => 'jdk',
}
EOL
end
it { is_expected.to compile }
end
context 'when specifying package_type tar.gz and basedir' do
let(:params) do
{
ensure: 'present',
version: '8',
java: 'jdk',
basedir: '/usr/java',
package_type: 'tar.gz',
}
end
let(:title) { 'jdk8' }
it { is_expected.to contain_archive('/tmp/OpenJDK8U-jdk_x64_linux_hotspot_8u202b08.tar.gz') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jdk 8 8u202 b08').with_command('tar -zxf /tmp/OpenJDK8U-jdk_x64_linux_hotspot_8u202b08.tar.gz -C /usr/java') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jdk 8 8u202 b08').that_requires('Archive[/tmp/OpenJDK8U-jdk_x64_linux_hotspot_8u202b08.tar.gz]') }
end
context 'when manage_basedir is set to true' do
let(:params) do
{
ensure: 'present',
version: '8',
java: 'jdk',
basedir: '/usr/java',
manage_basedir: true,
}
end
let(:title) { 'jdk8' }
it { is_expected.to contain_file('/usr/java') }
end
end
context 'with Ubuntu 64-bit' do
let(:facts) { { kernel: 'Linux', os: { family: 'Debian', architecture: 'amd64', name: 'Ubuntu', release: { full: '16.04' } } } }
context 'when AdoptOpenJDK Java 8 JDK' do
let(:params) { { ensure: 'present', version: '8', java: 'jdk' } }
let(:title) { 'jdk8' }
it { is_expected.to contain_archive('/tmp/OpenJDK8U-jdk_x64_linux_hotspot_8u202b08.tar.gz') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jdk 8 8u202 b08').with_command('tar -zxf /tmp/OpenJDK8U-jdk_x64_linux_hotspot_8u202b08.tar.gz -C /usr/lib/jvm') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jdk 8 8u202 b08').that_requires('Archive[/tmp/OpenJDK8U-jdk_x64_linux_hotspot_8u202b08.tar.gz]') }
end
context 'when AdoptOpenJDK Java 9 JDK' do
let(:params) { { ensure: 'present', version: '9', java: 'jdk' } }
let(:title) { 'jdk9' }
it { is_expected.to contain_archive('/tmp/OpenJDK9U-jdk_x64_linux_hotspot_9.0.4_11.tar.gz') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jdk 9 9.0.4 11').with_command('tar -zxf /tmp/OpenJDK9U-jdk_x64_linux_hotspot_9.0.4_11.tar.gz -C /usr/lib/jvm') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jdk 9 9.0.4 11').that_requires('Archive[/tmp/OpenJDK9U-jdk_x64_linux_hotspot_9.0.4_11.tar.gz]') }
end
context 'when AdoptOpenJDK Java 10 JDK' do
let(:params) { { ensure: 'present', version: '10', java: 'jdk' } }
let(:title) { 'jdk10' }
it { is_expected.to contain_archive('/tmp/OpenJDK10U-jdk_x64_linux_hotspot_10.0.2_13.tar.gz') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jdk 10 10.0.2 13').with_command('tar -zxf /tmp/OpenJDK10U-jdk_x64_linux_hotspot_10.0.2_13.tar.gz -C /usr/lib/jvm') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jdk 10 10.0.2 13').that_requires('Archive[/tmp/OpenJDK10U-jdk_x64_linux_hotspot_10.0.2_13.tar.gz]') }
end
context 'when AdoptOpenJDK Java 11 JDK' do
let(:params) { { ensure: 'present', version: '11', java: 'jdk' } }
let(:title) { 'jdk11' }
it { is_expected.to contain_archive('/tmp/OpenJDK11U-jdk_x64_linux_hotspot_11.0.2_9.tar.gz') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jdk 11 11.0.2 9').with_command('tar -zxf /tmp/OpenJDK11U-jdk_x64_linux_hotspot_11.0.2_9.tar.gz -C /usr/lib/jvm') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jdk 11 11.0.2 9').that_requires('Archive[/tmp/OpenJDK11U-jdk_x64_linux_hotspot_11.0.2_9.tar.gz]') }
end
context 'when AdoptOpenJDK Java 12 JDK' do
let(:params) { { ensure: 'present', version: '12', java: 'jdk' } }
let(:title) { 'jdk12' }
it { is_expected.to contain_archive('/tmp/OpenJDK12U-jdk_x64_linux_hotspot_12.0.1_12.tar.gz') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jdk 12 12.0.1 12').with_command('tar -zxf /tmp/OpenJDK12U-jdk_x64_linux_hotspot_12.0.1_12.tar.gz -C /usr/lib/jvm') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jdk 12 12.0.1 12').that_requires('Archive[/tmp/OpenJDK12U-jdk_x64_linux_hotspot_12.0.1_12.tar.gz]') }
end
context 'when AdoptOpenJDK Java 8 JRE' do
let(:params) { { ensure: 'present', version: '8', java: 'jre' } }
let(:title) { 'jre8' }
it { is_expected.to contain_archive('/tmp/OpenJDK8U-jre_x64_linux_hotspot_8u202b08.tar.gz') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jre 8 8u202 b08').with_command('tar -zxf /tmp/OpenJDK8U-jre_x64_linux_hotspot_8u202b08.tar.gz -C /usr/lib/jvm') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jre 8 8u202 b08').that_requires('Archive[/tmp/OpenJDK8U-jre_x64_linux_hotspot_8u202b08.tar.gz]') }
end
context 'when AdoptOpenJDK Java 9 JRE' do
let(:params) { { ensure: 'present', version: '9', java: 'jre' } }
let(:title) { 'jre9' }
it { is_expected.to contain_archive('/tmp/OpenJDK9U-jre_x64_linux_hotspot_9.0.4_11.tar.gz') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jre 9 9.0.4 11').with_command('tar -zxf /tmp/OpenJDK9U-jre_x64_linux_hotspot_9.0.4_11.tar.gz -C /usr/lib/jvm') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jre 9 9.0.4 11').that_requires('Archive[/tmp/OpenJDK9U-jre_x64_linux_hotspot_9.0.4_11.tar.gz]') }
end
context 'when AdoptOpenJDK Java 10 JRE' do
let(:params) { { ensure: 'present', version: '10', java: 'jre' } }
let(:title) { 'jre11' }
it { is_expected.to contain_archive('/tmp/OpenJDK10U-jre_x64_linux_hotspot_10.0.2_13.tar.gz') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jre 10 10.0.2 13').with_command('tar -zxf /tmp/OpenJDK10U-jre_x64_linux_hotspot_10.0.2_13.tar.gz -C /usr/lib/jvm') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jre 10 10.0.2 13').that_requires('Archive[/tmp/OpenJDK10U-jre_x64_linux_hotspot_10.0.2_13.tar.gz]') }
end
context 'when AdoptOpenJDK Java 11 JRE' do
let(:params) { { ensure: 'present', version: '11', java: 'jre' } }
let(:title) { 'jre11' }
it { is_expected.to contain_archive('/tmp/OpenJDK11U-jre_x64_linux_hotspot_11.0.2_9.tar.gz') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jre 11 11.0.2 9').with_command('tar -zxf /tmp/OpenJDK11U-jre_x64_linux_hotspot_11.0.2_9.tar.gz -C /usr/lib/jvm') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jre 11 11.0.2 9').that_requires('Archive[/tmp/OpenJDK11U-jre_x64_linux_hotspot_11.0.2_9.tar.gz]') }
end
context 'when AdoptOpenJDK Java 12 JRE' do
let(:params) { { ensure: 'present', version: '12', java: 'jre' } }
let(:title) { 'jre12' }
it { is_expected.to contain_archive('/tmp/OpenJDK12U-jre_x64_linux_hotspot_12.0.1_12.tar.gz') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jre 12 12.0.1 12').with_command('tar -zxf /tmp/OpenJDK12U-jre_x64_linux_hotspot_12.0.1_12.tar.gz -C /usr/lib/jvm') }
it { is_expected.to contain_exec('Install AdoptOpenJDK java jre 12 12.0.1 12').that_requires('Archive[/tmp/OpenJDK12U-jre_x64_linux_hotspot_12.0.1_12.tar.gz]') }
end
context 'when installing multiple versions' do
let(:params) do
{
ensure: 'present',
version_major: '8u202',
version_minor: 'b08',
java: 'jdk',
}
end
let(:title) { 'jdk8' }
let(:pre_condition) do
<<-EOL
java::adopt {
'jdk8172':
ensure => 'present',
version_major => '8u172',
version_minor => 'b11',
java => 'jdk',
}
EOL
end
it { is_expected.to compile }
end
end
describe 'incompatible OSes' do
[
{
kernel: 'Windows',
os: {
family: 'Windows',
name: 'Windows',
release: {
full: '8.1',
},
},
},
{
kernel: 'Darwin',
os: {
family: 'Darwin',
name: 'Darwin',
release: {
full: '13.3.0',
},
},
},
{
kernel: 'AIX',
os: {
family: 'AIX',
name: 'AIX',
release: {
full: '7100-02-00-000',
},
},
},
{
kernel: 'AIX',
os: {
family: 'AIX',
name: 'AIX',
release: {
full: '6100-07-04-1216',
},
},
},
{
kernel: 'AIX',
os: {
family: 'AIX',
name: 'AIX',
release: {
full: '5300-12-01-1016',
},
},
},
].each do |facts|
let(:facts) { facts }
let(:title) { 'jdk' }
it "is_expected.to fail on #{facts[:os][:name]} #{facts[:os][:release][:full]}" do
expect { catalogue }.to raise_error Puppet::Error, %r{unsupported platform}
end
end
end
end