beaker 2.7.1 → 2.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
 - data/HISTORY.md +121 -2
 - data/lib/beaker/dsl.rb +2 -2
 - data/lib/beaker/dsl/helpers.rb +13 -1429
 - data/lib/beaker/dsl/helpers/facter_helpers.rb +48 -0
 - data/lib/beaker/dsl/helpers/hiera_helpers.rb +71 -0
 - data/lib/beaker/dsl/helpers/host_helpers.rb +506 -0
 - data/lib/beaker/dsl/helpers/puppet_helpers.rb +698 -0
 - data/lib/beaker/dsl/helpers/tk_helpers.rb +101 -0
 - data/lib/beaker/dsl/helpers/web_helpers.rb +115 -0
 - data/lib/beaker/dsl/install_utils.rb +8 -1570
 - data/lib/beaker/dsl/install_utils/ezbake_utils.rb +256 -0
 - data/lib/beaker/dsl/install_utils/module_utils.rb +237 -0
 - data/lib/beaker/dsl/install_utils/pe_utils.rb +518 -0
 - data/lib/beaker/dsl/install_utils/puppet_utils.rb +722 -0
 - data/lib/beaker/dsl/outcomes.rb +0 -4
 - data/lib/beaker/dsl/roles.rb +0 -3
 - data/lib/beaker/dsl/structure.rb +127 -4
 - data/lib/beaker/dsl/wrappers.rb +0 -4
 - data/lib/beaker/host.rb +23 -0
 - data/lib/beaker/host/unix/pkg.rb +4 -4
 - data/lib/beaker/host_prebuilt_steps.rb +11 -5
 - data/lib/beaker/hypervisor/vagrant.rb +1 -0
 - data/lib/beaker/hypervisor/vmpooler.rb +38 -0
 - data/lib/beaker/logger.rb +10 -4
 - data/lib/beaker/network_manager.rb +5 -4
 - data/lib/beaker/options/command_line_parser.rb +7 -0
 - data/lib/beaker/shared.rb +2 -1
 - data/lib/beaker/shared/semvar.rb +41 -0
 - data/lib/beaker/test_suite.rb +20 -6
 - data/lib/beaker/version.rb +1 -1
 - data/spec/beaker/dsl/helpers/facter_helpers_spec.rb +59 -0
 - data/spec/beaker/dsl/helpers/hiera_helpers_spec.rb +96 -0
 - data/spec/beaker/dsl/helpers/host_helpers_spec.rb +413 -0
 - data/spec/beaker/dsl/{helpers_spec.rb → helpers/puppet_helpers_spec.rb} +2 -611
 - data/spec/beaker/dsl/helpers/tk_helpers_spec.rb +83 -0
 - data/spec/beaker/dsl/helpers/web_helpers_spec.rb +60 -0
 - data/spec/beaker/dsl/install_utils/module_utils_spec.rb +241 -0
 - data/spec/beaker/dsl/install_utils/pe_utils_spec.rb +475 -0
 - data/spec/beaker/dsl/install_utils/puppet_utils_spec.rb +523 -0
 - data/spec/beaker/dsl/structure_spec.rb +108 -0
 - data/spec/beaker/host_prebuilt_steps_spec.rb +44 -0
 - data/spec/beaker/host_spec.rb +41 -0
 - data/spec/beaker/hypervisor/vagrant_spec.rb +2 -1
 - data/spec/beaker/logger_spec.rb +9 -2
 - data/spec/beaker/network_manager_spec.rb +7 -1
 - data/spec/beaker/options/command_line_parser_spec.rb +3 -2
 - data/spec/beaker/shared/semvar_spec.rb +36 -0
 - data/spec/beaker/test_suite_spec.rb +48 -0
 - data/spec/mocks.rb +10 -0
 - metadata +23 -5
 - data/lib/beaker/dsl/ezbake_utils.rb +0 -259
 - data/spec/beaker/dsl/install_utils_spec.rb +0 -1242
 
| 
         @@ -1,259 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require 'beaker/dsl/install_utils'
         
     | 
| 
       2 
     | 
    
         
            -
            require 'fileutils'
         
     | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
       4 
     | 
    
         
            -
            module Beaker
         
     | 
| 
       5 
     | 
    
         
            -
              module DSL
         
     | 
| 
       6 
     | 
    
         
            -
                # This module contains methods to assist in installing projects from source
         
     | 
| 
       7 
     | 
    
         
            -
                # that use ezbake for packaging.
         
     | 
| 
       8 
     | 
    
         
            -
                #
         
     | 
| 
       9 
     | 
    
         
            -
                # @api dsl
         
     | 
| 
       10 
     | 
    
         
            -
                module EZBakeUtils
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
                  # @!group Public DSL Methods
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
                  # Installs leiningen project with given name and version on remote host.
         
     | 
| 
       15 
     | 
    
         
            -
                  #
         
     | 
| 
       16 
     | 
    
         
            -
                  # @param [Host] host A single remote host on which to install the
         
     | 
| 
       17 
     | 
    
         
            -
                  #   specified leiningen project.
         
     | 
| 
       18 
     | 
    
         
            -
                  # @api dsl
         
     | 
| 
       19 
     | 
    
         
            -
                  def install_from_ezbake host
         
     | 
| 
       20 
     | 
    
         
            -
                    ezbake_validate_support host
         
     | 
| 
       21 
     | 
    
         
            -
                    ezbake_tools_available?
         
     | 
| 
       22 
     | 
    
         
            -
                    install_ezbake_tarball_on_host host
         
     | 
| 
       23 
     | 
    
         
            -
                    ezbake_installsh host, "service"
         
     | 
| 
       24 
     | 
    
         
            -
                  end
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
                  # Installs termini with given name and version on remote host.
         
     | 
| 
       27 
     | 
    
         
            -
                  #
         
     | 
| 
       28 
     | 
    
         
            -
                  # @param [Host] host A single remote host on which to install the
         
     | 
| 
       29 
     | 
    
         
            -
                  #   specified leiningen project.
         
     | 
| 
       30 
     | 
    
         
            -
                  # @api dsl
         
     | 
| 
       31 
     | 
    
         
            -
                  def install_termini_from_ezbake host
         
     | 
| 
       32 
     | 
    
         
            -
                    ezbake_validate_support host
         
     | 
| 
       33 
     | 
    
         
            -
                    ezbake_tools_available?
         
     | 
| 
       34 
     | 
    
         
            -
                    install_ezbake_tarball_on_host host
         
     | 
| 
       35 
     | 
    
         
            -
                    ezbake_installsh host, "termini"
         
     | 
| 
       36 
     | 
    
         
            -
                  end
         
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
                  # Install a development version of ezbake into the local m2 repository
         
     | 
| 
       39 
     | 
    
         
            -
                  #
         
     | 
| 
       40 
     | 
    
         
            -
                  # This can be useful if you want to work on a development branch of
         
     | 
| 
       41 
     | 
    
         
            -
                  # ezbake that hasn't been released yet. Ensure your project dependencies
         
     | 
| 
       42 
     | 
    
         
            -
                  # in your development branch include a reference to the -SNAPSHOT
         
     | 
| 
       43 
     | 
    
         
            -
                  # version of the project for it to successfully pickup a pre-shipped
         
     | 
| 
       44 
     | 
    
         
            -
                  # version of ezbake.
         
     | 
| 
       45 
     | 
    
         
            -
                  #
         
     | 
| 
       46 
     | 
    
         
            -
                  # @param url [String] git url
         
     | 
| 
       47 
     | 
    
         
            -
                  # @param branch [String] git branch
         
     | 
| 
       48 
     | 
    
         
            -
                  # @api dsl
         
     | 
| 
       49 
     | 
    
         
            -
                  def ezbake_dev_build url = "git@github.com:puppetlabs/ezbake.git",
         
     | 
| 
       50 
     | 
    
         
            -
                                       branch = "master"
         
     | 
| 
       51 
     | 
    
         
            -
                    ezbake_dir = 'tmp/ezbake'
         
     | 
| 
       52 
     | 
    
         
            -
                    conditionally_clone url, ezbake_dir, branch
         
     | 
| 
       53 
     | 
    
         
            -
                    lp = ezbake_lein_prefix
         
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
       55 
     | 
    
         
            -
                    Dir.chdir(ezbake_dir) do
         
     | 
| 
       56 
     | 
    
         
            -
                      ezbake_local_cmd "#{lp} install",
         
     | 
| 
       57 
     | 
    
         
            -
                                        :throw_on_failure => true
         
     | 
| 
       58 
     | 
    
         
            -
                    end
         
     | 
| 
       59 
     | 
    
         
            -
                  end
         
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
       61 
     | 
    
         
            -
                  # @!endgroup
         
     | 
| 
       62 
     | 
    
         
            -
             
     | 
| 
       63 
     | 
    
         
            -
                  class << self
         
     | 
| 
       64 
     | 
    
         
            -
                    attr_accessor :config
         
     | 
| 
       65 
     | 
    
         
            -
                  end
         
     | 
| 
       66 
     | 
    
         
            -
             
     | 
| 
       67 
     | 
    
         
            -
                  # @!group Private helpers
         
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
       69 
     | 
    
         
            -
                  # Test for support in one place
         
     | 
| 
       70 
     | 
    
         
            -
                  #
         
     | 
| 
       71 
     | 
    
         
            -
                  # @param [Host] host host to check for support
         
     | 
| 
       72 
     | 
    
         
            -
                  # @raise [RuntimeError] if OS is not supported
         
     | 
| 
       73 
     | 
    
         
            -
                  # @api private
         
     | 
| 
       74 
     | 
    
         
            -
                  def ezbake_validate_support host
         
     | 
| 
       75 
     | 
    
         
            -
                    variant, version, _, _ = host['platform'].to_array
         
     | 
| 
       76 
     | 
    
         
            -
                    unless variant =~ /^(fedora|el|centos|debian|ubuntu)$/
         
     | 
| 
       77 
     | 
    
         
            -
                      raise RuntimeError,
         
     | 
| 
       78 
     | 
    
         
            -
                            "No support for #{variant} within ezbake_utils ..."
         
     | 
| 
       79 
     | 
    
         
            -
                    end
         
     | 
| 
       80 
     | 
    
         
            -
                  end
         
     | 
| 
       81 
     | 
    
         
            -
             
     | 
| 
       82 
     | 
    
         
            -
                  # Build, copy & unpack tarball on remote host
         
     | 
| 
       83 
     | 
    
         
            -
                  #
         
     | 
| 
       84 
     | 
    
         
            -
                  # @param [Host] host installation destination
         
     | 
| 
       85 
     | 
    
         
            -
                  # @api private
         
     | 
| 
       86 
     | 
    
         
            -
                  def install_ezbake_tarball_on_host host
         
     | 
| 
       87 
     | 
    
         
            -
                    if not ezbake_config
         
     | 
| 
       88 
     | 
    
         
            -
                      ezbake_stage
         
     | 
| 
       89 
     | 
    
         
            -
                    end
         
     | 
| 
       90 
     | 
    
         
            -
             
     | 
| 
       91 
     | 
    
         
            -
                    # Skip installation if the remote directory exists
         
     | 
| 
       92 
     | 
    
         
            -
                    result = on host, "test -d #{ezbake_install_dir}", :acceptable_exit_codes => [0, 1]
         
     | 
| 
       93 
     | 
    
         
            -
                    return if result.exit_code == 0
         
     | 
| 
       94 
     | 
    
         
            -
             
     | 
| 
       95 
     | 
    
         
            -
                    ezbake_staging_dir = File.join('target', 'staging')
         
     | 
| 
       96 
     | 
    
         
            -
                    Dir.chdir(ezbake_staging_dir) do
         
     | 
| 
       97 
     | 
    
         
            -
                      ezbake_local_cmd 'rake package:tar'
         
     | 
| 
       98 
     | 
    
         
            -
                    end
         
     | 
| 
       99 
     | 
    
         
            -
             
     | 
| 
       100 
     | 
    
         
            -
                    local_tarball = ezbake_staging_dir + "/pkg/" + ezbake_install_name + ".tar.gz"
         
     | 
| 
       101 
     | 
    
         
            -
                    remote_tarball = ezbake_install_dir + ".tar.gz"
         
     | 
| 
       102 
     | 
    
         
            -
                    scp_to host, local_tarball, remote_tarball
         
     | 
| 
       103 
     | 
    
         
            -
             
     | 
| 
       104 
     | 
    
         
            -
                    # untar tarball on host
         
     | 
| 
       105 
     | 
    
         
            -
                    on host, "tar -xzf " + remote_tarball
         
     | 
| 
       106 
     | 
    
         
            -
             
     | 
| 
       107 
     | 
    
         
            -
                    # Check to ensure directory exists
         
     | 
| 
       108 
     | 
    
         
            -
                    on host, "test -d #{ezbake_install_dir}"
         
     | 
| 
       109 
     | 
    
         
            -
                  end
         
     | 
| 
       110 
     | 
    
         
            -
             
     | 
| 
       111 
     | 
    
         
            -
                  LOCAL_COMMANDS_REQUIRED = [
         
     | 
| 
       112 
     | 
    
         
            -
                    ['leiningen', 'lein --version', nil],
         
     | 
| 
       113 
     | 
    
         
            -
                    ['lein-pprint', 'lein with-profile ci pprint :version',
         
     | 
| 
       114 
     | 
    
         
            -
                      'Must have lein-pprint installed under the :ci profile.'],
         
     | 
| 
       115 
     | 
    
         
            -
                    ['java', 'java -version', nil],
         
     | 
| 
       116 
     | 
    
         
            -
                    ['git', 'git --version', nil],
         
     | 
| 
       117 
     | 
    
         
            -
                    ['rake', 'rake --version', nil],
         
     | 
| 
       118 
     | 
    
         
            -
                  ]
         
     | 
| 
       119 
     | 
    
         
            -
             
     | 
| 
       120 
     | 
    
         
            -
                  # Checks given host for the tools necessary to perform
         
     | 
| 
       121 
     | 
    
         
            -
                  # install_from_ezbake.
         
     | 
| 
       122 
     | 
    
         
            -
                  #
         
     | 
| 
       123 
     | 
    
         
            -
                  # @raise [RuntimeError] if tool is not found
         
     | 
| 
       124 
     | 
    
         
            -
                  # @api private
         
     | 
| 
       125 
     | 
    
         
            -
                  def ezbake_tools_available?
         
     | 
| 
       126 
     | 
    
         
            -
                    LOCAL_COMMANDS_REQUIRED.each do |software_name, command, additional_error_message|
         
     | 
| 
       127 
     | 
    
         
            -
                      if not system command
         
     | 
| 
       128 
     | 
    
         
            -
                        error_message = "Must have #{software_name} installed on development system.\n"
         
     | 
| 
       129 
     | 
    
         
            -
                        if additional_error_message
         
     | 
| 
       130 
     | 
    
         
            -
                          error_message += additional_error_message
         
     | 
| 
       131 
     | 
    
         
            -
                        end
         
     | 
| 
       132 
     | 
    
         
            -
                        raise RuntimeError, error_message
         
     | 
| 
       133 
     | 
    
         
            -
                      end
         
     | 
| 
       134 
     | 
    
         
            -
                    end
         
     | 
| 
       135 
     | 
    
         
            -
                  end
         
     | 
| 
       136 
     | 
    
         
            -
             
     | 
| 
       137 
     | 
    
         
            -
                  # Return the ezbake config.
         
     | 
| 
       138 
     | 
    
         
            -
                  #
         
     | 
| 
       139 
     | 
    
         
            -
                  # @return [Hash] configuration for ezbake, usually from ezbake.rb
         
     | 
| 
       140 
     | 
    
         
            -
                  # @api private
         
     | 
| 
       141 
     | 
    
         
            -
                  def ezbake_config
         
     | 
| 
       142 
     | 
    
         
            -
                    EZBakeUtils.config
         
     | 
| 
       143 
     | 
    
         
            -
                  end
         
     | 
| 
       144 
     | 
    
         
            -
             
     | 
| 
       145 
     | 
    
         
            -
                  # Returns a leiningen prefix with local m2 repo capability
         
     | 
| 
       146 
     | 
    
         
            -
                  #
         
     | 
| 
       147 
     | 
    
         
            -
                  # @return [String] lein prefix command that uses a local build
         
     | 
| 
       148 
     | 
    
         
            -
                  #   m2 repository.
         
     | 
| 
       149 
     | 
    
         
            -
                  # @api private
         
     | 
| 
       150 
     | 
    
         
            -
                  def ezbake_lein_prefix
         
     | 
| 
       151 
     | 
    
         
            -
                    # Get the absolute path to the local repo
         
     | 
| 
       152 
     | 
    
         
            -
                    m2_repo = File.join(Dir.pwd, 'tmp', 'm2-local')
         
     | 
| 
       153 
     | 
    
         
            -
             
     | 
| 
       154 
     | 
    
         
            -
                    'lein update-in : assoc :local-repo "\"' + m2_repo + '\"" --'
         
     | 
| 
       155 
     | 
    
         
            -
                  end
         
     | 
| 
       156 
     | 
    
         
            -
             
     | 
| 
       157 
     | 
    
         
            -
                  # Prepares a staging directory for the specified project.
         
     | 
| 
       158 
     | 
    
         
            -
                  #
         
     | 
| 
       159 
     | 
    
         
            -
                  # @api private
         
     | 
| 
       160 
     | 
    
         
            -
                  def ezbake_stage
         
     | 
| 
       161 
     | 
    
         
            -
                    # Install the PuppetDB jar into the local repository
         
     | 
| 
       162 
     | 
    
         
            -
                    ezbake_local_cmd "#{ezbake_lein_prefix} install",
         
     | 
| 
       163 
     | 
    
         
            -
                                     :throw_on_failure => true
         
     | 
| 
       164 
     | 
    
         
            -
             
     | 
| 
       165 
     | 
    
         
            -
                    # Run ezbake stage
         
     | 
| 
       166 
     | 
    
         
            -
                    ezbake_local_cmd "#{ezbake_lein_prefix} with-profile ezbake ezbake stage",
         
     | 
| 
       167 
     | 
    
         
            -
                                     :throw_on_failure => true
         
     | 
| 
       168 
     | 
    
         
            -
             
     | 
| 
       169 
     | 
    
         
            -
                    # Boostrap packaging, and grab configuration info from project
         
     | 
| 
       170 
     | 
    
         
            -
                    staging_dir = File.join('target','staging')
         
     | 
| 
       171 
     | 
    
         
            -
                    Dir.chdir(staging_dir) do
         
     | 
| 
       172 
     | 
    
         
            -
                      ezbake_local_cmd 'rake package:bootstrap'
         
     | 
| 
       173 
     | 
    
         
            -
             
     | 
| 
       174 
     | 
    
         
            -
                      load 'ezbake.rb'
         
     | 
| 
       175 
     | 
    
         
            -
                      ezbake = EZBake::Config
         
     | 
| 
       176 
     | 
    
         
            -
                      ezbake[:package_version] = `echo -n $(rake pl:print_build_param[ref] | tail -n 1)`
         
     | 
| 
       177 
     | 
    
         
            -
                      EZBakeUtils.config = ezbake
         
     | 
| 
       178 
     | 
    
         
            -
                    end
         
     | 
| 
       179 
     | 
    
         
            -
                  end
         
     | 
| 
       180 
     | 
    
         
            -
             
     | 
| 
       181 
     | 
    
         
            -
                  # Executes a local command using system, logging the prepared command
         
     | 
| 
       182 
     | 
    
         
            -
                  #
         
     | 
| 
       183 
     | 
    
         
            -
                  # @param [String] cmd command to execute
         
     | 
| 
       184 
     | 
    
         
            -
                  # @param [Hash] opts options
         
     | 
| 
       185 
     | 
    
         
            -
                  # @option opts [bool] :throw_on_failure If true, throws an
         
     | 
