diff --git a/.rubocop.yml b/.rubocop.yml index 5aadd1b..515ef63 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,508 +1,98 @@ -require: rubocop-rspec +--- +require: + - rubocop-rspec AllCops: - TargetRubyVersion: 1.9 + TargetRubyVersion: '2.1' Include: - - ./**/*.rb + - "./**/*.rb" Exclude: - - vendor/**/* - - .vendor/**/* - - pkg/**/* - - spec/fixtures/**/* -Lint/ConditionPosition: - Enabled: True - -Lint/ElseLayout: - Enabled: True - -Lint/UnreachableCode: - Enabled: True - -Lint/UselessComparison: - Enabled: True - -Lint/EnsureReturn: - Enabled: True - -Lint/HandleExceptions: - Enabled: True - -Lint/LiteralInCondition: - Enabled: True - -Lint/ShadowingOuterLocalVariable: - Enabled: True - -Lint/LiteralInInterpolation: - Enabled: True - -Style/HashSyntax: - Enabled: True - -Style/RedundantReturn: - Enabled: True - -Lint/AmbiguousOperator: - Enabled: True - -Lint/AssignmentInCondition: - Enabled: True - -Style/SpaceBeforeComment: - Enabled: True - -Style/AndOr: - Enabled: True - -Style/RedundantSelf: - Enabled: True - -# Method length is not necessarily an indicator of code quality -Metrics/MethodLength: - Enabled: False - -# Module length is not necessarily an indicator of code quality -Metrics/ModuleLength: - Enabled: False - -Style/WhileUntilModifier: - Enabled: True - -Lint/AmbiguousRegexpLiteral: - Enabled: True - -Lint/Eval: - Enabled: True - -Lint/BlockAlignment: - Enabled: True - -Lint/DefEndAlignment: - Enabled: True - -Lint/EndAlignment: - Enabled: True - -Lint/DeprecatedClassMethods: - Enabled: True - -Lint/Loop: - Enabled: True - -Lint/ParenthesesAsGroupedExpression: - Enabled: True - -Lint/RescueException: - Enabled: True - -Lint/StringConversionInInterpolation: - Enabled: True - -Lint/UnusedBlockArgument: - Enabled: True - -Lint/UnusedMethodArgument: - Enabled: True - -Lint/UselessAccessModifier: - Enabled: True - -Lint/UselessAssignment: - Enabled: True - -Lint/Void: - Enabled: True - -Style/AccessModifierIndentation: - Enabled: True - -Style/AccessorMethodName: - Enabled: True - -Style/Alias: - Enabled: True - -Style/AlignArray: - Enabled: True - -Style/AlignHash: - Enabled: True - -Style/AlignParameters: - Enabled: True - -Metrics/BlockNesting: - Enabled: True - -Style/AsciiComments: - Enabled: True - -Style/Attr: - Enabled: True - -Style/BracesAroundHashParameters: - Enabled: True - -Style/CaseEquality: - Enabled: True - -Style/CaseIndentation: - Enabled: True - -Style/CharacterLiteral: - Enabled: True - -Style/ClassAndModuleCamelCase: - Enabled: True - -Style/ClassAndModuleChildren: - Enabled: False - -Style/ClassCheck: - Enabled: True - -# Class length is not necessarily an indicator of code quality -Metrics/ClassLength: - Enabled: False - -Style/ClassMethods: - Enabled: True - -Style/ClassVars: - Enabled: True - -Style/WhenThen: - Enabled: True - -Style/WordArray: - Enabled: True - -Style/UnneededPercentQ: - Enabled: True - -Style/Tab: - Enabled: True - -Style/SpaceBeforeSemicolon: - Enabled: True - -Style/TrailingBlankLines: - Enabled: True - -Style/SpaceInsideBlockBraces: - Enabled: True - -Style/SpaceInsideBrackets: - Enabled: True - -Style/SpaceInsideHashLiteralBraces: - Enabled: True - -Style/SpaceInsideParens: - Enabled: True - -Style/LeadingCommentSpace: - Enabled: True - -Style/SpaceBeforeFirstArg: - Enabled: True - -Style/SpaceAfterColon: - Enabled: True - -Style/SpaceAfterComma: - Enabled: True - -Style/SpaceAfterMethodName: - Enabled: True - -Style/SpaceAfterNot: - Enabled: True - -Style/SpaceAfterSemicolon: - Enabled: True - -Style/SpaceAroundEqualsInParameterDefault: - Enabled: True - -Style/SpaceAroundOperators: - Enabled: True - -Style/SpaceBeforeBlockBraces: - Enabled: True - -Style/SpaceBeforeComma: - Enabled: True - -Style/CollectionMethods: - Enabled: True - -Style/CommentIndentation: - Enabled: True - -Style/ColonMethodCall: - Enabled: True - -Style/CommentAnnotation: - Enabled: True - -# 'Complexity' is very relative -Metrics/CyclomaticComplexity: - Enabled: False - -Style/ConstantName: - Enabled: True - -Style/Documentation: - Enabled: False - -Style/DefWithParentheses: - Enabled: True - -Style/PreferredHashMethods: - Enabled: True - -Style/DotPosition: - EnforcedStyle: trailing - -Style/DoubleNegation: - Enabled: True - -Style/EachWithObject: - Enabled: True - -Style/EmptyLineBetweenDefs: - Enabled: True - -Style/IndentArray: - Enabled: True - -Style/IndentHash: - Enabled: True - -Style/IndentationConsistency: - Enabled: True - -Style/IndentationWidth: - Enabled: True - -Style/EmptyLines: - Enabled: True - -Style/EmptyLinesAroundAccessModifier: - Enabled: True - -Style/EmptyLiteral: - Enabled: True - -# Configuration parameters: AllowURI, URISchemes. + - bin/* + - ".vendor/**/*" + - Gemfile + - Rakefile + - pkg/**/* + - spec/fixtures/**/* + - vendor/**/* +inherit_from: .rubocop_todo.yml Metrics/LineLength: - Enabled: False - -Style/MethodCallParentheses: - Enabled: True - -Style/MethodDefParentheses: - Enabled: True - -Style/LineEndConcatenation: - Enabled: True - -Style/TrailingWhitespace: - Enabled: True - -Style/StringLiterals: - Enabled: True - -Style/TrailingCommaInArguments: - Enabled: True - -Style/TrailingCommaInLiteral: - Enabled: True - -Style/GlobalVars: - Enabled: True - -Style/GuardClause: - Enabled: True - -Style/IfUnlessModifier: - Enabled: True - -Style/MultilineIfThen: - Enabled: True - -Style/NegatedIf: - Enabled: True - -Style/NegatedWhile: - Enabled: True - -Style/Next: - Enabled: True - -Style/SingleLineBlockParams: - Enabled: True - -Style/SingleLineMethods: - Enabled: True - -Style/SpecialGlobalVars: - Enabled: True - -Style/TrivialAccessors: - Enabled: True - -Style/UnlessElse: - Enabled: True - -Style/VariableInterpolation: - Enabled: True - -Style/VariableName: - Enabled: True - -Style/WhileUntilDo: - Enabled: True - -Style/EvenOdd: - Enabled: True - -Style/FileName: - Enabled: True - -Style/For: - Enabled: True - -Style/Lambda: - Enabled: True - -Style/MethodName: - Enabled: True - -Style/MultilineTernaryOperator: - Enabled: True - -Style/NestedTernaryOperator: - Enabled: True - -Style/NilComparison: - Enabled: True - -Style/FormatString: - Enabled: True - -Style/MultilineBlockChain: - Enabled: True - -Style/Semicolon: - Enabled: True - -Style/SignalException: - Enabled: True - -Style/NonNilCheck: - Enabled: True - -Style/Not: - Enabled: True - -Style/NumericLiterals: - Enabled: True - -Style/OneLineConditional: - Enabled: True - -Style/OpMethod: - Enabled: True - -Style/ParenthesesAroundCondition: - Enabled: True - -Style/PercentLiteralDelimiters: - Enabled: True - -Style/PerlBackrefs: - Enabled: True - -Style/PredicateName: - Enabled: True - -Style/RedundantException: - Enabled: True - -Style/SelfAssignment: - Enabled: True - -Style/Proc: - Enabled: True - -Style/RaiseArgs: - Enabled: True - -Style/RedundantBegin: - Enabled: True - -Style/RescueModifier: - Enabled: True - -# based on https://github.com/voxpupuli/modulesync_config/issues/168 -Style/RegexpLiteral: - EnforcedStyle: percent_r - Enabled: True - -Lint/UnderscorePrefixedVariableName: - Enabled: True - -Metrics/ParameterLists: - Enabled: False - -Lint/RequireParentheses: - Enabled: True - -Style/SpaceBeforeFirstArg: - Enabled: True - -Style/ModuleFunction: - Enabled: True - -Lint/Debugger: - Enabled: True - -Style/IfWithSemicolon: - Enabled: True - -Style/Encoding: - Enabled: True - + Description: People have wide screens, use them. + Max: 200 +RSpec/BeforeAfterAll: + Description: Beware of using after(:all) as it may cause state to leak between tests. + A necessary evil in acceptance testing. + Exclude: + - spec/acceptance/**/*.rb +RSpec/HookArgument: + Description: Prefer explicit :each argument, matching existing module's style + EnforcedStyle: each Style/BlockDelimiters: - Enabled: True - -Style/MultilineBlockLayout: - Enabled: True - -# 'Complexity' is very relative + Description: Prefer braces for chaining. Mostly an aesthetical choice. Better to + be consistent then. + EnforcedStyle: braces_for_chaining +Style/ClassAndModuleChildren: + Description: Compact style reduces the required amount of indentation. + EnforcedStyle: compact +Style/EmptyElse: + Description: Enforce against empty else clauses, but allow `nil` for clarity. + EnforcedStyle: empty +Style/FormatString: + Description: Following the main puppet project's style, prefer the % format format. + EnforcedStyle: percent +Style/FormatStringToken: + Description: Following the main puppet project's style, prefer the simpler template + tokens over annotated ones. + EnforcedStyle: template +Style/Lambda: + Description: Prefer the keyword for easier discoverability. + EnforcedStyle: literal +Style/RegexpLiteral: + Description: Community preference. See https://github.com/voxpupuli/modulesync_config/issues/168 + EnforcedStyle: percent_r +Style/TernaryParentheses: + Description: Checks for use of parentheses around ternary conditions. Enforce parentheses + on complex expressions for better readability, but seriously consider breaking + it up. + EnforcedStyle: require_parentheses_when_complex +Style/TrailingCommaInArguments: + Description: Prefer always trailing comma on multiline argument lists. This makes + diffs, and re-ordering nicer. + EnforcedStyleForMultiline: comma +Style/TrailingCommaInLiteral: + Description: Prefer always trailing comma on multiline literals. This makes diffs, + and re-ordering nicer. + EnforcedStyleForMultiline: comma +Style/SymbolArray: + Description: Using percent style obscures symbolic intent of array's contents. + EnforcedStyle: brackets +Style/CollectionMethods: + Enabled: true +Style/MethodCalledOnDoEndBlock: + Enabled: true +Style/StringMethods: + Enabled: true Metrics/AbcSize: - Enabled: False - -# 'Complexity' is very relative + Enabled: false +Metrics/BlockLength: + Enabled: false +Metrics/ClassLength: + Enabled: false +Metrics/CyclomaticComplexity: + Enabled: false +Metrics/MethodLength: + Enabled: false +Metrics/ModuleLength: + Enabled: false +Metrics/ParameterLists: + Enabled: false Metrics/PerceivedComplexity: - Enabled: False - -Lint/UselessAssignment: - Enabled: True - -Style/ClosingParenthesisIndentation: - Enabled: False - -# RSpec - -# We don't use rspec in this way + Enabled: false RSpec/DescribeClass: - Enabled: False - -# Example length is not necessarily an indicator of code quality -RSpec/ExampleLength: - Enabled: False - -RSpec/NamedSubject: - Enabled: False + Enabled: false +RSpec/MessageExpectation: + Enabled: false +Style/AsciiComments: + Enabled: false +Style/IfUnlessModifier: + Enabled: false +Style/SymbolProc: + Enabled: false diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml new file mode 100644 index 0000000..e69de29 diff --git a/.sync.yml b/.sync.yml index c1cd868..9361cb4 100644 --- a/.sync.yml +++ b/.sync.yml @@ -3,3 +3,6 @@ appveyor.yml: delete: true spec/spec_helper.rb: allow_deprecations: true +extras: +- rvm: 2.1.9 + script: bundle exec rake rubocop \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 38d2263..6055eb1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -28,5 +28,7 @@ matrix: - rvm: 2.1.9 bundler_args: --without system_tests env: PUPPET_GEM_VERSION="~> 4.0" + - rvm: 2.1.9 + script: bundle exec rake rubocop notifications: email: false diff --git a/lib/facter/java_default_home.rb b/lib/facter/java_default_home.rb index c6b653d..4fa49cc 100644 --- a/lib/facter/java_default_home.rb +++ b/lib/facter/java_default_home.rb @@ -11,18 +11,20 @@ # Notes: # None Facter.add(:java_default_home) do - confine :kernel => [ 'Linux', 'OpenBSD' ] + confine kernel: %w[Linux OpenBSD] + java_default_home = nil setcode do java_bin = Facter::Util::Resolution.which('java').to_s.strip if java_bin.empty? nil else java_path = File.realpath(java_bin) - if java_path =~ %r(/jre/) - java_default_home = File.dirname(File.dirname(File.dirname(java_path))) - else - java_default_home = File.dirname(File.dirname(java_path)) - end + java_default_home = if java_path =~ %r{/jre/} + File.dirname(File.dirname(File.dirname(java_path))) + else + File.dirname(File.dirname(java_path)) + end end end + java_default_home end diff --git a/lib/facter/java_libjvm_path.rb b/lib/facter/java_libjvm_path.rb index 792d494..fa73521 100644 --- a/lib/facter/java_libjvm_path.rb +++ b/lib/facter/java_libjvm_path.rb @@ -11,7 +11,7 @@ # Notes: # None Facter.add(:java_libjvm_path) do - confine :kernel => [ "Linux", "OpenBSD" ] + confine kernel: %w[Linux OpenBSD] setcode do java_default_home = Facter.value(:java_default_home) java_libjvm_file = Dir.glob("#{java_default_home}/jre/lib/**/libjvm.so") @@ -22,4 +22,3 @@ Facter.add(:java_libjvm_path) do end end end - diff --git a/lib/facter/java_major_version.rb b/lib/facter/java_major_version.rb index b0a0aae..8fc04e2 100644 --- a/lib/facter/java_major_version.rb +++ b/lib/facter/java_major_version.rb @@ -13,8 +13,10 @@ # Notes: # None Facter.add(:java_major_version) do + java_major_version = nil setcode do java_version = Facter.value(:java_version) - java_patch_level = java_version.strip.split('_')[0].split('.')[1] unless java_version.nil? + java_major_version = java_version.strip.split('_')[0].split('.')[1] unless java_version.nil? end -end \ No newline at end of file + java_major_version +end diff --git a/lib/facter/java_patch_level.rb b/lib/facter/java_patch_level.rb index 1d7921f..0c952ec 100644 --- a/lib/facter/java_patch_level.rb +++ b/lib/facter/java_patch_level.rb @@ -11,8 +11,10 @@ # Notes: # None Facter.add(:java_patch_level) do + java_patch_level = nil setcode do java_version = Facter.value(:java_version) java_patch_level = java_version.strip.split('_')[1] unless java_version.nil? end -end \ No newline at end of file + java_patch_level +end diff --git a/lib/facter/java_version.rb b/lib/facter/java_version.rb index 4392bfe..f717f69 100644 --- a/lib/facter/java_version.rb +++ b/lib/facter/java_version.rb @@ -21,10 +21,10 @@ Facter.add(:java_version) do # Additionally, facter versions prior to 2.0.1 only support # positive matches, so this needs to be done manually in setcode. setcode do - unless [ 'darwin' ].include? Facter.value(:operatingsystem).downcase + unless ['darwin'].include? Facter.value(:operatingsystem).downcase version = nil if Facter::Util::Resolution.which('java') - Facter::Util::Resolution.exec('java -Xmx12m -version 2>&1').lines.each { |line| version = $~[1] if /^.+ version \"(.+)\"$/ =~ line } + Facter::Util::Resolution.exec('java -Xmx12m -version 2>&1').lines.each { |line| version = $LAST_MATCH_INFO[1] if %r{^.+ version \"(.+)\"$} =~ line } end version end @@ -32,12 +32,12 @@ Facter.add(:java_version) do end Facter.add(:java_version) do - confine :operatingsystem => 'Darwin' + confine operatingsystem: 'Darwin' has_weight 100 setcode do - unless /Unable to find any JVMs matching version/ =~ Facter::Util::Resolution.exec('/usr/libexec/java_home --failfast 2>&1') + unless %r{Unable to find any JVMs matching version} =~ Facter::Util::Resolution.exec('/usr/libexec/java_home --failfast 2>&1') version = nil - Facter::Util::Resolution.exec('java -Xmx12m -version 2>&1').lines.each { |line| version = $~[1] if /^.+ version \"(.+)\"$/ =~ line } + Facter::Util::Resolution.exec('java -Xmx12m -version 2>&1').lines.each { |line| version = $LAST_MATCH_INFO[1] if %r{^.+ version \"(.+)\"$} =~ line } version end end diff --git a/spec/acceptance/install_spec.rb b/spec/acceptance/install_spec.rb index bf721b9..48e842f 100644 --- a/spec/acceptance/install_spec.rb +++ b/spec/acceptance/install_spec.rb @@ -1,13 +1,13 @@ require 'spec_helper_acceptance' -#RedHat, CentOS, Scientific, Oracle prior to 5.0 : Sun Java JDK/JRE 1.6 -#RedHat, CentOS, Scientific, Oracle 5.0 < x < 6.3 : OpenJDK Java JDK/JRE 1.6 -#RedHat, CentOS, Scientific, Oracle after 6.3 : OpenJDK Java JDK/JRE 1.7 -#Debian 5/6 & Ubuntu 10.04/11.04 : OpenJDK Java JDK/JRE 1.6 or Sun Java JDK/JRE 1.6 -#Debian 7/Jesse & Ubuntu 12.04 - 14.04 : OpenJDK Java JDK/JRE 1.7 or Oracle Java JDK/JRE 1.6 -#Solaris (what versions?) : Java JDK/JRE 1.7 -#OpenSuSE : OpenJDK Java JDK/JRE 1.7 -#SLES : IBM Java JDK/JRE 1.6 +# RedHat, CentOS, Scientific, Oracle prior to 5.0 : Sun Java JDK/JRE 1.6 +# RedHat, CentOS, Scientific, Oracle 5.0 < x < 6.3 : OpenJDK Java JDK/JRE 1.6 +# RedHat, CentOS, Scientific, Oracle after 6.3 : OpenJDK Java JDK/JRE 1.7 +# Debian 5/6 & Ubuntu 10.04/11.04 : OpenJDK Java JDK/JRE 1.6 or Sun Java JDK/JRE 1.6 +# Debian 7/Jesse & Ubuntu 12.04 - 14.04 : OpenJDK Java JDK/JRE 1.7 or Oracle Java JDK/JRE 1.6 +# Solaris (what versions?) : Java JDK/JRE 1.7 +# OpenSuSE : OpenJDK Java JDK/JRE 1.7 +# SLES : IBM Java JDK/JRE 1.6 # C14677 # C14678 @@ -26,74 +26,103 @@ require 'spec_helper_acceptance' # C14723 Where is oracle linux 5? # C14724 Where is oracle linux 5? # C14771 Where is redhat 7? Centos 7? -describe "installing java", :unless => UNSUPPORTED_PLATFORMS.include?(fact('osfamily')) do - describe "jre" do - it 'should install jre' do - pp = <<-EOS - class { 'java': - distribution => 'jre', - } - EOS - # With the version of java that ships with pe on debian wheezy, update-alternatives - # throws an error on the first run due to missing alternative for policytool. It still - # updates the alternatives for java - if fact('operatingsystem') == 'Debian' and fact('lsbdistcodename') == 'wheezy' - apply_manifest(pp) - else - apply_manifest(pp, :catch_failures => true) - end - apply_manifest(pp, :catch_changes => true) - end - end - describe "jdk" do - it 'should install jdk' do - pp = <<-EOS - class { 'java': } - EOS +java_class_jre = "class { 'java':\n"\ + " distribution => 'jre',\n"\ + '}' - apply_manifest(pp, :catch_failures => true) - apply_manifest(pp, :catch_changes => true) - end +java_class = "class { 'java': }" + +sources = "file_line { 'non-free source':\n"\ + " path => '/etc/apt/sources.list',\n"\ + " match => \"deb http://osmirror.delivery.puppetlabs.net/debian/ ${::lsbdistcodename} main\",\n"\ + " line => \"deb http://osmirror.delivery.puppetlabs.net/debian/ ${::lsbdistcodename} main non-free\",\n"\ + '}' + +sun_jre = "class { 'java':\n"\ + " distribution => 'sun-jre',\n"\ + '}' + +sun_jdk = "class { 'java':\n"\ + " distribution => 'sun-jdk',\n"\ + '}' + +oracle_jre = "class { 'java':\n"\ + " distribution => 'oracle-jre',\n"\ + '}' + +oracle_jdk = "class { 'java':\n"\ + " distribution => 'oracle-jdk',\n"\ + '}' + +incorrect_version = "class { 'java':\n"\ + " version => '14.5',\n"\ + '}' + +blank_version = "class { 'java':\n"\ + " version => '',\n"\ + '}' + +incorrect_distro = "class { 'java':\n"\ + " distribution => 'xyz',\n"\ + '}' + +blank_distro = "class { 'java':\n"\ + " distribution => '',\n"\ + '}' + +incorrect_package = "class { 'java':\n"\ + " package => 'xyz',\n"\ + '}' + +bogus_alternative = "class { 'java':\n"\ + " java_alternative => 'whatever',\n"\ + " java_alternative_path => '/whatever',\n"\ + '}' + +def apply_manifest_wheezy_case(pp) + # With the version of java that ships with pe on debian wheezy, update-alternatives + # throws an error on the first run due to missing alternative for policytool. It still + # updates the alternatives for java + if fact('operatingsystem') == 'Debian' && fact('lsbdistcodename') == 'wheezy' + apply_manifest(pp) + else + apply_manifest(pp, catch_failures: true) end end + +context 'installing java jre', unless: UNSUPPORTED_PLATFORMS.include?(fact('osfamily')) do + it 'installs jre' do + apply_manifest_wheezy_case(java_class_jre) + apply_manifest(java_class_jre, catch_changes: true) + end +end + +context 'installing java jdk', unless: UNSUPPORTED_PLATFORMS.include?(fact('osfamily')) do + it 'installs jdk' do + apply_manifest(java_class, catch_failures: true) + apply_manifest(java_class, catch_changes: true) + end +end + # C14686 -describe 'sun', :if => (fact('operatingsystem') == 'Debian' and fact('operatingsystemrelease').match(/(5|6)/)) do +context 'sun', if: (fact('operatingsystem') == 'Debian' && fact('operatingsystemrelease').match(%r{(5|6)})) do before :all do - pp = <<-EOS - file_line { 'non-free source': - path => '/etc/apt/sources.list', - match => "deb http://osmirror.delivery.puppetlabs.net/debian/ ${::lsbdistcodename} main", - line => "deb http://osmirror.delivery.puppetlabs.net/debian/ ${::lsbdistcodename} main non-free", - } - EOS - apply_manifest(pp) + apply_manifest(sources) shell('apt-get update') shell('echo "sun-java6-jdk shared/accepted-sun-dlj-v1-1 select true" | debconf-set-selections') shell('echo "sun-java6-jre shared/accepted-sun-dlj-v1-1 select true" | debconf-set-selections') end describe 'jre' do - it 'should install sun-jre' do - pp = <<-EOS - class { 'java': - distribution => 'sun-jre', - } - EOS - - apply_manifest(pp, :catch_failures => true) - apply_manifest(pp, :catch_changes => true) + it 'installs sun-jre' do + apply_manifest(sun_jre, catch_failures: true) + apply_manifest(sun_jre, catch_changes: true) end end describe 'jdk' do - it 'should install sun-jdk' do - pp = <<-EOS - class { 'java': - distribution => 'sun-jdk', - } - EOS - - apply_manifest(pp, :catch_failures => true) - apply_manifest(pp, :catch_changes => true) + it 'installs sun-jdk' do + apply_manifest(sun_jdk, catch_failures: true) + apply_manifest(sun_jdk, catch_changes: true) end end end @@ -101,122 +130,64 @@ end # C14704 # C14705 # C15006 -describe 'oracle', :if => ( - (fact('operatingsystem') == 'Debian') and (fact('operatingsystemrelease').match(/^7/)) or - (fact('operatingsystem') == 'Ubuntu') and (fact('operatingsystemrelease').match(/^12\.04/)) or - (fact('operatingsystem') == 'Ubuntu') and (fact('operatingsystemrelease').match(/^14\.04/)) +context 'oracle', if: ( + (fact('operatingsystem') == 'Debian') && fact('operatingsystemrelease').match(%r{^7}) || + (fact('operatingsystem') == 'Ubuntu') && fact('operatingsystemrelease').match(%r{^12\.04}) || + (fact('operatingsystem') == 'Ubuntu') && fact('operatingsystemrelease').match(%r{^14\.04}) ) do # not supported # The package is not available from any sources, but if a customer # custom-builds the package using java-package and adds it to a local # repository, that is the intention of this version ability describe 'jre' do - it 'should install oracle-jre' do - pp = <<-EOS - class { 'java': - distribution => 'oracle-jre', - } - EOS - - apply_manifest(pp, :expect_failures => true) + it 'installs oracle-jre' do + apply_manifest(oracle_jre, expect_failures: true) end end describe 'jdk' do - it 'should install oracle-jdk' do - pp = <<-EOS - class { 'java': - distribution => 'oracle-jdk', - } - EOS - - apply_manifest(pp, :expect_failures => true) + it 'installs oracle-jdk' do + apply_manifest(oracle_jdk, expect_failures: true) end end end -describe 'failure cases' do +context 'failure cases' do # C14711 # SLES 10 returns an exit code of 0 on zypper failure - unless fact('operatingsystem') == 'SLES' and fact('operatingsystemrelease') < '11' - it 'should fail to install java with an incorrect version' do - pp = <<-EOS - class { 'java': - version => '14.5', - } - EOS - - apply_manifest(pp, :expect_failures => true) + unless fact('operatingsystem') == 'SLES' && fact('operatingsystemrelease') < '11' + it 'fails to install java with an incorrect version' do + apply_manifest(incorrect_version, expect_failures: true) end end # C14712 - it 'should fail to install java with a blank version' do - pp = <<-EOS - class { 'java': - version => '', - } - EOS - - apply_manifest(pp, :expect_failures => true) + it 'fails to install java with a blank version' do + apply_manifest(blank_version, expect_failures: true) end # C14713 - it 'should fail to install java with an incorrect distribution' do - pp = <<-EOS - class { 'java': - distribution => 'xyz', - } - EOS - - apply_manifest(pp, :expect_failures => true) + it 'fails to install java with an incorrect distribution' do + apply_manifest(incorrect_distro, expect_failures: true) end # C14714 - it 'should fail to install java with a blank distribution' do - pp = <<-EOS - class { 'java': - distribution => '', - } - EOS - - apply_manifest(pp, :expect_failures => true) + it 'fails to install java with a blank distribution' do + apply_manifest(blank_distro, expect_failures: true) end # C14715 - it 'should fail to install java with an incorrect package' do - pp = <<-EOS - class { 'java': - package => 'xyz', - } - EOS - - apply_manifest(pp, :expect_failures => true) + it 'fails to install java with an incorrect package' do + apply_manifest(incorrect_package, expect_failures: true) end - # C14715 - it 'should fail to install java with an incorrect package' do - pp = <<-EOS - class { 'java': - package => 'xyz', - } - EOS - apply_manifest(pp, :expect_failures => true) - end # C14717 # C14719 # C14725 - it 'should fail on debian or RHEL when passed fake java_alternative and path' do - pp = <<-EOS - class { 'java': - java_alternative => 'whatever', - java_alternative_path => '/whatever', - } - EOS - - if fact('osfamily') == 'Debian' or fact('osfamily') == 'RedHat' - apply_manifest(pp, :expect_failures => true) + it 'fails on debian or RHEL when passed fake java_alternative and path' do + if fact('osfamily') == 'Debian' || fact('osfamily') == 'RedHat' + apply_manifest(bogus_alternative, expect_failures: true) else - apply_manifest(pp, :catch_failures => true) + apply_manifest(bogus_alternative, catch_failures: true) end end end diff --git a/spec/classes/java_spec.rb b/spec/classes/java_spec.rb index 47bfbd0..28d5e0a 100644 --- a/spec/classes/java_spec.rb +++ b/spec/classes/java_spec.rb @@ -1,314 +1,353 @@ require 'spec_helper' -describe 'java', :type => :class do - +describe 'java', type: :class do context 'select openjdk for Centos 5.8' do - let(:facts) { {:osfamily => 'RedHat', :operatingsystem => 'Centos', :operatingsystemrelease => '5.8', :architecture => 'x86_64'} } + let(:facts) { { osfamily: 'RedHat', operatingsystem: 'Centos', operatingsystemrelease: '5.8', architecture: 'x86_64' } } + it { is_expected.to contain_package('java').with_name('java-1.6.0-openjdk-devel') } it { is_expected.to contain_file_line('java-home-environment').with_line('JAVA_HOME=/usr/lib/jvm/java-1.6.0/') } end context 'select openjdk for Centos 6.3' do - let(:facts) { {:osfamily => 'RedHat', :operatingsystem => 'Centos', :operatingsystemrelease => '6.3', :architecture => 'x86_64'} } + let(:facts) { { osfamily: 'RedHat', operatingsystem: 'Centos', operatingsystemrelease: '6.3', architecture: 'x86_64' } } + it { is_expected.to contain_package('java').with_name('java-1.7.0-openjdk-devel') } it { is_expected.to contain_file_line('java-home-environment').with_line('JAVA_HOME=/usr/lib/jvm/java-1.7.0/') } end context 'select openjdk for Centos 7.1.1503' do - let(:facts) { {:osfamily => 'RedHat', :operatingsystem => 'Centos', :operatingsystemrelease => '7.1.1503', :architecture => 'x86_64'} } + let(:facts) { { osfamily: 'RedHat', operatingsystem: 'Centos', operatingsystemrelease: '7.1.1503', architecture: 'x86_64' } } + it { is_expected.to contain_package('java').with_name('java-1.8.0-openjdk-devel') } it { is_expected.to contain_file_line('java-home-environment').with_line('JAVA_HOME=/usr/lib/jvm/java-1.8.0/') } end context 'select openjdk for Centos 6.2' do - let(:facts) { {:osfamily => 'RedHat', :operatingsystem => 'Centos', :operatingsystemrelease => '6.2', :architecture => 'x86_64'} } + let(:facts) { { osfamily: 'RedHat', operatingsystem: 'Centos', operatingsystemrelease: '6.2', architecture: 'x86_64' } } + it { is_expected.to contain_package('java').with_name('java-1.6.0-openjdk-devel') } - it { is_expected.to_not contain_exec('update-java-alternatives') } + it { is_expected.not_to contain_exec('update-java-alternatives') } end context 'select Oracle JRE with alternatives for Centos 6.3' do - let(:facts) { {:osfamily => 'RedHat', :operatingsystem => 'Centos', :operatingsystemrelease => '6.3', :architecture => 'x86_64'} } - let(:params) { { 'package' => 'jre', 'java_alternative' => '/usr/bin/java', 'java_alternative_path' => '/usr/java/jre1.7.0_67/bin/java'} } + let(:facts) { { osfamily: 'RedHat', operatingsystem: 'Centos', operatingsystemrelease: '6.3', architecture: 'x86_64' } } + let(:params) { { 'package' => 'jre', 'java_alternative' => '/usr/bin/java', 'java_alternative_path' => '/usr/java/jre1.7.0_67/bin/java' } } + it { is_expected.to contain_package('java').with_name('jre') } it { is_expected.to contain_exec('create-java-alternatives').with_command('alternatives --install /usr/bin/java java /usr/java/jre1.7.0_67/bin/java 20000') } it { is_expected.to contain_exec('update-java-alternatives').with_command('alternatives --set java /usr/java/jre1.7.0_67/bin/java') } end context 'select openjdk for Fedora 20' do - let(:facts) { {:osfamily => 'RedHat', :operatingsystem => 'Fedora', :operatingsystemrelease => '20', :architecture => 'x86_64'} } + let(:facts) { { osfamily: 'RedHat', operatingsystem: 'Fedora', operatingsystemrelease: '20', architecture: 'x86_64' } } + it { is_expected.to contain_package('java').with_name('java-1.7.0-openjdk-devel') } it { is_expected.to contain_file_line('java-home-environment').with_line('JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-x86_64/') } end context 'select openjdk for Fedora 21' do - let(:facts) { {:osfamily => 'RedHat', :operatingsystem => 'Fedora', :operatingsystemrelease => '21', :architecture => 'x86_64'} } + let(:facts) { { osfamily: 'RedHat', operatingsystem: 'Fedora', operatingsystemrelease: '21', architecture: 'x86_64' } } + it { is_expected.to contain_package('java').with_name('java-1.8.0-openjdk-devel') } it { is_expected.to contain_file_line('java-home-environment').with_line('JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-x86_64/') } end context 'select passed value for Fedora 20' do - let(:facts) { {:osfamily => 'RedHat', :operatingsystem => 'Fedora', :operatingsystemrelease => '20', :architecture => 'x86_64'} } + let(:facts) { { osfamily: 'RedHat', operatingsystem: 'Fedora', operatingsystemrelease: '20', architecture: 'x86_64' } } let(:params) { { 'distribution' => 'jre', 'java_home' => '/usr/local/lib/jre/' } } + it { is_expected.to contain_package('java').with_name('java-1.7.0-openjdk') } it { is_expected.to contain_file_line('java-home-environment').with_line('JAVA_HOME=/usr/local/lib/jre/') } end context 'select passed value for Fedora 21' do - let(:facts) { {:osfamily => 'RedHat', :operatingsystem => 'Fedora', :operatingsystemrelease => '21', :architecture => 'x86_64'} } + let(:facts) { { osfamily: 'RedHat', operatingsystem: 'Fedora', operatingsystemrelease: '21', architecture: 'x86_64' } } let(:params) { { 'distribution' => 'jre', 'java_home' => '/usr/local/lib/jre/' } } + it { is_expected.to contain_package('java').with_name('java-1.8.0-openjdk') } it { is_expected.to contain_file_line('java-home-environment').with_line('JAVA_HOME=/usr/local/lib/jre/') } end - + context 'select passed value for Fedora 21 with yum option' do - let(:facts) { {:osfamily => 'RedHat', :operatingsystem => 'Fedora', :operatingsystemrelease => '21', :architecture => 'x86_64'} } - let(:params) { { 'distribution' => 'jre' } } - let(:params) { { 'package_options' => ['--skip-broken'] } } + let(:facts) { { osfamily: 'RedHat', operatingsystem: 'Fedora', operatingsystemrelease: '21', architecture: 'x86_64' } } + let(:params) { { 'distribution' => 'jre', 'package_options' => ['--skip-broken'] } } + it { is_expected.to contain_package('java') } end context 'select passed value for Centos 5.3' do - let(:facts) { {:osfamily => 'RedHat', :operatingsystem => 'Centos', :operatingsystemrelease => '5.3', :architecture => 'x86_64'} } + let(:facts) { { osfamily: 'RedHat', operatingsystem: 'Centos', operatingsystemrelease: '5.3', architecture: 'x86_64' } } let(:params) { { 'package' => 'jdk', 'java_home' => '/usr/local/lib/jre' } } + it { is_expected.to contain_package('java').with_name('jdk') } - it { is_expected.to_not contain_exec('update-java-alternatives') } + it { is_expected.not_to contain_exec('update-java-alternatives') } end context 'select default for Centos 5.3' do - let(:facts) { {:osfamily => 'RedHat', :operatingsystem => 'Centos', :operatingsystemrelease => '5.3', :architecture => 'x86_64'} } + let(:facts) { { osfamily: 'RedHat', operatingsystem: 'Centos', operatingsystemrelease: '5.3', architecture: 'x86_64' } } + it { is_expected.to contain_package('java').with_name('java-1.6.0-openjdk-devel') } - it { is_expected.to_not contain_exec('update-java-alternatives') } + it { is_expected.not_to contain_exec('update-java-alternatives') } end context 'select default for Debian Wheezy' do - let(:facts) { {:osfamily => 'Debian', :operatingsystem => 'Debian', :lsbdistcodename => 'wheezy', :operatingsystemrelease => '7.1', :architecture => 'amd64',} } + let(:facts) { { osfamily: 'Debian', operatingsystem: 'Debian', lsbdistcodename: 'wheezy', operatingsystemrelease: '7.1', architecture: 'amd64' } } + it { is_expected.to contain_package('java').with_name('openjdk-7-jdk') } it { is_expected.to contain_exec('update-java-alternatives').with_command('update-java-alternatives --set java-1.7.0-openjdk-amd64 --jre') } it { is_expected.to contain_file_line('java-home-environment').with_line('JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64/') } end context 'select Oracle JRE for Debian Wheezy' do - let(:facts) { {:osfamily => 'Debian', :operatingsystem => 'Debian', :lsbdistcodename => 'wheezy', :operatingsystemrelease => '7.1', :architecture => 'amd64',} } + let(:facts) { { osfamily: 'Debian', operatingsystem: 'Debian', lsbdistcodename: 'wheezy', operatingsystemrelease: '7.1', architecture: 'amd64' } } let(:params) { { 'distribution' => 'oracle-jre' } } + it { is_expected.to contain_package('java').with_name('oracle-j2re1.7') } it { is_expected.to contain_exec('update-java-alternatives').with_command('update-java-alternatives --set j2re1.7-oracle --jre') } it { is_expected.to contain_file_line('java-home-environment').with_line('JAVA_HOME=/usr/lib/jvm/j2re1.7-oracle/') } end context 'select Oracle Java 8 JRE >=u100 for Debian Wheezy' do - let(:facts) { {:osfamily => 'Debian', :operatingsystem => 'Debian', :lsbdistcodename => 'wheezy', :operatingsystemrelease => '7.1', :architecture => 'amd64',} } + let(:facts) { { osfamily: 'Debian', operatingsystem: 'Debian', lsbdistcodename: 'wheezy', operatingsystemrelease: '7.1', architecture: 'amd64' } } let(:params) { { 'distribution' => 'oracle-java8-jre' } } + it { is_expected.to contain_package('java').with_name('oracle-java8-jre') } it { is_expected.to contain_exec('update-java-alternatives').with_command('update-java-alternatives --set jre-8-oracle-x64 --jre') } end context 'select Oracle Java 8 JDK >=u100 for Debian Wheezy' do - let(:facts) { {:osfamily => 'Debian', :operatingsystem => 'Debian', :lsbdistcodename => 'wheezy', :operatingsystemrelease => '7.1', :architecture => 'amd64',} } + let(:facts) { { osfamily: 'Debian', operatingsystem: 'Debian', lsbdistcodename: 'wheezy', operatingsystemrelease: '7.1', architecture: 'amd64' } } let(:params) { { 'distribution' => 'oracle-java8-jdk' } } + it { is_expected.to contain_package('java').with_name('oracle-java8-jdk') } it { is_expected.to contain_exec('update-java-alternatives').with_command('update-java-alternatives --set jdk-8-oracle-x64 --jre') } end - context 'select OpenJDK JRE for Debian Wheezy' do - let(:facts) { {:osfamily => 'Debian', :operatingsystem => 'Debian', :lsbdistcodename => 'wheezy', :operatingsystemrelease => '7.1', :architecture => 'amd64',} } + let(:facts) { { osfamily: 'Debian', operatingsystem: 'Debian', lsbdistcodename: 'wheezy', operatingsystemrelease: '7.1', architecture: 'amd64' } } let(:params) { { 'distribution' => 'jre' } } + it { is_expected.to contain_package('java').with_name('openjdk-7-jre-headless') } it { is_expected.to contain_exec('update-java-alternatives').with_command('update-java-alternatives --set java-1.7.0-openjdk-amd64 --jre-headless') } it { is_expected.to contain_file_line('java-home-environment').with_line('JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64/') } end context 'select default for Debian Squeeze' do - let(:facts) { {:osfamily => 'Debian', :operatingsystem => 'Debian', :lsbdistcodename => 'squeeze', :operatingsystemrelease => '6.0.5', :architecture => 'amd64',} } + let(:facts) { { osfamily: 'Debian', operatingsystem: 'Debian', lsbdistcodename: 'squeeze', operatingsystemrelease: '6.0.5', architecture: 'amd64' } } + it { is_expected.to contain_package('java').with_name('openjdk-6-jdk') } it { is_expected.to contain_exec('update-java-alternatives').with_command('update-java-alternatives --set java-6-openjdk-amd64 --jre') } end context 'select Oracle JRE for Debian Squeeze' do - let(:facts) { {:osfamily => 'Debian', :operatingsystem => 'Debian', :lsbdistcodename => 'squeeze', :operatingsystemrelease => '6.0.5', :architecture => 'amd64',} } - let(:params) { { 'distribution' => 'sun-jre', } } + let(:facts) { { osfamily: 'Debian', operatingsystem: 'Debian', lsbdistcodename: 'squeeze', operatingsystemrelease: '6.0.5', architecture: 'amd64' } } + let(:params) { { 'distribution' => 'sun-jre' } } + it { is_expected.to contain_package('java').with_name('sun-java6-jre') } it { is_expected.to contain_exec('update-java-alternatives').with_command('update-java-alternatives --set java-6-sun --jre') } it { is_expected.to contain_file_line('java-home-environment').with_line('JAVA_HOME=/usr/lib/jvm/java-6-sun/jre/') } end context 'select OpenJDK JRE for Debian Squeeze' do - let(:facts) { {:osfamily => 'Debian', :operatingsystem => 'Debian', :lsbdistcodename => 'squeeze', :operatingsystemrelease => '6.0.5', :architecture => 'amd64',} } - let(:params) { { 'distribution' => 'jre', } } + let(:facts) { { osfamily: 'Debian', operatingsystem: 'Debian', lsbdistcodename: 'squeeze', operatingsystemrelease: '6.0.5', architecture: 'amd64' } } + let(:params) { { 'distribution' => 'jre' } } + it { is_expected.to contain_package('java').with_name('openjdk-6-jre-headless') } it { is_expected.to contain_exec('update-java-alternatives').with_command('update-java-alternatives --set java-6-openjdk-amd64 --jre-headless') } it { is_expected.to contain_file_line('java-home-environment').with_line('JAVA_HOME=/usr/lib/jvm/java-6-openjdk/jre/') } end context 'select random alternative for Debian Wheezy' do - let(:facts) { {:osfamily => 'Debian', :operatingsystem => 'Debian', :lsbdistcodename => 'wheezy', :operatingsystemrelease => '7.1', :architecture => 'amd64',} } + let(:facts) { { osfamily: 'Debian', operatingsystem: 'Debian', lsbdistcodename: 'wheezy', operatingsystemrelease: '7.1', architecture: 'amd64' } } let(:params) { { 'java_alternative' => 'bananafish' } } + it { is_expected.to contain_package('java').with_name('openjdk-7-jdk') } it { is_expected.to contain_exec('update-java-alternatives').with_command('update-java-alternatives --set bananafish --jre') } end context 'select jdk for Ubuntu Vivid (15.04)' do - let(:facts) { {:osfamily => 'Debian', :operatingsystem => 'Ubuntu', :lsbdistcodename => 'vivid', :operatingsystemrelease => '15.04', :architecture => 'amd64',} } + let(:facts) { { osfamily: 'Debian', operatingsystem: 'Ubuntu', lsbdistcodename: 'vivid', operatingsystemrelease: '15.04', architecture: 'amd64' } } let(:params) { { 'distribution' => 'jdk' } } + it { is_expected.to contain_package('java').with_name('openjdk-8-jdk') } it { is_expected.to contain_file_line('java-home-environment').with_line('JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64/') } end context 'select jre for Ubuntu Vivid (15.04)' do - let(:facts) { {:osfamily => 'Debian', :operatingsystem => 'Ubuntu', :lsbdistcodename => 'vivid', :operatingsystemrelease => '15.04', :architecture => 'amd64',} } + let(:facts) { { osfamily: 'Debian', operatingsystem: 'Ubuntu', lsbdistcodename: 'vivid', operatingsystemrelease: '15.04', architecture: 'amd64' } } let(:params) { { 'distribution' => 'jre' } } + it { is_expected.to contain_package('java').with_name('openjdk-8-jre-headless') } it { is_expected.to contain_file_line('java-home-environment').with_line('JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64/') } end context 'select openjdk for Amazon Linux' do - let(:facts) { {:osfamily => 'RedHat', :operatingsystem => 'Amazon', :operatingsystemrelease => '3.4.43-43.43.amzn1.x86_64', :architecture => 'x86_64'} } + let(:facts) { { osfamily: 'RedHat', operatingsystem: 'Amazon', operatingsystemrelease: '3.4.43-43.43.amzn1.x86_64', architecture: 'x86_64' } } + it { is_expected.to contain_package('java').with_name('java-1.7.0-openjdk-devel') } it { is_expected.to contain_file_line('java-home-environment').with_line('JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-x86_64/') } end context 'select passed value for Amazon Linux' do - let(:facts) { {:osfamily => 'RedHat', :operatingsystem => 'Amazon', :operatingsystemrelease => '5.3.4.43-43.43.amzn1.x86_64', :architecture => 'x86_64'} } + let(:facts) { { osfamily: 'RedHat', operatingsystem: 'Amazon', operatingsystemrelease: '5.3.4.43-43.43.amzn1.x86_64', architecture: 'x86_64' } } let(:params) { { 'distribution' => 'jre' } } + it { is_expected.to contain_package('java').with_name('java-1.7.0-openjdk') } end context 'select openjdk for Oracle Linux' do - let(:facts) { {:osfamily => 'RedHat', :operatingsystem => 'OracleLinux', :operatingsystemrelease => '6.4', :architecture => 'x86_64'} } + let(:facts) { { osfamily: 'RedHat', operatingsystem: 'OracleLinux', operatingsystemrelease: '6.4', architecture: 'x86_64' } } + it { is_expected.to contain_package('java').with_name('java-1.7.0-openjdk-devel') } end context 'select openjdk for Oracle Linux 6.2' do - let(:facts) { {:osfamily => 'RedHat', :operatingsystem => 'OracleLinux', :operatingsystemrelease => '6.2', :architecture => 'x86_64'} } + let(:facts) { { osfamily: 'RedHat', operatingsystem: 'OracleLinux', operatingsystemrelease: '6.2', architecture: 'x86_64' } } + it { is_expected.to contain_package('java').with_name('java-1.6.0-openjdk-devel') } end context 'select passed value for Oracle Linux' do - let(:facts) { {:osfamily => 'RedHat', :operatingsystem => 'OracleLinux', :operatingsystemrelease => '6.3', :architecture => 'x86_64'} } + let(:facts) { { osfamily: 'RedHat', operatingsystem: 'OracleLinux', operatingsystemrelease: '6.3', architecture: 'x86_64' } } let(:params) { { 'distribution' => 'jre' } } + it { is_expected.to contain_package('java').with_name('java-1.7.0-openjdk') } end context 'select passed value for Scientific Linux' do - let(:facts) { {:osfamily => 'RedHat', :operatingsystem => 'Scientific', :operatingsystemrelease => '6.4', :architecture => 'x86_64'} } + let(:facts) { { osfamily: 'RedHat', operatingsystem: 'Scientific', operatingsystemrelease: '6.4', architecture: 'x86_64' } } let(:params) { { 'distribution' => 'jre' } } + it { is_expected.to contain_package('java').with_name('java-1.7.0-openjdk') } it { is_expected.to contain_file_line('java-home-environment').with_line('JAVA_HOME=/usr/lib/jvm/java-1.7.0/') } end context 'select passed value for Scientific Linux CERN (SLC)' do - let(:facts) { {:osfamily => 'RedHat', :operatingsystem => 'SLC', :operatingsystemrelease => '6.4', :architecture => 'x86_64'} } + let(:facts) { { osfamily: 'RedHat', operatingsystem: 'SLC', operatingsystemrelease: '6.4', architecture: 'x86_64' } } let(:params) { { 'distribution' => 'jre' } } + it { is_expected.to contain_package('java').with_name('java-1.7.0-openjdk') } it { is_expected.to contain_file_line('java-home-environment').with_line('JAVA_HOME=/usr/lib/jvm/java-1.7.0/') } end context 'select default for OpenSUSE 12.3' do - let(:facts) { {:osfamily => 'Suse', :operatingsystem => 'OpenSUSE', :operatingsystemrelease => '12.3', :architecture => 'x86_64'}} - it { is_expected.to contain_package('java').with_name('java-1_7_0-openjdk-devel')} + let(:facts) { { osfamily: 'Suse', operatingsystem: 'OpenSUSE', operatingsystemrelease: '12.3', architecture: 'x86_64' } } + + it { is_expected.to contain_package('java').with_name('java-1_7_0-openjdk-devel') } it { is_expected.to contain_file_line('java-home-environment').with_line('JAVA_HOME=/usr/lib64/jvm/java-1.7.0-openjdk-1.7.0/') } end context 'select default for SLES 11.3' do - let(:facts) { {:osfamily => 'Suse', :operatingsystem => 'SLES', :operatingsystemrelease => '11.3', :architecture => 'x86_64'}} - it { should contain_package('java').with_name('java-1_6_0-ibm-devel')} + let(:facts) { { osfamily: 'Suse', operatingsystem: 'SLES', operatingsystemrelease: '11.3', architecture: 'x86_64' } } + + it { is_expected.to contain_package('java').with_name('java-1_6_0-ibm-devel') } it { is_expected.to contain_file_line('java-home-environment').with_line('JAVA_HOME=/usr/lib64/jvm/java-1.6.0-ibm-1.6.0/') } end context 'select default for SLES 11.4' do - let(:facts) { {:osfamily => 'Suse', :operatingsystem => 'SLES', :operatingsystemrelease => '11.4', :architecture => 'x86_64'}} - it { should contain_package('java').with_name('java-1_7_1-ibm-devel')} + let(:facts) { { osfamily: 'Suse', operatingsystem: 'SLES', operatingsystemrelease: '11.4', architecture: 'x86_64' } } + + it { is_expected.to contain_package('java').with_name('java-1_7_1-ibm-devel') } it { is_expected.to contain_file_line('java-home-environment').with_line('JAVA_HOME=/usr/lib64/jvm/java-1.7.0-ibm-1.7.0/') } end context 'select default for SLES 12.0' do - let(:facts) { {:osfamily => 'Suse', :operatingsystem => 'SLES', :operatingsystemrelease => '12.0', :operatingsystemmajrelease => '12', :architecture => 'x86_64'}} - it { should contain_package('java').with_name('java-1_7_0-openjdk-devel')} + let(:facts) { { osfamily: 'Suse', operatingsystem: 'SLES', operatingsystemrelease: '12.0', operatingsystemmajrelease: '12', architecture: 'x86_64' } } + + it { is_expected.to contain_package('java').with_name('java-1_7_0-openjdk-devel') } it { is_expected.to contain_file_line('java-home-environment').with_line('JAVA_HOME=/usr/lib64/jvm/java-1.7.0-openjdk-1.7.0/') } end context 'select default for SLES 12.1' do - let(:facts) { {:osfamily => 'Suse', :operatingsystem => 'SLES', :operatingsystemrelease => '12.1', :operatingsystemmajrelease => '12', :architecture => 'x86_64'}} - it { should contain_package('java').with_name('java-1_8_0-openjdk-devel')} + let(:facts) { { osfamily: 'Suse', operatingsystem: 'SLES', operatingsystemrelease: '12.1', operatingsystemmajrelease: '12', architecture: 'x86_64' } } + + it { is_expected.to contain_package('java').with_name('java-1_8_0-openjdk-devel') } it { is_expected.to contain_file_line('java-home-environment').with_line('JAVA_HOME=/usr/lib64/jvm/java-1.8.0-openjdk-1.8.0/') } end context 'select jdk for OpenBSD' do - let(:facts) { {:osfamily => 'OpenBSD', :architecture => 'x86_64'} } + let(:facts) { { osfamily: 'OpenBSD', architecture: 'x86_64' } } + it { is_expected.to contain_package('java').with_name('jdk') } - it { is_expected.to_not contain_file_line('java-home-environment') } + it { is_expected.not_to contain_file_line('java-home-environment') } end context 'select jre for OpenBSD' do - let(:facts) { {:osfamily => 'OpenBSD', :architecture => 'x86_64'} } + let(:facts) { { osfamily: 'OpenBSD', architecture: 'x86_64' } } let(:params) { { 'distribution' => 'jre' } } + it { is_expected.to contain_package('java').with_name('jre') } end describe 'custom java package' do - let(:facts) { {:osfamily => 'Debian', :operatingsystem => 'Debian', :lsbdistcodename => 'jessie', :operatingsystemrelease => '8.6', :architecture => 'amd64',} } + let(:facts) { { osfamily: 'Debian', operatingsystem: 'Debian', lsbdistcodename: 'jessie', operatingsystemrelease: '8.6', architecture: 'amd64' } } + context 'all params provided' do - let(:params) { { - 'distribution' => 'custom', - 'package' => 'custom_jdk', - 'java_alternative' => 'java-custom_jdk', - 'java_alternative_path' => '/opt/custom_jdk/bin/java', - 'java_home' => '/opt/custom_jdk', - } } + let(:params) do + { + 'distribution' => 'custom', + 'package' => 'custom_jdk', + 'java_alternative' => 'java-custom_jdk', + 'java_alternative_path' => '/opt/custom_jdk/bin/java', + 'java_home' => '/opt/custom_jdk', + } + end it { is_expected.to contain_package('java').with_name('custom_jdk') } it { is_expected.to contain_file_line('java-home-environment').with_line('JAVA_HOME=/opt/custom_jdk') } it { is_expected.to contain_exec('update-java-alternatives').with_command('update-java-alternatives --set java-custom_jdk --jre') } - end context 'missing parameters' do - let(:params) { { - 'distribution' => 'custom', - 'package' => 'custom_jdk', - } } + let(:params) do + { + 'distribution' => 'custom', + 'package' => 'custom_jdk', + } + end + it do - expect { catalogue }.to raise_error Puppet::Error, /is not supported. Missing default values/ + expect { catalogue }.to raise_error Puppet::Error, %r{is not supported. Missing default values} end end end - describe 'incompatible OSs' do [ { # C14706 - :osfamily => 'windows', - :operatingsystem => 'windows', - :operatingsystemrelease => '8.1', + osfamily: 'windows', + operatingsystem: 'windows', + operatingsystemrelease: '8.1', }, { # C14707 - :osfamily => 'Darwin', - :operatingsystem => 'Darwin', - :operatingsystemrelease => '13.3.0', + osfamily: 'Darwin', + operatingsystem: 'Darwin', + operatingsystemrelease: '13.3.0', }, { # C14708 - :osfamily => 'AIX', - :operatingsystem => 'AIX', - :operatingsystemrelease => '7100-02-00-000', + osfamily: 'AIX', + operatingsystem: 'AIX', + operatingsystemrelease: '7100-02-00-000', }, { # C14708 - :osfamily => 'AIX', - :operatingsystem => 'AIX', - :operatingsystemrelease => '6100-07-04-1216', + osfamily: 'AIX', + operatingsystem: 'AIX', + operatingsystemrelease: '6100-07-04-1216', }, { # C14708 - :osfamily => 'AIX', - :operatingsystem => 'AIX', - :operatingsystemrelease => '5300-12-01-1016', + osfamily: 'AIX', + operatingsystem: 'AIX', + operatingsystemrelease: '5300-12-01-1016', }, ].each do |facts| let(:facts) { facts } + it "is_expected.to fail on #{facts[:operatingsystem]} #{facts[:operatingsystemrelease]}" do - expect { catalogue }.to raise_error Puppet::Error, /unsupported platform/ + expect { catalogue }.to raise_error Puppet::Error, %r{unsupported platform} end end end diff --git a/spec/defines/oracle_spec.rb b/spec/defines/oracle_spec.rb index d7cd817..740262c 100644 --- a/spec/defines/oracle_spec.rb +++ b/spec/defines/oracle_spec.rb @@ -1,254 +1,285 @@ require 'spec_helper' -describe 'java::oracle', :type => :define do - context 'On CentOS 64-bit' do - let(:facts) { { :kernel => 'Linux', :os => {:family => 'RedHat', :architecture => 'x86_64', :name => 'CentOS', :release => {:full => '6.0'}}}} +oracle_url = 'http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz' - context 'Oracle Java SE 6 JDK' do - let(:params) { {:ensure => 'present', :version => '6', :java_se => 'jdk'} } - let :title do 'jdk6' end - it { is_expected.to contain_archive('/tmp/jdk-6u45-linux-x64-rpm.bin')} - it { is_expected.to contain_exec('Install Oracle java_se jdk 6').with_command('sh /tmp/jdk-6u45-linux-x64-rpm.bin -x; rpm --force -iv sun*.rpm; rpm --force -iv jdk*.rpm') } - it { is_expected.to contain_exec('Install Oracle java_se jdk 6').that_requires('Archive[/tmp/jdk-6u45-linux-x64-rpm.bin]') } - end +describe 'java::oracle', type: :define do + context 'On CentOS 64-bit' do + let(:facts) { { kernel: 'Linux', os: { family: 'RedHat', architecture: 'x86_64', name: 'CentOS', release: { full: '6.0' } } } } - context 'Oracle Java SE 7 JDK' do - let(:params) { {:ensure => 'present', :version => '7', :java_se => 'jdk'} } - let :title do 'jdk7' end - it { is_expected.to contain_archive('/tmp/jdk-7u80-linux-x64.rpm')} - it { is_expected.to contain_exec('Install Oracle java_se jdk 7').with_command('rpm --force -iv /tmp/jdk-7u80-linux-x64.rpm') } - it { is_expected.to contain_exec('Install Oracle java_se jdk 7').that_requires('Archive[/tmp/jdk-7u80-linux-x64.rpm]') } - end + context 'Oracle Java SE 6 JDK' do + let(:params) { { ensure: 'present', version: '6', java_se: 'jdk' } } + let(:title) { 'jdk6' } + + it { is_expected.to contain_archive('/tmp/jdk-6u45-linux-x64-rpm.bin') } + it { is_expected.to contain_exec('Install Oracle java_se jdk 6').with_command('sh /tmp/jdk-6u45-linux-x64-rpm.bin -x; rpm --force -iv sun*.rpm; rpm --force -iv jdk*.rpm') } + it { is_expected.to contain_exec('Install Oracle java_se jdk 6').that_requires('Archive[/tmp/jdk-6u45-linux-x64-rpm.bin]') } + end + + context 'Oracle Java SE 7 JDK' do + let(:params) { { ensure: 'present', version: '7', java_se: 'jdk' } } + let(:title) { 'jdk7' } + + it { is_expected.to contain_archive('/tmp/jdk-7u80-linux-x64.rpm') } + it { is_expected.to contain_exec('Install Oracle java_se jdk 7').with_command('rpm --force -iv /tmp/jdk-7u80-linux-x64.rpm') } + it { is_expected.to contain_exec('Install Oracle java_se jdk 7').that_requires('Archive[/tmp/jdk-7u80-linux-x64.rpm]') } + end context 'Oracle Java SE 8 JDK' do - let(:params) { {:ensure => 'present', :version => '8', :java_se => 'jdk'} } - let :title do 'jdk8' end - it { is_expected.to contain_archive('/tmp/jdk-8u131-linux-x64.rpm')} - it { is_expected.to contain_exec('Install Oracle java_se jdk 8').with_command('rpm --force -iv /tmp/jdk-8u131-linux-x64.rpm') } - it { is_expected.to contain_exec('Install Oracle java_se jdk 8').that_requires('Archive[/tmp/jdk-8u131-linux-x64.rpm]') } + let(:params) { { ensure: 'present', version: '8', java_se: 'jdk' } } + let(:title) { 'jdk8' } + + it { is_expected.to contain_archive('/tmp/jdk-8u131-linux-x64.rpm') } + it { is_expected.to contain_exec('Install Oracle java_se jdk 8').with_command('rpm --force -iv /tmp/jdk-8u131-linux-x64.rpm') } + it { is_expected.to contain_exec('Install Oracle java_se jdk 8').that_requires('Archive[/tmp/jdk-8u131-linux-x64.rpm]') } end context 'Oracle Java SE 6 JRE' do - let(:params) { {:ensure => 'present', :version => '6', :java_se => 'jre'} } - let :title do 'jre6' end - it { is_expected.to contain_archive('/tmp/jre-6u45-linux-x64-rpm.bin')} - it { is_expected.to contain_exec('Install Oracle java_se jre 6').with_command('sh /tmp/jre-6u45-linux-x64-rpm.bin -x; rpm --force -iv sun*.rpm; rpm --force -iv jre*.rpm') } - it { is_expected.to contain_exec('Install Oracle java_se jre 6').that_requires('Archive[/tmp/jre-6u45-linux-x64-rpm.bin]') } + let(:params) { { ensure: 'present', version: '6', java_se: 'jre' } } + let(:title) { 'jre6' } + + it { is_expected.to contain_archive('/tmp/jre-6u45-linux-x64-rpm.bin') } + it { is_expected.to contain_exec('Install Oracle java_se jre 6').with_command('sh /tmp/jre-6u45-linux-x64-rpm.bin -x; rpm --force -iv sun*.rpm; rpm --force -iv jre*.rpm') } + it { is_expected.to contain_exec('Install Oracle java_se jre 6').that_requires('Archive[/tmp/jre-6u45-linux-x64-rpm.bin]') } end context 'Oracle Java SE 7 JRE' do - let(:params) { {:ensure => 'present', :version => '7', :java_se => 'jre'} } - let :title do 'jre7' end - it { is_expected.to contain_archive('/tmp/jre-7u80-linux-x64.rpm')} - it { is_expected.to contain_exec('Install Oracle java_se jre 7').with_command('rpm --force -iv /tmp/jre-7u80-linux-x64.rpm') } - it { is_expected.to contain_exec('Install Oracle java_se jre 7').that_requires('Archive[/tmp/jre-7u80-linux-x64.rpm]') } + let(:params) { { ensure: 'present', version: '7', java_se: 'jre' } } + let(:title) { 'jre7' } + + it { is_expected.to contain_archive('/tmp/jre-7u80-linux-x64.rpm') } + it { is_expected.to contain_exec('Install Oracle java_se jre 7').with_command('rpm --force -iv /tmp/jre-7u80-linux-x64.rpm') } + it { is_expected.to contain_exec('Install Oracle java_se jre 7').that_requires('Archive[/tmp/jre-7u80-linux-x64.rpm]') } end context 'select Oracle Java SE 8 JRE' do - let(:params) { {:ensure => 'present', :version => '8', :java_se => 'jre'} } - let :title do 'jre8' end - it { is_expected.to contain_archive('/tmp/jre-8u131-linux-x64.rpm')} - it { is_expected.to contain_exec('Install Oracle java_se jre 8').with_command('rpm --force -iv /tmp/jre-8u131-linux-x64.rpm') } - it { is_expected.to contain_exec('Install Oracle java_se jre 8').that_requires('Archive[/tmp/jre-8u131-linux-x64.rpm]') } + let(:params) { { ensure: 'present', version: '8', java_se: 'jre' } } + let(:title) { 'jre8' } + + it { is_expected.to contain_archive('/tmp/jre-8u131-linux-x64.rpm') } + it { is_expected.to contain_exec('Install Oracle java_se jre 8').with_command('rpm --force -iv /tmp/jre-8u131-linux-x64.rpm') } + it { is_expected.to contain_exec('Install Oracle java_se jre 8').that_requires('Archive[/tmp/jre-8u131-linux-x64.rpm]') } end context 'Pass URL to url parameter' do - let(:params) { { - :ensure => 'present', - :version_major => '8u131', - :version_minor => 'b11', - :java_se => 'jdk', - :url => 'http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm', - :url_hash => 'ignored', - } } - let :title do 'jdk8' end - it { is_expected.to contain_archive('/tmp/jdk-8u131-linux-x64.rpm').with_source('http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm') } + let(:params) do + { + ensure: 'present', + version_major: '8u131', + version_minor: 'b11', + java_se: 'jdk', + url: 'http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm', + url_hash: 'ignored', + } + end + let(:title) { 'jdk8' } + + it { + is_expected.to contain_archive('/tmp/jdk-8u131-linux-x64.rpm') + .with_source('http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm') + } end context 'Pass a hash to url_hash parameter' do - let(:params) { { - :ensure => 'present', - :version_major => '8u131', - :version_minor => 'b11', - :java_se => 'jdk', - :url_hash => 'abcdef01234567890', - } } - let :title do 'jdk8' end + let(:params) do + { + ensure: 'present', + version_major: '8u131', + version_minor: 'b11', + java_se: 'jdk', + url_hash: 'abcdef01234567890', + } + end + let(:title) { 'jdk8' } + it { is_expected.to contain_archive('/tmp/jdk-8u131-linux-x64.rpm').with_source('http://download.oracle.com/otn-pub/java/jdk//8u131-b11/abcdef01234567890/jdk-8u131-linux-x64.rpm') } end end context 'On CentOS 32-bit' do - let(:facts) { {:kernel => 'Linux', :os => { :family => 'RedHat', :architecture => 'i386', :name => 'CentOS', :release => { :full => '6.6' } } } } + let(:facts) { { kernel: 'Linux', os: { family: 'RedHat', architecture: 'i386', name: 'CentOS', release: { full: '6.6' } } } } context 'select Oracle Java SE 6 JDK on RedHat family, 32-bit' do - let(:params) { {:ensure => 'present', :version => '6', :java_se => 'jdk'} } - let :title do 'jdk6' end - it { is_expected.to contain_archive('/tmp/jdk-6u45-linux-i586-rpm.bin')} - it { is_expected.to contain_exec('Install Oracle java_se jdk 6').with_command('sh /tmp/jdk-6u45-linux-i586-rpm.bin -x; rpm --force -iv sun*.rpm; rpm --force -iv jdk*.rpm') } - it { is_expected.to contain_exec('Install Oracle java_se jdk 6').that_requires('Archive[/tmp/jdk-6u45-linux-i586-rpm.bin]') } + let(:params) { { ensure: 'present', version: '6', java_se: 'jdk' } } + let(:title) { 'jdk6' } + + it { is_expected.to contain_archive('/tmp/jdk-6u45-linux-i586-rpm.bin') } + it { is_expected.to contain_exec('Install Oracle java_se jdk 6').with_command('sh /tmp/jdk-6u45-linux-i586-rpm.bin -x; rpm --force -iv sun*.rpm; rpm --force -iv jdk*.rpm') } + it { is_expected.to contain_exec('Install Oracle java_se jdk 6').that_requires('Archive[/tmp/jdk-6u45-linux-i586-rpm.bin]') } end context 'select Oracle Java SE 7 JDK on RedHat family, 32-bit' do - let(:params) { {:ensure => 'present', :version => '7', :java_se => 'jdk'} } - let :title do 'jdk7' end - it { is_expected.to contain_archive('/tmp/jdk-7u80-linux-i586.rpm')} - it { is_expected.to contain_exec('Install Oracle java_se jdk 7').with_command('rpm --force -iv /tmp/jdk-7u80-linux-i586.rpm') } - it { is_expected.to contain_exec('Install Oracle java_se jdk 7').that_requires('Archive[/tmp/jdk-7u80-linux-i586.rpm]') } + let(:params) { { ensure: 'present', version: '7', java_se: 'jdk' } } + let(:title) { 'jdk7' } + + it { is_expected.to contain_archive('/tmp/jdk-7u80-linux-i586.rpm') } + it { is_expected.to contain_exec('Install Oracle java_se jdk 7').with_command('rpm --force -iv /tmp/jdk-7u80-linux-i586.rpm') } + it { is_expected.to contain_exec('Install Oracle java_se jdk 7').that_requires('Archive[/tmp/jdk-7u80-linux-i586.rpm]') } end context 'select Oracle Java SE 8 JDK on RedHat family, 32-bit' do - let(:params) { {:ensure => 'present', :version => '8', :java_se => 'jdk'} } - let :title do 'jdk8' end - it { is_expected.to contain_archive('/tmp/jdk-8u131-linux-i586.rpm')} - it { is_expected.to contain_exec('Install Oracle java_se jdk 8').with_command('rpm --force -iv /tmp/jdk-8u131-linux-i586.rpm') } - it { is_expected.to contain_exec('Install Oracle java_se jdk 8').that_requires('Archive[/tmp/jdk-8u131-linux-i586.rpm]') } + let(:params) { { ensure: 'present', version: '8', java_se: 'jdk' } } + let(:title) { 'jdk8' } + + it { is_expected.to contain_archive('/tmp/jdk-8u131-linux-i586.rpm') } + it { is_expected.to contain_exec('Install Oracle java_se jdk 8').with_command('rpm --force -iv /tmp/jdk-8u131-linux-i586.rpm') } + it { is_expected.to contain_exec('Install Oracle java_se jdk 8').that_requires('Archive[/tmp/jdk-8u131-linux-i586.rpm]') } end context 'select Oracle Java SE 6 JRE on RedHat family, 32-bit' do - let(:params) { {:ensure => 'present', :version => '6', :java_se => 'jre'} } - let :title do 'jdk6' end - it { is_expected.to contain_archive('/tmp/jre-6u45-linux-i586-rpm.bin')} - it { is_expected.to contain_exec('Install Oracle java_se jre 6').with_command('sh /tmp/jre-6u45-linux-i586-rpm.bin -x; rpm --force -iv sun*.rpm; rpm --force -iv jre*.rpm') } - it { is_expected.to contain_exec('Install Oracle java_se jre 6').that_requires('Archive[/tmp/jre-6u45-linux-i586-rpm.bin]') } + let(:params) { { ensure: 'present', version: '6', java_se: 'jre' } } + let(:title) { 'jdk6' } + + it { is_expected.to contain_archive('/tmp/jre-6u45-linux-i586-rpm.bin') } + it { is_expected.to contain_exec('Install Oracle java_se jre 6').with_command('sh /tmp/jre-6u45-linux-i586-rpm.bin -x; rpm --force -iv sun*.rpm; rpm --force -iv jre*.rpm') } + it { is_expected.to contain_exec('Install Oracle java_se jre 6').that_requires('Archive[/tmp/jre-6u45-linux-i586-rpm.bin]') } end context 'select Oracle Java SE 7 JRE on RedHat family, 32-bit' do - let(:params) { {:ensure => 'present', :version => '7', :java_se => 'jre'} } - let :title do 'jdk7' end - it { is_expected.to contain_archive('/tmp/jre-7u80-linux-i586.rpm')} - it { is_expected.to contain_exec('Install Oracle java_se jre 7').with_command('rpm --force -iv /tmp/jre-7u80-linux-i586.rpm') } - it { is_expected.to contain_exec('Install Oracle java_se jre 7').that_requires('Archive[/tmp/jre-7u80-linux-i586.rpm]') } + let(:params) { { ensure: 'present', version: '7', java_se: 'jre' } } + let(:title) { 'jdk7' } + + it { is_expected.to contain_archive('/tmp/jre-7u80-linux-i586.rpm') } + it { is_expected.to contain_exec('Install Oracle java_se jre 7').with_command('rpm --force -iv /tmp/jre-7u80-linux-i586.rpm') } + it { is_expected.to contain_exec('Install Oracle java_se jre 7').that_requires('Archive[/tmp/jre-7u80-linux-i586.rpm]') } end context 'select Oracle Java SE 8 JRE on RedHat family, 32-bit' do - let(:params) { {:ensure => 'present', :version => '8', :java_se => 'jre'} } - let :title do 'jdk8' end - it { is_expected.to contain_archive('/tmp/jre-8u131-linux-i586.rpm')} - it { is_expected.to contain_exec('Install Oracle java_se jre 8').with_command('rpm --force -iv /tmp/jre-8u131-linux-i586.rpm') } - it { is_expected.to contain_exec('Install Oracle java_se jre 8').that_requires('Archive[/tmp/jre-8u131-linux-i586.rpm]') } + let(:params) { { ensure: 'present', version: '8', java_se: 'jre' } } + let(:title) { 'jdk8' } + + it { is_expected.to contain_archive('/tmp/jre-8u131-linux-i586.rpm') } + it { is_expected.to contain_exec('Install Oracle java_se jre 8').with_command('rpm --force -iv /tmp/jre-8u131-linux-i586.rpm') } + it { is_expected.to contain_exec('Install Oracle java_se jre 8').that_requires('Archive[/tmp/jre-8u131-linux-i586.rpm]') } end end context 'On Ubuntu 64-bit' do - let(:facts) { {:kernel => 'Linux', :os => { :family => 'Debian', :architecture => 'amd64', :name => 'Ubuntu', :release => { :full => '16.04' } } } } + let(:facts) { { kernel: 'Linux', os: { family: 'Debian', architecture: 'amd64', name: 'Ubuntu', release: { full: '16.04' } } } } - context 'Oracle Java SE 6 JDK' do - let(:params) { {:ensure => 'present', :version => '6', :java_se => 'jdk'} } - let :title do 'jdk6' end - it { is_expected.to contain_archive('/tmp/jdk-6u45-linux-x64.tar.gz')} - it { is_expected.to contain_exec('Install Oracle java_se jdk 6').with_command('tar -zxf /tmp/jdk-6u45-linux-x64.tar.gz -C /usr/lib/jvm') } - it { is_expected.to contain_exec('Install Oracle java_se jdk 6').that_requires('Archive[/tmp/jdk-6u45-linux-x64.tar.gz]') } - end + context 'Oracle Java SE 6 JDK' do + let(:params) { { ensure: 'present', version: '6', java_se: 'jdk' } } + let(:title) { 'jdk6' } - context 'Oracle Java SE 7 JDK' do - let(:params) { {:ensure => 'present', :version => '7', :java_se => 'jdk'} } - let :title do 'jdk7' end - it { is_expected.to contain_archive('/tmp/jdk-7u80-linux-x64.tar.gz')} - it { is_expected.to contain_exec('Install Oracle java_se jdk 7').with_command('tar -zxf /tmp/jdk-7u80-linux-x64.tar.gz -C /usr/lib/jvm') } - it { is_expected.to contain_exec('Install Oracle java_se jdk 7').that_requires('Archive[/tmp/jdk-7u80-linux-x64.tar.gz]') } - end + it { is_expected.to contain_archive('/tmp/jdk-6u45-linux-x64.tar.gz') } + it { is_expected.to contain_exec('Install Oracle java_se jdk 6').with_command('tar -zxf /tmp/jdk-6u45-linux-x64.tar.gz -C /usr/lib/jvm') } + it { is_expected.to contain_exec('Install Oracle java_se jdk 6').that_requires('Archive[/tmp/jdk-6u45-linux-x64.tar.gz]') } + end + + context 'Oracle Java SE 7 JDK' do + let(:params) { { ensure: 'present', version: '7', java_se: 'jdk' } } + let(:title) { 'jdk7' } + + it { is_expected.to contain_archive('/tmp/jdk-7u80-linux-x64.tar.gz') } + it { is_expected.to contain_exec('Install Oracle java_se jdk 7').with_command('tar -zxf /tmp/jdk-7u80-linux-x64.tar.gz -C /usr/lib/jvm') } + it { is_expected.to contain_exec('Install Oracle java_se jdk 7').that_requires('Archive[/tmp/jdk-7u80-linux-x64.tar.gz]') } + end context 'Oracle Java SE 8 JDK' do - let(:params) { {:ensure => 'present', :version => '8', :java_se => 'jdk'} } - let :title do 'jdk8' end - it { is_expected.to contain_archive('/tmp/jdk-8u131-linux-x64.tar.gz')} - it { is_expected.to contain_exec('Install Oracle java_se jdk 8').with_command('tar -zxf /tmp/jdk-8u131-linux-x64.tar.gz -C /usr/lib/jvm') } - it { is_expected.to contain_exec('Install Oracle java_se jdk 8').that_requires('Archive[/tmp/jdk-8u131-linux-x64.tar.gz]') } + let(:params) { { ensure: 'present', version: '8', java_se: 'jdk' } } + let(:title) { 'jdk8' } + + it { is_expected.to contain_archive('/tmp/jdk-8u131-linux-x64.tar.gz') } + it { is_expected.to contain_exec('Install Oracle java_se jdk 8').with_command('tar -zxf /tmp/jdk-8u131-linux-x64.tar.gz -C /usr/lib/jvm') } + it { is_expected.to contain_exec('Install Oracle java_se jdk 8').that_requires('Archive[/tmp/jdk-8u131-linux-x64.tar.gz]') } end context 'Oracle Java SE 6 JRE' do - let(:params) { {:ensure => 'present', :version => '6', :java_se => 'jre'} } - let :title do 'jre6' end - it { is_expected.to contain_archive('/tmp/jre-6u45-linux-x64.tar.gz')} - it { is_expected.to contain_exec('Install Oracle java_se jre 6').with_command('tar -zxf /tmp/jre-6u45-linux-x64.tar.gz -C /usr/lib/jvm') } - it { is_expected.to contain_exec('Install Oracle java_se jre 6').that_requires('Archive[/tmp/jre-6u45-linux-x64.tar.gz]') } + let(:params) { { ensure: 'present', version: '6', java_se: 'jre' } } + let(:title) { 'jre6' } + + it { is_expected.to contain_archive('/tmp/jre-6u45-linux-x64.tar.gz') } + it { is_expected.to contain_exec('Install Oracle java_se jre 6').with_command('tar -zxf /tmp/jre-6u45-linux-x64.tar.gz -C /usr/lib/jvm') } + it { is_expected.to contain_exec('Install Oracle java_se jre 6').that_requires('Archive[/tmp/jre-6u45-linux-x64.tar.gz]') } end context 'Oracle Java SE 7 JRE' do - let(:params) { {:ensure => 'present', :version => '7', :java_se => 'jre'} } - let :title do 'jre7' end - it { is_expected.to contain_archive('/tmp/jre-7u80-linux-x64.tar.gz')} - it { is_expected.to contain_exec('Install Oracle java_se jre 7').with_command('tar -zxf /tmp/jre-7u80-linux-x64.tar.gz -C /usr/lib/jvm') } - it { is_expected.to contain_exec('Install Oracle java_se jre 7').that_requires('Archive[/tmp/jre-7u80-linux-x64.tar.gz]') } + let(:params) { { ensure: 'present', version: '7', java_se: 'jre' } } + let(:title) { 'jre7' } + + it { is_expected.to contain_archive('/tmp/jre-7u80-linux-x64.tar.gz') } + it { is_expected.to contain_exec('Install Oracle java_se jre 7').with_command('tar -zxf /tmp/jre-7u80-linux-x64.tar.gz -C /usr/lib/jvm') } + it { is_expected.to contain_exec('Install Oracle java_se jre 7').that_requires('Archive[/tmp/jre-7u80-linux-x64.tar.gz]') } end context 'select Oracle Java SE 8 JRE' do - let(:params) { {:ensure => 'present', :version => '8', :java_se => 'jre'} } - let :title do 'jre8' end - it { is_expected.to contain_archive('/tmp/jre-8u131-linux-x64.tar.gz')} - it { is_expected.to contain_exec('Install Oracle java_se jre 8').with_command('tar -zxf /tmp/jre-8u131-linux-x64.tar.gz -C /usr/lib/jvm') } - it { is_expected.to contain_exec('Install Oracle java_se jre 8').that_requires('Archive[/tmp/jre-8u131-linux-x64.tar.gz]') } + let(:params) { { ensure: 'present', version: '8', java_se: 'jre' } } + let(:title) { 'jre8' } + + it { is_expected.to contain_archive('/tmp/jre-8u131-linux-x64.tar.gz') } + it { is_expected.to contain_exec('Install Oracle java_se jre 8').with_command('tar -zxf /tmp/jre-8u131-linux-x64.tar.gz -C /usr/lib/jvm') } + it { is_expected.to contain_exec('Install Oracle java_se jre 8').that_requires('Archive[/tmp/jre-8u131-linux-x64.tar.gz]') } end context 'Pass URL to url parameter' do - let(:params) { {:ensure => 'present', :version_major => '8u131', :version_minor => 'b11', :java_se => 'jdk', :url => 'http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz'} } - let :title do 'jdk8' end - it { is_expected.to contain_archive('/tmp/jdk-8u131-linux-x64.tar.gz')} - end + let(:params) { { ensure: 'present', version_major: '8u131', version_minor: 'b11', java_se: 'jdk', url: oracle_url.to_s } } + let(:title) { 'jdk8' } + + it { is_expected.to contain_archive('/tmp/jdk-8u131-linux-x64.tar.gz') } + end end describe 'incompatible OSes' do [ { # C14706 - :kernel => 'Windows', - :os => { - :family => 'Windows', - :name => 'Windows', - :release => { - :full => '8.1' - } + kernel: 'Windows', + os: { + family: 'Windows', + name: 'Windows', + release: { + full: '8.1', + }, }, }, { # C14707 - :kernel => 'Darwin', - :os => { - :family => 'Darwin', - :name => 'Darwin', - :release => { - :full => '13.3.0' - } + kernel: 'Darwin', + os: { + family: 'Darwin', + name: 'Darwin', + release: { + full: '13.3.0', + }, }, }, { # C14708 - :kernel => 'AIX', - :os => { - :family => 'AIX', - :name => 'AIX', - :release => { - :full => '7100-02-00-000' - } + kernel: 'AIX', + os: { + family: 'AIX', + name: 'AIX', + release: { + full: '7100-02-00-000', + }, }, }, { # C14709 - :kernel => 'AIX', - :os => { - :family => 'AIX', - :name => 'AIX', - :release => { - :full => '6100-07-04-1216' - } + kernel: 'AIX', + os: { + family: 'AIX', + name: 'AIX', + release: { + full: '6100-07-04-1216', + }, }, }, { # C14710 - :kernel => 'AIX', - :os => { - :family => 'AIX', - :name => 'AIX', - :release => { - :full => '5300-12-01-1016' - } + kernel: 'AIX', + os: { + family: 'AIX', + name: 'AIX', + release: { + full: '5300-12-01-1016', + }, }, - } + }, ].each do |facts| let(:facts) { facts } - let :title do 'jdk' end + let(:title) { 'jdk' } + it "is_expected.to fail on #{facts[:os][:name]} #{facts[:os][:release][:full]}" do - expect { catalogue }.to raise_error Puppet::Error, /unsupported platform/ + expect { catalogue }.to raise_error Puppet::Error, %r{unsupported platform} end end end diff --git a/spec/spec_helper_acceptance.rb b/spec/spec_helper_acceptance.rb index abd814b..08bb1ed 100644 --- a/spec/spec_helper_acceptance.rb +++ b/spec/spec_helper_acceptance.rb @@ -6,11 +6,11 @@ run_puppet_install_helper install_module_on(hosts) install_module_dependencies_on(hosts) -UNSUPPORTED_PLATFORMS = [ "Darwin", "windows" ] +UNSUPPORTED_PLATFORMS = %w[Darwin windows].freeze -unless ENV["RS_PROVISION"] == "no" or ENV["BEAKER_provision"] == "no" +unless ENV['RS_PROVISION'] == 'no' || ENV['BEAKER_provision'] == 'no' hosts.each do |host| - install_puppet_module_via_pmt_on(host, {module_name: 'puppetlabs-apt'}) + install_puppet_module_via_pmt_on(host, module_name: 'puppetlabs-apt') end end diff --git a/spec/unit/facter/java_default_home_spec.rb b/spec/unit/facter/java_default_home_spec.rb index a111fef..0186833 100644 --- a/spec/unit/facter/java_default_home_spec.rb +++ b/spec/unit/facter/java_default_home_spec.rb @@ -1,52 +1,54 @@ -require "spec_helper" +require 'spec_helper' + +java_7_path = '/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java' +java_7_home = '/usr/lib/jvm/java-7-openjdk-amd64' +java_8_path = '/usr/lib/jvm/oracle-java8-jre-amd64/bin/java' +java_8_home = '/usr/lib/jvm/oracle-java8-jre-amd64' def unlink_and_delete(filename) - if File.symlink?(filename) - File.unlink(filename) - end - if File.exist?(filename) - File.delete(filename) - end + if File.symlink?(filename) + File.unlink(filename) + end + return unless File.exist?(filename) + File.delete(filename) end -describe Facter::Util::Fact do +def symlink_and_test(symlink_path, java_home) + File.symlink(symlink_path, './java_test') + Facter::Util::Resolution.expects(:which).with('java').returns('./java_test') + File.expects(:realpath).with('./java_test').returns(symlink_path) + expect(Facter.value(:java_default_home)).to eql java_home +end - describe "java_default_home" do - before(:each) { - Facter.clear - Facter.fact(:kernel).stubs(:value).returns('Linux') - } +describe 'java_default_home' do + before(:each) do + Facter.clear + Facter.fact(:kernel).stubs(:value).returns('Linux') + end - context 'returns java home path when java found in PATH' do - context "when java is in /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java" do - it do - unlink_and_delete('./java_test') - File.symlink('/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java', './java_test') - Facter::Util::Resolution.expects(:which).with("java").returns("./java_test") - File.expects(:realpath).with('./java_test').returns('/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java') - expect(Facter.value(:java_default_home)).to eql '/usr/lib/jvm/java-7-openjdk-amd64' - unlink_and_delete('./java_test') - end - end - - context "when java is in /usr/lib/jvm/oracle-java8-jre-amd64/bin/java" do - it do - unlink_and_delete('./java_test') - File.symlink('/usr/lib/jvm/oracle-java8-jre-amd64/bin/java', './java_test') - Facter::Util::Resolution.expects(:which).with("java").returns("./java_test") - File.expects(:realpath).with('./java_test').returns('/usr/lib/jvm/oracle-java8-jre-amd64/bin/java') - expect(Facter.value(:java_default_home)).to eql '/usr/lib/jvm/oracle-java8-jre-amd64' - unlink_and_delete('./java_test') - end + context 'returns java home path when java found in PATH' do + context 'when java is in /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java' do + it do + unlink_and_delete('./java_test') + symlink_and_test(java_7_path, java_7_home) + unlink_and_delete('./java_test') end end - context 'returns nil when java not present' do + context 'when java is in /usr/lib/jvm/oracle-java8-jre-amd64/bin/java' do it do - Facter::Util::Resolution.stubs(:exec) - Facter::Util::Resolution.expects(:which).with("java").at_least(1).returns(false) - expect(Facter.value(:java_default_home)).to be_nil + unlink_and_delete('./java_test') + symlink_and_test(java_8_path, java_8_home) + unlink_and_delete('./java_test') end end end + + context 'returns nil when java not present' do + it do + Facter::Util::Resolution.stubs(:exec) + Facter::Util::Resolution.expects(:which).with('java').at_least(1).returns(false) + expect(Facter.value(:java_default_home)).to be_nil + end + end end diff --git a/spec/unit/facter/java_libjvm_path_spec.rb b/spec/unit/facter/java_libjvm_path_spec.rb index ea63a1c..e64d96a 100644 --- a/spec/unit/facter/java_libjvm_path_spec.rb +++ b/spec/unit/facter/java_libjvm_path_spec.rb @@ -1,21 +1,17 @@ -require "spec_helper" +require 'spec_helper' -describe Facter::Util::Fact do - before { +describe 'java_libjvm_path' do + before(:each) do Facter.clear Facter.fact(:kernel).stubs(:value).returns('Linux') java_default_home = '/usr/lib/jvm/java-8-openjdk-amd64' Facter.fact(:java_default_home).stubs(:value).returns(java_default_home) - Dir.stubs(:glob).with("#{java_default_home}/jre/lib/**/libjvm.so").returns( ['/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server/libjvm.so']) - } + Dir.stubs(:glob).with("#{java_default_home}/jre/lib/**/libjvm.so").returns(['/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server/libjvm.so']) + end - describe "java_libjvm_path" do - context 'returns libjvm path' do - context 'on Linux' do - it do - expect(Facter.value(:java_libjvm_path)).to eql "/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server" - end - end + context 'returns libjvm path on Linux' do + it do + expect(Facter.value(:java_libjvm_path)).to eql '/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server' end end end diff --git a/spec/unit/facter/java_major_version_spec.rb b/spec/unit/facter/java_major_version_spec.rb index 5c83081..f13f989 100644 --- a/spec/unit/facter/java_major_version_spec.rb +++ b/spec/unit/facter/java_major_version_spec.rb @@ -1,27 +1,25 @@ -require "spec_helper" +require 'spec_helper' -describe Facter::Util::Fact do - before { +describe 'java_major_version' do + before(:each) do Facter.clear - } + end - describe "java_major_version" do - context 'returns major version when java_version fact present' do - before :each do - Facter.fact(:java_version).stubs(:value).returns('1.7.0_71') - end - it do - expect(Facter.fact(:java_major_version).value).to eq("7") - end + context 'returns major version when java_version fact present' do + before :each do + Facter.fact(:java_version).stubs(:value).returns('1.7.0_71') end + it do + expect(Facter.fact(:java_major_version).value).to eq('7') + end + end - context 'returns nil when java not present' do - before :each do - Facter.fact(:java_version).stubs(:value).returns(nil) - end - it do - expect(Facter.fact(:java_major_version).value).to be_nil - end + context 'returns nil when java not present' do + before :each do + Facter.fact(:java_version).stubs(:value).returns(nil) + end + it do + expect(Facter.fact(:java_major_version).value).to be_nil end end end diff --git a/spec/unit/facter/java_patch_level_spec.rb b/spec/unit/facter/java_patch_level_spec.rb index 5f99eab..5227df4 100644 --- a/spec/unit/facter/java_patch_level_spec.rb +++ b/spec/unit/facter/java_patch_level_spec.rb @@ -1,31 +1,25 @@ -require "spec_helper" +require 'spec_helper' -describe Facter::Util::Fact do - before { +describe 'java_patch_level' do + before(:each) do Facter.clear - } + end - describe "java_patch_level" do - context "if java is installed" do - context 'returns java patch version extracted from java_version fact' do - before :each do - Facter.fact(:java_version).stubs(:value).returns('1.7.0_71') - end - it do - expect(Facter.fact(:java_patch_level).value).to eq("71") - end - end + context 'if java is installed returns java patch version extracted from java_version fact' do + before :each do + Facter.fact(:java_version).stubs(:value).returns('1.7.0_71') end + it do + expect(Facter.fact(:java_patch_level).value).to eq('71') + end + end - context "if java is not installed" do - context 'returns nil' do - before :each do - Facter.fact(:java_version).stubs(:value).returns(nil) - end - it do - expect(Facter.fact(:java_patch_level).value).to be_nil - end - end + context 'if java is not installed returns nil' do + before :each do + Facter.fact(:java_version).stubs(:value).returns(nil) + end + it do + expect(Facter.fact(:java_patch_level).value).to be_nil end end end diff --git a/spec/unit/facter/java_version_spec.rb b/spec/unit/facter/java_version_spec.rb index 961bd2d..54a891a 100644 --- a/spec/unit/facter/java_version_spec.rb +++ b/spec/unit/facter/java_version_spec.rb @@ -1,95 +1,91 @@ -require "spec_helper" +require 'spec_helper' -describe Facter::Util::Fact do - before { +openjdk_7_output = "Picked up JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true\n"\ + "openjdk version \"1.7.0_71\"\n"\ + "OpenJDK Runtime Environment (build 1.7.0_71-b14)\n"\ + "OpenJDK 64-Bit Server VM (build 24.71-b01, mixed mode)\n" + +jdk_7_hotspot_output = "Picked up JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true\n"\ + "java version \"1.7.0_71\"\n"\ + "Java(TM) SE Runtime Environment (build 1.7.0_71-b14)\n"\ + "Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode)\n" + +describe 'java_version' do + before(:each) do Facter.clear - } + end - describe "java_version" do - context 'returns java version when java present' do - context 'on OpenBSD' do - before do - Facter.fact(:operatingsystem).stubs(:value).returns("OpenBSD") - end - let(:facts) { {:operatingsystem => 'OpenBSD'} } - it do - java_version_output = <<-EOS -Picked up JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true -openjdk version "1.7.0_71" -OpenJDK Runtime Environment (build 1.7.0_71-b14) -OpenJDK 64-Bit Server VM (build 24.71-b01, mixed mode) - EOS - Facter::Util::Resolution.expects(:which).with("java").returns('/usr/local/jdk-1.7.0/jre/bin/java') - Facter::Util::Resolution.expects(:exec).with("java -Xmx12m -version 2>&1").returns(java_version_output) - expect(Facter.value(:java_version)).to eq("1.7.0_71") - end + context 'returns java version when java present' do + context 'on OpenBSD', with_env: true do + before(:each) do + Facter.fact(:operatingsystem).stubs(:value).returns('OpenBSD') end - context 'on Darwin' do - before do - Facter.fact(:operatingsystem).stubs(:value).returns("Darwin") - end - let(:facts) { {:operatingsystem => 'Darwin'} } - it do - java_version_output = <<-EOS -Picked up JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true -java version "1.7.0_71" -Java(TM) SE Runtime Environment (build 1.7.0_71-b14) -Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode) - EOS - Facter::Util::Resolution.expects(:exec).with("/usr/libexec/java_home --failfast 2>&1").returns("/Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home") - Facter::Util::Resolution.expects(:exec).with("java -Xmx12m -version 2>&1").returns(java_version_output) - expect(Facter.value(:java_version)).to eql "1.7.0_71" - end - end - context 'on other systems' do - before do - Facter.fact(:operatingsystem).stubs(:value).returns("MyOS") - end - let(:facts) { {:operatingsystem => 'MyOS'} } - it do - java_version_output = <<-EOS -Picked up JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true -java version "1.7.0_71" -Java(TM) SE Runtime Environment (build 1.7.0_71-b14) -Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode) - EOS - Facter::Util::Resolution.expects(:which).with("java").returns('/path/to/java') - Facter::Util::Resolution.expects(:exec).with("java -Xmx12m -version 2>&1").returns(java_version_output) - expect(Facter.value(:java_version)).to eq("1.7.0_71") - end + let(:facts) { { operatingsystem: 'OpenBSD' } } + + it do + Facter::Util::Resolution.expects(:which).with('java').returns('/usr/local/jdk-1.7.0/jre/bin/java') + Facter::Util::Resolution.expects(:exec).with('java -Xmx12m -version 2>&1').returns(openjdk_7_output) + expect(Facter.value(:java_version)).to eq('1.7.0_71') end end + context 'on Darwin' do + before(:each) do + Facter.fact(:operatingsystem).stubs(:value).returns('Darwin') + end + let(:facts) { { operatingsystem: 'Darwin' } } - context 'returns nil when java not present' do - context 'on OpenBSD' do - before do - Facter.fact(:operatingsystem).stubs(:value).returns("OpenBSD") - end - let(:facts) { {:operatingsystem => 'OpenBSD'} } - it do - Facter::Util::Resolution.stubs(:exec) - expect(Facter.value(:java_version)).to be_nil - end + it do + Facter::Util::Resolution.expects(:exec).with('/usr/libexec/java_home --failfast 2>&1').returns('/Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home') + Facter::Util::Resolution.expects(:exec).with('java -Xmx12m -version 2>&1').returns(jdk_7_hotspot_output) + expect(Facter.value(:java_version)).to eql '1.7.0_71' end - context 'on Darwin' do - before do - Facter.fact(:operatingsystem).stubs(:value).returns("Darwin") - end - let(:facts) { {:operatingsystem => 'Darwin'} } - it do - Facter::Util::Resolution.expects(:exec).at_least(1).with("/usr/libexec/java_home --failfast 2>&1").returns('Unable to find any JVMs matching version "(null)".') - expect(Facter.value(:java_version)).to be_nil - end + end + context 'on other systems' do + before(:each) do + Facter.fact(:operatingsystem).stubs(:value).returns('MyOS') end - context 'on other systems' do - before do - Facter.fact(:operatingsystem).stubs(:value).returns("MyOS") - end - let(:facts) { {:operatingsystem => 'MyOS'} } - it do - Facter::Util::Resolution.expects(:which).at_least(1).with("java").returns(false) - expect(Facter.value(:java_version)).to be_nil - end + let(:facts) { { operatingsystem: 'MyOS' } } + + it do + Facter::Util::Resolution.expects(:which).with('java').returns('/path/to/java') + Facter::Util::Resolution.expects(:exec).with('java -Xmx12m -version 2>&1').returns(jdk_7_hotspot_output) + expect(Facter.value(:java_version)).to eq('1.7.0_71') + end + end + end + + context 'returns nil when java not present' do + context 'on OpenBSD', with_env: true do + before(:each) do + Facter.fact(:operatingsystem).stubs(:value).returns('OpenBSD') + end + let(:facts) { { operatingsystem: 'OpenBSD' } } + + it do + Facter::Util::Resolution.stubs(:exec) + expect(Facter.value(:java_version)).to be_nil + end + end + context 'on Darwin' do + before(:each) do + Facter.fact(:operatingsystem).stubs(:value).returns('Darwin') + end + let(:facts) { { operatingsystem: 'Darwin' } } + + it do + Facter::Util::Resolution.expects(:exec).at_least(1).with('/usr/libexec/java_home --failfast 2>&1').returns('Unable to find any JVMs matching version "(null)".') + expect(Facter.value(:java_version)).to be_nil + end + end + context 'on other systems' do + before(:each) do + Facter.fact(:operatingsystem).stubs(:value).returns('MyOS') + end + let(:facts) { { operatingsystem: 'MyOS' } } + + it do + Facter::Util::Resolution.expects(:which).at_least(1).with('java').returns(false) + expect(Facter.value(:java_version)).to be_nil end end end