beaker 1.10.0 → 1.11.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -108,7 +108,7 @@ module Beaker
108
108
  @logger = logger
109
109
  @options = options
110
110
  @path = path
111
- @usr_home = ENV['HOME']
111
+ @usr_home = options[:home]
112
112
  @test_status = :pass
113
113
  @exception = nil
114
114
  @runtime = nil
@@ -182,18 +182,5 @@ module Beaker
182
182
  hash
183
183
  end
184
184
 
185
- # This method retrieves the forge hostname from either:
186
- # * The environment variable 'forge_host'
187
- # * The parameter 'forge_host' from the CONFIG hash in a node definition
188
- #
189
- # If none of these are available, it falls back to the static
190
- # 'vulcan-acceptance.delivery.puppetlabs.net' hostname
191
- #
192
- # @return [String] hostname of test forge
193
- def forge
194
- ENV['forge_host'] ||
195
- @options['forge_host'] ||
196
- 'vulcan-acceptance.delivery.puppetlabs.net'
197
- end
198
185
  end
199
186
  end
@@ -1,5 +1,5 @@
1
1
  module Beaker
2
2
  module Version
3
- STRING = '1.10.0'
3
+ STRING = '1.11.0'
4
4
  end
5
5
  end
@@ -3,6 +3,7 @@ require 'spec_helper'
3
3
  module Beaker
4
4
  describe Answers do
5
5
  let( :basic_hosts ) { make_hosts( { 'pe_ver' => @ver } ) }
6
+ let( :options ) { Beaker::Options::Presets.env_vars }
6
7
  let( :hosts ) { basic_hosts[0]['roles'] = ['master', 'database', 'dashboard']
7
8
  basic_hosts[1]['platform'] = 'windows'
8
9
  basic_hosts }
@@ -16,42 +17,43 @@ module Beaker
16
17
 
17
18
  it 'generates 3.2 answers for 3.2 hosts' do
18
19
  @ver = '3.2'
19
- Beaker::Answers::Version32.should_receive( :answers ).with( hosts, master_certname, {}).once
20
- subject.answers( @ver, hosts, master_certname, {} )
20
+ Beaker::Answers::Version32.should_receive( :answers ).with( hosts, master_certname, options ).once
21
+ subject.answers( @ver, hosts, master_certname, options )
21
22
  end
22
23
 
23
24
  it 'generates 3.0 answers for 3.1 hosts' do
24
25
  @ver = '3.1'
25
- Beaker::Answers::Version30.should_receive( :answers ).with( hosts, master_certname, {} ).once
26
- subject.answers( @ver, hosts, master_certname, {} )
26
+ Beaker::Answers::Version30.should_receive( :answers ).with( hosts, master_certname, options ).once
27
+ subject.answers( @ver, hosts, master_certname, options )
27
28
  end
28
29
 
29
30
  it 'generates 3.0 answers for 3.0 hosts' do
30
31
  @ver = '3.0'
31
- Beaker::Answers::Version30.should_receive( :answers ).with( hosts, master_certname, {} ).once
32
- subject.answers( @ver, hosts, master_certname, {} )
32
+ Beaker::Answers::Version30.should_receive( :answers ).with( hosts, master_certname, options ).once
33
+ subject.answers( @ver, hosts, master_certname, options )
33
34
  end
34
35
 
35
36
  it 'generates 2.8 answers for 2.8 hosts' do
36
37
  @ver = '2.8'
37
- Beaker::Answers::Version28.should_receive( :answers ).with( hosts, master_certname, {} ).once
38
- subject.answers( @ver, hosts, master_certname, {} )
38
+ Beaker::Answers::Version28.should_receive( :answers ).with( hosts, master_certname, options ).once
39
+ subject.answers( @ver, hosts, master_certname, options )
39
40
  end
40
41
 
41
42
  it 'generates 2.0 answers for 2.0 hosts' do
42
43
  @ver = '2.0'
43
- Beaker::Answers::Version20.should_receive( :answers ).with( hosts, master_certname, {} ).once
44
- subject.answers( @ver, hosts, master_certname, {} )
44
+ Beaker::Answers::Version20.should_receive( :answers ).with( hosts, master_certname, options ).once
45
+ subject.answers( @ver, hosts, master_certname, options )
45
46
  end
46
47
 
47
48
  it 'raises an error for an unknown version' do
48
49
  @ver = 'x.x'
49
- expect{ subject.answers( @ver, hosts, master_certname, {} ) }.to raise_error( NotImplementedError )
50
+ expect{ subject.answers( @ver, hosts, master_certname, options ) }.to raise_error( NotImplementedError )
50
51
  end
51
52
  end
52
53
 
53
54
  module Answers
54
55
  describe Version32 do
56
+ let( :options ) { Beaker::Options::Presets.env_vars }
55
57
  let( :basic_hosts ) { make_hosts( {'pe_ver' => @ver } ) }