| 
       186 
     | 
    
         
            -
                  #   exception if the exit code is non-zero. Defaults to false.
         
     | 
| 
       187 
     | 
    
         
            -
                  # @return [bool] true if exit == 0 false if otherwise
         
     | 
| 
       188 
     | 
    
         
            -
                  # @raise [RuntimeError] if :throw_on_failure is true and
         
     | 
| 
       189 
     | 
    
         
            -
                  #   command fails
         
     | 
| 
       190 
     | 
    
         
            -
                  # @api private
         
     | 
| 
       191 
     | 
    
         
            -
                  def ezbake_local_cmd cmd, opts={}
         
     | 
| 
       192 
     | 
    
         
            -
                    opts = {
         
     | 
| 
       193 
     | 
    
         
            -
                      :throw_on_failure => false,
         
     | 
| 
       194 
     | 
    
         
            -
                    }.merge(opts)
         
     | 
| 
       195 
     | 
    
         
            -
             
     | 
| 
       196 
     | 
    
         
            -
                    logger.notify "localhost $ #{cmd}"
         
     | 
| 
       197 
     | 
    
         
            -
                    result = system cmd
         
     | 
| 
       198 
     | 
    
         
            -
                    if opts[:throw_on_failure] && result == false
         
     | 
| 
       199 
     | 
    
         
            -
                      raise RuntimeError, "Command failure #{cmd}"
         
     | 
| 
       200 
     | 
    
         
            -
                    end
         
     | 
| 
       201 
     | 
    
         
            -
                    result
         
     | 
| 
       202 
     | 
    
         
            -
                  end
         
     | 
| 
       203 
     | 
    
         
            -
             
     | 
| 
       204 
     | 
    
         
            -
                  # Retrieve the tarball installation name. This is the name of
         
     | 
| 
       205 
     | 
    
         
            -
                  # the tarball without the .tar.gz extension, and the name of the
         
     | 
| 
       206 
     | 
    
         
            -
                  # path where it will unpack to.
         
     | 
| 
       207 
     | 
    
         
            -
                  #
         
     | 
| 
       208 
     | 
    
         
            -
                  # @return [String] name of the tarball and directory
         
     | 
| 
       209 
     | 
    
         
            -
                  # @api private
         
     | 
| 
       210 
     | 
    
         
            -
                  def ezbake_install_name
         
     | 
| 
       211 
     | 
    
         
            -
                    ezbake = ezbake_config
         
     | 
| 
       212 
     | 
    
         
            -
                    project_package_version = ezbake[:package_version]
         
     | 
| 
       213 
     | 
    
         
            -
                    project_name = ezbake[:project]
         
     | 
| 
       214 
     | 
    
         
            -
                    "%s-%s" % [ project_name, project_package_version ]
         
     | 
| 
       215 
     | 
    
         
            -
                  end
         
     | 
| 
       216 
     | 
    
         
            -
             
     | 
| 
       217 
     | 
    
         
            -
                  # Returns the full path to the installed software on the remote host.
         
     | 
| 
       218 
     | 
    
         
            -
                  #
         
     | 
| 
       219 
     | 
    
         
            -
                  # This only returns the path, it doesn't work out if its installed or
         
     | 
| 
       220 
     | 
    
         
            -
                  # not.
         
     | 
| 
       221 
     | 
    
         
            -
                  #
         
     | 
| 
       222 
     | 
    
         
            -
                  # @return [String] path to the installation dir
         
     | 
| 
       223 
     | 
    
         
            -
                  # @api private
         
     | 
| 
       224 
     | 
    
         
            -
                  def ezbake_install_dir
         
     | 
| 
       225 
     | 
    
         
            -
                    "/root/#{ezbake_install_name}"
         
     | 
| 
       226 
     | 
    
         
            -
                  end
         
     | 
| 
       227 
     | 
    
         
            -
             
     | 
| 
       228 
     | 
    
         
            -
                  # A helper that wraps the execution of install.sh in the proper
         
     | 
| 
       229 
     | 
    
         
            -
                  # ezbake installation directory.
         
     | 
| 
       230 
     | 
    
         
            -
                  #
         
     | 
| 
       231 
     | 
    
         
            -
                  # @param [Host] host Host to run install.sh on
         
     | 
| 
       232 
     | 
    
         
            -
                  # @param [String] task Task to execute with install.sh
         
     | 
| 
       233 
     | 
    
         
            -
                  # @api private
         
     | 
| 
       234 
     | 
    
         
            -
                  def ezbake_installsh host, task=""
         
     | 
| 
       235 
     | 
    
         
            -
                    on host, "cd #{ezbake_install_dir}; bash install.sh #{task}"
         
     | 
| 
       236 
     | 
    
         
            -
                  end
         
     | 
| 
       237 
     | 
    
         
            -
             
     | 
| 
       238 
     | 
    
         
            -
                  # Only clone from given git URI if there is no existing git clone at the
         
     | 
| 
       239 
     | 
    
         
            -
                  # given local_path location.
         
     | 
| 
       240 
     | 
    
         
            -
                  #
         
     | 
| 
       241 
     | 
    
         
            -
                  # @param [String] upstream_uri git URI
         
     | 
| 
       242 
     | 
    
         
            -
                  # @param [String] local_path path to conditionally install to
         
     | 
| 
       243 
     | 
    
         
            -
                  # @param [String] branch to checkout
         
     | 
| 
       244 
     | 
    
         
            -
                  # @api private
         
     | 
| 
       245 
     | 
    
         
            -
                  def conditionally_clone upstream_uri, local_path, branch="origin/HEAD"
         
     | 
| 
       246 
     | 
    
         
            -
                    if ezbake_local_cmd "git --work-tree=#{local_path} --git-dir=#{local_path}/.git status"
         
     | 
| 
       247 
     | 
    
         
            -
                      ezbake_local_cmd "git --work-tree=#{local_path} --git-dir=#{local_path}/.git fetch origin"
         
     | 
| 
       248 
     | 
    
         
            -
                      ezbake_local_cmd "git --work-tree=#{local_path} --git-dir=#{local_path}/.git checkout #{branch}"
         
     | 
| 
       249 
     | 
    
         
            -
                    else
         
     | 
| 
       250 
     | 
    
         
            -
                      parent_dir = File.dirname(local_path)
         
     | 
| 
       251 
     | 
    
         
            -
                      FileUtils.mkdir_p(parent_dir)
         
     | 
| 
       252 
     | 
    
         
            -
                      ezbake_local_cmd "git clone #{upstream_uri} #{local_path}"
         
     | 
| 
       253 
     | 
    
         
            -
                      ezbake_local_cmd "git --work-tree=#{local_path} --git-dir=#{local_path}/.git checkout #{branch}"
         
     | 
| 
       254 
     | 
    
         
            -
                    end
         
     | 
| 
       255 
     | 
    
         
            -
                  end
         
     | 
| 
       256 
     | 
    
         
            -
             
     | 
| 
       257 
     | 
    
         
            -
                end
         
     | 
| 
       258 
     | 
    
         
            -
              end
         
     | 
| 
       259 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,1242 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require 'spec_helper'
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            class ClassMixedWithDSLInstallUtils
         
     | 
| 
       4 
     | 
    
         
            -
              include Beaker::DSL::InstallUtils
         
     | 
| 
       5 
     | 
    
         
            -
              include Beaker::DSL::Wrappers
         
     | 
| 
       6 
     | 
    
         
            -
              include Beaker::DSL::Helpers
         
     | 
| 
       7 
     | 
    
         
            -
              include Beaker::DSL::Structure
         
     | 
| 
       8 
     | 
    
         
            -
              include Beaker::DSL::Roles
         
     | 
| 
       9 
     | 
    
         
            -
              include Beaker::DSL::Patterns
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
              def logger
         
     | 
| 
       12 
     | 
    
         
            -
                @logger ||= RSpec::Mocks::Double.new('logger').as_null_object
         
     | 
| 
       13 
     | 
    
         
            -
              end
         
     | 
| 
       14 
     | 
    
         
            -
            end
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
            describe ClassMixedWithDSLInstallUtils do
         
     | 
| 
       17 
     | 
    
         
            -
              let(:presets)       { Beaker::Options::Presets.new }
         
     | 
| 
       18 
     | 
    
         
            -
              let(:opts)          { presets.presets.merge(presets.env_vars) }
         
     | 
| 
       19 
     | 
    
         
            -
              let(:basic_hosts)   { make_hosts( { :pe_ver => '3.0',
         
     | 
| 
       20 
     | 
    
         
            -
                                                   :platform => 'linux',
         
     | 
| 
       21 
     | 
    
         
            -
                                                   :roles => [ 'agent' ] }, 4 ) }
         
     | 
| 
       22 
     | 
    
         
            -
              let(:hosts)         { basic_hosts[0][:roles] = ['master', 'database', 'dashboard']
         
     | 
| 
       23 
     | 
    
         
            -
                                    basic_hosts[1][:platform] = 'windows'
         
     | 
| 
       24 
     | 
    
         
            -
                                    basic_hosts[2][:platform] = 'osx-10.9-x86_64'
         
     | 
| 
       25 
     | 
    
         
            -
                                    basic_hosts[3][:platform] = 'eos'
         
     | 
| 
       26 
     | 
    
         
            -
                                    basic_hosts  }
         
     | 
| 
       27 
     | 
    
         
            -
              let(:hosts_sorted)  { [ hosts[1], hosts[0], hosts[2], hosts[3] ] }
         
     | 
| 
       28 
     | 
    
         
            -
              let(:winhost)       { make_host( 'winhost', { :platform => 'windows',
         
     | 
| 
       29 
     | 
    
         
            -
                                                            :pe_ver => '3.0',
         
     | 
| 
       30 
     | 
    
         
            -
                                                            :working_dir => '/tmp' } ) }
         
     | 
| 
       31 
     | 
    
         
            -
              let(:machost)       { make_host( 'machost', { :platform => 'osx-10.9-x86_64',
         
     | 
| 
       32 
     | 
    
         
            -
                                                            :pe_ver => '3.0',
         
     | 
| 
       33 
     | 
    
         
            -
                                                            :working_dir => '/tmp' } ) }
         
     | 
| 
       34 
     | 
    
         
            -
              let(:unixhost)      { make_host( 'unixhost', { :platform => 'linux',
         
     | 
| 
       35 
     | 
    
         
            -
                                                             :pe_ver => '3.0',
         
     | 
| 
       36 
     | 
    
         
            -
                                                             :working_dir => '/tmp',
         
     | 
| 
       37 
     | 
    
         
            -
                                                             :dist => 'puppet-enterprise-3.1.0-rc0-230-g36c9e5c-debian-7-i386' } ) }
         
     | 
| 
       38 
     | 
    
         
            -
              let(:eoshost)       { make_host( 'eoshost', { :platform => 'eos',
         
     | 
| 
       39 
     | 
    
         
            -
                                                            :pe_ver => '3.0',
         
     | 
| 
       40 
     | 
    
         
            -
                                                            :working_dir => '/tmp',
         
     | 
| 
       41 
     | 
    
         
            -
                                                            :dist => 'puppet-enterprise-3.7.1-rc0-78-gffc958f-eos-4-i386' } ) }
         
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
              context 'extract_repo_info_from' do
         
     | 
| 
       45 
     | 
    
         
            -
                [{ :protocol => 'git', :path => 'git://github.com/puppetlabs/project.git' },
         
     | 
| 
       46 
     | 
    
         
            -
                 { :protocol => 'ssh', :path => 'git@github.com:puppetlabs/project.git' },
         
     | 
| 
       47 
     | 
    
         
            -
                 { :protocol => 'https', :path => 'https://github.com:puppetlabs/project' },
         
     | 
| 
       48 
     | 
    
         
            -
                 { :protocol => 'file', :path => 'file:///home/example/project' }
         
     | 
| 
       49 
     | 
    
         
            -
                ].each do |type|
         
     | 
| 
       50 
     | 
    
         
            -
                  it "handles #{ type[:protocol] } uris" do
         
     | 
| 
       51 
     | 
    
         
            -
                    uri = "#{ type[:path] }#master"
         
     | 
| 
       52 
     | 
    
         
            -
                    repo_info = subject.extract_repo_info_from uri
         
     | 
| 
       53 
     | 
    
         
            -
                    expect( repo_info[:name] ).to be == 'project'
         
     | 
| 
       54 
     | 
    
         
            -
                    expect( repo_info[:path] ).to be ==  type[:path]
         
     | 
| 
       55 
     | 
    
         
            -
                    expect( repo_info[:rev] ).to  be == 'master'
         
     | 
| 
       56 
     | 
    
         
            -
                  end
         
     | 
| 
       57 
     | 
    
         
            -
                end
         
     | 
| 
       58 
     | 
    
         
            -
              end
         
     | 
| 
       59 
     | 
    
         
            -
             
     | 
| 
       60 
     | 
    
         
            -
              context 'order_packages' do
         
     | 
| 
       61 
     | 
    
         
            -
                it 'orders facter, hiera before puppet, before anything else' do
         
     | 
| 
       62 
     | 
    
         
            -
                  named_repos = [
         
     | 
| 
       63 
     | 
    
         
            -
                    { :name => 'puppet_plugin' }, { :name => 'puppet' }, { :name => 'facter' }
         
     | 
| 
       64 
     | 
    
         
            -
                  ]
         
     | 
| 
       65 
     | 
    
         
            -
                  ordered_repos = subject.order_packages named_repos
         
     | 
| 
       66 
     | 
    
         
            -
                  expect( ordered_repos[0][:name] ).to be == 'facter'
         
     | 
| 
       67 
     | 
    
         
            -
                  expect( ordered_repos[1][:name] ).to be == 'puppet'
         
     | 
| 
       68 
     | 
    
         
            -
                  expect( ordered_repos[2][:name] ).to be == 'puppet_plugin'
         
     | 
| 
       69 
     | 
    
         
            -
                end
         
     | 
| 
       70 
     | 
    
         
            -
              end
         
     | 
| 
       71 
     | 
    
         
            -
             
     | 
| 
       72 
     | 
    
         
            -
              context 'find_git_repo_versions' do
         
     | 
| 
       73 
     | 
    
         
            -
                it 'returns a hash of :name => version' do
         
     | 
| 
       74 
     | 
    
         
            -
                  host        = double( 'Host' )
         
     | 
| 
       75 
     | 
    
         
            -
                  repository  = { :name => 'name' }
         
     | 
| 
       76 
     | 
    
         
            -
                  path        = '/path/to/repo'
         
     | 
| 
       77 
     | 
    
         
            -
                  cmd         = 'cd /path/to/repo/name && git describe || true'
         
     | 
| 
       78 
     | 
    
         
            -
                  logger = double.as_null_object
         
     | 
| 
       79 
     | 
    
         
            -
             
     | 
| 
       80 
     | 
    
         
            -
                  expect( subject ).to receive( :logger ).and_return( logger )
         
     | 
| 
       81 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( host, cmd ).and_yield
         
     | 
| 
       82 
     | 
    
         
            -
                  expect( subject ).to receive( :stdout ).and_return( '2' )
         
     | 
| 
       83 
     | 
    
         
            -
             
     | 
| 
       84 
     | 
    
         
            -
                  version = subject.find_git_repo_versions( host, path, repository )
         
     | 
| 
       85 
     | 
    
         
            -
             
     | 
| 
       86 
     | 
    
         
            -
                  expect( version ).to be == { 'name' => '2' }
         
     | 
| 
       87 
     | 
    
         
            -
                end
         
     | 
| 
       88 
     | 
    
         
            -
              end
         
     | 
| 
       89 
     | 
    
         
            -
             
     | 
| 
       90 
     | 
    
         
            -
              context 'install_from_git' do
         
     | 
| 
       91 
     | 
    
         
            -
                it 'does a ton of stuff it probably shouldnt' do
         
     | 
| 
       92 
     | 
    
         
            -
                  repo = { :name => 'puppet',
         
     | 
| 
       93 
     | 
    
         
            -
                           :path => 'git://my.server.net/puppet.git',
         
     | 
| 
       94 
     | 
    
         
            -
                           :rev => 'master' }
         
     | 
| 
       95 
     | 
    
         
            -
                  path = '/path/to/repos'
         
     | 
| 
       96 
     | 
    
         
            -
                  host = { 'platform' => 'debian' }
         
     | 
| 
       97 
     | 
    
         
            -
                  logger = double.as_null_object
         
     | 
| 
       98 
     | 
    
         
            -
             
     | 
| 
       99 
     | 
    
         
            -
                  expect( subject ).to receive( :logger ).exactly( 3 ).times.and_return( logger )
         
     | 
| 
       100 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).exactly( 4 ).times
         
     | 
| 
       101 
     | 
    
         
            -
             
     | 
| 
       102 
     | 
    
         
            -
                  subject.install_from_git( host, path, repo )
         
     | 
| 
       103 
     | 
    
         
            -
                end
         
     | 
| 
       104 
     | 
    
         
            -
             
     | 
| 
       105 
     | 
    
         
            -
                it 'allows a checkout depth of 1' do
         
     | 
| 
       106 
     | 
    
         
            -
                  repo   = { :name => 'puppet',
         
     | 
| 
       107 
     | 
    
         
            -
                             :path => 'git://my.server.net/puppet.git',
         
     | 
| 
       108 
     | 
    
         
            -
                             :rev => 'master',
         
     | 
| 
       109 
     | 
    
         
            -
                             :depth => 1 }
         
     | 
| 
       110 
     | 
    
         
            -
             
     | 
| 
       111 
     | 
    
         
            -
                  path   = '/path/to/repos'
         
     | 
| 
       112 
     | 
    
         
            -
                  cmd    = "test -d #{path}/#{repo[:name]} || git clone --branch #{repo[:rev]} --depth #{repo[:depth]} #{repo[:path]} #{path}/#{repo[:name]}"
         
     | 
| 
       113 
     | 
    
         
            -
                  host   = { 'platform' => 'debian' }
         
     | 
| 
       114 
     | 
    
         
            -
                  logger = double.as_null_object
         
     | 
| 
       115 
     | 
    
         
            -
                  expect( subject ).to receive( :logger ).exactly( 3 ).times.and_return( logger )
         
     | 
| 
       116 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( host,"test -d #{path} || mkdir -p #{path}").exactly( 1 ).times
         
     | 
| 
       117 
     | 
    
         
            -
                  # this is the the command we want to test
         
     | 
| 
       118 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( host, cmd ).exactly( 1 ).times
         
     | 
| 
       119 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( host, "cd #{path}/#{repo[:name]} && git remote rm origin && git remote add origin #{repo[:path]} && git fetch origin +refs/pull/*:refs/remotes/origin/pr/* +refs/heads/*:refs/remotes/origin/* && git clean -fdx && git checkout -f #{repo[:rev]}" ).exactly( 1 ).times
         
     | 
| 
       120 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( host, "cd #{path}/#{repo[:name]} && if [ -f install.rb ]; then ruby ./install.rb ; else true; fi" ).exactly( 1 ).times
         
     | 
| 
       121 
     | 
    
         
            -
             
     | 
| 
       122 
     | 
    
         
            -
                  subject.install_from_git( host, path, repo )
         
     | 
| 
       123 
     | 
    
         
            -
                end
         
     | 
| 
       124 
     | 
    
         
            -
             
     | 
| 
       125 
     | 
    
         
            -
                it 'allows a checkout depth with a rev from a specific branch' do
         
     | 
| 
       126 
     | 
    
         
            -
                  repo   = { :name => 'puppet',
         
     | 
| 
       127 
     | 
    
         
            -
                             :path => 'git://my.server.net/puppet.git',
         
     | 
| 
       128 
     | 
    
         
            -
                             :rev => 'a2340acddadfeafd234230faf',
         
     | 
| 
       129 
     | 
    
         
            -
                             :depth => 50,
         
     | 
| 
       130 
     | 
    
         
            -
                             :depth_branch => 'master' }
         
     | 
