beaker 2.27.0 → 2.28.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (98) hide show
  1. checksums.yaml +8 -8
  2. data/HISTORY.md +378 -2
  3. data/README.md +1 -3
  4. data/acceptance/config/acceptance-options.rb +3 -0
  5. data/acceptance/fixtures/files/failing_shell_script.txt +3 -0
  6. data/acceptance/fixtures/files/retry_script.txt +14 -0
  7. data/acceptance/fixtures/files/shell_script_with_output.txt +3 -0
  8. data/acceptance/fixtures/files/simple_text_file.txt +3 -0
  9. data/acceptance/fixtures/files/sles-11-x86_64.repo +5 -0
  10. data/acceptance/lib/helpers/test_helper.rb +111 -0
  11. data/acceptance/tests/base/dsl/helpers/configuration_test.rb +17 -0
  12. data/acceptance/tests/base/dsl/helpers/host_helpers/add_system32_hosts_entry_test.rb +50 -0
  13. data/acceptance/tests/base/dsl/helpers/host_helpers/backup_the_file_test.rb +64 -0
  14. data/acceptance/tests/base/dsl/helpers/host_helpers/check_for_package_test.rb +100 -0
  15. data/acceptance/tests/base/dsl/helpers/host_helpers/create_remote_file_test.rb +201 -0
  16. data/acceptance/tests/base/dsl/helpers/host_helpers/create_tmpdir_on_test.rb +68 -0
  17. data/acceptance/tests/base/dsl/helpers/host_helpers/curl_on_test.rb +48 -0
  18. data/acceptance/tests/base/dsl/helpers/host_helpers/curl_with_retries_test.rb +28 -0
  19. data/acceptance/tests/base/dsl/helpers/host_helpers/deploy_package_repo_test.rb +142 -0
  20. data/acceptance/tests/base/dsl/helpers/host_helpers/echo_on_test.rb +13 -0
  21. data/acceptance/tests/base/dsl/helpers/host_helpers/install_package_test.rb +67 -0
  22. data/acceptance/tests/base/dsl/helpers/host_helpers/on_test.rb +109 -0
  23. data/acceptance/tests/base/dsl/helpers/host_helpers/retry_on_test.rb +42 -0
  24. data/acceptance/tests/base/dsl/helpers/host_helpers/rsync_to_test.rb +143 -0
  25. data/acceptance/tests/base/dsl/helpers/host_helpers/run_cron_on_test.rb +242 -0
  26. data/acceptance/tests/base/dsl/helpers/host_helpers/run_script_on_test.rb +69 -0
  27. data/acceptance/tests/base/dsl/helpers/host_helpers/run_script_test.rb +53 -0
  28. data/acceptance/tests/base/dsl/helpers/host_helpers/scp_from_test.rb +53 -0
  29. data/acceptance/tests/base/dsl/helpers/host_helpers/scp_to_test.rb +54 -0
  30. data/acceptance/tests/base/dsl/helpers/host_helpers/shell_test.rb +51 -0
  31. data/acceptance/tests/base/dsl/helpers/host_helpers/upgrade_package_test.rb +92 -0
  32. data/acceptance/tests/base/dsl/install_utils/clone_git_repo_on_test.rb +47 -0
  33. data/acceptance/tests/base/{host.rb → host_test.rb} +2 -0
  34. data/acceptance/tests/hypervisor/{communication.rb → communication_test.rb} +0 -0
  35. data/acceptance/tests/load_path_bootstrap.rb +10 -0
  36. data/acceptance/tests/puppet/{install_smoke.rb → install_smoke_test.rb} +0 -0
  37. data/beaker.gemspec +1 -1
  38. data/docs/Access-the-Live-Test-Console-with-Pry.md +305 -0
  39. data/docs/Argument-Processing-and-Precedence.md +325 -0
  40. data/docs/Beaker-Installation.md +59 -0
  41. data/docs/Beaker-Owners-and-Reviewers.md +16 -0
  42. data/docs/Beaker-Test-Tagging.md +76 -0
  43. data/docs/Beaker-with-Masterless-Puppet.md +42 -0
  44. data/docs/Creating-A-Test-Environment.md +91 -0
  45. data/docs/Docker-Support.md +129 -0
  46. data/docs/EC2-Support.md +77 -0
  47. data/docs/Example-Vagrant-Hosts-Files.md +66 -0
  48. data/docs/File-a-Beaker-Bug.md +3 -0
  49. data/docs/Google-Compute-Engine-Support.md +41 -0
  50. data/docs/How-To-Beaker.md +7 -0
  51. data/docs/How-To-Use-User-Password-Authentication-with-Beaker.md +53 -0
  52. data/docs/How-to-Write-a-Beaker-Test-for-a-Module.md +145 -0
  53. data/docs/Lets-Write-a-Test.md +73 -0
  54. data/docs/Openstack-Support.md +32 -0
  55. data/docs/Overview.md +31 -0
  56. data/docs/README.md +43 -0
  57. data/docs/Roles-What-Are-They.md +44 -0
  58. data/docs/Shared-Options-for-Executing-Beaker-Commands.md +43 -0
  59. data/docs/Solaris-Support.md +10 -0
  60. data/docs/The-Beaker-DSL.md +283 -0
  61. data/docs/The-Command-Line.md +24 -0
  62. data/docs/Types,-Puppet-4,-and-the-All-In-One-Agent.md +13 -0
  63. data/docs/VMWare-Fusion-Support.md +36 -0
  64. data/docs/Vagrant-Support.md +47 -0
  65. data/docs/beaker-vs.-beaker-rspec.md +87 -0
  66. data/docs/hosts/README.md +8 -0
  67. data/docs/hosts/eos.md +30 -0
  68. data/docs/hypervisors/README.md +8 -0
  69. data/docs/hypervisors/aws.md +143 -0
  70. data/docs/vSphere-Support.md +46 -0
  71. data/lib/beaker/dsl/helpers/host_helpers.rb +2 -4
  72. data/lib/beaker/dsl/helpers/puppet_helpers.rb +45 -11
  73. data/lib/beaker/dsl/install_utils/foss_utils.rb +20 -23
  74. data/lib/beaker/dsl/install_utils/module_utils.rb +4 -0
  75. data/lib/beaker/dsl/install_utils/pe_utils.rb +2 -6
  76. data/lib/beaker/dsl/patterns.rb +1 -1
  77. data/lib/beaker/host.rb +3 -0
  78. data/lib/beaker/host/eos.rb +56 -0
  79. data/lib/beaker/host/mac/pkg.rb +1 -1
  80. data/lib/beaker/host/unix/pkg.rb +36 -0
  81. data/lib/beaker/hypervisor/aws_sdk.rb +1 -1
  82. data/lib/beaker/hypervisor/vagrant.rb +3 -3
  83. data/lib/beaker/logger.rb +1 -0
  84. data/lib/beaker/options/presets.rb +5 -0
  85. data/lib/beaker/shared/host_manager.rb +7 -4
  86. data/lib/beaker/version.rb +1 -1
  87. data/spec/beaker/dsl/helpers/puppet_helpers_spec.rb +87 -0
  88. data/spec/beaker/dsl/install_utils/foss_utils_spec.rb +53 -20
  89. data/spec/beaker/dsl/install_utils/module_utils_spec.rb +1 -1
  90. data/spec/beaker/dsl/install_utils/pe_utils_spec.rb +7 -14
  91. data/spec/beaker/host/eos_spec.rb +65 -0
  92. data/spec/beaker/host/unix/pkg_spec.rb +42 -0
  93. data/spec/beaker/hypervisor/aws_sdk_spec.rb +17 -56
  94. data/spec/beaker/hypervisor/vagrant_spec.rb +1 -1
  95. data/spec/beaker/logger_spec.rb +1 -1
  96. data/spec/mocks.rb +0 -13
  97. metadata +76 -6
  98. data/acceptance/tests/dsl/install_utils/clone_git_repo_on.rb +0 -50