56
58
  let( :hosts ) { basic_hosts[0]['roles'] = ['master', 'agent']
57
59
  basic_hosts[1]['roles'] = ['dashboard', 'agent']
@@ -63,17 +65,17 @@ module Beaker
63
65
  # master certname to the dashboard answers
64
66
  it 'should add q_puppetmaster_certname to the dashboard answers' do
65
67
  @ver = '3.2'
66
- expect( subject.answers( hosts, master_certname, {} )['vm2']).to include :q_puppetmaster_certname
68
+ expect( subject.answers( hosts, master_certname, options )['vm2']).to include :q_puppetmaster_certname
67
69
  end
68
70
 
69
71
  it 'should add q_upgrade_with_unknown_disk_space to the dashboard on upgrade' do
70
72
  @ver = '3.2'
71
- expect( subject.answers( hosts, master_certname, {:type => :upgrade} )['vm2']).to include :q_upgrade_with_unknown_disk_space
73
+ expect( subject.answers( hosts, master_certname, options.merge( {:type => :upgrade} ) )['vm2']).to include :q_upgrade_with_unknown_disk_space
72
74
  end
73
75
 
74
76
  it 'should add answers to the host objects' do
75
77
  @ver = '3.2'
76
- answers = subject.answers( hosts, master_certname, {})
78
+ answers = subject.answers( hosts, master_certname, options )
77
79
  hosts.each do |host|
78
80
  expect( host[:answers] ).to be === answers[host.name]
79
81
  end
@@ -81,6 +83,7 @@ module Beaker
81
83
  end
82
84
 
83
85
  describe Version30 do
86
+ let( :options ) { Beaker::Options::Presets.env_vars }
84
87
  let( :basic_hosts ) { make_hosts( { 'pe_ver' => @ver } ) }
85
88
  let( :hosts ) { basic_hosts[0]['roles'] = ['master', 'database', 'dashboard']
86
89
  basic_hosts[1]['platform'] = 'windows'
@@ -89,24 +92,26 @@ module Beaker
89
92
 
90
93
  it 'uses simple answers for upgrade from 3.0.x to 3.0.x' do
91
94
  @ver = '3.0'
92
- expect( subject.answers( hosts, master_certname, { :type => :upgrade } )).to be === { "vm2"=>{ :q_install=>"y", :q_install_vendor_packages=>"y" }, "vm1"=>{ :q_install=>"y", :q_install_vendor_packages=>"y" }, "vm3"=>{ :q_install=>"y", :q_install_vendor_packages=>"y" } }
95
+ expect( subject.answers( hosts, master_certname, options.merge({ :type => :upgrade }) )).to be === { "vm2"=>{ :q_install=>"y", :q_install_vendor_packages=>"y" }, "vm1"=>{ :q_install=>"y", :q_install_vendor_packages=>"y" }, "vm3"=>{ :q_install=>"y", :q_install_vendor_packages=>"y" } }
93
96
  end
94
97
 
95
98
  it 'sets correct answers for an agent' do
96
- expect( subject.answers( hosts, master_certname,{} )['vm3'] ).to be === { :q_install=>"y", :q_vendor_packages_install=>"y", :q_puppetagent_install=>"y", :q_puppet_cloud_install=>"y", :q_verify_packages=>"y", :q_puppet_symlinks_install=>"y", :q_puppetagent_certname=>hosts[2], :q_puppetagent_server=>master_certname, :q_puppetmaster_install=>"n", :q_all_in_one_install=>"n", :q_puppet_enterpriseconsole_install=>"n", :q_puppetdb_install=>"n", :q_database_install=>"n" }
99
+ expect( subject.answers( hosts, master_certname, options )['vm3'] ).to be === { :q_install=>"y", :q_vendor_packages_install=>"y", :q_puppetagent_install=>"y", :q_puppet_cloud_install=>"y", :q_verify_packages=>"y", :q_puppet_symlinks_install=>"y", :q_puppetagent_certname=>hosts[2], :q_puppetagent_server=>master_certname, :q_puppetmaster_install=>"n", :q_all_in_one_install=>"n", :q_puppet_enterpriseconsole_install=>"n", :q_puppetdb_install=>"n", :q_database_install=>"n" }
97
100
  end
98
101
 
99
102
  it 'sets correct answers for a master' do
100
- expect( subject.answers( hosts, master_certname, {} )['vm1'] ).to be === { :q_install=>"y", :q_vendor_packages_install=>"y", :q_puppetagent_install=>"y", :q_puppet_cloud_install=>"y", :q_verify_packages=>"y", :q_puppet_symlinks_install=>"y", :q_puppetagent_certname=>hosts[0], :q_puppetagent_server=>master_certname, :q_puppetmaster_install=>"y", :q_all_in_one_install=>"y", :q_puppet_enterpriseconsole_install=>"y", :q_puppetdb_install=>"y", :q_database_install=>"y", :q_puppetdb_hostname=>hosts[0], :q_puppetdb_port=>8081, :q_puppetmaster_dnsaltnames=>"master_certname,puppet,#{hosts[0][:ip]}", :q_puppetmaster_enterpriseconsole_hostname=>hosts[0], :q_puppetmaster_enterpriseconsole_port=>443, :q_puppetmaster_certname=>"master_certname", :q_puppetdb_database_name=>"pe-puppetdb", :q_puppetdb_database_user=>"mYpdBu3r", :q_puppetdb_database_password=>"'~!@\#$%^*-/ aZ'", :q_puppet_enterpriseconsole_auth_database_name=>"console_auth", :q_puppet_enterpriseconsole_auth_database_user=>"mYu7hu3r", :q_puppet_enterpriseconsole_auth_database_password=>"'~!@\#$%^*-/ aZ'", :q_puppet_enterpriseconsole_database_name=>"console", :q_puppet_enterpriseconsole_database_user=>"mYc0nS03u3r", :q_puppet_enterpriseconsole_database_password=>"'~!@\#$%^*-/ aZ'", :q_database_host=>hosts[0], :q_database_port=>5432, :q_pe_database=>"y", :q_puppet_enterpriseconsole_inventory_hostname=>hosts[0], :q_puppet_enterpriseconsole_inventory_certname=>hosts[0], :q_puppet_enterpriseconsole_inventory_dnsaltnames=>hosts[0], :q_puppet_enterpriseconsole_inventory_port=>8140, :q_puppet_enterpriseconsole_master_hostname=>hosts[0], :q_puppet_enterpriseconsole_auth_user_email=>"'admin@example.com'", :q_puppet_enterpriseconsole_auth_password=>"'~!@\#$%^*-/ aZ'", :q_puppet_enterpriseconsole_httpd_port=>443, :q_puppet_enterpriseconsole_smtp_host=>"'vm1'", :q_puppet_enterpriseconsole_smtp_use_tls=>"'n'", :q_puppet_enterpriseconsole_smtp_port=>"'25'", :q_database_root_password=>"'=ZYdjiP3jCwV5eo9s1MBd'", :q_database_root_user=>"pe-postgres" }
103
+ @ver = '3.0'
104
+ expect( subject.answers( hosts, master_certname, options )['vm1'] ).to be === { :q_install=>"y", :q_vendor_packages_install=>"y", :q_puppetagent_install=>"y", :q_puppet_cloud_install=>"y", :q_verify_packages=>"y", :q_puppet_symlinks_install=>"y", :q_puppetagent_certname=>hosts[0], :q_puppetagent_server=>master_certname, :q_puppetmaster_install=>"y", :q_all_in_one_install=>"y", :q_puppet_enterpriseconsole_install=>"y", :q_puppetdb_install=>"y", :q_database_install=>"y", :q_puppetdb_hostname=>hosts[0], :q_puppetdb_port=>8081, :q_puppetmaster_dnsaltnames=>"master_certname,puppet,#{hosts[0][:ip]}", :q_puppetmaster_enterpriseconsole_hostname=>hosts[0], :q_puppetmaster_enterpriseconsole_port=>443, :q_puppetmaster_certname=>"master_certname", :q_puppetdb_database_name=>"pe-puppetdb", :q_puppetdb_database_user=>"mYpdBu3r", :q_puppetdb_database_password=>"'~!@\#$%^*-/ aZ'", :q_puppet_enterpriseconsole_auth_database_name=>"console_auth", :q_puppet_enterpriseconsole_auth_database_user=>"mYu7hu3r", :q_puppet_enterpriseconsole_auth_database_password=>"'~!@\#$%^*-/ aZ'", :q_puppet_enterpriseconsole_database_name=>"console", :q_puppet_enterpriseconsole_database_user=>"mYc0nS03u3r", :q_puppet_enterpriseconsole_database_password=>"'~!@\#$%^*-/ aZ'", :q_database_host=>hosts[0], :q_database_port=>5432, :q_pe_database=>"y", :q_puppet_enterpriseconsole_inventory_hostname=>hosts[0], :q_puppet_enterpriseconsole_inventory_certname=>hosts[0], :q_puppet_enterpriseconsole_inventory_dnsaltnames=>hosts[0], :q_puppet_enterpriseconsole_inventory_port=>8140, :q_puppet_enterpriseconsole_master_hostname=>hosts[0], :q_puppet_enterpriseconsole_auth_user_email=>"'admin@example.com'", :q_puppet_enterpriseconsole_auth_password=>"'~!@\#$%^*-/ aZ'", :q_puppet_enterpriseconsole_httpd_port=>443, :q_puppet_enterpriseconsole_smtp_host=>"'vm1'", :q_puppet_enterpriseconsole_smtp_use_tls=>"'n'", :q_puppet_enterpriseconsole_smtp_port=>"'25'", :q_database_root_password=>"'=ZYdjiP3jCwV5eo9s1MBd'", :q_database_root_user=>"pe-postgres" }
101
105
  end
102
106
 
103
107
  it 'generates nil answers for a windows host' do
104
- expect( subject.answers( hosts, master_certname, {} )['vm2'] ).to be === nil
108
+ @ver = '3.0'
109
+ expect( subject.answers( hosts, master_certname, options )['vm2'] ).to be === nil
105
110
  end
106
111
 
107
112
  it 'should add answers to the host objects' do
108
113
  @ver = '3.0'
109
- answers = subject.answers( hosts, master_certname, {})
114
+ answers = subject.answers( hosts, master_certname, options )
110
115
  hosts.each do |host|
111
116
  expect( host[:answers] ).to be === answers[host.name]
112
117
  end
@@ -114,6 +119,7 @@ module Beaker
114
119
  end
115
120
 
116
121
  describe Version28 do
122
+ let( :options ) { Beaker::Options::Presets.env_vars }
117
123
  let( :basic_hosts ) { make_hosts( { 'pe_ver' => @ver } ) }
118
124
  let( :hosts ) { basic_hosts[0]['roles'] = ['master', 'database', 'dashboard']
119
125
  basic_hosts[1]['platform'] = 'windows'
@@ -121,20 +127,23 @@ module Beaker
121
127
  let( :master_certname ) { 'master_certname' }
122
128
 
123
129
  it 'sets correct answers for an agent' do
124
- expect( subject.answers( hosts, master_certname,{} )['vm3'] ).to be === { :q_install=>"y", :q_puppetagent_install=>"y", :q_puppet_cloud_install=>"y", :q_puppet_symlinks_install=>"y", :q_vendor_packages_install=>"y", :q_puppetagent_certname=>hosts[2], :q_puppetagent_server=>hosts[0], :q_puppetmaster_install=>"n", :q_puppet_enterpriseconsole_install=>"n" }
130
+ @ver = '2.8'
131
+ expect( subject.answers( hosts, master_certname, options )['vm3'] ).to be === { :q_install=>"y", :q_puppetagent_install=>"y", :q_puppet_cloud_install=>"y", :q_puppet_symlinks_install=>"y", :q_vendor_packages_install=>"y", :q_puppetagent_certname=>hosts[2], :q_puppetagent_server=>hosts[0], :q_puppetmaster_install=>"n", :q_puppet_enterpriseconsole_install=>"n" }
125
132
  end
126
133
 
127
134
  it 'sets correct answers for a master' do
128
- expect( subject.answers( hosts, master_certname, {} )['vm1'] ).to be === { :q_install=>"y", :q_puppetagent_install=>"y", :q_puppet_cloud_install=>"y", :q_puppet_symlinks_install=>"y", :q_vendor_packages_install=>"y", :q_puppetagent_certname=>hosts[0], :q_puppetagent_server=>hosts[0], :q_puppetmaster_install=>"y", :q_puppet_enterpriseconsole_install=>"y", :q_puppetmaster_certname=>"master_certname", :q_puppetmaster_dnsaltnames=>"master_certname,puppet,#{hosts[0][:ip]}", :q_puppetmaster_enterpriseconsole_hostname=>hosts[0], :q_puppetmaster_enterpriseconsole_port=>443, :q_puppetmaster_forward_facts=>"y", :q_puppet_enterpriseconsole_database_install=>"y", :q_puppet_enterpriseconsole_auth_database_name=>"console_auth", :q_puppet_enterpriseconsole_auth_database_user=>"mYu7hu3r", :q_puppet_enterpriseconsole_auth_database_password=>"'~!@\#$%^*-/ aZ'", :q_puppet_enterpriseconsole_database_name=>"console", :q_puppet_enterpriseconsole_database_user=>"mYc0nS03u3r", :q_puppet_enterpriseconsole_database_password=>"'~!@\#$%^*-/ aZ'", :q_puppet_enterpriseconsole_inventory_hostname=>hosts[0], :q_puppet_enterpriseconsole_inventory_certname=>hosts[0], :q_puppet_enterpriseconsole_inventory_dnsaltnames=>hosts[0], :q_puppet_enterpriseconsole_inventory_port=>8140, :q_puppet_enterpriseconsole_master_hostname=>hosts[0], :q_puppet_enterpriseconsole_auth_user_email=>"'admin@example.com'", :q_puppet_enterpriseconsole_auth_password=>"'~!@\#$%^*-/ aZ'", :q_puppet_enterpriseconsole_httpd_port=>443, :q_puppet_enterpriseconsole_smtp_host=>"'vm1'", :q_puppet_enterpriseconsole_smtp_use_tls=>"'n'", :q_puppet_enterpriseconsole_smtp_port=>"'25'", :q_puppet_enterpriseconsole_auth_user=>"'admin@example.com'" }
135
+ @ver = '2.8'
136
+ expect( subject.answers( hosts, master_certname, options )['vm1'] ).to be === { :q_install=>"y", :q_puppetagent_install=>"y", :q_puppet_cloud_install=>"y", :q_puppet_symlinks_install=>"y", :q_vendor_packages_install=>"y", :q_puppetagent_certname=>hosts[0], :q_puppetagent_server=>hosts[0], :q_puppetmaster_install=>"y", :q_puppet_enterpriseconsole_install=>"y", :q_puppetmaster_certname=>"master_certname", :q_puppetmaster_dnsaltnames=>"master_certname,puppet,#{hosts[0][:ip]}", :q_puppetmaster_enterpriseconsole_hostname=>hosts[0], :q_puppetmaster_enterpriseconsole_port=>443, :q_puppetmaster_forward_facts=>"y", :q_puppet_enterpriseconsole_database_install=>"y", :q_puppet_enterpriseconsole_auth_database_name=>"console_auth", :q_puppet_enterpriseconsole_auth_database_user=>"mYu7hu3r", :q_puppet_enterpriseconsole_auth_database_password=>"'~!@\#$%^*-/ aZ'", :q_puppet_enterpriseconsole_database_name=>"console", :q_puppet_enterpriseconsole_database_user=>"mYc0nS03u3r", :q_puppet_enterpriseconsole_database_password=>"'~!@\#$%^*-/ aZ'", :q_puppet_enterpriseconsole_inventory_hostname=>hosts[0], :q_puppet_enterpriseconsole_inventory_certname=>hosts[0], :q_puppet_enterpriseconsole_inventory_dnsaltnames=>hosts[0], :q_puppet_enterpriseconsole_inventory_port=>8140, :q_puppet_enterpriseconsole_master_hostname=>hosts[0], :q_puppet_enterpriseconsole_auth_user_email=>"'admin@example.com'", :q_puppet_enterpriseconsole_auth_password=>"'~!@\#$%^*-/ aZ'", :q_puppet_enterpriseconsole_httpd_port=>443, :q_puppet_enterpriseconsole_smtp_host=>"'vm1'", :q_puppet_enterpriseconsole_smtp_use_tls=>"'n'", :q_puppet_enterpriseconsole_smtp_port=>"'25'", :q_puppet_enterpriseconsole_auth_user=>"'admin@example.com'" }
129
137
  end
130
138
 
131
139
  it 'generates nil answers for a windows host' do
132
- expect( subject.answers( hosts, master_certname, {} )['vm2'] ).to be === nil
140
+ @ver = '2.8'
141
+ expect( subject.answers( hosts, master_certname, options )['vm2'] ).to be === nil
133
142
  end
134
143
 
135
144
  it 'should add answers to the host objects' do
136
145
  @ver = '2.8'
137
- answers = subject.answers( hosts, master_certname, {})
146
+ answers = subject.answers( hosts, master_certname, options )
138
147
  hosts.each do |host|
139
148
  expect( host[:answers] ).to be === answers[host.name]
140
149
  end
@@ -142,6 +151,7 @@ module Beaker
142
151
 
143
152
  end
144
153
  describe Version20 do
154
+ let( :options ) { Beaker::Options::Presets.env_vars }
145
155
  let( :basic_hosts ) { make_hosts( { 'pe_ver' => @ver } ) }
146
156
  let( :hosts ) { basic_hosts[0]['roles'] = ['master', 'database', 'dashboard']
147
157
  basic_hosts[1]['platform'] = 'windows'
@@ -149,20 +159,23 @@ module Beaker
149
159
  let( :master_certname ) { 'master_certname' }
150
160
 
151
161
  it 'sets correct answers for an agent' do
152
- expect( subject.answers( hosts, master_certname,{} )['vm3'] ).to be === { :q_install=>"y", :q_puppetagent_install=>"y", :q_puppet_cloud_install=>"y", :q_puppet_symlinks_install=>"y", :q_vendor_packages_install=>"y", :q_puppetagent_certname=>hosts[2], :q_puppetagent_server=>hosts[0], :q_puppetmaster_install=>"n", :q_puppet_enterpriseconsole_install=>"n" }
162
+ @ver = '2.0'
163
+ expect( subject.answers( hosts, master_certname, options )['vm3'] ).to be === { :q_install=>"y", :q_puppetagent_install=>"y", :q_puppet_cloud_install=>"y", :q_puppet_symlinks_install=>"y", :q_vendor_packages_install=>"y", :q_puppetagent_certname=>hosts[2], :q_puppetagent_server=>hosts[0], :q_puppetmaster_install=>"n", :q_puppet_enterpriseconsole_install=>"n" }
153
164
  end
154
165
 
155
166
  it 'sets correct answers for a master' do
156
- expect( subject.answers( hosts, master_certname, {} )['vm1'] ).to be === { :q_install=>"y", :q_puppetagent_install=>"y", :q_puppet_cloud_install=>"y", :q_puppet_symlinks_install=>"y", :q_vendor_packages_install=>"y", :q_puppetagent_certname=>hosts[0], :q_puppetagent_server=>hosts[0], :q_puppetmaster_install=>"y", :q_puppet_enterpriseconsole_install=>"y", :q_puppetmaster_certname=>"master_certname", :q_puppetmaster_dnsaltnames=>"master_certname,puppet,#{hosts[0][:ip]}", :q_puppetmaster_enterpriseconsole_hostname=>hosts[0], :q_puppetmaster_enterpriseconsole_port=>443, :q_puppetmaster_forward_facts=>"y", :q_puppet_enterpriseconsole_database_install=>"y", :q_puppet_enterpriseconsole_auth_database_name=>"console_auth", :q_puppet_enterpriseconsole_auth_database_user=>"mYu7hu3r", :q_puppet_enterpriseconsole_auth_database_password=>"'~!@\#$%^*-/ aZ'", :q_puppet_enterpriseconsole_database_name=>"console", :q_puppet_enterpriseconsole_database_user=>"mYc0nS03u3r", :q_puppet_enterpriseconsole_database_root_password=>"'~!@\#$%^*-/ aZ'", :q_puppet_enterpriseconsole_database_password=>"'~!@\#$%^*-/ aZ'", :q_puppet_enterpriseconsole_inventory_hostname=>hosts[0], :q_puppet_enterpriseconsole_inventory_certname=>hosts[0], :q_puppet_enterpriseconsole_inventory_dnsaltnames=>hosts[0], :q_puppet_enterpriseconsole_inventory_port=>8140, :q_puppet_enterpriseconsole_master_hostname=>hosts[0], :q_puppet_enterpriseconsole_auth_user_email=>"'admin@example.com'", :q_puppet_enterpriseconsole_auth_password=>"'~!@\#$%^*-/ aZ'", :q_puppet_enterpriseconsole_httpd_port=>443, :q_puppet_enterpriseconsole_smtp_host=>"'vm1'", :q_puppet_enterpriseconsole_smtp_use_tls=>"'n'", :q_puppet_enterpriseconsole_smtp_port=>"'25'", :q_puppet_enterpriseconsole_auth_user=>"'admin@example.com'" }
167
+ @ver = '2.0'
168
+ expect( subject.answers( hosts, master_certname, options )['vm1'] ).to be === { :q_install=>"y", :q_puppetagent_install=>"y", :q_puppet_cloud_install=>"y", :q_puppet_symlinks_install=>"y", :q_vendor_packages_install=>"y", :q_puppetagent_certname=>hosts[0], :q_puppetagent_server=>hosts[0], :q_puppetmaster_install=>"y", :q_puppet_enterpriseconsole_install=>"y", :q_puppetmaster_certname=>"master_certname", :q_puppetmaster_dnsaltnames=>"master_certname,puppet,#{hosts[0][:ip]}", :q_puppetmaster_enterpriseconsole_hostname=>hosts[0], :q_puppetmaster_enterpriseconsole_port=>443, :q_puppetmaster_forward_facts=>"y", :q_puppet_enterpriseconsole_database_install=>"y", :q_puppet_enterpriseconsole_auth_database_name=>"console_auth", :q_puppet_enterpriseconsole_auth_database_user=>"mYu7hu3r", :q_puppet_enterpriseconsole_auth_database_password=>"'~!@\#$%^*-/ aZ'", :q_puppet_enterpriseconsole_database_name=>"console", :q_puppet_enterpriseconsole_database_user=>"mYc0nS03u3r", :q_puppet_enterpriseconsole_database_root_password=>"'~!@\#$%^*-/ aZ'", :q_puppet_enterpriseconsole_database_password=>"'~!@\#$%^*-/ aZ'", :q_puppet_enterpriseconsole_inventory_hostname=>hosts[0], :q_puppet_enterpriseconsole_inventory_certname=>hosts[0], :q_puppet_enterpriseconsole_inventory_dnsaltnames=>hosts[0], :q_puppet_enterpriseconsole_inventory_port=>8140, :q_puppet_enterpriseconsole_master_hostname=>hosts[0], :q_puppet_enterpriseconsole_auth_user_email=>"'admin@example.com'", :q_puppet_enterpriseconsole_auth_password=>"'~!@\#$%^*-/ aZ'", :q_puppet_enterpriseconsole_httpd_port=>443, :q_puppet_enterpriseconsole_smtp_host=>"'vm1'", :q_puppet_enterpriseconsole_smtp_use_tls=>"'n'", :q_puppet_enterpriseconsole_smtp_port=>"'25'", :q_puppet_enterpriseconsole_auth_user=>"'admin@example.com'" }
157
169
  end
158
170
 
159
171
  it 'generates nil answers for a windows host' do
160
- expect( subject.answers( hosts, master_certname, {} )['vm2'] ).to be === nil
172
+ @ver = '2.0'
173
+ expect( subject.answers( hosts, master_certname, options )['vm2'] ).to be === nil
161
174
  end
162
175
 
163
176
  it 'should add answers to the host objects' do
164
177
  @ver = '2.0'
165
- answers = subject.answers( hosts, master_certname, {})
178
+ answers = subject.answers( hosts, master_certname, options )
166
179
  hosts.each do |host|
167
180
  expect( host[:answers] ).to be === answers[host.name]
168
181
  end
@@ -11,6 +11,7 @@ class ClassMixedWithDSLHelpers
11
11
  end
12
12
 
13
13
  describe ClassMixedWithDSLHelpers do
14
+ let( :opts ) { Beaker::Options::Presets.env_vars }
14
15
  let( :command ) { 'ls' }
15
16
  let( :host ) { double.as_null_object }
16
17
  let( :result ) { Beaker::Result.new( host, command ) }
@@ -127,26 +128,26 @@ describe ClassMixedWithDSLHelpers do
127
128
  end
128
129
 
129
130
  it 'yields self' do
130
- subject.on host, command do
131
+ subject.on host, command do
131
132
  expect( subject ).
132
133
  to be_an_instance_of( ClassMixedWithDSLHelpers )
133
134
  end
134
135
  end
135
136
 
136
137
  it 'provides access to stdout' do
137
- subject.on host, command do
138
+ subject.on host, command do
138
139
  expect( subject.stdout ).to be == 'stdout'
139
140
  end
140
141
  end
141
142
 
142
143
  it 'provides access to stderr' do
143
- subject.on host, command do
144
+ subject.on host, command do
144
145
  expect( subject.stderr ).to be == 'stderr'
145
146
  end
146
147
  end
147
148
 
148
149
  it 'provides access to exit_code' do
149
- subject.on host, command do
150
+ subject.on host, command do
150
151
  expect( subject.exit_code ).to be == 0
151
152
  end
152
153
  end
@@ -513,7 +514,7 @@ describe ClassMixedWithDSLHelpers do
513
514
 
514
515
  describe '#stub_forge_on' do
515
516
  it 'stubs forge.puppetlabs.com with the value of `forge`' do
516
- subject.should_receive( :forge ).and_return( 'my_forge.example.com' )
517
+ subject.stub( :options ).and_return( {} )
517
518
  Resolv.should_receive( :getaddress ).
518
519
  with( 'my_forge.example.com' ).and_return( '127.0.0.1' )
519
520
  subject.should_receive( :stub_hosts_on ).
@@ -521,15 +522,16 @@ describe ClassMixedWithDSLHelpers do
521
522
  subject.should_receive( :stub_hosts_on ).
522
523
  with( 'my_host', 'forgeapi.puppetlabs.com' => '127.0.0.1' )
523
524
 
524
- subject.stub_forge_on( 'my_host' )
525
+ subject.stub_forge_on( 'my_host', 'my_forge.example.com' )
525
526
  end
526
527
  end
527
528
 
528
529
  describe "#stub_forge" do
529
530
  it "delegates to #stub_forge_on with the default host" do
531
+ subject.stub( :options ).and_return( {} )
530
532
  subject.stub( :hosts ).and_return( hosts )
531
533
 
532
- subject.should_receive( :stub_forge_on ).with( master ).once
534
+ subject.should_receive( :stub_forge_on ).with( master, nil ).once
533
535
 
534
536
  subject.stub_forge( )
535
537
 
@@ -878,4 +880,109 @@ describe ClassMixedWithDSLHelpers do
878
880
  end
879
881
  end
880
882
 
883
+
884
+ describe 'copy_root_module_to' do
885
+ def source_to_scp (source, target, items)
886
+ subject.stub(:parse_for_moduleroot).and_return('/totalfake/testmodule')
887
+ Dir.stub(:getpwd).and_return('/totalfake/testmodule')
888
+
889
+ items = [items] unless items.kind_of?(Array)
890
+ File.stub(:exists?).with(any_args()).and_return(false)
891
+ File.stub(:directory?).with(any_args()).and_return(false)
892
+ items.each do |item|
893
+ source_item = File.join(source,item)
894
+ File.stub(:exists?).with(source_item).and_return(true)
895
+ options = {}
896
+ if ['manifests','lib','templates','files'].include? item
897
+ File.stub(:directory?).with(source_item).and_return(true)
898
+ options = {:mkdir => true}
899
+ end
900
+ master.should_receive(:do_scp_to).with(source_item,target,options).ordered
901
+ end
902
+ end
903
+ it 'should call scp with the correct info, with only providing host' do
904
+ files = ['manifests','lib','templates','metadata.json','Modulefile','files']
905
+ source_to_scp '/totalfake/testmodule',"#{master['puppetpath']}/modules/testmodule",files
906
+ subject.stub(:parse_for_modulename).with(any_args()).and_return("testmodule")
907
+ subject.copy_root_module_to(master)
908
+ end
909
+ it 'should call scp with the correct info, when specifying the modulename' do
910
+ files = ['manifests','lib','metadata.json','Modulefile']
911
+ source_to_scp '/totalfake/testmodule',"#{master['puppetpath']}/modules/bogusmodule",files
912
+ subject.stub(:parse_for_modulename).and_return('testmodule')
913
+ subject.copy_root_module_to(master,{:module_name =>"bogusmodule"})
914
+ end
915
+ it 'should call scp with the correct info, when specifying the target to a different path' do
916
+ files = ['manifests','lib','templates','metadata.json','Modulefile','files']
917
+ target = "/opt/shared/puppet/modules"
918
+ source_to_scp '/totalfake/testmodule',"#{target}/testmodule",files
919
+ subject.stub(:parse_for_modulename).and_return('testmodule')
920
+ subject.copy_root_module_to(master,{:target_module_path => target})
921
+ end
922
+ end
923
+
924
+ describe 'split_author_modulename' do
925
+ it 'should return a correct modulename' do
926
+ result = subject.split_author_modulename('myname-test_43_module')
927
+ expect(result[:author]).to eq('myname')
928
+ expect(result[:module]).to eq('test_43_module')
929
+ end
930
+ end
931
+
932
+ describe 'get_module_name' do
933
+ it 'should return a has of author and modulename' do
934
+ expect(subject.get_module_name('myname-test_43_module')).to eq('test_43_module')
935
+ end
936
+ it 'should return nil for invalid names' do
937
+ expect(subject.get_module_name('myname-')).to eq(nil)
938
+ end
939
+ end
940
+
941
+ describe 'parse_for_modulename' do
942
+ directory = '/testfilepath/myname-testmodule'
943
+ it 'should return name from metadata.json' do
944
+ File.stub(:exists?).with("#{directory}/metadata.json").and_return(true)
945
+ File.stub(:read).with("#{directory}/metadata.json").and_return(" {\"name\":\"myname-testmodule\"} ")
946
+ subject.logger.should_receive(:debug).with("Attempting to parse Modulename from metadata.json")
947
+ subject.logger.should_not_receive(:debug).with('Unable to determine name, returning null')
948
+ subject.parse_for_modulename(directory).should eq('testmodule')
949
+ end
950
+ it 'should return name from Modulefile' do
951
+ File.stub(:exists?).with("#{directory}/metadata.json").and_return(false)
952
+ File.stub(:exists?).with("#{directory}/Modulefile").and_return(true)
953
+ File.stub(:read).with("#{directory}/Modulefile").and_return("name 'myname-testmodule' \nauthor 'myname'")
954
+ subject.logger.should_receive(:debug).with("Attempting to parse Modulename from Modulefile")
955
+ subject.logger.should_not_receive(:debug).with("Unable to determine name, returning null")
956
+ expect(subject.parse_for_modulename(directory)).to eq('testmodule')
957
+ end
958
+ end
959
+
960
+ describe 'parse_for_module_root' do
961
+ directory = '/testfilepath/myname-testmodule'
962
+ it 'should recersively go up the directory to find the module files' do
963
+ File.stub(:exists?).with("#{directory}/acceptance/Modulefile").and_return(false)
964
+ File.stub(:exists?).with("#{directory}/Modulefile").and_return(true)
965
+ subject.logger.should_not_receive(:debug).with("At root, can't parse for another directory")
966
+ subject.logger.should_receive(:debug).with("No Modulefile found at #{directory}/acceptance, moving up")
967
+ expect(subject.parse_for_moduleroot("#{directory}/acceptance")).to eq(directory)
968
+ end
969
+ it 'should recersively go up the directory to find the module files' do
970
+ File.stub(:exists?).and_return(false)
971
+ subject.logger.should_receive(:debug).with("No Modulefile found at #{directory}, moving up")
972
+ subject.logger.should_receive(:error).with("At root, can't parse for another directory")
973
+ expect(subject.parse_for_moduleroot(directory)).to eq(nil)
974
+ end
975
+
976
+ end
977
+ end
978
+
979
+ module FakeFS
980
+ class File < StringIO
981
+ def self.absolute_path(filepath)
982
+ RealFile.absolute_path(filepath)
983
+ end
984
+ def self.expand_path(filepath)
985
+ RealFile.expand_path(filepath)
986
+ end
987
+ end
881
988
  end
@@ -7,19 +7,20 @@ class ClassMixedWithDSLInstallUtils
7
7
  end
8
8
 
9
9
  describe ClassMixedWithDSLInstallUtils do
10
- let(:basic_hosts) { make_hosts( { :pe_ver => '3.0',
11
- :platform => 'linux',
12
- :roles => [ 'agent' ] } ) }
13
- let(:hosts) { basic_hosts[0][:roles] = ['master', 'database', 'dashboard']
14
- basic_hosts[1][:platform] = 'windows'
15
- basic_hosts }
16
- let(:winhost) { make_host( 'winhost', { :platform => 'windows',
10
+ let(:opts) { Beaker::Options::Presets.env_vars }
11
+ let(:basic_hosts) { make_hosts( { :pe_ver => '3.0',
12
+ :platform => 'linux',
13
+ :roles => [ 'agent' ] } ) }
14
+ let(:hosts) { basic_hosts[0][:roles] = ['master', 'database', 'dashboard']
15
+ basic_hosts[1][:platform] = 'windows'
16
+ basic_hosts }
17
+ let(:winhost) { make_host( 'winhost', { :platform => 'windows',
18
+ :pe_ver => '3.0',
19
+ :working_dir => '/tmp' } ) }
20
+ let(:unixhost) { make_host( 'unixhost', { :platform => 'linux',
17
21
  :pe_ver => '3.0',
18
- :working_dir => '/tmp' } ) }
19
- let(:unixhost) { make_host( 'unixhost', { :platform => 'linux',
20
- :pe_ver => '3.0',
21
- :working_dir => '/tmp',
22
- :dist => 'puppet-enterprise-3.1.0-rc0-230-g36c9e5c-debian-7-i386' } ) }
22
+ :working_dir => '/tmp',
23
+ :dist => 'puppet-enterprise-3.1.0-rc0-230-g36c9e5c-debian-7-i386' } ) }
23
24
 
24
25
 
25
26
  context 'extract_repo_info_from' do
@@ -257,7 +258,7 @@ describe ClassMixedWithDSLInstallUtils do
257
258
  subject.should_receive( :wait_for_host_in_dashboard ).with( hosts[2] ).once
258
259
  #run puppet agent now that installation is complete
259
260
  subject.should_receive( :on ).with( hosts, /puppet agent/, :acceptable_exit_codes => [0,2] ).once
260
- subject.do_install( hosts )
261
+ subject.do_install( hosts, opts )
261
262
  end
262
263
  end
263
264
 
@@ -326,9 +327,10 @@ describe ClassMixedWithDSLInstallUtils do
326
327
  describe 'install_pe' do
327
328
 
328
329
  it 'calls do_install with sorted hosts' do
330
+ subject.stub( :options ).and_return( {} )
329
331
  subject.stub( :hosts ).and_return( [ hosts[1], hosts[0], hosts[2] ] )
330
332
  subject.stub( :do_install ).and_return( true )
331
- subject.should_receive( :do_install ).with( hosts )
333
+ subject.should_receive( :do_install ).with( hosts, {} )
332
334
  subject.install_pe
333
335
  end
334
336
 
@@ -340,7 +342,7 @@ describe ClassMixedWithDSLInstallUtils do
340
342
  subject.stub( :hosts ).and_return( [ hosts[1], hosts[0], hosts[2] ] )
341
343
  subject.stub( :options ).and_return( {} )
342
344
  subject.stub( :do_install ).and_return( true )
343
- subject.should_receive( :do_install ).with( hosts )
345
+ subject.should_receive( :do_install ).with( hosts, {} )
344
346
  subject.install_pe
345
347
  hosts.each do |h|
346
348
  expect( h['pe_ver'] ).to be === '2.8'