| 
       131 
     | 
    
         
            -
             
     | 
| 
       132 
     | 
    
         
            -
                  path   = '/path/to/repos'
         
     | 
| 
       133 
     | 
    
         
            -
                  cmd    = "test -d #{path}/#{repo[:name]} || git clone --branch #{repo[:depth_branch]} --depth #{repo[:depth]} #{repo[:path]} #{path}/#{repo[:name]}"
         
     | 
| 
       134 
     | 
    
         
            -
                  host   = { 'platform' => 'debian' }
         
     | 
| 
       135 
     | 
    
         
            -
                  logger = double.as_null_object
         
     | 
| 
       136 
     | 
    
         
            -
                  expect( subject ).to receive( :logger ).exactly( 3 ).times.and_return( logger )
         
     | 
| 
       137 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( host,"test -d #{path} || mkdir -p #{path}").exactly( 1 ).times
         
     | 
| 
       138 
     | 
    
         
            -
                  # this is the the command we want to test
         
     | 
| 
       139 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( host, cmd ).exactly( 1 ).times
         
     | 
| 
       140 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( host, "cd #{path}/#{repo[:name]} && git remote rm origin && git remote add origin #{repo[:path]} && git fetch origin +refs/pull/*:refs/remotes/origin/pr/* +refs/heads/*:refs/remotes/origin/* && git clean -fdx && git checkout -f #{repo[:rev]}" ).exactly( 1 ).times
         
     | 
| 
       141 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( host, "cd #{path}/#{repo[:name]} && if [ -f install.rb ]; then ruby ./install.rb ; else true; fi" ).exactly( 1 ).times
         
     | 
| 
       142 
     | 
    
         
            -
             
     | 
| 
       143 
     | 
    
         
            -
                  subject.install_from_git( host, path, repo )
         
     | 
| 
       144 
     | 
    
         
            -
                end
         
     | 
| 
       145 
     | 
    
         
            -
               end
         
     | 
| 
       146 
     | 
    
         
            -
             
     | 
| 
       147 
     | 
    
         
            -
              describe 'sorted_hosts' do
         
     | 
| 
       148 
     | 
    
         
            -
                it 'can reorder so that the master comes first' do
         
     | 
| 
       149 
     | 
    
         
            -
                  allow( subject ).to receive( :hosts ).and_return( hosts_sorted )
         
     | 
| 
       150 
     | 
    
         
            -
                  expect( subject.sorted_hosts ).to be === hosts
         
     | 
| 
       151 
     | 
    
         
            -
                end
         
     | 
| 
       152 
     | 
    
         
            -
             
     | 
| 
       153 
     | 
    
         
            -
                it 'leaves correctly ordered hosts alone' do
         
     | 
| 
       154 
     | 
    
         
            -
                  allow( subject ).to receive( :hosts ).and_return( hosts )
         
     | 
| 
       155 
     | 
    
         
            -
                  expect( subject.sorted_hosts ).to be === hosts
         
     | 
| 
       156 
     | 
    
         
            -
                end
         
     | 
| 
       157 
     | 
    
         
            -
             
     | 
| 
       158 
     | 
    
         
            -
                it 'does not allow nil entries' do
         
     | 
| 
       159 
     | 
    
         
            -
                  allow( subject ).to receive( :options ).and_return( { :masterless => true } )
         
     | 
| 
       160 
     | 
    
         
            -
                  masterless_host = [basic_hosts[0]]
         
     | 
| 
       161 
     | 
    
         
            -
                  allow( subject ).to receive( :hosts ).and_return( masterless_host )
         
     | 
| 
       162 
     | 
    
         
            -
                  expect( subject.sorted_hosts ).to be === masterless_host
         
     | 
| 
       163 
     | 
    
         
            -
                end
         
     | 
| 
       164 
     | 
    
         
            -
              end
         
     | 
| 
       165 
     | 
    
         
            -
             
     | 
| 
       166 
     | 
    
         
            -
              describe 'installer_cmd' do
         
     | 
| 
       167 
     | 
    
         
            -
             
     | 
| 
       168 
     | 
    
         
            -
                it 'generates a windows PE install command for a windows host' do
         
     | 
| 
       169 
     | 
    
         
            -
                  winhost['dist'] = 'puppet-enterprise-3.0'
         
     | 
| 
       170 
     | 
    
         
            -
                  allow( subject ).to receive( :hosts ).and_return( [ hosts[1], hosts[0], hosts[2], winhost ] )
         
     | 
| 
       171 
     | 
    
         
            -
                  expect( subject.installer_cmd( winhost, {} ) ).to be === "cd /tmp && cmd /C 'start /w msiexec.exe /qn /L*V tmp.log /i puppet-enterprise-3.0.msi PUPPET_MASTER_SERVER=vm1 PUPPET_AGENT_CERTNAME=winhost'"
         
     | 
| 
       172 
     | 
    
         
            -
                end
         
     | 
| 
       173 
     | 
    
         
            -
             
     | 
| 
       174 
     | 
    
         
            -
                it 'generates a unix PE install command for a unix host' do
         
     | 
| 
       175 
     | 
    
         
            -
                  the_host = unixhost.dup
         
     | 
| 
       176 
     | 
    
         
            -
                  the_host['pe_installer'] = 'puppet-enterprise-installer'
         
     | 
| 
       177 
     | 
    
         
            -
                  expect( subject.installer_cmd( the_host, {} ) ).to be === "cd /tmp/puppet-enterprise-3.1.0-rc0-230-g36c9e5c-debian-7-i386 && ./puppet-enterprise-installer -a /tmp/answers"
         
     | 
| 
       178 
     | 
    
         
            -
                end
         
     | 
| 
       179 
     | 
    
         
            -
             
     | 
| 
       180 
     | 
    
         
            -
                it 'generates a unix PE frictionless install command for a unix host with role "frictionless"' do
         
     | 
| 
       181 
     | 
    
         
            -
                  allow( subject ).to receive( :version_is_less ).and_return( false )
         
     | 
| 
       182 
     | 
    
         
            -
                  allow( subject ).to receive( :master ).and_return( 'testmaster' )
         
     | 
| 
       183 
     | 
    
         
            -
                  the_host = unixhost.dup
         
     | 
| 
       184 
     | 
    
         
            -
                  the_host['pe_installer'] = 'puppet-enterprise-installer'
         
     | 
| 
       185 
     | 
    
         
            -
                  the_host['roles'] = ['frictionless']
         
     | 
| 
       186 
     | 
    
         
            -
                  expect( subject.installer_cmd( the_host, {} ) ).to be ===  "cd /tmp && curl --tlsv1 -kO https://testmaster:8140/packages/3.0/install.bash && bash install.bash"
         
     | 
| 
       187 
     | 
    
         
            -
                end
         
     | 
| 
       188 
     | 
    
         
            -
             
     | 
| 
       189 
     | 
    
         
            -
                it 'generates a unix PE frictionless install command for a unix host with role "frictionless" and "frictionless_options"' do
         
     | 
| 
       190 
     | 
    
         
            -
                  allow( subject ).to receive( :version_is_less ).and_return( false )
         
     | 
| 
       191 
     | 
    
         
            -
                  allow( subject ).to receive( :master ).and_return( 'testmaster' )
         
     | 
| 
       192 
     | 
    
         
            -
                  the_host = unixhost.dup
         
     | 
| 
       193 
     | 
    
         
            -
                  the_host['pe_installer'] = 'puppet-enterprise-installer'
         
     | 
| 
       194 
     | 
    
         
            -
                  the_host['roles'] = ['frictionless']
         
     | 
| 
       195 
     | 
    
         
            -
                  the_host['frictionless_options'] = { 'main' => { 'dns_alt_names' => 'puppet' } }
         
     | 
| 
       196 
     | 
    
         
            -
                  expect( subject.installer_cmd( the_host, {} ) ).to be ===  "cd /tmp && curl --tlsv1 -kO https://testmaster:8140/packages/3.0/install.bash && bash install.bash main:dns_alt_names=puppet"
         
     | 
| 
       197 
     | 
    
         
            -
                end
         
     | 
| 
       198 
     | 
    
         
            -
             
     | 
| 
       199 
     | 
    
         
            -
                it 'generates a osx PE install command for a osx host' do
         
     | 
| 
       200 
     | 
    
         
            -
                  the_host = machost.dup
         
     | 
| 
       201 
     | 
    
         
            -
                  the_host['pe_installer'] = 'puppet-enterprise-installer'
         
     | 
| 
       202 
     | 
    
         
            -
                  expect( subject.installer_cmd( the_host, {} ) ).to be === "cd /tmp && hdiutil attach .dmg && installer -pkg /Volumes/puppet-enterprise-3.0/puppet-enterprise-installer-3.0.pkg -target /"
         
     | 
| 
       203 
     | 
    
         
            -
                end
         
     | 
| 
       204 
     | 
    
         
            -
             
     | 
| 
       205 
     | 
    
         
            -
                it 'generates an EOS PE install command for an EOS host' do
         
     | 
| 
       206 
     | 
    
         
            -
                  the_host = eoshost.dup
         
     | 
| 
       207 
     | 
    
         
            -
                  commands = ['enable', "extension puppet-enterprise-#{the_host['pe_ver']}-#{the_host['platform']}.swix"]
         
     | 
| 
       208 
     | 
    
         
            -
                  command = commands.join("\n")
         
     | 
| 
       209 
     | 
    
         
            -
                  expect( subject.installer_cmd( the_host, {} ) ).to be === "Cli -c '#{command}'"
         
     | 
| 
       210 
     | 
    
         
            -
                end
         
     | 
| 
       211 
     | 
    
         
            -
             
     | 
| 
       212 
     | 
    
         
            -
                it 'generates a unix PE install command in verbose for a unix host when pe_debug is enabled' do
         
     | 
| 
       213 
     | 
    
         
            -
                  the_host = unixhost.dup
         
     | 
| 
       214 
     | 
    
         
            -
                  the_host['pe_installer'] = 'puppet-enterprise-installer'
         
     | 
| 
       215 
     | 
    
         
            -
                  the_host[:pe_debug] = true
         
     | 
| 
       216 
     | 
    
         
            -
                  expect( subject.installer_cmd( the_host, {} ) ).to be === "cd /tmp/puppet-enterprise-3.1.0-rc0-230-g36c9e5c-debian-7-i386 && ./puppet-enterprise-installer -D -a /tmp/answers"
         
     | 
| 
       217 
     | 
    
         
            -
                end
         
     | 
| 
       218 
     | 
    
         
            -
             
     | 
| 
       219 
     | 
    
         
            -
                it 'generates a osx PE install command in verbose for a osx host when pe_debug is enabled' do
         
     | 
| 
       220 
     | 
    
         
            -
                  the_host = machost.dup
         
     | 
| 
       221 
     | 
    
         
            -
                  the_host['pe_installer'] = 'puppet-enterprise-installer'
         
     | 
| 
       222 
     | 
    
         
            -
                  the_host[:pe_debug] = true
         
     | 
| 
       223 
     | 
    
         
            -
                  expect( subject.installer_cmd( the_host, {} ) ).to be === "cd /tmp && hdiutil attach .dmg && installer -verboseR -pkg /Volumes/puppet-enterprise-3.0/puppet-enterprise-installer-3.0.pkg -target /"
         
     | 
| 
       224 
     | 
    
         
            -
                end
         
     | 
| 
       225 
     | 
    
         
            -
             
     | 
| 
       226 
     | 
    
         
            -
                it 'generates a unix PE frictionless install command in verbose for a unix host with role "frictionless" and pe_debug is enabled' do
         
     | 
| 
       227 
     | 
    
         
            -
                  allow( subject ).to receive( :version_is_less ).and_return( false )
         
     | 
| 
       228 
     | 
    
         
            -
                  allow( subject ).to receive( :master ).and_return( 'testmaster' )
         
     | 
| 
       229 
     | 
    
         
            -
                  the_host = unixhost.dup
         
     | 
| 
       230 
     | 
    
         
            -
                  the_host['pe_installer'] = 'puppet-enterprise-installer'
         
     | 
| 
       231 
     | 
    
         
            -
                  the_host['roles'] = ['frictionless']
         
     | 
| 
       232 
     | 
    
         
            -
                  the_host[:pe_debug] = true
         
     | 
| 
       233 
     | 
    
         
            -
                  expect( subject.installer_cmd( the_host, {} ) ).to be === "cd /tmp && curl --tlsv1 -kO https://testmaster:8140/packages/3.0/install.bash && bash -x install.bash"
         
     | 
| 
       234 
     | 
    
         
            -
                end
         
     | 
| 
       235 
     | 
    
         
            -
             
     | 
| 
       236 
     | 
    
         
            -
              end
         
     | 
| 
       237 
     | 
    
         
            -
             
     | 
| 
       238 
     | 
    
         
            -
             
     | 
| 
       239 
     | 
    
         
            -
              describe 'fetch_puppet' do
         
     | 
| 
       240 
     | 
    
         
            -
             
     | 
| 
       241 
     | 
    
         
            -
                it 'can push a local PE .tar.gz to a host and unpack it' do
         
     | 
| 
       242 
     | 
    
         
            -
                  allow( File ).to receive( :directory? ).and_return( true ) #is local
         
     | 
| 
       243 
     | 
    
         
            -
                  allow( File ).to receive( :exists? ).and_return( true ) #is a .tar.gz
         
     | 
| 
       244 
     | 
    
         
            -
                  unixhost['pe_dir'] = '/local/file/path'
         
     | 
| 
       245 
     | 
    
         
            -
                  allow( subject ).to receive( :scp_to ).and_return( true )
         
     | 
| 
       246 
     | 
    
         
            -
             
     | 
| 
       247 
     | 
    
         
            -
                  path = unixhost['pe_dir']
         
     | 
| 
       248 
     | 
    
         
            -
                  filename = "#{ unixhost['dist'] }"
         
     | 
| 
       249 
     | 
    
         
            -
                  extension = '.tar.gz'
         
     | 
| 
       250 
     | 
    
         
            -
                  expect( subject ).to receive( :scp_to ).with( unixhost, "#{ path }/#{ filename }#{ extension }", "#{ unixhost['working_dir'] }/#{ filename }#{ extension }" ).once
         
     | 
| 
       251 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( unixhost, /gunzip/ ).once
         
     | 
| 
       252 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( unixhost, /tar -xvf/ ).once
         
     | 
| 
       253 
     | 
    
         
            -
                  subject.fetch_puppet( [unixhost], {} )
         
     | 
| 
       254 
     | 
    
         
            -
                end
         
     | 
| 
       255 
     | 
    
         
            -
             
     | 
| 
       256 
     | 
    
         
            -
                it 'can download a PE .tar from a URL to a host and unpack it' do
         
     | 
| 
       257 
     | 
    
         
            -
                  allow( File ).to receive( :directory? ).and_return( false ) #is not local
         
     | 
| 
       258 
     | 
    
         
            -
                  allow( subject ).to receive( :link_exists? ) do |arg|
         
     | 
| 
       259 
     | 
    
         
            -
                    if arg =~ /.tar.gz/ #there is no .tar.gz link, only a .tar
         
     | 
| 
       260 
     | 
    
         
            -
                      false
         
     | 
| 
       261 
     | 
    
         
            -
                    else
         
     | 
| 
       262 
     | 
    
         
            -
                      true
         
     | 
| 
       263 
     | 
    
         
            -
                    end
         
     | 
| 
       264 
     | 
    
         
            -
                  end
         
     | 
| 
       265 
     | 
    
         
            -
                  allow( subject ).to receive( :on ).and_return( true )
         
     | 
| 
       266 
     | 
    
         
            -
             
     | 
| 
       267 
     | 
    
         
            -
                  path = unixhost['pe_dir']
         
     | 
| 
       268 
     | 
    
         
            -
                  filename = "#{ unixhost['dist'] }"
         
     | 
| 
       269 
     | 
    
         
            -
                  extension = '.tar'
         
     | 
| 
       270 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( unixhost, "cd #{ unixhost['working_dir'] }; curl #{ path }/#{ filename }#{ extension } | tar -xvf -" ).once
         
     | 
| 
       271 
     | 
    
         
            -
                  subject.fetch_puppet( [unixhost], {} )
         
     | 
| 
       272 
     | 
    
         
            -
                end
         
     | 
| 
       273 
     | 
    
         
            -
             
     | 
| 
       274 
     | 
    
         
            -
                it 'can download a PE .tar.gz from a URL to a host and unpack it' do
         
     | 
| 
       275 
     | 
    
         
            -
                  allow( File ).to receive( :directory? ).and_return( false ) #is not local
         
     | 
| 
       276 
     | 
    
         
            -
                  allow( subject ).to receive( :link_exists? ).and_return( true ) #is a tar.gz
         
     | 
| 
       277 
     | 
    
         
            -
                  allow( subject ).to receive( :on ).and_return( true )
         
     | 
| 
       278 
     | 
    
         
            -
             
     | 
| 
       279 
     | 
    
         
            -
                  path = unixhost['pe_dir']
         
     | 
| 
       280 
     | 
    
         
            -
                  filename = "#{ unixhost['dist'] }"
         
     | 
| 
       281 
     | 
    
         
            -
                  extension = '.tar.gz'
         
     | 
| 
       282 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( unixhost, "cd #{ unixhost['working_dir'] }; curl #{ path }/#{ filename }#{ extension } | gunzip | tar -xvf -" ).once
         
     | 
| 
       283 
     | 
    
         
            -
                  subject.fetch_puppet( [unixhost], {} )
         
     | 
| 
       284 
     | 
    
         
            -
                end
         
     | 
| 
       285 
     | 
    
         
            -
             
     | 
| 
       286 
     | 
    
         
            -
                it 'can download a PE .swix from a URL to an EOS host and unpack it' do
         
     | 
| 
       287 
     | 
    
         
            -
                  allow( File ).to receive( :directory? ).and_return( false ) #is not local
         
     | 
| 
       288 
     | 
    
         
            -
                  allow( subject ).to receive( :link_exists? ).and_return( true ) #is a tar.gz
         
     | 
| 
       289 
     | 
    
         
            -
                  allow( subject ).to receive( :on ).and_return( true )
         
     | 
| 
       290 
     | 
    
         
            -
             
     | 
| 
       291 
     | 
    
         
            -
                  path = eoshost['pe_dir']
         
     | 
| 
       292 
     | 
    
         
            -
                  filename = "#{ eoshost['dist'] }"
         
     | 
| 
       293 
     | 
    
         
            -
                  extension = '.swix'
         
     | 
| 
       294 
     | 
    
         
            -
                  commands = ['enable', "copy #{path}/#{filename}#{extension} extension:"]
         
     | 
| 
       295 
     | 
    
         
            -
                  command = commands.join("\n")
         
     | 
| 
       296 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( eoshost, "Cli -c '#{command}'" ).once
         
     | 
| 
       297 
     | 
    
         
            -
                  subject.fetch_puppet( [eoshost], {} )
         
     | 
| 
       298 
     | 
    
         
            -
                end
         
     | 
| 
       299 
     | 
    
         
            -
             
     | 
| 
       300 
     | 
    
         
            -
                it 'can push a local PE package to a windows host' do
         
     | 
| 
       301 
     | 
    
         
            -
                  allow( File ).to receive( :directory? ).and_return( true ) #is local
         
     | 
| 
       302 
     | 
    
         
            -
                  allow( File ).to receive( :exists? ).and_return( true ) #is present
         
     | 
| 
       303 
     | 
    
         
            -
                  winhost['dist'] = 'puppet-enterprise-3.0'
         
     | 
| 
       304 
     | 
    
         
            -
                  allow( subject ).to receive( :scp_to ).and_return( true )
         
     | 
| 
       305 
     | 
    
         
            -
             
     | 