@@ -133,8 +133,12 @@ module Beaker
133
133
  #move to the host
134
134
  logger.debug "Using scp to transfer #{source_path} to #{target_path}"
135
135
  scp_to host, source_path, target_module_dir, {:ignore => ignore_list}
136
+
136
137
  #rename to the selected module name, if not correct
137
138
  cur_path = File.join(target_module_dir, source_name)
139
+ if host.is_powershell? #make sure our slashes are correct
140
+ cur_path = cur_path.gsub(/\//,'\\')
141
+ end
138
142
  host.mv cur_path, target_path unless cur_path == target_path
139
143
  when 'rsync'
140
144
  logger.debug "Using rsync to transfer #{source_path} to #{target_path}"
@@ -102,9 +102,7 @@ module Beaker
102
102
  pe_debug = host[:pe_debug] || opts[:pe_debug] ? ' -verboseR' : ''
103
103
  "cd #{host['working_dir']} && hdiutil attach #{host['dist']}.dmg && installer#{pe_debug} -pkg /Volumes/puppet-enterprise-#{version}/puppet-enterprise-installer-#{version}.pkg -target /"
104
104
  elsif host['platform'] =~ /eos/
105
- commands = ['enable', "extension puppet-enterprise-#{version}-#{host['platform']}.swix"]
106
- command = commands.join("\n")
107
- "Cli -c '#{command}'"
105
+ host.install_from_file("puppet-enterprise-#{version}-#{host['platform']}.swix")
108
106
  else
109
107
  pe_debug = host[:pe_debug] || opts[:pe_debug] ? ' -D' : ''
110
108
  "cd #{host['working_dir']}/#{host['dist']} && ./#{host['pe_installer']}#{pe_debug} -a #{host['working_dir']}/answers"
@@ -218,9 +216,7 @@ module Beaker
218
216
  end
219
217
 
220
218
  if host['platform'] =~ /eos/
221
- commands = ['enable', "copy #{path}/#{filename}#{extension} extension:"]
222
- command = commands.join("\n")
223
- on host, "Cli -c '#{command}'"
219
+ host.get_remote_file("#{path}/#{filename}#{extension}")
224
220
  else
225
221
  unpack = 'tar -xvf -'
226
222
  unpack = extension =~ /gz/ ? 'gunzip | ' + unpack : unpack
@@ -19,7 +19,7 @@ module Beaker
19
19
  # or Array<{Host}> to run the block against
20
20
  # @param [Block] block This method will yield to a block of code passed by the caller
21
21
  #
22
- # @return [Array<Result>, Result] An array of results, or a result object.
22
+ # @return [Array<Result>, Result, nil] An array of results, a result object, or nil.
23
23
  # Check {#run_block_on} for more details on this.
24
24
  def block_on hosts_or_filter, &block
25
25
  block_hosts = nil
@@ -49,6 +49,8 @@ module Beaker
49
49
  Mac::Host.new name, host_hash, options
50
50
  when /freebsd/
51
51
  FreeBSD::Host.new name, host_hash, options
52
+ when /eos/
53
+ Eos::Host.new name, host_hash, options
52
54
  else
53
55
  Unix::Host.new name, host_hash, options
54
56
  end
@@ -499,6 +501,7 @@ module Beaker
499
501
  'freebsd',
500
502
  'windows',
501
503
  'pswindows',
504
+ 'eos',
502
505
  ].each do |lib|
