beaker 2.27.0 → 2.28.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.
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