| 
       306 
     | 
    
         
            -
                  path = winhost['pe_dir']
         
     | 
| 
       307 
     | 
    
         
            -
                  filename = "puppet-enterprise-#{ winhost['pe_ver'] }"
         
     | 
| 
       308 
     | 
    
         
            -
                  extension = '.msi'
         
     | 
| 
       309 
     | 
    
         
            -
                  expect( subject ).to receive( :scp_to ).with( winhost, "#{ path }/#{ filename }#{ extension }", "#{ winhost['working_dir'] }/#{ filename }#{ extension }" ).once
         
     | 
| 
       310 
     | 
    
         
            -
                  subject.fetch_puppet( [winhost], {} )
         
     | 
| 
       311 
     | 
    
         
            -
             
     | 
| 
       312 
     | 
    
         
            -
                end
         
     | 
| 
       313 
     | 
    
         
            -
             
     | 
| 
       314 
     | 
    
         
            -
                it 'can download a PE dmg from a URL to a mac host' do
         
     | 
| 
       315 
     | 
    
         
            -
                  allow( File ).to receive( :directory? ).and_return( false ) #is not local
         
     | 
| 
       316 
     | 
    
         
            -
                  allow( subject ).to receive( :link_exists? ).and_return( true ) #is  not local
         
     | 
| 
       317 
     | 
    
         
            -
                  allow( subject ).to receive( :on ).and_return( true )
         
     | 
| 
       318 
     | 
    
         
            -
             
     | 
| 
       319 
     | 
    
         
            -
                  path = machost['pe_dir']
         
     | 
| 
       320 
     | 
    
         
            -
                  filename = "#{ machost['dist'] }"
         
     | 
| 
       321 
     | 
    
         
            -
                  extension = '.dmg'
         
     | 
| 
       322 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( machost, "cd #{ machost['working_dir'] }; curl -O #{ path }/#{ filename }#{ extension }" ).once
         
     | 
| 
       323 
     | 
    
         
            -
                  subject.fetch_puppet( [machost], {} )
         
     | 
| 
       324 
     | 
    
         
            -
                end
         
     | 
| 
       325 
     | 
    
         
            -
             
     | 
| 
       326 
     | 
    
         
            -
                it 'can push a PE dmg to a mac host' do
         
     | 
| 
       327 
     | 
    
         
            -
                  allow( File ).to receive( :directory? ).and_return( true ) #is local
         
     | 
| 
       328 
     | 
    
         
            -
                  allow( File ).to receive( :exists? ).and_return( true ) #is present
         
     | 
| 
       329 
     | 
    
         
            -
                  allow( subject ).to receive( :scp_to ).and_return( true )
         
     | 
| 
       330 
     | 
    
         
            -
             
     | 
| 
       331 
     | 
    
         
            -
                  path = machost['pe_dir']
         
     | 
| 
       332 
     | 
    
         
            -
                  filename = "#{ machost['dist'] }"
         
     | 
| 
       333 
     | 
    
         
            -
                  extension = '.dmg'
         
     | 
| 
       334 
     | 
    
         
            -
                  expect( subject ).to receive( :scp_to ).with( machost, "#{ path }/#{ filename }#{ extension }", "#{ machost['working_dir'] }/#{ filename }#{ extension }" ).once
         
     | 
| 
       335 
     | 
    
         
            -
                  subject.fetch_puppet( [machost], {} )
         
     | 
| 
       336 
     | 
    
         
            -
                end
         
     | 
| 
       337 
     | 
    
         
            -
             
     | 
| 
       338 
     | 
    
         
            -
                it "does nothing for a frictionless agent for PE >= 3.2.0" do
         
     | 
| 
       339 
     | 
    
         
            -
                  unixhost['roles'] << 'frictionless'
         
     | 
| 
       340 
     | 
    
         
            -
                  unixhost['pe_ver'] = '3.2.0'
         
     | 
| 
       341 
     | 
    
         
            -
             
     | 
| 
       342 
     | 
    
         
            -
                  expect( subject).to_not receive(:scp_to)
         
     | 
| 
       343 
     | 
    
         
            -
                  expect( subject).to_not receive(:on)
         
     | 
| 
       344 
     | 
    
         
            -
                  allow( subject ).to receive(:version_is_less).with('3.2.0', '3.2.0').and_return(false)
         
     | 
| 
       345 
     | 
    
         
            -
                  subject.fetch_puppet( [unixhost], {} )
         
     | 
| 
       346 
     | 
    
         
            -
                end
         
     | 
| 
       347 
     | 
    
         
            -
              end
         
     | 
| 
       348 
     | 
    
         
            -
             
     | 
| 
       349 
     | 
    
         
            -
              describe 'do_install' do
         
     | 
| 
       350 
     | 
    
         
            -
                it 'can perform a simple installation' do
         
     | 
| 
       351 
     | 
    
         
            -
                  allow( subject ).to receive( :on ).and_return( Beaker::Result.new( {}, '' ) )
         
     | 
| 
       352 
     | 
    
         
            -
                  allow( subject ).to receive( :fetch_puppet ).and_return( true )
         
     | 
| 
       353 
     | 
    
         
            -
                  allow( subject ).to receive( :create_remote_file ).and_return( true )
         
     | 
| 
       354 
     | 
    
         
            -
                  allow( subject ).to receive( :sign_certificate_for ).and_return( true )
         
     | 
| 
       355 
     | 
    
         
            -
                  allow( subject ).to receive( :stop_agent_on ).and_return( true )
         
     | 
| 
       356 
     | 
    
         
            -
                  allow( subject ).to receive( :sleep_until_puppetdb_started ).and_return( true )
         
     | 
| 
       357 
     | 
    
         
            -
                  allow( subject ).to receive( :version_is_less ).with('3.0', '4.0').and_return( true )
         
     | 
| 
       358 
     | 
    
         
            -
                  allow( subject ).to receive( :version_is_less ).with('3.0', '3.4').and_return( true )
         
     | 
| 
       359 
     | 
    
         
            -
                  allow( subject ).to receive( :version_is_less ).with('3.0', '3.0').and_return( false )
         
     | 
| 
       360 
     | 
    
         
            -
                  allow( subject ).to receive( :version_is_less ).with('3.0', '3.4').and_return( true )
         
     | 
| 
       361 
     | 
    
         
            -
                  allow( subject ).to receive( :wait_for_host_in_dashboard ).and_return( true )
         
     | 
| 
       362 
     | 
    
         
            -
                  allow( subject ).to receive( :puppet_agent ) do |arg|
         
     | 
| 
       363 
     | 
    
         
            -
                    "puppet agent #{arg}"
         
     | 
| 
       364 
     | 
    
         
            -
                  end
         
     | 
| 
       365 
     | 
    
         
            -
                  allow( subject ).to receive( :puppet ) do |arg|
         
     | 
| 
       366 
     | 
    
         
            -
                    "puppet #{arg}"
         
     | 
| 
       367 
     | 
    
         
            -
                  end
         
     | 
| 
       368 
     | 
    
         
            -
             
     | 
| 
       369 
     | 
    
         
            -
                  allow( subject ).to receive( :hosts ).and_return( hosts )
         
     | 
| 
       370 
     | 
    
         
            -
                  #create answers file per-host, except windows
         
     | 
| 
       371 
     | 
    
         
            -
                  expect( subject ).to receive( :create_remote_file ).with( hosts[0], /answers/, /q/ ).once
         
     | 
| 
       372 
     | 
    
         
            -
                  #run installer on all hosts
         
     | 
| 
       373 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( hosts[0], /puppet-enterprise-installer/ ).once
         
     | 
| 
       374 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( hosts[1], /msiexec.exe/ ).once
         
     | 