503
506
  require "beaker/host/#{lib}"
504
507
  end
@@ -0,0 +1,56 @@
1
+ [ 'host', 'command_factory' ].each do |lib|
2
+ require "beaker/#{lib}"
3
+ end
4
+
5
+ module Eos
6
+ class Host < Unix::Host
7
+
8
+ # Gets the path & file name for the puppet agent package on EOS
9
+ #
10
+ # @param [String] puppet_collection Name of the puppet collection to use
11
+ # @param [String] puppet_agent_version Version of puppet agent to get
12
+ # @param [Hash{Symbol=>String}] opts Options hash to provide extra values
13
+ #
14
+ # @raise [ArgumentError] If one of the two required parameters (puppet_collection,
15
+ # puppet_agent_version) is either not passed or set to nil
16
+ #
17
+ # @return [String, String] Path to the directory and filename of the package, respectively
18
+ def get_puppet_agent_package_info( puppet_collection = nil, puppet_agent_version = nil, opts = {} )
19
+ error_message = "Must provide %s argument to get puppet agent package information"
20
+ raise ArgumentError, error_message % "puppet_collection" unless puppet_collection
21
+ raise ArgumentError, error_message % "puppet_agent_version" unless puppet_agent_version
22
+
23
+ variant, version, arch, _ = self['platform'].to_array
24
+ release_path = "#{variant}/#{version}/#{puppet_collection}/#{arch}"
25
+ release_file = "puppet-agent-#{puppet_agent_version}-1.#{variant}#{version}.#{arch}.swix"
26
+ return release_path, release_file
27
+ end
28
+
29
+ # Copies a remote file to the host location specified
30
+ #
31
+ # @param [String] remote_url URL to the remote file
32
+ # @param [String] host_directory Path to the host directory on the host.
33
+ #
34
+ # @note in EOS, you just copy the file as an extension, you don't worry
35
+ # about location, so that parameter is ignored
36
+ #
37
+ # @return [Result] The result of copying that file to the host
38
+ def get_remote_file( remote_url, host_directory = '' )
39
+ commands = ['enable', "copy #{remote_url} extension:"]
40
+ command = commands.join("\n")
41
+ execute("Cli -c '#{command}'")
42
+ end
43
+
44
+ # Installs an extension file already copied via {#get_remote_file} or something similar
45
+ #
46
+ # @param [String] filename Name of the file to install, including file extension
47
+ #
48
+ # @return [Result] The result of running the install command on the host
49
+ def install_from_file( filename )
50
+ commands = ['enable', "extension #{filename}"]
51
+ command = commands.join("\n")
52
+ execute("Cli -c '#{command}'")
53
+ end
54
+
55
+ end
56
+ end
@@ -11,7 +11,7 @@ module Mac::Pkg
11
11
  end