| 
       375 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( hosts[2], / hdiutil attach puppet-enterprise-3.0-osx-10.9-x86_64.dmg && installer -pkg \/Volumes\/puppet-enterprise-3.0\/puppet-enterprise-installer-3.0.pkg -target \// ).once
         
     | 
| 
       376 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( hosts[3], /^Cli/ ).once
         
     | 
| 
       377 
     | 
    
         
            -
                  #does extra mac/EOS specific commands
         
     | 
| 
       378 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( hosts[2], /puppet config set server/ ).once
         
     | 
| 
       379 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( hosts[3], /puppet config set server/ ).once
         
     | 
| 
       380 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( hosts[2], /puppet config set certname/ ).once
         
     | 
| 
       381 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( hosts[3], /puppet config set certname/ ).once
         
     | 
| 
       382 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( hosts[2], /puppet agent -t/, :acceptable_exit_codes => [1] ).once
         
     | 
| 
       383 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( hosts[3], /puppet agent -t/, :acceptable_exit_codes => [0, 1] ).once
         
     | 
| 
       384 
     | 
    
         
            -
                  #sign certificate per-host
         
     | 
| 
       385 
     | 
    
         
            -
                  expect( subject ).to receive( :sign_certificate_for ).with( hosts[0] ).once
         
     | 
| 
       386 
     | 
    
         
            -
                  expect( subject ).to receive( :sign_certificate_for ).with( hosts[1] ).once
         
     | 
| 
       387 
     | 
    
         
            -
                  expect( subject ).to receive( :sign_certificate_for ).with( hosts[2] ).once
         
     | 
| 
       388 
     | 
    
         
            -
                  expect( subject ).to receive( :sign_certificate_for ).with( hosts[3] ).once
         
     | 
| 
       389 
     | 
    
         
            -
                  #stop puppet agent on all hosts
         
     | 
| 
       390 
     | 
    
         
            -
                  expect( subject ).to receive( :stop_agent_on ).with( hosts[0] ).once
         
     | 
| 
       391 
     | 
    
         
            -
                  expect( subject ).to receive( :stop_agent_on ).with( hosts[1] ).once
         
     | 
| 
       392 
     | 
    
         
            -
                  expect( subject ).to receive( :stop_agent_on ).with( hosts[2] ).once
         
     | 
| 
       393 
     | 
    
         
            -
                  expect( subject ).to receive( :stop_agent_on ).with( hosts[3] ).once
         
     | 
| 
       394 
     | 
    
         
            -
                  #wait for puppetdb to start
         
     | 
| 
       395 
     | 
    
         
            -
                  expect( subject ).to receive( :sleep_until_puppetdb_started ).with( hosts[0] ).once
         
     | 
| 
       396 
     | 
    
         
            -
                  #run each puppet agent once
         
     | 
| 
       397 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( hosts[0], /puppet agent -t/, :acceptable_exit_codes => [0,2] ).once
         
     | 
| 
       398 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( hosts[1], /puppet agent -t/, :acceptable_exit_codes => [0,2] ).once
         
     | 
| 
       399 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( hosts[2], /puppet agent -t/, :acceptable_exit_codes => [0,2] ).once
         
     | 
| 
       400 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( hosts[3], /puppet agent -t/, :acceptable_exit_codes => [0,2] ).once
         
     | 
| 
       401 
     | 
    
         
            -
                  #run rake task on dashboard
         
     | 
| 
       402 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( hosts[0], /\/opt\/puppet\/bin\/rake -sf \/opt\/puppet\/share\/puppet-dashboard\/Rakefile .* RAILS_ENV=production/ ).once
         
     | 
| 
       403 
     | 
    
         
            -
                  #wait for all hosts to appear in the dashboard
         
     | 
| 
       404 
     | 
    
         
            -
                  #run puppet agent now that installation is complete
         
     | 
| 
       405 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( hosts, /puppet agent/, :acceptable_exit_codes => [0,2] ).once
         
     | 
| 
       406 
     | 
    
         
            -
                  subject.do_install( hosts, opts )
         
     | 
| 
       407 
     | 
    
         
            -
                end
         
     | 
| 
       408 
     | 
    
         
            -
             
     | 
| 
       409 
     | 
    
         
            -
                it 'can perform a masterless installation' do
         
     | 
| 
       410 
     | 
    
         
            -
                  hosts = make_hosts({
         
     | 
| 
       411 
     | 
    
         
            -
                    :pe_ver => '3.0',
         
     | 
| 
       412 
     | 
    
         
            -
                    :roles => ['agent']
         
     | 
| 
       413 
     | 
    
         
            -
                  }, 1)
         
     | 
| 
       414 
     | 
    
         
            -
             
     | 
| 
       415 
     | 
    
         
            -
                  allow( subject ).to receive( :hosts ).and_return( hosts )
         
     | 
| 
       416 
     | 
    
         
            -
                  allow( subject ).to receive( :options ).and_return({ :masterless => true })
         
     | 
| 
       417 
     | 
    
         
            -
                  allow( subject ).to receive( :on ).and_return( Beaker::Result.new( {}, '' ) )
         
     | 
| 
       418 
     | 
    
         
            -
                  allow( subject ).to receive( :fetch_puppet ).and_return( true )
         
     | 
| 
       419 
     | 
    
         
            -
                  allow( subject ).to receive( :create_remote_file ).and_return( true )
         
     | 
| 
       420 
     | 
    
         
            -
                  allow( subject ).to receive( :stop_agent_on ).and_return( true )
         
     | 
| 
       421 
     | 
    
         
            -
                  allow( subject ).to receive( :version_is_less ).with(anything, '3.2.0').exactly(hosts.length + 1).times.and_return( false )
         
     | 
| 
       422 
     | 
    
         
            -
             
     | 
| 
       423 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( hosts[0], /puppet-enterprise-installer/ ).once
         
     | 
| 
       424 
     | 
    
         
            -
                  expect( subject ).to receive( :create_remote_file ).with( hosts[0], /answers/, /q/ ).once
         
     | 
| 
       425 
     | 
    
         
            -
                  expect( subject ).to_not receive( :sign_certificate_for )
         
     | 
| 
       426 
     | 
    
         
            -
                  expect( subject ).to receive( :stop_agent_on ).with( hosts[0] ).once
         
     | 
| 
       427 
     | 
    
         
            -
                  expect( subject ).to_not receive( :sleep_until_puppetdb_started )
         
     | 
| 
       428 
     | 
    
         
            -
                  expect( subject ).to_not receive( :wait_for_host_in_dashboard )
         
     | 
| 
       429 
     | 
    
         
            -
                  expect( subject ).to_not receive( :on ).with( hosts[0], /puppet agent -t/, :acceptable_exit_codes => [0,2] )
         
     | 
| 
       430 
     | 
    
         
            -
                  subject.do_install( hosts, opts)
         
     | 
| 
       431 
     | 
    
         
            -
                end
         
     | 
| 
       432 
     | 
    
         
            -
              end
         
     | 
| 
       433 
     | 
    
         
            -
             
     | 
| 
       434 
     | 
    
         
            -
              describe 'do_higgs_install' do
         
     | 
| 
       435 
     | 
    
         
            -
             
     | 
| 
       436 
     | 
    
         
            -
                before :each do
         
     | 
| 
       437 
     | 
    
         
            -
                  my_time = double( "time double" )
         
     | 
| 
       438 
     | 
    
         
            -
                  allow( my_time ).to receive( :strftime ).and_return( "2014-07-01_15.27.53" )
         
     | 
| 
       439 
     | 
    
         
            -
                  allow( Time ).to receive( :new ).and_return( my_time )
         
     | 
| 
       440 
     | 
    
         
            -
             
     | 
| 
       441 
     | 
    
         
            -
                  hosts[0]['working_dir'] = "tmp/2014-07-01_15.27.53"
         
     | 
| 
       442 
     | 
    
         
            -
                  hosts[0]['dist'] = 'dist'
         
     | 
| 
       443 
     | 
    
         
            -
                  hosts[0]['pe_installer'] = 'pe-installer'
         
     | 
| 
       444 
     | 
    
         
            -
                  allow( hosts[0] ).to receive( :tmpdir ).and_return( "/tmp/2014-07-01_15.27.53" )
         
     | 
| 
       445 
     | 
    
         
            -
             
     | 
| 
       446 
     | 
    
         
            -
                  @fail_result = Beaker::Result.new( {}, '' )
         
     | 
| 
       447 
     | 
    
         
            -
                  @fail_result.stdout = "No match here"
         
     | 
| 
       448 
     | 
    
         
            -
                  @success_result = Beaker::Result.new( {}, '' )
         
     | 
| 
       449 
     | 
    
         
            -
                  @success_result.stdout = "Please go to https://website in your browser to continue installation"
         
     | 
| 
       450 
     | 
    
         
            -
                end
         
     | 
| 
       451 
     | 
    
         
            -
             
     | 
| 
       452 
     | 
    
         
            -
                it 'can perform a simple installation' do
         
     | 
| 
       453 
     | 
    
         
            -
                  allow( subject ).to receive( :fetch_puppet ).and_return( true )
         
     | 
| 
       454 
     | 
    
         
            -
                  allow( subject ).to receive( :sleep ).and_return( true )
         
     | 
| 
       455 
     | 
    
         
            -
             
     | 
| 
       456 
     | 
    
         
            -
                  allow( subject ).to receive( :hosts ).and_return( hosts )
         
     | 
| 
       457 
     | 
    
         
            -
             
     | 
| 
       458 
     | 
    
         
            -
                  #run higgs installer command
         
     | 
| 
       459 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( hosts[0],
         
     | 
| 
       460 
     | 
    
         
            -
                                                     "cd /tmp/2014-07-01_15.27.53/puppet-enterprise-3.0-linux ; nohup ./pe-installer <<<Y > higgs_2014-07-01_15.27.53.log 2>&1 &",
         
     | 
| 
       461 
     | 
    
         
            -
                                                    opts ).once
         
     | 
| 
       462 
     | 
    
         
            -
                  #check to see if the higgs installation has proceeded correctly, works on second check
         
     | 
| 
       463 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( hosts[0], /cat #{hosts[0]['higgs_file']}/, { :acceptable_exit_codes => 0..255 }).and_return( @fail_result, @success_result )
         
     | 
| 
       464 
     | 
    
         
            -
                  subject.do_higgs_install( hosts[0], opts )
         
     | 
| 
       465 
     | 
    
         
            -
                end
         
     | 
| 
       466 
     | 
    
         
            -
             
     | 
| 
       467 
     | 
    
         
            -
                it 'fails out after checking installation log 10 times' do
         
     | 
| 
       468 
     | 
    
         
            -
                  allow( subject ).to receive( :fetch_puppet ).and_return( true )
         
     | 
| 
       469 
     | 
    
         
            -
                  allow( subject ).to receive( :sleep ).and_return( true )
         
     | 
| 
       470 
     | 
    
         
            -
             
     | 
| 
       471 
     | 
    
         
            -
                  allow( subject ).to receive( :hosts ).and_return( hosts )
         
     | 
| 
       472 
     | 
    
         
            -
             
     | 
| 
       473 
     | 
    
         
            -
                  #run higgs installer command
         
     | 
| 
       474 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( hosts[0],
         
     | 
| 
       475 
     | 
    
         
            -
                                                     "cd /tmp/2014-07-01_15.27.53/puppet-enterprise-3.0-linux ; nohup ./pe-installer <<<Y > higgs_2014-07-01_15.27.53.log 2>&1 &",
         
     | 
| 
       476 
     | 
    
         
            -
                                                    opts ).once
         
     | 
| 
       477 
     | 
    
         
            -
                  #check to see if the higgs installation has proceeded correctly, works on second check
         
     | 
| 
       478 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( hosts[0], /cat #{hosts[0]['higgs_file']}/, { :acceptable_exit_codes => 0..255 }).exactly(10).times.and_return( @fail_result )
         
     | 
| 
       479 
     | 
    
         
            -
                  expect{ subject.do_higgs_install( hosts[0], opts ) }.to raise_error
         
     | 
| 
       480 
     | 
    
         
            -
                end
         
     | 
| 
       481 
     | 
    
         
            -
             
     | 
| 
       482 
     | 
    
         
            -
              end
         
     | 
| 
       483 
     | 
    
         
            -
             
     | 
| 
       484 
     | 
    
         
            -
              describe '#install_puppet' do
         
     | 
| 
       485 
     | 
    
         
            -
                let(:hosts) do
         
     | 
| 
       486 
     | 
    
         
            -
                  make_hosts({:platform => platform })
         
     | 
| 
       487 
     | 
    
         
            -
                end
         
     | 
| 
       488 
     | 
    
         
            -
             
     | 
| 
       489 
     | 
    
         
            -
                before do
         
     | 
| 
       490 
     | 
    
         
            -
                  allow( subject ).to receive(:hosts).and_return(hosts)
         
     | 
| 
       491 
     | 
    
         
            -
                  allow( subject ).to receive(:on).and_return(Beaker::Result.new({},''))
         
     | 
| 
       492 
     | 
    
         
            -
                end
         
     | 
| 
       493 
     | 
    
         
            -
                context 'on el-6' do
         
     | 
| 
       494 
     | 
    
         
            -
                  let(:platform) { "el-6-i386" }
         
     | 
| 
       495 
     | 
    
         
            -
                  it 'installs' do
         
     | 
| 
       496 
     | 
    
         
            -
                    expect(subject).to receive(:on).with(hosts[0], /puppetlabs-release-el-6\.noarch\.rpm/)
         
     | 
| 
       497 
     | 
    
         
            -
                    expect(subject).to receive(:on).with(hosts[0], 'yum install -y puppet')
         
     | 
| 
       498 
     | 
    
         
            -
                    subject.install_puppet
         
     | 
| 
       499 
     | 
    
         
            -
                  end
         
     | 
| 
       500 
     | 
    
         
            -
                  it 'installs specific version of puppet when passed :version' do
         
     | 
| 
       501 
     | 
    
         
            -
                    expect(subject).to receive(:on).with(hosts[0], 'yum install -y puppet-3000')
         
     | 
| 
       502 
     | 
    
         
            -
                    subject.install_puppet( :version => '3000' )
         
     | 
| 
       503 
     | 
    
         
            -
                  end
         
     | 
| 
       504 
     | 
    
         
            -
                  it 'can install specific versions of puppets dependencies' do
         
     | 
| 
       505 
     | 
    
         
            -
                    expect(subject).to receive(:on).with(hosts[0], 'yum install -y puppet-3000')
         
     | 
| 
       506 
     | 
    
         
            -
                    expect(subject).to receive(:on).with(hosts[0], 'yum install -y hiera-2001')
         
     | 
| 
       507 
     | 
    
         
            -
                    expect(subject).to receive(:on).with(hosts[0], 'yum install -y facter-1999')
         
     | 
| 
       508 
     | 
    
         
            -
                    subject.install_puppet( :version => '3000', :facter_version => '1999', :hiera_version => '2001' )
         
     | 
| 
       509 
     | 
    
         
            -
                  end
         
     | 
| 
       510 
     | 
    
         
            -
                end
         
     | 
| 
       511 
     | 
    
         
            -
                context 'on el-5' do
         
     | 
| 
       512 
     | 
    
         
            -
                  let(:platform) { "el-5-i386" }
         
     | 
| 
       513 
     | 
    
         
            -
                  it 'installs' do
         
     | 
| 
       514 
     | 
    
         
            -
                    expect(subject).to receive(:on).with(hosts[0], /puppetlabs-release-el-5\.noarch\.rpm/)
         
     | 
| 
       515 
     | 
    
         
            -
                    expect(subject).to receive(:on).with(hosts[0], 'yum install -y puppet')
         
     | 
| 
       516 
     | 
    
         
            -
                    subject.install_puppet
         
     | 
| 
       517 
     | 
    
         
            -
                  end
         
     | 
| 
       518 
     | 
    
         
            -
                end
         
     | 
| 
       519 
     | 
    
         
            -
                context 'on fedora' do
         
     | 
| 
       520 
     | 
    
         
            -
                  let(:platform) { "fedora-18-x86_84" }
         
     | 
| 
       521 
     | 
    
         
            -
                  it 'installs' do
         
     | 
| 
       522 
     | 
    
         
            -
                    expect(subject).to receive(:on).with(hosts[0], /puppetlabs-release-fedora-18\.noarch\.rpm/)
         
     | 
| 
       523 
     | 
    
         
            -
                    expect(subject).to receive(:on).with(hosts[0], 'yum install -y puppet')
         
     | 
| 
       524 
     | 
    
         
            -
                    subject.install_puppet
         
     | 
| 
       525 
     | 
    
         
            -
                  end
         
     | 
| 
       526 
     | 
    
         
            -
                end
         
     | 
| 
       527 
     | 
    
         
            -
                context 'on debian' do
         
     | 
| 
       528 
     | 
    
         
            -
                  let(:platform) { "debian-7-amd64" }
         
     | 
| 
       529 
     | 
    
         
            -
                  it 'installs latest if given no version info' do
         
     | 
| 
       530 
     | 
    
         
            -
                    expect(subject).to receive(:on).with(hosts[0], /puppetlabs-release-\$\(lsb_release -c -s\)\.deb/)
         
     | 
| 
       531 
     | 
    
         
            -
                    expect(subject).to receive(:on).with(hosts[0], 'dpkg -i puppetlabs-release-$(lsb_release -c -s).deb')
         
     | 
| 
       532 
     | 
    
         
            -
                    expect(subject).to receive(:on).with(hosts[0], 'apt-get update')
         
     | 
| 
       533 
     | 
    
         
            -
                    expect(subject).to receive(:on).with(hosts[0], 'apt-get install -y puppet')
         
     | 
| 
       534 
     | 
    
         
            -
                    subject.install_puppet
         
     | 
| 
       535 
     | 
    
         
            -
                  end
         
     | 
| 
       536 
     | 
    
         
            -
                  it 'installs specific version of puppet when passed :version' do
         
     | 
| 
       537 
     | 
    
         
            -
                    expect(subject).to receive(:on).with(hosts[0], 'apt-get install -y puppet=3000-1puppetlabs1')
         
     | 
| 
       538 
     | 
    
         
            -
                    subject.install_puppet( :version => '3000' )
         
     | 
| 
       539 
     | 
    
         
            -
                  end
         
     | 
| 
       540 
     | 
    
         
            -
                  it 'can install specific versions of puppets dependencies' do
         
     | 
| 
       541 
     | 
    
         
            -
                    expect(subject).to receive(:on).with(hosts[0], 'apt-get install -y puppet=3000-1puppetlabs1')
         
     | 
| 
       542 
     | 
    
         
            -
                    expect(subject).to receive(:on).with(hosts[0], 'apt-get install -y hiera=2001-1puppetlabs1')
         
     | 
| 
       543 
     | 
    
         
            -
                    expect(subject).to receive(:on).with(hosts[0], 'apt-get install -y facter=1999-1puppetlabs1')
         
     | 
| 
       544 
     | 
    
         
            -
                    subject.install_puppet( :version => '3000', :facter_version => '1999', :hiera_version => '2001' )
         
     | 
| 
       545 
     | 
    
         
            -
                  end
         
     | 
| 
       546 
     | 
    
         
            -
                end
         
     | 
| 
       547 
     | 
    
         
            -
                context 'on windows' do
         
     | 
| 
       548 
     | 
    
         
            -
                  let(:platform) { "windows-2008r2-i386" }
         
     | 
| 
       549 
     | 
    
         
            -
                  it 'installs specific version of puppet when passed :version' do
         
     | 
| 
       550 
     | 
    
         
            -
                    allow(subject).to receive(:link_exists?).and_return( true )
         
     | 
| 
       551 
     | 
    
         
            -
                    expect(subject).to receive(:on).with(hosts[0], 'curl -O http://downloads.puppetlabs.com/windows/puppet-3000.msi')
         
     | 
| 
       552 
     | 
    
         
            -
                    expect(subject).to receive(:on).with(hosts[0], " echo 'export PATH=$PATH:\"/cygdrive/c/Program Files (x86)/Puppet Labs/Puppet/bin\":\"/cygdrive/c/Program Files/Puppet Labs/Puppet/bin\"' > /etc/bash.bashrc ")
         
     | 
| 
       553 
     | 
    
         
            -
                    expect(subject).to receive(:on).with(hosts[0], 'cmd /C \'start /w msiexec.exe /qn /i puppet-3000.msi\'')
         
     | 
| 
       554 
     | 
    
         
            -
                    subject.install_puppet(:version => '3000')
         
     | 
| 
       555 
     | 
    
         
            -
                  end
         
     | 
| 
       556 
     | 
    
         
            -
                  it 'installs from custom url when passed :win_download_url' do
         
     | 
| 
       557 
     | 
    
         
            -
                    allow(subject).to receive(:link_exists?).and_return( true )
         
     | 
| 
       558 
     | 
    
         
            -
                    expect(subject).to receive(:on).with(hosts[0], 'curl -O http://nightlies.puppetlabs.com/puppet-latest/repos/windows/puppet-3000.msi')
         
     | 
| 
       559 
     | 
    
         
            -
                    expect(subject).to receive(:on).with(hosts[0], 'cmd /C \'start /w msiexec.exe /qn /i puppet-3000.msi\'')
         
     | 
| 
       560 
     | 
    
         
            -
                    subject.install_puppet( :version => '3000', :win_download_url => 'http://nightlies.puppetlabs.com/puppet-latest/repos/windows' )
         
     | 
| 
       561 
     | 
    
         
            -
                  end
         
     | 
| 
       562 
     | 
    
         
            -
                end
         
     | 
| 
       563 
     | 
    
         
            -
                describe 'on unsupported platforms' do
         
     | 
| 
       564 
     | 
    
         
            -
                  let(:platform) { 'solaris-11-x86_64' }
         
     | 
| 
       565 
     | 
    
         
            -
                  let(:host) { make_host('henry', :platform => 'solaris-11-x86_64') }
         
     | 
| 
       566 
     | 
    
         
            -
                  let(:hosts) { [host] }
         
     | 
| 
       567 
     | 
    
         
            -
                  it 'by default raises an error' do
         
     | 
| 
       568 
     | 
    
         
            -
                    expect(subject).to_not receive(:on)
         
     | 
| 
       569 
     | 
    
         
            -
                    expect { subject.install_puppet }.to raise_error(/unsupported platform/)
         
     | 
| 
       570 
     | 
    
         
            -
                  end
         
     | 
| 
       571 
     | 
    
         
            -
                  it 'falls back to installing from gem when given :default_action => "gem_install"' do
         
     | 
| 
       572 
     | 
    
         
            -
                    result = double
         
     | 
| 
       573 
     | 
    
         
            -
                    gem_env_string = '{"RubyGems Environment": [ {"GEM PATHS": [], "EXECUTABLE DIRECTORY": "/does/not/exist" } ] }'
         
     | 
| 
       574 
     | 
    
         
            -
                    allow( result ).to receive(:stdout).and_return gem_env_string
         
     | 
| 
       575 
     | 
    
         
            -
                    allow(subject).to receive(:on).with(host, /gem environment/).and_return result
         
     | 
| 
       576 
     | 
    
         
            -
                    expect(subject).to receive(:on).with(host, /gem install/)
         
     | 
| 
       577 
     | 
    
         
            -
                    subject.install_puppet :default_action => 'gem_install'
         
     | 
| 
       578 
     | 
    
         
            -
                  end
         
     | 
| 
       579 
     | 
    
         
            -
                end
         
     | 
| 
       580 
     | 
    
         
            -
              end
         
     | 
| 
       581 
     | 
    
         
            -
             
     | 
| 
       582 
     | 
    
         
            -
              describe 'configure_puppet_on' do
         
     | 
| 
       583 
     | 
    
         
            -
                before do
         
     | 
| 
       584 
     | 
    
         
            -
                  allow(subject).to receive(:on).and_return(Beaker::Result.new({},''))
         
     | 
| 
       585 
     | 
    
         
            -
                end
         
     | 
| 
       586 
     | 
    
         
            -
                context 'on debian' do
         
     | 
| 
       587 
     | 
    
         
            -
                  let(:platform) { 'debian-7-amd64' }
         
     | 
| 
       588 
     | 
    
         
            -
                  let(:host) { make_host('testbox.test.local', :platform => 'debian-7-amd64') }
         
     | 
| 
       589 
     | 
    
         
            -
                  it 'it sets the puppet.conf file to the provided config' do
         
     | 
| 
       590 
     | 
    
         
            -
                    config = { 'main' => {'server' => 'testbox.test.local'} }
         
     | 
| 
       591 
     | 
    
         
            -
                    expect(subject).to receive(:on).with(host, "echo \"[main]\nserver=testbox.test.local\n\n\" > #{host.puppet['config']}")
         
     | 
| 
       592 
     | 
    
         
            -
                    subject.configure_puppet_on(host, config)
         
     | 
| 
       593 
     | 
    
         
            -
                  end
         
     | 
| 
       594 
     | 
    
         
            -
                end
         
     | 
| 
       595 
     | 
    
         
            -
                context 'on windows' do
         
     | 
| 
       596 
     | 
    
         
            -
                  let(:platform) { 'windows-2008R2-amd64' }
         
     | 
| 
       597 
     | 
    
         
            -
                  let(:host) { make_host('testbox.test.local', :platform => 'windows-2008R2-amd64') }
         
     | 
| 
       598 
     | 
    
         
            -
                  it 'it sets the puppet.conf file to the provided config' do
         
     | 
| 
       599 
     | 
    
         
            -
                    config = { 'main' => {'server' => 'testbox.test.local'} }
         
     | 
| 
       600 
     | 
    
         
            -
                    expect(subject).to receive(:on) do |host, command|
         
     | 
| 
       601 
     | 
    
         
            -
                      expect(command.command).to eq('powershell.exe')
         
     | 
| 
       602 
     | 
    
         
            -
                      expect(command.args).to eq(["-ExecutionPolicy Bypass", "-InputFormat None", "-NoLogo", "-NoProfile", "-NonInteractive", "-Command $text = \\\"[main]`nserver=testbox.test.local`n`n\\\"; Set-Content -path '#{host.puppet['config']}' -value $text"])
         
     | 
| 
       603 
     | 
    
         
            -
                    end
         
     | 
| 
       604 
     | 
    
         
            -
                    subject.configure_puppet_on(host, config)
         
     | 
| 
       605 
     | 
    
         
            -
                  end
         
     | 
| 
       606 
     | 
    
         
            -
                end
         
     | 
| 
       607 
     | 
    
         
            -
              end
         
     | 
| 
       608 
     | 
    
         
            -
             
     | 
| 
       609 
     | 
    
         
            -
              describe 'configure_puppet' do
         
     | 
| 
       610 
     | 
    
         
            -
                let(:hosts) do
         
     | 
| 
       611 
     | 
    
         
            -
                  make_hosts({:platform => platform })
         
     | 
| 
       612 
     | 
    
         
            -
                end
         
     | 
| 
       613 
     | 
    
         
            -
             
     | 
| 
       614 
     | 
    
         
            -
                before do
         
     | 
| 
       615 
     | 
    
         
            -
                  allow( subject ).to receive(:hosts).and_return(hosts)
         
     | 
| 
       616 
     | 
    
         
            -
                  allow( subject ).to receive(:on).and_return(Beaker::Result.new({},''))
         
     | 
| 
       617 
     | 
    
         
            -
                end
         
     | 
| 
       618 
     | 
    
         
            -
                context 'on debian' do
         
     | 
| 
       619 
     | 
    
         
            -
                  let(:platform) { 'debian-7-amd64' }
         
     | 
| 
       620 
     | 
    
         
            -
                  it 'it sets the puppet.conf file to the provided config' do
         
     | 
| 
       621 
     | 
    
         
            -
                    config = { 'main' => {'server' => 'testbox.test.local'} }
         
     | 
| 
       622 
     | 
    
         
            -
                    expect(subject).to receive(:on).with(hosts[0], "echo \"[main]\nserver=testbox.test.local\n\n\" > #{hosts[0].puppet['config']}")
         
     | 
| 
       623 
     | 
    
         
            -
                    subject.configure_puppet(config)
         
     | 
| 
       624 
     | 
    
         
            -
                  end
         
     | 
| 
       625 
     | 
    
         
            -
                end
         
     | 
| 
       626 
     | 
    
         
            -
                context 'on windows' do
         
     | 
| 
       627 
     | 
    
         
            -
                  let(:platform) { 'windows-2008R2-amd64' }
         
     | 
| 
       628 
     | 
    
         
            -
                  it 'it sets the puppet.conf file to the provided config' do
         
     | 
| 
       629 
     | 
    
         
            -
                    config = { 'main' => {'server' => 'testbox.test.local'} }
         
     | 
| 
       630 
     | 
    
         
            -
                    expect(subject).to receive(:on) do |host, command|
         
     | 
| 
       631 
     | 
    
         
            -
                      expect(command.command).to eq('powershell.exe')
         
     | 
| 
       632 
     | 
    
         
            -
                      expect(command.args).to eq(["-ExecutionPolicy Bypass", "-InputFormat None", "-NoLogo", "-NoProfile", "-NonInteractive", "-Command $text = \\\"[main]`nserver=testbox.test.local`n`n\\\"; Set-Content -path '#{host.puppet['config']}' -value $text"])
         
     | 
| 
       633 
     | 
    
         
            -
                    end
         
     | 
| 
       634 
     | 
    
         
            -
                    subject.configure_puppet(config)
         
     | 
| 
       635 
     | 
    
         
            -
                  end
         
     | 
| 
       636 
     | 
    
         
            -
                end
         
     | 
| 
       637 
     | 
    
         
            -
              end
         
     | 
| 
       638 
     | 
    
         
            -
             
     | 
| 
       639 
     | 
    
         
            -
              describe '#add_system32_hosts_entry' do
         
     | 
| 
       640 
     | 
    
         
            -
                before do
         
     | 
| 
       641 
     | 
    
         
            -
                  allow( subject ).to receive(:on).and_return(Beaker::Result.new({},''))
         
     | 
| 
       642 
     | 
    
         
            -
                end
         
     | 
| 
       643 
     | 
    
         
            -
                context 'on debian' do
         
     | 
| 
       644 
     | 
    
         
            -
                  let(:platform) { 'debian-7-amd64' }
         
     | 
| 
       645 
     | 
    
         
            -
                  let(:host) { make_host('testbox.test.local', :platform => 'debian-7-amd64') }
         
     | 
| 
       646 
     | 
    
         
            -
                  it 'logs message - nothing to do on this host' do
         
     | 
| 
       647 
     | 
    
         
            -
                    expect( Beaker::Command ).to receive( :new ).never
         
     | 
| 
       648 
     | 
    
         
            -
             
     | 
| 
       649 
     | 
    
         
            -
                    expect {
         
     | 
| 
       650 
     | 
    
         
            -
                      subject.add_system32_hosts_entry(host, {})
         
     | 
| 
       651 
     | 
    
         
            -
                    }.to raise_error
         
     | 
| 
       652 
     | 
    
         
            -
                  end
         
     | 
| 
       653 
     | 
    
         
            -
                end
         
     | 
| 
       654 
     | 
    
         
            -
                context 'on windows' do
         
     | 
| 
       655 
     | 
    
         
            -
                  let(:platform) { 'windows-2008R2-amd64' }
         
     | 
| 
       656 
     | 
    
         
            -
                  let(:host) { make_host('testbox.test.local', :platform => 'windows-2008R2-amd64') }
         
     | 
| 
       657 
     | 
    
         
            -
                  it 'it add an entry into the /etc/hosts file' do
         
     | 
| 
       658 
     | 
    
         
            -
                    entry = { 'ip' => '23.251.154.122', 'name' => 'forge.puppetlabs.com' }
         
     | 
| 
       659 
     | 
    
         
            -
                    expect(subject).to receive(:on) do |host, command|
         
     | 
| 
       660 
     | 
    
         
            -
                      expect(command.command).to eq('powershell.exe')
         
     | 
| 
       661 
     | 
    
         
            -
                      expect(command.args).to eq(["-ExecutionPolicy Bypass", "-InputFormat None", "-NoLogo", "-NoProfile", "-NonInteractive", "-Command $text = \\\"23.251.154.122`t`tforge.puppetlabs.com\\\"; Add-Content -path 'C:\\Windows\\System32\\Drivers\\etc\\hosts' -value $text"])
         
     | 
| 
       662 
     | 
    
         
            -
                    end
         
     | 
| 
       663 
     | 
    
         
            -
             
     | 
| 
       664 
     | 
    
         
            -
             
     | 
| 
       665 
     | 
    
         
            -
                    subject.add_system32_hosts_entry(host, entry)
         
     | 
| 
       666 
     | 
    
         
            -
                  end
         
     | 
| 
       667 
     | 
    
         
            -
                end
         
     | 
| 
       668 
     | 
    
         
            -
              end
         
     | 
| 
       669 
     | 
    
         
            -
             
     | 
| 
       670 
     | 
    
         
            -
              describe 'install_pe' do
         
     | 
| 
       671 
     | 
    
         
            -
             
     | 
| 
       672 
     | 
    
         
            -
                it 'calls do_install with sorted hosts' do
         
     | 
| 
       673 
     | 
    
         
            -
                  allow( subject ).to receive( :options ).and_return( {} )
         
     | 
| 
       674 
     | 
    
         
            -
                  allow( subject ).to receive( :hosts ).and_return( hosts_sorted )
         
     | 
| 
       675 
     | 
    
         
            -
                  allow( subject ).to receive( :do_install ).and_return( true )
         
     | 
| 
       676 
     | 
    
         
            -
                  expect( subject ).to receive( :do_install ).with( hosts, {} )
         
     | 
| 
       677 
     | 
    
         
            -
                  subject.install_pe
         
     | 
| 
       678 
     | 
    
         
            -
                end
         
     | 
| 
       679 
     | 
    
         
            -
             
     | 
| 
       680 
     | 
    
         
            -
                it 'fills in missing pe_ver' do
         
     | 
| 
       681 
     | 
    
         
            -
                  hosts.each do |h|
         
     | 
| 
       682 
     | 
    
         
            -
                    h['pe_ver'] = nil
         
     | 
| 
       683 
     | 
    
         
            -
                  end
         
     | 
| 
       684 
     | 
    
         
            -
                  allow( Beaker::Options::PEVersionScraper ).to receive( :load_pe_version ).and_return( '2.8' )
         
     | 
| 
       685 
     | 
    
         
            -
                  allow( subject ).to receive( :hosts ).and_return( hosts_sorted )
         
     | 
| 
       686 
     | 
    
         
            -
                  allow( subject ).to receive( :options ).and_return( {} )
         
     | 
| 
       687 
     | 
    
         
            -
                  allow( subject ).to receive( :do_install ).and_return( true )
         
     | 
| 
       688 
     | 
    
         
            -
                  expect( subject ).to receive( :do_install ).with( hosts, {} )
         
     | 
| 
       689 
     | 
    
         
            -
                  subject.install_pe
         
     | 
| 
       690 
     | 
    
         
            -
                  hosts.each do |h|
         
     | 
| 
       691 
     | 
    
         
            -
                    expect( h['pe_ver'] ).to be === '2.8'
         
     | 
| 
       692 
     | 
    
         
            -
                  end
         
     | 
| 
       693 
     | 
    
         
            -
                end
         
     | 
| 
       694 
     | 
    
         
            -
              end
         
     | 
| 
       695 
     | 
    
         
            -
             
     | 
| 
       696 
     | 
    
         
            -
              describe 'install_higgs' do
         
     | 
| 
       697 
     | 
    
         
            -
                it 'fills in missing pe_ver' do
         
     | 
| 
       698 
     | 
    
         
            -
                  hosts[0]['pe_ver'] = nil
         
     | 
| 
       699 
     | 
    
         
            -
                  allow( Beaker::Options::PEVersionScraper ).to receive( :load_pe_version ).and_return( '2.8' )
         
     | 
| 
       700 
     | 
    
         
            -
                  allow( subject ).to receive( :hosts ).and_return( [ hosts[1], hosts[0], hosts[2] ] )
         
     | 
| 
       701 
     | 
    
         
            -
                  allow( subject ).to receive( :options ).and_return( {} )
         
     | 
| 
       702 
     | 
    
         
            -
                  allow( subject ).to receive( :do_higgs_install ).and_return( true )
         
     | 
| 
       703 
     | 
    
         
            -
                  expect( subject ).to receive( :do_higgs_install ).with( hosts[0], {} )
         
     | 
| 
       704 
     | 
    
         
            -
                  subject.install_higgs
         
     | 
| 
       705 
     | 
    
         
            -
                  expect( hosts[0]['pe_ver'] ).to be === '2.8'
         
     | 
| 
       706 
     | 
    
         
            -
                end
         
     | 
| 
       707 
     | 
    
         
            -
             
     | 
| 
       708 
     | 
    
         
            -
              end
         
     | 
| 
       709 
     | 
    
         
            -
             
     | 
| 
       710 
     | 
    
         
            -
              describe 'upgrade_pe' do
         
     | 
| 
       711 
     | 
    
         
            -
             
     | 
| 
       712 
     | 
    
         
            -
                it 'calls puppet-enterprise-upgrader for pre 3.0 upgrades' do
         
     | 
| 
       713 
     | 
    
         
            -
                  allow( Beaker::Options::PEVersionScraper ).to receive( :load_pe_version ).and_return( '2.8' )
         
     | 
| 
       714 
     | 
    
         
            -
                  allow( Beaker::Options::PEVersionScraper ).to receive( :load_pe_version_win ).and_return( '2.8' )
         
     | 
| 
       715 
     | 
    
         
            -
                  the_hosts = [ hosts[0].dup, hosts[1].dup, hosts[2].dup ]
         
     | 
| 
       716 
     | 
    
         
            -
                  allow( subject ).to receive( :hosts ).and_return( the_hosts )
         
     | 
| 
       717 
     | 
    
         
            -
                  allow( subject ).to receive( :options ).and_return( {} )
         
     | 
| 
       718 
     | 
    
         
            -
                  allow( subject ).to receive( :version_is_less ).with('3.0', '3.4.0').and_return( true )
         
     | 
| 
       719 
     | 
    
         
            -
                  allow( subject ).to receive( :version_is_less ).with('2.8', '3.0').and_return( true )
         
     | 
| 
       720 
     | 
    
         
            -
                  version = version_win = '2.8'
         
     | 
| 
       721 
     | 
    
         
            -
                  path = "/path/to/upgradepkg"
         
     | 
| 
       722 
     | 
    
         
            -
                  expect( subject ).to receive( :do_install ).with( the_hosts, {:type=>:upgrade, :set_console_password=>true} )
         
     | 
| 
       723 
     | 
    
         
            -
                  subject.upgrade_pe( path )
         
     | 
| 
       724 
     | 
    
         
            -
                  the_hosts.each do |h|
         
     | 
| 
       725 
     | 
    
         
            -
                    expect( h['pe_installer'] ).to be === 'puppet-enterprise-upgrader'
         
     | 
| 
       726 
     | 
    
         
            -
                  end
         
     | 
| 
       727 
     | 
    
         
            -
                end
         
     | 
| 
       728 
     | 
    
         
            -
             
     | 
| 
       729 
     | 
    
         
            -
                it 'uses standard upgrader for post 3.0 upgrades' do
         
     | 
| 
       730 
     | 
    
         
            -
                  allow( Beaker::Options::PEVersionScraper ).to receive( :load_pe_version ).and_return( '3.1' )
         
     | 
| 
       731 
     | 
    
         
            -
                  allow( Beaker::Options::PEVersionScraper ).to receive( :load_pe_version_win ).and_return( '3.1' )
         
     | 
| 
       732 
     | 
    
         
            -
                  the_hosts = [ hosts[0].dup, hosts[1].dup, hosts[2].dup ]
         
     | 
| 
       733 
     | 
    
         
            -
                  allow( subject ).to receive( :hosts ).and_return( the_hosts )
         
     | 
| 
       734 
     | 
    
         
            -
                  allow( subject ).to receive( :options ).and_return( {} )
         
     | 
| 
       735 
     | 
    
         
            -
                  allow( subject ).to receive( :version_is_less ).with('3.0', '3.4.0').and_return( true )
         
     | 
| 
       736 
     | 
    
         
            -
                  allow( subject ).to receive( :version_is_less ).with('3.1', '3.0').and_return( false )
         
     | 
| 
       737 
     | 
    
         
            -
                  version = version_win = '3.1'
         
     | 
| 
       738 
     | 
    
         
            -
                  path = "/path/to/upgradepkg"
         
     | 
| 
       739 
     | 
    
         
            -
                  expect( subject ).to receive( :do_install ).with( the_hosts, {:type=>:upgrade, :set_console_password=>true} )
         
     | 
| 
       740 
     | 
    
         
            -
                  subject.upgrade_pe( path )
         
     | 
| 
       741 
     | 
    
         
            -
                  the_hosts.each do |h|
         
     | 
| 
       742 
     | 
    
         
            -
                    expect( h['pe_installer'] ).to be nil
         
     | 
| 
       743 
     | 
    
         
            -
                  end
         
     | 
| 
       744 
     | 
    
         
            -
                end
         
     | 
| 
       745 
     | 
    
         
            -
             
     | 
| 
       746 
     | 
    
         
            -
                it 'updates pe_ver post upgrade' do
         
     | 
| 
       747 
     | 
    
         
            -
                  allow( Beaker::Options::PEVersionScraper ).to receive( :load_pe_version ).and_return( '2.8' )
         
     | 
| 
       748 
     | 
    
         
            -
                  allow( Beaker::Options::PEVersionScraper ).to receive( :load_pe_version_win ).and_return( '2.8' )
         
     | 
| 
       749 
     | 
    
         
            -
                  the_hosts = [ hosts[0].dup, hosts[1].dup, hosts[2].dup ]
         
     | 
| 
       750 
     | 
    
         
            -
                  allow( subject ).to receive( :hosts ).and_return( the_hosts )
         
     | 
| 
       751 
     | 
    
         
            -
                  allow( subject ).to receive( :options ).and_return( {} )
         
     | 
| 
       752 
     | 
    
         
            -
                  allow( subject ).to receive( :version_is_less ).with('3.0', '3.4.0').and_return( true )
         
     | 
| 
       753 
     | 
    
         
            -
                  allow( subject ).to receive( :version_is_less ).with('2.8', '3.0').and_return( true )
         
     | 
| 
       754 
     | 
    
         
            -
                  version = version_win = '2.8'
         
     | 
| 
       755 
     | 
    
         
            -
                  path = "/path/to/upgradepkg"
         
     | 
| 
       756 
     | 
    
         
            -
                  expect( subject ).to receive( :do_install ).with( the_hosts, {:type=>:upgrade, :set_console_password=>true} )
         
     | 
| 
       757 
     | 
    
         
            -
                  subject.upgrade_pe( path )
         
     | 
| 
       758 
     | 
    
         
            -
                  the_hosts.each do |h|
         
     | 
| 
       759 
     | 
    
         
            -
                    expect( h['pe_ver'] ).to be === '2.8'
         
     | 
| 
       760 
     | 
    
         
            -
                  end
         
     | 
| 
       761 
     | 
    
         
            -
                end
         
     | 
| 
       762 
     | 
    
         
            -
             
     | 
| 
       763 
     | 
    
         
            -
              end
         
     | 
| 
       764 
     | 
    
         
            -
             
     | 
| 
       765 
     | 
    
         
            -
             
     | 
| 
       766 
     | 
    
         
            -
              def fetch_allows
         
     | 
| 
       767 
     | 
    
         
            -
                allow(subject).to receive( :logger ) { logger }
         
     | 
| 
       768 
     | 
    
         
            -
              end
         
     | 
| 
       769 
     | 
    
         
            -
             
     | 
| 
       770 
     | 
    
         
            -
              describe "#fetch_http_file" do
         
     | 
| 
       771 
     | 
    
         
            -
                let( :logger) { double("Beaker::Logger", :notify => nil , :debug => nil ) }
         
     | 
| 
       772 
     | 
    
         
            -
             
     | 
| 
       773 
     | 
    
         
            -
                before do
         
     | 
| 
       774 
     | 
    
         
            -
                  fetch_allows
         
     | 
| 
       775 
     | 
    
         
            -
                end
         
     | 
| 
       776 
     | 
    
         
            -
             
     | 
| 
       777 
     | 
    
         
            -
                describe "given valid arguments" do
         
     | 
| 
       778 
     | 
    
         
            -
             
     | 
| 
       779 
     | 
    
         
            -
                  it "returns its second and third arguments concatenated." do
         
     | 
| 
       780 
     | 
    
         
            -
                    create_files(['destdir/name'])
         
     | 
| 
       781 
     | 
    
         
            -
                    result = subject.fetch_http_file "http://beaker.tool/", "name", "destdir"
         
     | 
| 
       782 
     | 
    
         
            -
                    expect(result).to eq("destdir/name")
         
     | 
| 
       783 
     | 
    
         
            -
                  end
         
     | 
| 
       784 
     | 
    
         
            -
             
     | 
| 
       785 
     | 
    
         
            -
                end
         
     | 
| 
       786 
     | 
    
         
            -
             
     | 
| 
       787 
     | 
    
         
            -
              end
         
     | 
| 
       788 
     | 
    
         
            -
             
     | 
| 
       789 
     | 
    
         
            -
              describe "#fetch_http_dir" do
         
     | 
| 
       790 
     | 
    
         
            -
                let( :logger) { double("Beaker::Logger", :notify => nil , :debug => nil ) }
         
     | 
| 
       791 
     | 
    
         
            -
                let( :result) { double(:each_line => []) }
         
     | 
| 
       792 
     | 
    
         
            -
             
     | 
| 
       793 
     | 
    
         
            -
                before do
         
     | 
| 
       794 
     | 
    
         
            -
                  fetch_allows
         
     | 
| 
       795 
     | 
    
         
            -
                end
         
     | 
| 
       796 
     | 
    
         
            -
             
     | 
| 
       797 
     | 
    
         
            -
                describe "given valid arguments" do
         
     | 
| 
       798 
     | 
    
         
            -
             
     | 
| 
       799 
     | 
    
         
            -
                  it "returns basename of first argument concatenated to second." do
         
     | 
| 
       800 
     | 
    
         
            -
                    expect(subject).to receive(:`).with(/^wget.*/).ordered { result }
         
     | 
| 
       801 
     | 
    
         
            -
                    expect($?).to receive(:to_i).and_return(0)
         
     | 
| 
       802 
     | 
    
         
            -
                    result = subject.fetch_http_dir "http://beaker.tool/beep", "destdir"
         
     | 
| 
       803 
     | 
    
         
            -
                    expect(result).to eq("destdir/beep")
         
     | 
| 
       804 
     | 
    
         
            -
                  end
         
     | 
| 
       805 
     | 
    
         
            -
             
     | 
| 
       806 
     | 
    
         
            -
                end
         
     | 
| 
       807 
     | 
    
         
            -
             
     | 
| 
       808 
     | 
    
         
            -
              end
         
     | 
| 
       809 
     | 
    
         
            -
             
     | 
| 
       810 
     | 
    
         
            -
              describe "#install_puppetlabs_release_repo" do
         
     | 
| 
       811 
     | 
    
         
            -
                let( :platform ) { Beaker::Platform.new('solaris-7-i386') }
         
     | 
| 
       812 
     | 
    
         
            -
                let( :host ) do
         
     | 
| 
       813 
     | 
    
         
            -
                  FakeHost.create('fakevm', platform.to_s)
         
     | 
| 
       814 
     | 
    
         
            -
                end
         
     | 
| 
       815 
     | 
    
         
            -
             
     | 
| 
       816 
     | 
    
         
            -
                before do
         
     | 
| 
       817 
     | 
    
         
            -
                  allow(subject).to receive(:options) { opts }
         
     | 
| 
       818 
     | 
    
         
            -
                end
         
     | 
| 
       819 
     | 
    
         
            -
             
     | 
| 
       820 
     | 
    
         
            -
                describe "When host is unsupported platform" do
         
     | 
| 
       821 
     | 
    
         
            -
                  let( :platform ) { Beaker::Platform.new('solaris-7-i386') }
         
     | 
| 
       822 
     | 
    
         
            -
             
     | 
| 
       823 
     | 
    
         
            -
                  it "raises an exception." do
         
     | 
| 
       824 
     | 
    
         
            -
                    expect{
         
     | 
| 
       825 
     | 
    
         
            -
                      subject.install_puppetlabs_release_repo host
         
     | 
| 
       826 
     | 
    
         
            -
                    }.to raise_error(RuntimeError, /No repository installation step for/)
         
     | 
| 
       827 
     | 
    
         
            -
                  end
         
     | 
| 
       828 
     | 
    
         
            -
                end
         
     | 
| 
       829 
     | 
    
         
            -
             
     | 
| 
       830 
     | 
    
         
            -
                describe "When host is a debian-like platform" do
         
     | 
| 
       831 
     | 
    
         
            -
                  let( :platform ) { Beaker::Platform.new('debian-7-i386') }
         
     | 
| 
       832 
     | 
    
         
            -
             
     | 
| 
       833 
     | 
    
         
            -
                  it "downloads a deb file, installs, and updates the apt cache." do
         
     | 
| 
       834 
     | 
    
         
            -
                    expect(subject).to receive(:on).with( host, /wget .*/ ).ordered
         
     | 
| 
       835 
     | 
    
         
            -
                    expect(subject).to receive(:on).with( host, /dpkg .*/ ).ordered
         
     | 
| 
       836 
     | 
    
         
            -
                    expect(subject).to receive(:on).with( host, "apt-get update" ).ordered
         
     | 
| 
       837 
     | 
    
         
            -
                    subject.install_puppetlabs_release_repo host
         
     | 
| 
       838 
     | 
    
         
            -
                  end
         
     | 
| 
       839 
     | 
    
         
            -
             
     | 
| 
       840 
     | 
    
         
            -
                end
         
     | 
| 
       841 
     | 
    
         
            -
             
     | 
| 
       842 
     | 
    
         
            -
                describe "When host is a redhat-like platform" do
         
     | 
| 
       843 
     | 
    
         
            -
                  let( :platform ) { Beaker::Platform.new('el-7-i386') }
         
     | 
| 
       844 
     | 
    
         
            -
             
     | 
| 
       845 
     | 
    
         
            -
                  it "installs an rpm" do
         
     | 
| 
       846 
     | 
    
         
            -
                    expect(subject).to receive(:on).with( host, /rpm .*/ ).ordered
         
     | 
| 
       847 
     | 
    
         
            -
                    subject.install_puppetlabs_release_repo host
         
     | 
| 
       848 
     | 
    
         
            -
                  end
         
     | 
| 
       849 
     | 
    
         
            -
             
     | 
| 
       850 
     | 
    
         
            -
                end
         
     | 
| 
       851 
     | 
    
         
            -
             
     | 
| 
       852 
     | 
    
         
            -
              end
         
     | 
| 
       853 
     | 
    
         
            -
             
     | 
| 
       854 
     | 
    
         
            -
              RSpec.shared_examples "install-dev-repo" do
         
     | 
| 
       855 
     | 
    
         
            -
                let( :repo_config ) { "repoconfig" }
         
     | 
| 
       856 
     | 
    
         
            -
                let( :repo_dir ) { "repodir" }
         
     | 
| 
       857 
     | 
    
         
            -
             
     | 
| 
       858 
     | 
    
         
            -
                before do
         
     | 
| 
       859 
     | 
    
         
            -
                  allow(subject).to receive(:fetch_http_file) { repo_config }
         
     | 
| 
       860 
     | 
    
         
            -
                  allow(subject).to receive(:fetch_http_dir) { repo_dir }
         
     | 
| 
       861 
     | 
    
         
            -
                  allow(subject).to receive(:on).with(host, "apt-get update") { }
         
     | 
| 
       862 
     | 
    
         
            -
                  allow(subject).to receive(:options) { opts }
         
     | 
| 
       863 
     | 
    
         
            -
                  allow(subject).to receive(:link_exists?) { true }
         
     | 
| 
       864 
     | 
    
         
            -
                end
         
     | 
| 
       865 
     | 
    
         
            -
             
     | 
| 
       866 
     | 
    
         
            -
                it "scp's files to SUT then modifies them with find-and-sed 2-hit combo" do
         
     | 
| 
       867 
     | 
    
         
            -
                  expect(subject).to receive(:on).with( host, /^mkdir -p .*$/ ).ordered
         
     | 
| 
       868 
     | 
    
         
            -
                  expect(subject).to receive(:scp_to).with( host, repo_config, /.*/ ).ordered
         
     | 
| 
       869 
     | 
    
         
            -
                  expect(subject).to receive(:scp_to).with( host, repo_dir, /.*/ ).ordered
         
     | 
| 
       870 
     | 
    
         
            -
                  expect(subject).to receive(:on).with( host, /^find .* sed .*/ ).ordered
         
     | 
| 
       871 
     | 
    
         
            -
                  subject.install_puppetlabs_dev_repo host, package_name, package_version
         
     | 
| 
       872 
     | 
    
         
            -
                end
         
     | 
| 
       873 
     | 
    
         
            -
             
     | 
| 
       874 
     | 
    
         
            -
              end
         
     | 
| 
       875 
     | 
    
         
            -
             
     | 
| 
       876 
     | 
    
         
            -
              describe "#install_puppetlabs_dev_repo" do
         
     | 
| 
       877 
     | 
    
         
            -
                let( :package_name ) { "puppet" }
         
     | 
| 
       878 
     | 
    
         
            -
                let( :package_version ) { "7.5.6" }
         
     | 
| 
       879 
     | 
    
         
            -
                let( :host ) do
         
     | 
| 
       880 
     | 
    
         
            -
                  FakeHost.create('fakvm', platform.to_s, opts)
         
     | 
| 
       881 
     | 
    
         
            -
                end
         
     | 
| 
       882 
     | 
    
         
            -
             
     | 
| 
       883 
     | 
    
         
            -
                describe "When host is unsupported platform" do
         
     | 
| 
       884 
     | 
    
         
            -
                  let( :platform ) { Beaker::Platform.new('solaris-7-i386') }
         
     | 
| 
       885 
     | 
    
         
            -
             
     | 
| 
       886 
     | 
    
         
            -
                  it "raises an exception." do
         
     | 
| 
       887 
     | 
    
         
            -
                    expect(subject).to receive(:on).with( host, /^mkdir -p .*$/ ).ordered
         
     | 
| 
       888 
     | 
    
         
            -
                    allow(subject).to receive(:options) { opts }
         
     | 
| 
       889 
     | 
    
         
            -
                    expect{
         
     | 
| 
       890 
     | 
    
         
            -
                      subject.install_puppetlabs_dev_repo host, package_name, package_version
         
     | 
| 
       891 
     | 
    
         
            -
                    }.to raise_error(RuntimeError, /No repository installation step for/)
         
     | 
| 
       892 
     | 
    
         
            -
                  end
         
     | 
| 
       893 
     | 
    
         
            -
             
     | 
| 
       894 
     | 
    
         
            -
                end
         
     | 
| 
       895 
     | 
    
         
            -
             
     | 
| 
       896 
     | 
    
         
            -
                describe "When host is a debian-like platform" do
         
     | 
| 
       897 
     | 
    
         
            -
                  let( :platform ) { Beaker::Platform.new('debian-7-i386') }
         
     | 
| 
       898 
     | 
    
         
            -
                  include_examples "install-dev-repo"
         
     | 
| 
       899 
     | 
    
         
            -
                end
         
     | 
| 
       900 
     | 
    
         
            -
             
     | 
| 
       901 
     | 
    
         
            -
                describe "When host is a redhat-like platform" do
         
     | 
| 
       902 
     | 
    
         
            -
                  let( :platform ) { Beaker::Platform.new('el-7-i386') }
         
     | 
| 
       903 
     | 
    
         
            -
                  include_examples "install-dev-repo"
         
     | 
| 
       904 
     | 
    
         
            -
                end
         
     | 
| 
       905 
     | 
    
         
            -
             
     | 
| 
       906 
     | 
    
         
            -
              end
         
     | 
| 
       907 
     | 
    
         
            -
             
     | 
| 
       908 
     | 
    
         
            -
              describe '#install_packages_from_local_dev_repo' do
         
     | 
| 
       909 
     | 
    
         
            -
                let( :package_name ) { 'puppet-agent' }
         
     | 
| 
       910 
     | 
    
         
            -
                let( :platform ) { @platform || 'other' }
         
     | 
| 
       911 
     | 
    
         
            -
                let( :host ) do
         
     | 
| 
       912 
     | 
    
         
            -
                  FakeHost.create('fakvm', platform, opts)
         
     | 
| 
       913 
     | 
    
         
            -
                end
         
     | 
| 
       914 
     | 
    
         
            -
             
     | 
| 
       915 
     | 
    
         
            -
                it 'sets the find command correctly for el-based systems' do
         
     | 
| 
       916 
     | 
    
         
            -
                  @platform = 'el-1-3'
         
     | 
| 
       917 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( host, /\*\.rpm.+rpm\s-ivh/ )
         
     | 
| 
       918 
     | 
    
         
            -
                  subject.install_packages_from_local_dev_repo( host, package_name )
         
     | 
| 
       919 
     | 
    
         
            -
                end
         
     | 
| 
       920 
     | 
    
         
            -
             
     | 
| 
       921 
     | 
    
         
            -
                it 'sets the find command correctly for debian-based systems' do
         
     | 
| 
       922 
     | 
    
         
            -
                  @platform = 'debian-1-3'
         
     | 
| 
       923 
     | 
    
         
            -
                  expect( subject ).to receive( :on ).with( host, /\*\.deb.+dpkg\s-i/ )
         
     | 
| 
       924 
     | 
    
         
            -
                  subject.install_packages_from_local_dev_repo( host, package_name )
         
     | 
| 
       925 
     | 
    
         
            -
                end
         
     | 
| 
       926 
     | 
    
         
            -
             
     | 
| 
       927 
     | 
    
         
            -
                it 'fails correctly for systems not accounted for' do
         
     | 
| 
       928 
     | 
    
         
            -
                  @platform = 'eos-1-3'
         
     | 
| 
       929 
     | 
    
         
            -
                  expect{ subject.install_packages_from_local_dev_repo( host, package_name ) }.to raise_error RuntimeError
         
     | 
| 
       930 
     | 
    
         
            -
                end
         
     | 
| 
       931 
     | 
    
         
            -
             
     | 
| 
       932 
     | 
    
         
            -
              end
         
     | 
| 
       933 
     | 
    
         
            -
             
     | 
| 
       934 
     | 
    
         
            -
              describe '#install_puppetagent_dev_repo' do
         
     | 
| 
       935 
     | 
    
         
            -
             
     | 
| 
       936 
     | 
    
         
            -
                it 'raises an exception when host platform is unsupported' do
         
     | 
| 
       937 
     | 
    
         
            -
                  platform = Object.new()
         
     | 
| 
       938 
     | 
    
         
            -
                  allow(platform).to receive(:to_array) { ['ptan', '5', 'x4']}
         
     | 
| 
       939 
     | 
    
         
            -
                  host = basic_hosts.first
         
     | 
| 
       940 
     | 
    
         
            -
                  host['platform'] = platform
         
     | 
| 
       941 
     | 
    
         
            -
                  opts = { :version => '0.1.0' }
         
     | 
| 
       942 
     | 
    
         
            -
                  allow( subject ).to receive( :options ).and_return( {} )
         
     | 
| 
       943 
     | 
    
         
            -
             
     | 
| 
       944 
     | 
    
         
            -
                  expect{
         
     | 
| 
       945 
     | 
    
         
            -
                    subject.install_puppetagent_dev_repo( host, opts )
         
     | 
| 
       946 
     | 
    
         
            -
                  }.to raise_error(RuntimeError, /No repository installation step for/)
         
     | 
| 
       947 
     | 
    
         
            -
                end
         
     | 
| 
       948 
     | 
    
         
            -
             
     | 
| 
       949 
     | 
    
         
            -
                it 'runs the correct install for el-based platforms' do
         
     | 
| 
       950 
     | 
    
         
            -
                  platform = Object.new()
         
     | 
| 
       951 
     | 
    
         
            -
                  allow(platform).to receive(:to_array) { ['el', '5', 'x4']}
         
     | 
| 
       952 
     | 
    
         
            -
                  host = basic_hosts.first
         
     | 
| 
       953 
     | 
    
         
            -
                  host['platform'] = platform
         
     | 
| 
       954 
     | 
    
         
            -
                  opts = { :version => '0.1.0' }
         
     | 
| 
       955 
     | 
    
         
            -
                  allow( subject ).to receive( :options ).and_return( {} )
         
     | 
| 
       956 
     | 
    
         
            -
             
     | 
| 
       957 
     | 
    
         
            -
                  expect(subject).to receive(:fetch_http_file).once.with(/\/el\//, /-agent-/, /el/)
         
     | 
| 
       958 
     | 
    
         
            -
                  expect(subject).to receive(:scp_to).once.with(host, /-agent-/, "/root")
         
     | 
| 
       959 
     | 
    
         
            -
                  expect(subject).to receive(:on).once.with(host, /rpm\ -ivh/)
         
     | 
| 
       960 
     | 
    
         
            -
             
     | 
| 
       961 
     | 
    
         
            -
                  subject.install_puppetagent_dev_repo( host, opts )
         
     | 
| 
       962 
     | 
    
         
            -
                end
         
     | 
| 
       963 
     | 
    
         
            -
             
     | 
| 
       964 
     | 
    
         
            -
                it 'runs the correct install for debian-based platforms' do
         
     | 
| 
       965 
     | 
    
         
            -
                  platform = Object.new()
         
     | 
| 
       966 
     | 
    
         
            -
                  allow(platform).to receive(:to_array) { ['debian', '5', 'x4']}
         
     | 
| 
       967 
     | 
    
         
            -
                  host = basic_hosts.first
         
     | 
| 
       968 
     | 
    
         
            -
                  host['platform'] = platform
         
     | 
| 
       969 
     | 
    
         
            -
                  opts = { :version => '0.1.0' }
         
     | 
| 
       970 
     | 
    
         
            -
                  allow( subject ).to receive( :options ).and_return( {} )
         
     | 
| 
       971 
     | 
    
         
            -
             
     | 
| 
       972 
     | 
    
         
            -
                  expect(subject).to receive(:fetch_http_file).once.with(/\/deb\//, /-agent_/, /deb/)
         
     | 
| 
       973 
     | 
    
         
            -
                  expect(subject).to receive(:scp_to).once.with(host, /-agent_/, "/root")
         
     | 
| 
       974 
     | 
    
         
            -
                  expect(subject).to receive(:on).ordered.with(host, /dpkg\ -i\ --force-all/)
         
     | 
| 
       975 
     | 
    
         
            -
                  expect(subject).to receive(:on).ordered.with(host, /apt-get\ update/)
         
     | 
| 
       976 
     | 
    
         
            -
             
     | 
| 
       977 
     | 
    
         
            -
                  subject.install_puppetagent_dev_repo( host, opts )
         
     | 
| 
       978 
     | 
    
         
            -
                end
         
     | 
| 
       979 
     | 
    
         
            -
             
     | 
| 
       980 
     | 
    
         
            -
                it 'runs the correct install for windows platforms' do
         
     | 
| 
       981 
     | 
    
         
            -
                  platform = Object.new()
         
     | 
| 
       982 
     | 
    
         
            -
                  allow(platform).to receive(:to_array) { ['windows', '5', 'x64']}
         
     | 
| 
       983 
     | 
    
         
            -
                  host = basic_hosts.first
         
     | 
| 
       984 
     | 
    
         
            -
                  host['platform'] = platform
         
     | 
| 
       985 
     | 
    
         
            -
                  opts = { :version => '0.1.0' }
         
     | 
| 
       986 
     | 
    
         
            -
                  allow( subject ).to receive( :options ).and_return( {} )
         
     | 
| 
       987 
     | 
    
         
            -
                  mock_echo = Object.new()
         
     | 
| 
       988 
     | 
    
         
            -
                  allow( mock_echo ).to receive( :raw_output ).and_return( " " )
         
     | 
| 
       989 
     | 
    
         
            -
             
     | 
| 
       990 
     | 
    
         
            -
                  expect(subject).to receive(:fetch_http_file).once.with(/\/windows$/, 'puppet-agent-x64.msi', /\/windows$/)
         
     | 
| 
       991 
     | 
    
         
            -
                  expect(subject).to receive(:scp_to).once.with(host, /\/puppet-agent-x64.msi$/, /cygpath/)
         
     | 
| 
       992 
     | 
    
         
            -
                  expect(subject).to receive(:on).ordered.with(host, /echo/).and_return(mock_echo)
         
     | 
| 
       993 
     | 
    
         
            -
                  expect(subject).to receive(:on).ordered.with(host, anything)
         
     | 
| 
       994 
     | 
    
         
            -
             
     | 
| 
       995 
     | 
    
         
            -
                  subject.install_puppetagent_dev_repo( host, opts )
         
     | 
| 
       996 
     | 
    
         
            -
                end
         
     | 
| 
       997 
     | 
    
         
            -
             
     | 
| 
       998 
     | 
    
         
            -
                it 'allows you to override the local copy directory' do
         
     | 
| 
       999 
     | 
    
         
            -
                  platform = Object.new()
         
     | 
| 
       1000 
     | 
    
         
            -
                  allow(platform).to receive(:to_array) { ['debian', '5', 'x4']}
         
     | 
| 
       1001 
     | 
    
         
            -
                  host = basic_hosts.first
         
     | 
| 
       1002 
     | 
    
         
            -
                  host['platform'] = platform
         
     | 
| 
       1003 
     | 
    
         
            -
                  opts = { :version => '0.1.0', :copy_base_local => 'face' }
         
     | 
| 
       1004 
     | 
    
         
            -
                  allow( subject ).to receive( :options ).and_return( {} )
         
     | 
| 
       1005 
     | 
    
         
            -
             
     | 
| 
       1006 
     | 
    
         
            -
                  expect(subject).to receive(:fetch_http_file).once.with(/\/deb\//, /-agent_/, /face/)
         
     | 
| 
       1007 
     | 
    
         
            -
                  expect(subject).to receive(:scp_to).once.with(host, /face/, "/root")
         
     | 
| 
       1008 
     | 
    
         
            -
                  expect(subject).to receive(:on).ordered.with(host, /dpkg\ -i\ --force-all/)
         
     | 
| 
       1009 
     | 
    
         
            -
                  expect(subject).to receive(:on).ordered.with(host, /apt-get\ update/)
         
     | 
| 
       1010 
     | 
    
         
            -
             
     | 
| 
       1011 
     | 
    
         
            -
                  subject.install_puppetagent_dev_repo( host, opts )
         
     | 
| 
       1012 
     | 
    
         
            -
                end
         
     | 
| 
       1013 
     | 
    
         
            -
             
     | 
| 
       1014 
     | 
    
         
            -
                it 'allows you to override the external copy directory' do
         
     | 
| 
       1015 
     | 
    
         
            -
                  platform = Object.new()
         
     | 
| 
       1016 
     | 
    
         
            -
                  allow(platform).to receive(:to_array) { ['debian', '5', 'x4']}
         
     | 
| 
       1017 
     | 
    
         
            -
                  host = basic_hosts.first
         
     | 
| 
       1018 
     | 
    
         
            -
                  host['platform'] = platform
         
     | 
| 
       1019 
     | 
    
         
            -
                  opts = { :version => '0.1.0', :copy_dir_external => 'muppetsB' }
         
     | 
| 
       1020 
     | 
    
         
            -
                  allow( subject ).to receive( :options ).and_return( {} )
         
     | 
| 
       1021 
     | 
    
         
            -
             
     | 
| 
       1022 
     | 
    
         
            -
                  expect(subject).to receive(:fetch_http_file).once.with(/\/deb\//, /-agent_/, /deb/)
         
     | 
| 
       1023 
     | 
    
         
            -
                  expect(subject).to receive(:scp_to).once.with(host, /-agent_/, /muppetsB/)
         
     | 
| 
       1024 
     | 
    
         
            -
                  expect(subject).to receive(:on).ordered.with(host, /dpkg\ -i\ --force-all/)
         
     | 
| 
       1025 
     | 
    
         
            -
                  expect(subject).to receive(:on).ordered.with(host, /apt-get\ update/)
         
     | 
| 
       1026 
     | 
    
         
            -
             
     | 
| 
       1027 
     | 
    
         
            -
                  subject.install_puppetagent_dev_repo( host, opts )
         
     | 
| 
       1028 
     | 
    
         
            -
                end
         
     | 
| 
       1029 
     | 
    
         
            -
             
     | 
| 
       1030 
     | 
    
         
            -
              end
         
     | 
| 
       1031 
     | 
    
         
            -
             
     | 
| 
       1032 
     | 
    
         
            -
              describe '#install_dev_puppet_module_on' do
         
     | 
| 
       1033 
     | 
    
         
            -
                context 'having set allow( a ).to receive forge' do
         
     | 
| 
       1034 
     | 
    
         
            -
                  it 'stubs the forge on the host' do
         
     | 
| 
       1035 
     | 
    
         
            -
                    master = hosts.first
         
     | 
| 
       1036 
     | 
    
         
            -
                    allow( subject ).to receive( :options ).and_return( {:forge_host => 'ahost.com'} )
         
     | 
| 
       1037 
     | 
    
         
            -
             
     | 
| 
       1038 
     | 
    
         
            -
                    expect( subject ).to receive( :with_forge_stubbed_on )
         
     | 
| 
       1039 
     | 
    
         
            -
             
     | 
| 
       1040 
     | 
    
         
            -
                    subject.install_dev_puppet_module_on( master, {:source => '/module', :module_name => 'test'} )
         
     | 
| 
       1041 
     | 
    
         
            -
                  end
         
     | 
| 
       1042 
     | 
    
         
            -
             
     | 
| 
       1043 
     | 
    
         
            -
                  it 'installs via #install_puppet_module_via_pmt' do
         
     | 
| 
       1044 
     | 
    
         
            -
                    master = hosts.first
         
     | 
| 
       1045 
     | 
    
         
            -
                    allow( subject ).to receive( :options ).and_return( {:forge_host => 'ahost.com'} )
         
     | 
| 
       1046 
     | 
    
         
            -
                    allow( subject ).to receive( :with_forge_stubbed_on ).and_yield
         
     | 
| 
       1047 
     | 
    
         
            -
             
     | 
| 
       1048 
     | 
    
         
            -
                    expect( subject ).to receive( :install_puppet_module_via_pmt_on )
         
     | 
| 
       1049 
     | 
    
         
            -
             
     | 
| 
       1050 
     | 
    
         
            -
                    subject.install_dev_puppet_module_on( master, {:source => '/module', :module_name => 'test'} )
         
     | 
| 
       1051 
     | 
    
         
            -
                  end
         
     | 
| 
       1052 
     | 
    
         
            -
                end
         
     | 
| 
       1053 
     | 
    
         
            -
                context 'without allow( a ).to receive forge (default)' do
         
     | 
| 
       1054 
     | 
    
         
            -
                  it 'calls copy_module_to to get the module on the SUT' do
         
     | 
| 
       1055 
     | 
    
         
            -
                    master = hosts.first
         
     | 
| 
       1056 
     | 
    
         
            -
                    allow( subject ).to receive( :options ).and_return( {} )
         
     | 
| 
       1057 
     | 
    
         
            -
             
     | 
| 
       1058 
     | 
    
         
            -
                    expect( subject ).to receive( :copy_module_to )
         
     | 
| 
       1059 
     | 
    
         
            -
             
     | 
| 
       1060 
     | 
    
         
            -
                    subject.install_dev_puppet_module_on( master, {:source => '/module', :module_name => 'test'} )
         
     | 
| 
       1061 
     | 
    
         
            -
                  end
         
     | 
| 
       1062 
     | 
    
         
            -
                end
         
     | 
| 
       1063 
     | 
    
         
            -
              end
         
     | 
| 
       1064 
     | 
    
         
            -
             
     | 
| 
       1065 
     | 
    
         
            -
              describe '#install_dev_puppet_module' do
         
     | 
| 
       1066 
     | 
    
         
            -
                it 'delegates to #install_dev_puppet_module_on with the hosts list' do
         
     | 
| 
       1067 
     | 
    
         
            -
                  allow( subject ).to receive( :hosts ).and_return( hosts )
         
     | 
| 
       1068 
     | 
    
         
            -
                  allow( subject ).to receive( :options ).and_return( {} )
         
     | 
| 
       1069 
     | 
    
         
            -
             
     | 
| 
       1070 
     | 
    
         
            -
                  hosts.each do |host|
         
     | 
| 
       1071 
     | 
    
         
            -
                    expect( subject ).to receive( :install_dev_puppet_module_on ).
         
     | 
| 
       1072 
     | 
    
         
            -
                      with( host, {:source => '/module', :module_name => 'test'})
         
     | 
| 
       1073 
     | 
    
         
            -
                  end
         
     | 
| 
       1074 
     | 
    
         
            -
             
     | 
| 
       1075 
     | 
    
         
            -
                  subject.install_dev_puppet_module( {:source => '/module', :module_name => 'test'} )
         
     | 
| 
       1076 
     | 
    
         
            -
                end
         
     | 
| 
       1077 
     | 
    
         
            -
              end
         
     | 
| 
       1078 
     | 
    
         
            -
             
     | 
| 
       1079 
     | 
    
         
            -
              describe '#install_puppet_module_via_pmt_on' do
         
     | 
| 
       1080 
     | 
    
         
            -
                it 'installs module via puppet module tool' do
         
     | 
| 
       1081 
     | 
    
         
            -
                  allow( subject ).to receive( :hosts ).and_return( hosts )
         
     | 
| 
       1082 
     | 
    
         
            -
                  master = hosts.first
         
     | 
| 
       1083 
     | 
    
         
            -
             
     | 
| 
       1084 
     | 
    
         
            -
             
     | 
| 
       1085 
     | 
    
         
            -
                  expect( subject ).to receive( :puppet ).with('module install test ', {}).once
         
     | 
| 
       1086 
     | 
    
         
            -
             
     | 
| 
       1087 
     | 
    
         
            -
                  subject.install_puppet_module_via_pmt_on( master, {:module_name => 'test'} )
         
     | 
| 
       1088 
     | 
    
         
            -
                end
         
     | 
| 
       1089 
     | 
    
         
            -
             
     | 
| 
       1090 
     | 
    
         
            -
                it 'takes the trace option and passes it down correctly' do
         
     | 
| 
       1091 
     | 
    
         
            -
                  allow( subject ).to receive( :hosts ).and_return( hosts )
         
     | 
| 
       1092 
     | 
    
         
            -
                  master = hosts.first
         
     | 
| 
       1093 
     | 
    
         
            -
                  trace_opts = { :trace => nil }
         
     | 
| 
       1094 
     | 
    
         
            -
                  master['default_module_install_opts'] = trace_opts
         
     | 
| 
       1095 
     | 
    
         
            -
             
     | 
| 
       1096 
     | 
    
         
            -
                  expect( subject ).to receive( :puppet ).with('module install test ', trace_opts).once
         
     | 
| 
       1097 
     | 
    
         
            -
             
     | 
| 
       1098 
     | 
    
         
            -
                  subject.install_puppet_module_via_pmt_on( master, {:module_name => 'test'} )
         
     | 
| 
       1099 
     | 
    
         
            -
                end
         
     | 
| 
       1100 
     | 
    
         
            -
              end
         
     | 
| 
       1101 
     | 
    
         
            -
             
     | 
| 
       1102 
     | 
    
         
            -
              describe '#install_puppet_module_via_pmt' do
         
     | 
| 
       1103 
     | 
    
         
            -
                it 'delegates to #install_puppet_module_via_pmt with the hosts list' do
         
     | 
| 
       1104 
     | 
    
         
            -
                  allow( subject ).to receive( :hosts ).and_return( hosts )
         
     | 
| 
       1105 
     | 
    
         
            -
             
     | 
| 
       1106 
     | 
    
         
            -
                  expect( subject ).to receive( :install_puppet_module_via_pmt_on ).with( hosts, {:source => '/module', :module_name => 'test'}).once
         
     | 
| 
       1107 
     | 
    
         
            -
             
     | 
| 
       1108 
     | 
    
         
            -
                  subject.install_puppet_module_via_pmt( {:source => '/module', :module_name => 'test'} )
         
     | 
| 
       1109 
     | 
    
         
            -
                end
         
     | 
| 
       1110 
     | 
    
         
            -
              end
         
     | 
| 
       1111 
     | 
    
         
            -
             
     | 
| 
       1112 
     | 
    
         
            -
              describe 'copy_module_to' do
         
     | 
| 
       1113 
     | 
    
         
            -
                let(:ignore_list) { Beaker::DSL::InstallUtils::PUPPET_MODULE_INSTALL_IGNORE }
         
     | 
| 
       1114 
     | 
    
         
            -
                let(:source){ File.expand_path('./')}
         
     | 
| 
       1115 
     | 
    
         
            -
                let(:target){'/etc/puppetlabs/puppet/modules/testmodule'}
         
     | 
| 
       1116 
     | 
    
         
            -
                let(:module_parse_name){'testmodule'}
         
     | 
| 
       1117 
     | 
    
         
            -
             
     | 
| 
       1118 
     | 
    
         
            -
                shared_examples 'copy_module_to' do  |opts|
         
     | 
| 
       1119 
     | 
    
         
            -
                  it{
         
     | 
| 
       1120 
     | 
    
         
            -
                    host = double("host")
         
     | 
| 
       1121 
     | 
    
         
            -
                    allow( host ).to receive(:[]).with('distmoduledir').and_return('/etc/puppetlabs/puppet/modules')
         
     | 
| 
       1122 
     | 
    
         
            -
                    result = double
         
     | 
| 
       1123 
     | 
    
         
            -
                    stdout = target.split('/')[0..-2].join('/') + "\n"
         
     | 
| 
       1124 
     | 
    
         
            -
                    allow( result ).to receive(:stdout).and_return( stdout )
         
     | 
| 
       1125 
     | 
    
         
            -
                    expect( subject ).to receive(:on).with(host, "echo #{File.dirname(target)}" ).and_return(result )
         
     | 
| 
       1126 
     | 
    
         
            -
                    allow( Dir ).to receive(:getpwd).and_return(source)
         
     | 
| 
       1127 
     | 
    
         
            -
             
     | 
| 
       1128 
     | 
    
         
            -
                    allow( subject ).to receive(:parse_for_moduleroot).and_return(source)
         
     | 
| 
       1129 
     | 
    
         
            -
                    if module_parse_name
         
     | 
| 
       1130 
     | 
    
         
            -
                      allow( subject ).to receive(:parse_for_modulename).with(any_args()).and_return(module_parse_name)
         
     | 
| 
       1131 
     | 
    
         
            -
                    else
         
     | 
| 
       1132 
     | 
    
         
            -
                      expect( subject).to_not receive(:parse_for_modulename)
         
     | 
| 
       1133 
     | 
    
         
            -
                    end
         
     | 
| 
       1134 
     | 
    
         
            -
             
     | 
| 
       1135 
     | 
    
         
            -
                    allow( File ).to receive(:exists?).with(any_args()).and_return(false)
         
     | 
| 
       1136 
     | 
    
         
            -
                    allow( File ).to receive(:directory?).with(any_args()).and_return(false)
         
     | 
| 
       1137 
     | 
    
         
            -
             
     | 
| 
       1138 
     | 
    
         
            -
                    expect( subject ).to receive(:scp_to).with(host,source, File.dirname(target), {:ignore => ignore_list})
         
     | 
| 
       1139 
     | 
    
         
            -
                    expect( subject ).to receive(:on).with(host, "mv #{File.join(File.dirname(target), File.basename(source))} #{target}")
         
     | 
| 
       1140 
     | 
    
         
            -
                    if opts.nil?
         
     | 
| 
       1141 
     | 
    
         
            -
                      subject.copy_module_to(host)
         
     | 
| 
       1142 
     | 
    
         
            -
                    else
         
     | 
| 
       1143 
     | 
    
         
            -
                      subject.copy_module_to(host,opts)
         
     | 
| 
       1144 
     | 
    
         
            -
                    end
         
     | 
| 
       1145 
     | 
    
         
            -
                  }
         
     | 
| 
       1146 
     | 
    
         
            -
                end
         
     | 
| 
       1147 
     | 
    
         
            -
             
     | 
| 
       1148 
     | 
    
         
            -
                describe 'should call scp with the correct info, with only providing host' do
         
     | 
| 
       1149 
     | 
    
         
            -
                  let(:target){'/etc/puppetlabs/puppet/modules/testmodule'}
         
     | 
| 
       1150 
     | 
    
         
            -
             
     | 
| 
       1151 
     | 
    
         
            -
                  it_should_behave_like 'copy_module_to', :module_name => 'testmodule'
         
     | 
| 
       1152 
     | 
    
         
            -
                end
         
     | 
| 
       1153 
     | 
    
         
            -
             
     | 
| 
       1154 
     | 
    
         
            -
                describe 'should call scp with the correct info, when specifying the modulename' do
         
     | 
| 
       1155 
     | 
    
         
            -
                  let(:target){'/etc/puppetlabs/puppet/modules/bogusmodule'}
         
     | 
| 
       1156 
     | 
    
         
            -
                  let(:module_parse_name){false}
         
     | 
| 
       1157 
     | 
    
         
            -
                  it_should_behave_like 'copy_module_to', {:module_name =>'bogusmodule'}
         
     | 
| 
       1158 
     | 
    
         
            -
                end
         
     | 
| 
       1159 
     | 
    
         
            -
             
     | 
| 
       1160 
     | 
    
         
            -
                describe 'should call scp with the correct info, when specifying the target to a different path' do
         
     | 
| 
       1161 
     | 
    
         
            -
                  target = '/opt/shared/puppet/modules'
         
     | 
| 
       1162 
     | 
    
         
            -
                  let(:target){"#{target}/testmodule"}
         
     | 
| 
       1163 
     | 
    
         
            -
                  it_should_behave_like 'copy_module_to', {:target_module_path => target, :module_name => 'testmodule'}
         
     | 
| 
       1164 
     | 
    
         
            -
                end
         
     | 
| 
       1165 
     | 
    
         
            -
             
     | 
| 
       1166 
     | 
    
         
            -
                describe 'should accept multiple hosts when' do
         
     | 
| 
       1167 
     | 
    
         
            -
                  it 'used in a default manner' do
         
     | 
| 
       1168 
     | 
    
         
            -
                    allow( subject ).to receive( :build_ignore_list ).and_return( [] )
         
     | 
| 
       1169 
     | 
    
         
            -
                    allow( subject ).to receive( :parse_for_modulename ).and_return( [nil, 'modulename'] )
         
     | 
| 
       1170 
     | 
    
         
            -
                    allow( subject ).to receive( :on ).and_return( double.as_null_object )
         
     | 
| 
       1171 
     | 
    
         
            -
                    hosts = [{}, {}]
         
     | 
| 
       1172 
     | 
    
         
            -
             
     | 
| 
       1173 
     | 
    
         
            -
                    expect( subject ).to receive( :scp_to ).twice
         
     | 
| 
       1174 
     | 
    
         
            -
                    subject.copy_module_to( hosts )
         
     | 
| 
       1175 
     | 
    
         
            -
                  end
         
     | 
| 
       1176 
     | 
    
         
            -
                end
         
     | 
| 
       1177 
     | 
    
         
            -
              end
         
     | 
| 
       1178 
     | 
    
         
            -
             
     | 
| 
       1179 
     | 
    
         
            -
              describe 'split_author_modulename' do
         
     | 
| 
       1180 
     | 
    
         
            -
                it 'should return a correct modulename' do
         
     | 
| 
       1181 
     | 
    
         
            -
                  result =  subject.split_author_modulename('myname-test_43_module')
         
     | 
| 
       1182 
     | 
    
         
            -
                  expect(result[:author]).to eq('myname')
         
     | 
| 
       1183 
     | 
    
         
            -
                  expect(result[:module]).to eq('test_43_module')
         
     | 
| 
       1184 
     | 
    
         
            -
                end
         
     | 
| 
       1185 
     | 
    
         
            -
              end
         
     | 
| 
       1186 
     | 
    
         
            -
             
     | 
| 
       1187 
     | 
    
         
            -
              describe 'get_module_name' do
         
     | 
| 
       1188 
     | 
    
         
            -
                it 'should return an array of author and modulename' do
         
     | 
| 
       1189 
     | 
    
         
            -
                  expect(subject.get_module_name('myname-test_43_module')).to eq(['myname', 'test_43_module'])
         
     | 
| 
       1190 
     | 
    
         
            -
                end
         
     | 
| 
       1191 
     | 
    
         
            -
                it 'should return nil for invalid names' do
         
     | 
| 
       1192 
     | 
    
         
            -
                  expect(subject.get_module_name('myname-')).to eq(nil)
         
     | 
| 
       1193 
     | 
    
         
            -
                end
         
     | 
| 
       1194 
     | 
    
         
            -
              end
         
     | 
| 
       1195 
     | 
    
         
            -
             
     | 
| 
       1196 
     | 
    
         
            -
              describe 'parse_for_modulename' do
         
     | 
| 
       1197 
     | 
    
         
            -
                directory = '/testfilepath/myname-testmodule'
         
     | 
| 
       1198 
     | 
    
         
            -
                it 'should return name from metadata.json' do
         
     | 
| 
       1199 
     | 
    
         
            -
                  allow( File ).to receive(:exists?).with("#{directory}/metadata.json").and_return(true)
         
     | 
| 
       1200 
     | 
    
         
            -
                  allow( File ).to receive(:read).with("#{directory}/metadata.json").and_return(" {\"name\":\"myname-testmodule\"} ")
         
     | 
| 
       1201 
     | 
    
         
            -
                  expect( subject.logger ).to receive(:debug).with("Attempting to parse Modulename from metadata.json")
         
     | 
| 
       1202 
     | 
    
         
            -
                  expect(subject.logger).to_not receive(:debug).with('Unable to determine name, returning null')
         
     | 
| 
       1203 
     | 
    
         
            -
                  expect(subject.parse_for_modulename(directory)).to eq(['myname', 'testmodule'])
         
     | 
| 
       1204 
     | 
    
         
            -
                end
         
     | 
| 
       1205 
     | 
    
         
            -
                it 'should return name from Modulefile' do
         
     | 
| 
       1206 
     | 
    
         
            -
                  allow( File ).to receive(:exists?).with("#{directory}/metadata.json").and_return(false)
         
     | 
| 
       1207 
     | 
    
         
            -
                  allow( File ).to receive(:exists?).with("#{directory}/Modulefile").and_return(true)
         
     | 
| 
       1208 
     | 
    
         
            -
                  allow( File ).to receive(:read).with("#{directory}/Modulefile").and_return("name    'myname-testmodule'  \nauthor   'myname'")
         
     | 
| 
       1209 
     | 
    
         
            -
                  expect( subject.logger ).to receive(:debug).with("Attempting to parse Modulename from Modulefile")
         
     | 
| 
       1210 
     | 
    
         
            -
                  expect(subject.logger).to_not receive(:debug).with("Unable to determine name, returning null")
         
     | 
| 
       1211 
     | 
    
         
            -
                  expect(subject.parse_for_modulename(directory)).to eq(['myname', 'testmodule'])
         
     | 
| 
       1212 
     | 
    
         
            -
                end
         
     | 
| 
       1213 
     | 
    
         
            -
              end
         
     | 
| 
       1214 
     | 
    
         
            -
             
     | 
| 
       1215 
     | 
    
         
            -
              describe 'parse_for_module_root' do
         
     | 
| 
       1216 
     | 
    
         
            -
                directory = '/testfilepath/myname-testmodule'
         
     | 
| 
       1217 
     | 
    
         
            -
                describe 'stops searching when either' do
         
     | 
| 
       1218 
     | 
    
         
            -
                  it 'finds a Modulefile' do
         
     | 
| 
       1219 
     | 
    
         
            -
                    allow( File ).to receive(:exists?).and_return(false)
         
     | 
| 
       1220 
     | 
    
         
            -
                    allow( File ).to receive(:exists?).with("#{directory}/Modulefile").and_return(true)
         
     | 
| 
       1221 
     | 
    
         
            -
             
     | 
| 
       1222 
     | 
    
         
            -
                    expect( subject.logger ).to_not receive(:debug).with("At root, can't parse for another directory")
         
     | 
| 
       1223 
     | 
    
         
            -
                    expect( subject.logger ).to receive(:debug).with("No Modulefile or metadata.json found at #{directory}/acceptance, moving up")
         
     | 
| 
       1224 
     | 
    
         
            -
                    expect(subject.parse_for_moduleroot("#{directory}/acceptance")).to eq(directory)
         
     | 
| 
       1225 
     | 
    
         
            -
                  end
         
     | 
| 
       1226 
     | 
    
         
            -
                  it 'finds a metadata.json file' do
         
     | 
| 
       1227 
     | 
    
         
            -
                    allow( File ).to receive(:exists?).and_return(false)
         
     | 
| 
       1228 
     | 
    
         
            -
                    allow( File ).to receive(:exists?).with("#{directory}/metadata.json").and_return(true)
         
     | 
| 
       1229 
     | 
    
         
            -
             
     | 
| 
       1230 
     | 
    
         
            -
                    expect( subject.logger ).to_not receive(:debug).with("At root, can't parse for another directory")
         
     | 
| 
       1231 
     | 
    
         
            -
                    expect( subject.logger ).to receive(:debug).with("No Modulefile or metadata.json found at #{directory}/acceptance, moving up")
         
     | 
| 
       1232 
     | 
    
         
            -
                    expect(subject.parse_for_moduleroot("#{directory}/acceptance")).to eq(directory)
         
     | 
| 
       1233 
     | 
    
         
            -
                  end
         
     | 
| 
       1234 
     | 
    
         
            -
                end
         
     | 
| 
       1235 
     | 
    
         
            -
                it 'should recersively go up the directory to find the module files' do
         
     | 
| 
       1236 
     | 
    
         
            -
                  allow( File ).to receive(:exists?).and_return(false)
         
     | 
| 
       1237 
     | 
    
         
            -
                  expect( subject.logger ).to receive(:debug).with("No Modulefile or metadata.json found at #{directory}, moving up")
         
     | 
| 
       1238 
     | 
    
         
            -
                  expect( subject.logger ).to receive(:error).with("At root, can't parse for another directory")
         
     | 
| 
       1239 
     | 
    
         
            -
                  expect(subject.parse_for_moduleroot(directory)).to eq(nil)
         
     | 
| 
       1240 
     | 
    
         
            -
                end
         
     | 
| 
       1241 
     | 
    
         
            -
              end
         
     | 
| 
       1242 
     | 
    
         
            -
            end
         
     |