12
12
 
13
13
  def uninstall_package(name, cmdline_args = '')
14
- raise "Package #{name} cannot be installed on #{self}"
14
+ raise "Package #{name} cannot be uninstalled on #{self}"
15
15
  end
16
16
 
17
17
  # Upgrade an installed package to the latest available version
@@ -120,6 +120,24 @@ module Unix::Pkg
120
120
  end
121
121
  end
122
122
 
123
+ # Install a package using RPM
124
+ #
125
+ # @param [String] name The name of the package to install. It
126
+ # may be a filename or a URL.
127
+ # @param [String] cmdline_args Additional command line arguments for
128
+ # the package manager.
129
+ # @option opts [String] :package_proxy A proxy of form http://host:port
130
+ #
131
+ # @return nil
132
+ # @api public
133
+ def install_package_with_rpm(name, cmdline_args = '', opts = {})
134
+ proxy = ''
135
+ if name =~ /^http/ and opts[:package_proxy]
136
+ proxy = extract_rpm_proxy_options(opts[:package_proxy])
137
+ end
138
+ execute("rpm #{cmdline_args} -ivh #{name} #{proxy}")
139
+ end
140
+
123
141
  def uninstall_package(name, cmdline_args = '', opts = {})
124
142
  case self['platform']
125
143
  when /sles-/
@@ -252,4 +270,22 @@ module Unix::Pkg
252
270
  end
253
271
  end
254
272
 
273
+ # Extract RPM command's proxy options from URL
274
+ #
275
+ # @param [String] url A URL of form http://host:port
276
+ # @return [String] httpproxy and httport options for rpm
277
+ #
278
+ # @raise [StandardError] When encountering a string that
279
+ # cannot be parsed
280
+ # @api private
281
+ def extract_rpm_proxy_options(url)
282
+ begin
283
+ host, port = url.match(/https?:\/\/(.*):(\d*)/)[1,2]
284
+ raise if host.empty? or port.empty?
285
+ "--httpproxy #{host} --httpport #{port}"
286
+ rescue
287
+ raise "Cannot extract host and port from '#{url}'"
288
+ end
289
+ end
290
+
255
291
  end
@@ -687,7 +687,7 @@ module Beaker
687
687
  # @return [String] safe key name for current host
688
688
  # @api private
689
689
  def key_name
690
- "#{key_name_prefix}-#{@options[:timestamp].strftime("%F_%H_%M_%S")}"
690
+ "#{key_name_prefix}-#{@options[:aws_keyname_modifier]}-#{@options[:timestamp].strftime("%F_%H_%M_%S_%N")}"
691
691
  end
692
692
 
693
693
  # Returns the local user running this tool
@@ -84,7 +84,7 @@ module Beaker
84
84
  def set_ssh_config host, user
85
85
  f = Tempfile.new("#{host.name}")
86
86
  ssh_config = Dir.chdir(@vagrant_path) do
87
- stdin, stdout, stderr, wait_thr = Open3.popen3('vagrant', 'ssh-config', host.name)
87
+ stdin, stdout, stderr, wait_thr = Open3.popen3(@vagrant_env, 'vagrant', 'ssh-config', host.name)
88
88
  if not wait_thr.value.success?
89
89
  raise "Failed to 'vagrant ssh-config' for #{host.name}"
90
90
  end
@@ -128,7 +128,7 @@ module Beaker
128
128
  @vagrant_path = File.expand_path(File.join(File.basename(__FILE__), '..', '.vagrant', 'beaker_vagrant_files', File.basename(options[:hosts_file])))
129
129
  FileUtils.mkdir_p(@vagrant_path)
130
130
  @vagrant_file = File.expand_path(File.join(@vagrant_path, "Vagrantfile"))
131
-
131
+ @vagrant_env = { "RUBYLIB" => "" }
132
132
  end
133
133
 
134
134
  def provision(provider = nil)
@@ -182,7 +182,7 @@ module Beaker
182
182
  def vagrant_cmd(args)
183
183
  Dir.chdir(@vagrant_path) do
184
184
  exit_status = 1
185
- Open3.popen3("vagrant #{args}") {|stdin, stdout, stderr, wait_thr|
185
+ Open3.popen3(@vagrant_env, "vagrant #{args}") {|stdin, stdout, stderr, wait_thr|
186
186
  while line = stdout.gets
187
187
  @logger.info(line)
188
188
  end
@@ -357,6 +357,7 @@ module Beaker
357
357
  to.print color_code if @color
358
358
  to.send print_statement, msg
359
359
  to.print NORMAL if @color unless color_code == NONE
360
+ to.flush
360
361
  end
361
362
  end
362
363
 
@@ -181,6 +181,11 @@ module Beaker
181
181
  :ec2_yaml => 'config/image_templates/ec2.yaml',
182
182
  :help => false,
183
183
  :collect_perf_data => 'none',
184
+ :puppetdb_port_ssl => 8081,
185
+ :puppetdb_port_nonssl => 8080,
186
+ :puppetserver_port => 8140,
187
+ :nodeclassifier_port => 4433,
188
+ :aws_keyname_modifier => rand(10 ** 10).to_s.rjust(10,'0'), # 10 digit random number string
184
189
  :ssh => {
185
190
  :config => false,
186
191
  :paranoid => false,
@@ -74,11 +74,14 @@ module Beaker
74
74
  # @param [String, Symbol] filter Optional filter to apply to provided hosts - limits by name or role
75
75
  # @param [Block] block This method will yield to a block of code passed by the caller
76
76
  #
77
- # @todo beaker3.0: simplify return types to Array<Result> only
77
+ # @todo (beaker3.0:BKR-571): simplify return types to Array<Result> only
78
78
  #
79
- # @return [Array<Result>, Result] If a non-empty array of hosts has been
80
- # passed (after filtering), then an array of results is returned. Else,
81
- # a result object is returned.
79
+ # @return [Array<Result>, Result, nil] If an array of hosts has been
80
+ # passed (after filtering), then either an array of results is returned
81
+ # (if the array is non-empty), or nil is returned (if the array is empty).
82
+ # Else, a result object is returned. If filtering makes it such that only
83
+ # one host is left, then it's passed as a host object (not in an array),
84
+ # and thus a result object is returned.
82
85
  def run_block_on hosts = [], filter = nil, &block
83
86
  result = nil
84
87
  block_hosts = hosts #the hosts to apply the block to after any filtering
@@ -1,5 +1,5 @@
1
1
  module Beaker
2
2
  module Version
3
- STRING = '2.27.0'
3
+ STRING = '2.28.0'
4
4
  end
5
5
  end
@@ -894,5 +894,92 @@ describe ClassMixedWithDSLHelpers do
894
894
  end
895
895
  end
896
896
 
897
+ describe '#bounce_service' do
898
+ let( :options ) { Beaker::Options::Presets.new.presets }
899
+ before :each do
900
+ allow( subject ).to receive( :options ) { options }
901
+ end
902
+
903
+ it 'uses the default port argument if none given' do
904
+ host = hosts[0]
905
+ expect( host ).to receive( :graceful_restarts? ).and_return( false )
906
+ expect( subject ).to receive( :curl_with_retries ).with( anything(), anything(), /8140/, anything(), anything() )
907
+ subject.bounce_service( host, 'not_real_service')
908
+ end
909
+
910
+ it 'takes the port argument' do
911
+ host = hosts[0]
912
+ expect( host ).to receive( :graceful_restarts? ).and_return( false )
913
+ expect( subject ).to receive( :curl_with_retries ).with( anything(), anything(), /8000/, anything(), anything() )
914
+ subject.bounce_service( host, 'not_real_service', nil, 8000)
915
+ end
916
+ end
917
+
918
+ describe '#sleep_until_puppetdb_started' do
919
+ let( :options ) { Beaker::Options::Presets.new.presets }
920
+ before :each do
921
+ allow( subject ).to receive( :options ) { options }
922
+ end
923
+
924
+ it 'uses the default ports if none given' do
925
+ host = hosts[0]
926
+ expect( subject ).to receive( :curl_with_retries ).with( anything(), anything(), /8080/, anything(), anything() ).once.ordered
927
+ expect( subject ).to receive( :curl_with_retries ).with( anything(), anything(), /8081/, anything() ).once.ordered
928
+ subject.sleep_until_puppetdb_started( host )
929
+ end
930
+
931
+ it 'allows setting the nonssl_port' do
932
+ host = hosts[0]
933
+ expect( subject ).to receive( :curl_with_retries ).with( anything(), anything(), /8084/, anything(), anything() ).once.ordered
934
+ expect( subject ).to receive( :curl_with_retries ).with( anything(), anything(), /8081/, anything() ).once.ordered
935
+ subject.sleep_until_puppetdb_started( host, 8084 )
936
+
937
+ end
938
+
939
+ it 'allows setting the ssl_port' do
940
+ host = hosts[0]
941
+ expect( subject ).to receive( :curl_with_retries ).with( anything(), anything(), /8080/, anything(), anything() ).once.ordered
942
+ expect( subject ).to receive( :curl_with_retries ).with( anything(), anything(), /8085/, anything() ).once.ordered
943
+ subject.sleep_until_puppetdb_started( host, nil, 8085 )
944
+ end
945
+ end
946
+
947
+ describe '#sleep_until_puppetserver_started' do
948
+ let( :options ) { Beaker::Options::Presets.new.presets }
949
+ before :each do
950
+ allow( subject ).to receive( :options ) { options }
951
+ end
952
+
953
+ it 'uses the default port if none given' do
954
+ host = hosts[0]
955
+ expect( subject ).to receive( :curl_with_retries ).with( anything(), anything(), /8140/, anything() ).once.ordered
956
+ subject.sleep_until_puppetserver_started( host )
957
+ end
958
+
959
+ it 'allows setting the port' do
960
+ host = hosts[0]
961
+ expect( subject ).to receive( :curl_with_retries ).with( anything(), anything(), /8147/, anything() ).once.ordered
962
+ subject.sleep_until_puppetserver_started( host, 8147 )
963
+ end
964
+ end
965
+
966
+ describe '#sleep_until_nc_started' do
967
+ let( :options ) { Beaker::Options::Presets.new.presets }
968
+ before :each do
969
+ allow( subject ).to receive( :options ) { options }
970
+ end
971
+
972
+ it 'uses the default port if none given' do
973
+ host = hosts[0]
974
+ expect( subject ).to receive( :curl_with_retries ).with( anything(), anything(), /4433/, anything() ).once.ordered
975
+ subject.sleep_until_nc_started( host )
976
+ end
977
+
978
+ it 'allows setting the port' do
979
+ host = hosts[0]
980
+ expect( subject ).to receive( :curl_with_retries ).with( anything(), anything(), /4435/, anything() ).once.ordered
981
+ subject.sleep_until_nc_started( host, 4435 )
982
+ end
983
+ end
897
984
 
898
985
  end
@@ -182,6 +182,29 @@ describe ClassMixedWithDSLInstallUtils do
182
182
  url = subject.build_giturl('puppet', 'er0ck', 'github.com', 'ssh')
183
183
  expect(url).to be == 'git@github.com:er0ck/puppet.git'
184
184
  end
185
+
186
+ it 'uses ENV to build urls properly' do
187
+ allow(ENV).to receive(:[]).with('SERVER').and_return(nil)
188
+ allow(ENV).to receive(:[]).with('FORK').and_return(nil)
189
+ allow(ENV).to receive(:[]).with('PUPPET_FORK').and_return('er0ck/repo')
190
+ allow(ENV).to receive(:[]).with('PUPPET_SERVER').and_return('gitlab.com')
191
+ url = subject.build_giturl('puppet')
192
+ expect(url).to be == 'https://gitlab.com/er0ck/repo-puppet.git'
193
+ url = subject.build_giturl('puppet', 'er0ck')
194
+ expect(url).to be == 'https://gitlab.com/er0ck-puppet.git'
195
+ url = subject.build_giturl('puppet', 'er0ck', 'bitbucket.com')
196
+ expect(url).to be == 'https://bitbucket.com/er0ck-puppet.git'
197
+ url = subject.build_giturl('puppet', 'er0ck', 'github.com', 'https://')
198
+ expect(url).to be == 'https://github.com/er0ck/puppet.git'
199
+ url = subject.build_giturl('puppet', 'er0ck', 'github.com', 'https')
200
+ expect(url).to be == 'https://github.com/er0ck/puppet.git'
201
+ url = subject.build_giturl('puppet', 'er0ck', 'github.com', 'git@')
202
+ expect(url).to be == 'git@github.com:er0ck/puppet.git'
203
+ url = subject.build_giturl('puppet', 'er0ck', 'github.com', 'git')
204
+ expect(url).to be == 'git@github.com:er0ck/puppet.git'
205
+ url = subject.build_giturl('puppet', 'er0ck', 'github.com', 'ssh')
206
+ expect(url).to be == 'git@github.com:er0ck/puppet.git'
207
+ end
185
208
  end
186
209
 
187
210
  context 'extract_repo_info_from' do
@@ -396,7 +419,7 @@ describe ClassMixedWithDSLInstallUtils do
396
419
  context 'on el-6' do
397
420
  let(:platform) { Beaker::Platform.new('el-6-i386') }
398
421
  it 'installs' do
399
- expect(subject).to receive(:on).with(hosts[0], /puppetlabs-release-el-6\.noarch\.rpm/)
422
+ expect(hosts[0]).to receive(:install_package_with_rpm).with(/puppetlabs-release-el-6\.noarch\.rpm/, '--replacepkgs', {:package_proxy=>false})
400
423
  expect(hosts[0]).to receive(:install_package).with('puppet')
401
424
  subject.install_puppet
402
425
  end
@@ -414,7 +437,7 @@ describe ClassMixedWithDSLInstallUtils do
414
437
  context 'on el-5' do
415
438
  let(:platform) { Beaker::Platform.new('el-5-i386') }
416
439
  it 'installs' do
417
- expect(subject).to receive(:on).with(hosts[0], /puppetlabs-release-el-5\.noarch\.rpm/)
440
+ expect(hosts[0]).to receive(:install_package_with_rpm).with(/puppetlabs-release-el-5\.noarch\.rpm/, '--replacepkgs', {:package_proxy=>false})
418
441
  expect(hosts[0]).to receive(:install_package).with('puppet')
419
442
  subject.install_puppet
420
443
  end
@@ -422,7 +445,7 @@ describe ClassMixedWithDSLInstallUtils do
422
445
  context 'on fedora' do
423
446
  let(:platform) { Beaker::Platform.new('fedora-18-x86_84') }
424
447
  it 'installs' do
425
- expect(subject).to receive(:on).with(hosts[0], /puppetlabs-release-fedora-18\.noarch\.rpm/)
448
+ expect(hosts[0]).to receive(:install_package_with_rpm).with(/puppetlabs-release-fedora-18\.noarch\.rpm/, '--replacepkgs', {:package_proxy=>false})
426
449
  expect(hosts[0]).to receive(:install_package).with('puppet')
427
450
  subject.install_puppet
428
451
  end
@@ -585,16 +608,6 @@ describe ClassMixedWithDSLInstallUtils do
585
608
 
586
609
  end
587
610
 
588
- describe "When host is a redhat-like platform" do
589
- let( :platform ) { Beaker::Platform.new('el-7-i386') }
590
-
591
- it "installs an rpm" do
592
- expect(subject).to receive(:on).with( host, /^(rpm --replacepkgs -ivh).*/ ).ordered
593
- subject.install_puppetlabs_release_repo host
594
- end
595
-
596
- end
597
-
598
611
  end
599
612
 
600
613
  describe "#install_puppetlabs_dev_repo" do
@@ -754,10 +767,19 @@ describe ClassMixedWithDSLInstallUtils do
754
767
  end
755
768
 
756
769
  describe '#install_puppet_agent_from_msi_on' do
757
- let( :opts ) { { :puppet_agent_version => 'VERSION' } }
770
+ let( :opts ) { { :puppet_agent_version => 'VERSION', :win_download_url => 'http://downloads.puppetlabs.com/windows' } }
758
771
  let( :platform ) { 'windows' }
759
772
  let( :host ) { { :platform => platform } }
760
773
 
774
+ it 'returns error when link incorrect' do
775
+ allow(subject).to receive(:link_exists?).with(anything()).and_return( false )
776
+ expect( host ).to receive( :is_x86_64? ).and_return( true )
777
+
778
+ expect{
779
+ subject.install_puppet_agent_from_msi_on( host, opts )
780
+ }.to raise_error(RuntimeError, /Puppet MSI at http:\/\/downloads.puppetlabs.com\/windows\/puppet-agent-VERSION-x64.msi does not exist!/)
781
+ end
782
+
761
783
  it 'uses x86 msi when host is_x86_64 and install_32 is set on the host' do
762
784
  host['install_32'] = true
763
785
 
@@ -1185,21 +1207,19 @@ describe ClassMixedWithDSLInstallUtils do
1185
1207
  let(:aixhost) { make_host('aix', :platform => 'aix-53-power') }
1186
1208
  let(:sol10host) { make_host('sol10', :platform => 'solaris-10-x86_64') }
1187
1209
  let(:sol11host) { make_host('sol11', :platform => 'solaris-11-x86_64') }
1210
+ let(:cumulushost) { make_host('cumulus', :platform => 'cumulus-2.2-amd64') }
1188
1211
  let(:el6host) { make_host('el6', :platform => 'el-6-x64') }
1189
1212
 
1190
1213
  pkg_list = 'foo bar'
1191
1214
 
1192
- it 'uninstalls packages on aix, including tar' do
1193
- aix_depend_list = 'tar'
1215
+ it 'uninstalls packages on aix' do
1194
1216
  result = Beaker::Result.new(aixhost,'')
1195
1217
  result.stdout = pkg_list
1196
- result2 = Beaker::Result.new(aixhost,'')
1197
- result2.stdout = aix_depend_list
1198
1218
 
1199
- expected_list = pkg_list + " " + aix_depend_list
1219
+ expected_list = pkg_list
1200
1220
  cmd_args = ''
1201
1221
 
1202
- expect( subject ).to receive(:on).exactly(3).times.and_return(result, result2, result)
1222
+ expect( subject ).to receive(:on).exactly(2).times.and_return(result, result)
1203
1223
  expect( aixhost ).to receive(:uninstall_package).with(expected_list, cmd_args)
1204
1224
 
1205
1225
  subject.remove_puppet_on( aixhost )
@@ -1231,6 +1251,19 @@ describe ClassMixedWithDSLInstallUtils do
1231
1251
  subject.remove_puppet_on( sol11host )
1232
1252
  end
1233
1253
 
1254
+ it 'uninstalls packages on cumulus' do
1255
+ result = Beaker::Result.new(cumulushost,'')
1256
+ result.stdout = pkg_list
1257
+
1258
+ expected_list = pkg_list
1259
+ cmd_args = ''
1260
+
1261
+ expect( subject ).to receive(:on).exactly(2).times.and_return(result, result)
1262
+ expect( cumulushost ).to receive(:uninstall_package).with(expected_list, cmd_args)
1263
+
1264
+ subject.remove_puppet_on( cumulushost )
1265
+ end
1266
+
1234
1267
  it 'raises error on other platforms' do
1235
1268
  expect { subject.remove_puppet_on( el6host ) }.to raise_error(RuntimeError, /unsupported platform/)
1236
1269
  end