simp-beaker-helpers 1.18.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +7 -0
  2. data/.fixtures.yml +8 -0
  3. data/.gitignore +8 -0
  4. data/.gitlab-ci.yml +163 -0
  5. data/.rspec +4 -0
  6. data/.rubocop.yml +546 -0
  7. data/.travis.yml +36 -0
  8. data/CHANGELOG.md +231 -0
  9. data/Gemfile +51 -0
  10. data/LICENSE +27 -0
  11. data/README.md +543 -0
  12. data/Rakefile +151 -0
  13. data/files/pki/clean.sh +1 -0
  14. data/files/pki/make.sh +101 -0
  15. data/files/pki/template_ca.cnf +259 -0
  16. data/files/pki/template_host.cnf +263 -0
  17. data/files/puppet-agent-versions.yaml +46 -0
  18. data/lib/simp/beaker_helpers.rb +1231 -0
  19. data/lib/simp/beaker_helpers/constants.rb +25 -0
  20. data/lib/simp/beaker_helpers/inspec.rb +328 -0
  21. data/lib/simp/beaker_helpers/snapshot.rb +156 -0
  22. data/lib/simp/beaker_helpers/ssg.rb +383 -0
  23. data/lib/simp/beaker_helpers/version.rb +5 -0
  24. data/lib/simp/beaker_helpers/windows.rb +16 -0
  25. data/lib/simp/rake/beaker.rb +269 -0
  26. data/simp-beaker-helpers.gemspec +38 -0
  27. data/spec/acceptance/nodesets/default.yml +32 -0
  28. data/spec/acceptance/suites/default/check_puppet_version_spec.rb +23 -0
  29. data/spec/acceptance/suites/default/enable_fips_spec.rb +23 -0
  30. data/spec/acceptance/suites/default/fixture_modules_spec.rb +22 -0
  31. data/spec/acceptance/suites/default/install_simp_deps_repo_spec.rb +43 -0
  32. data/spec/acceptance/suites/default/nodesets +1 -0
  33. data/spec/acceptance/suites/default/pki_tests_spec.rb +55 -0
  34. data/spec/acceptance/suites/default/set_hieradata_on_spec.rb +33 -0
  35. data/spec/acceptance/suites/default/write_hieradata_to_spec.rb +33 -0
  36. data/spec/acceptance/suites/fips_from_fixtures/00_default_spec.rb +63 -0
  37. data/spec/acceptance/suites/fips_from_fixtures/metadata.yml +2 -0
  38. data/spec/acceptance/suites/fips_from_fixtures/nodesets +1 -0
  39. data/spec/acceptance/suites/offline/00_default_spec.rb +165 -0
  40. data/spec/acceptance/suites/offline/README +2 -0
  41. data/spec/acceptance/suites/offline/nodesets/default.yml +26 -0
  42. data/spec/acceptance/suites/puppet_collections/00_default_spec.rb +25 -0
  43. data/spec/acceptance/suites/puppet_collections/metadata.yml +2 -0
  44. data/spec/acceptance/suites/puppet_collections/nodesets/default.yml +30 -0
  45. data/spec/acceptance/suites/snapshot/00_snapshot_test_spec.rb +82 -0
  46. data/spec/acceptance/suites/snapshot/10_general_usage_spec.rb +56 -0
  47. data/spec/acceptance/suites/snapshot/nodesets +1 -0
  48. data/spec/acceptance/suites/windows/00_default_spec.rb +119 -0
  49. data/spec/acceptance/suites/windows/metadata.yml +2 -0
  50. data/spec/acceptance/suites/windows/nodesets/default.yml +33 -0
  51. data/spec/acceptance/suites/windows/nodesets/win2016.yml +35 -0
  52. data/spec/acceptance/suites/windows/nodesets/win2019.yml +34 -0
  53. data/spec/lib/simp/beaker_helpers_spec.rb +216 -0
  54. data/spec/spec_helper.rb +100 -0
  55. data/spec/spec_helper_acceptance.rb +25 -0
  56. metadata +243 -0
@@ -0,0 +1,2 @@
1
+ This, very odd, test should NEVER be run by default because it runs docker in
2
+ privileged mode and may cause horriffic unintended side effects on your system.
@@ -0,0 +1,26 @@
1
+ HOSTS:
2
+ el7:
3
+ platform: el-7-x86_64
4
+ box: centos/7
5
+ # This doesn't work with any other hypervisor
6
+ hypervisor: 'vagrant_libvirt'
7
+ vagrant_memsize: 3072
8
+ vagrant_cpus: 4
9
+ # Necessary to prevent network overlap inside the spawned test set
10
+ ip: '172.16.251.111'
11
+ netmask: '255.255.255.0'
12
+
13
+ CONFIG:
14
+ log_level: verbose
15
+ type: aio
16
+ <% if ENV['BEAKER_PUPPET_COLLECTION'] -%>
17
+ puppet_collection: <%= ENV['BEAKER_PUPPET_COLLECTION'] %>
18
+ <% end -%>
19
+ libvirt:
20
+ # Ensure that we use the best option available
21
+ 'cpu_mode': 'host-passthrough'
22
+ # Make sure that vagrant knows that we're rolling nested virt
23
+ 'nested': true
24
+ # Necessary to prevent network overlap inside the spawned test set
25
+ 'management_network_name': 'beaker-mgmt'
26
+ 'management_network_address': '172.16.250.1/24'
@@ -0,0 +1,25 @@
1
+ # This needs to be done so that we actually bring in a collection at the start
2
+ # of the run
3
+ #
4
+ # Choosing an arbitrary number in the middle of 5 so that we're not fooled by
5
+ # edge cases
6
+ #
7
+ ENV['PUPPET_VERSION'] = '5.1'
8
+
9
+ require 'spec_helper_acceptance'
10
+
11
+ Bundler.with_clean_env{
12
+ %x{bundle exec rake spec_prep}
13
+ }
14
+
15
+ hosts.each do |host|
16
+ describe 'make sure puppet version is valid' do
17
+ context "on #{host}" do
18
+ client_puppet_version = on(host, 'puppet --version').output.strip
19
+
20
+ it "should be running puppet version #{ENV['PUPPET_VERSION']}}" do
21
+ expect(Gem::Version.new(client_puppet_version)).to be >= Gem::Version.new(ENV['PUPPET_VERSION'])
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,2 @@
1
+ ---
2
+ 'default_run': true
@@ -0,0 +1,30 @@
1
+ <%
2
+ if ENV['BEAKER_HYPERVISOR']
3
+ hypervisor = ENV['BEAKER_HYPERVISOR']
4
+ else
5
+ hypervisor = 'vagrant'
6
+ end
7
+ -%>
8
+ HOSTS:
9
+ server-el7:
10
+ roles:
11
+ - server
12
+ - default
13
+ - master
14
+ - el7
15
+ platform: el-7-x86_64
16
+ box: centos/7
17
+ hypervisor: <%= hypervisor %>
18
+
19
+ server-el6:
20
+ roles:
21
+ - el6
22
+ platform: el-6-x86_64
23
+ box: centos/6
24
+ hypervisor: <%= hypervisor %>
25
+
26
+ CONFIG:
27
+ log_level: verbose
28
+ type: aio
29
+ puppet_collection: puppet5
30
+ vagrant_memsize: 256
@@ -0,0 +1,82 @@
1
+ require 'spec_helper_acceptance'
2
+
3
+ hosts.each do |host|
4
+ describe 'take a snapshot' do
5
+ context "on #{host}" do
6
+ it 'creates a file that should be saved' do
7
+ on(host, 'echo "keep" > /root/keep')
8
+ end
9
+
10
+ it 'takes a snapshot' do
11
+ Simp::BeakerHelpers::Snapshot.save(host, 'test')
12
+ end
13
+
14
+ it 'creates a file that should be removed' do
15
+ on(host, 'echo "trash" > /root/trash')
16
+ end
17
+
18
+ it 'restores a snapshot' do
19
+ Simp::BeakerHelpers::Snapshot.restore(host, 'test')
20
+ end
21
+
22
+ it 'should have the keep file' do
23
+ expect(host.file_exist?('/root/keep')).to be true
24
+ end
25
+
26
+ it 'should not have the trash file' do
27
+ expect(host.file_exist?('/root/trash')).to be false
28
+ end
29
+
30
+ it 'creates a second file that should be saved' do
31
+ on(host, 'echo "keep2" > /root/keep2')
32
+ end
33
+
34
+ it 'takes a snapshot with the same name' do
35
+ Simp::BeakerHelpers::Snapshot.save(host, 'test')
36
+ end
37
+
38
+ it 'creates a file that should be removed' do
39
+ on(host, 'echo "trash" > /root/trash')
40
+ end
41
+
42
+ it 'restores a snapshot' do
43
+ Simp::BeakerHelpers::Snapshot.restore(host, 'test')
44
+ end
45
+
46
+ it 'should have all keep files' do
47
+ expect(host.file_exist?('/root/keep')).to be true
48
+ expect(host.file_exist?('/root/keep2')).to be true
49
+ end
50
+
51
+ it 'should not have the trash file' do
52
+ expect(host.file_exist?('/root/trash')).to be false
53
+ end
54
+
55
+ it 'takes a snapshot with a different name' do
56
+ Simp::BeakerHelpers::Snapshot.save(host, 'test2')
57
+ end
58
+
59
+ it 'can list the snapshots' do
60
+ expect(Simp::BeakerHelpers::Snapshot.list(host)).to eq ["#{host}", 'test', 'test2']
61
+ end
62
+
63
+ it 'can query for a specific snapshot' do
64
+ expect(Simp::BeakerHelpers::Snapshot.exist?(host, 'test')).to eq true
65
+ expect(Simp::BeakerHelpers::Snapshot.exist?(host, 'test2')).to eq true
66
+ expect(Simp::BeakerHelpers::Snapshot.exist?(host, 'nope')).to eq false
67
+ end
68
+
69
+ it 'restores to the internal base' do
70
+ Simp::BeakerHelpers::Snapshot.restore_to_base(host)
71
+ end
72
+
73
+ it 'creates a file that should be saved' do
74
+ on(host, 'echo "keep" > /root/keep')
75
+ end
76
+
77
+ it 'creates a handoff snapshot for further tests' do
78
+ Simp::BeakerHelpers::Snapshot.save(host, 'handoff')
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,56 @@
1
+ require 'spec_helper_acceptance'
2
+
3
+ hosts.each do |host|
4
+ describe 'snapshot workflow' do
5
+ context "on #{host}" do
6
+ shared_examples_for 'a snapshot test' do
7
+ let(:snapshots) { Simp::BeakerHelpers::Snapshot.list(host) }
8
+
9
+ it 'restores from the initial snapshot' do
10
+ if snapshots.include?(init_snapshot)
11
+ Simp::BeakerHelpers::Snapshot.restore(host, init_snapshot)
12
+ end
13
+ end
14
+
15
+ it 'adds the keep file if necessary' do
16
+ if init_snapshot == 'missing'
17
+ on(host, 'echo "keep" > /root/keep')
18
+ end
19
+ end
20
+
21
+ it 'adds a tracking file' do
22
+ on(host, 'echo "tracking" > /root/tracking')
23
+ end
24
+
25
+ it 'restores the snapshot' do
26
+ if init_snapshot == 'missing'
27
+ expect { Simp::BeakerHelpers::Snapshot.restore(host, init_snapshot) }.to raise_error(/not found/)
28
+ Simp::BeakerHelpers::Snapshot.restore_to_base(host)
29
+ else
30
+ Simp::BeakerHelpers::Snapshot.restore(host, init_snapshot)
31
+ end
32
+ end
33
+
34
+ it 'should have the keep file' do
35
+ expect(host.file_exist?('/root/keep')).to be true
36
+ end
37
+
38
+ it 'should not have the tracking file' do
39
+ expect(host.file_exist?('/root/tracking')).to be false
40
+ end
41
+ end
42
+
43
+ context 'existing snapshot' do
44
+ let(:init_snapshot) { 'handoff' }
45
+
46
+ include_examples 'a snapshot test'
47
+ end
48
+
49
+ context 'missing snapshot' do
50
+ let(:init_snapshot) { 'missing' }
51
+
52
+ include_examples 'a snapshot test'
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1 @@
1
+ spec/acceptance/suites/snapshot/../../nodesets
@@ -0,0 +1,119 @@
1
+ require 'tmpdir'
2
+ require 'yaml'
3
+ require 'openssl'
4
+ require 'beaker-rspec'
5
+ require 'simp/beaker_helpers'
6
+ include Simp::BeakerHelpers
7
+
8
+ require 'beaker/puppet_install_helper'
9
+
10
+ unless ENV['BEAKER_provision'] == 'no'
11
+ hosts.each do |host|
12
+ unless Simp::BeakerHelpers::Snapshot.exist?(host, 'puppet_installed')
13
+ # Install Puppet
14
+ if host.is_pe?
15
+ install_pe
16
+ else
17
+ install_puppet
18
+ end
19
+ end
20
+ end
21
+ end
22
+
23
+ RSpec.configure do |c|
24
+ # ensure that environment OS is ready on each host
25
+ fix_errata_on(hosts)
26
+
27
+ # Readable test descriptions
28
+ c.formatter = :documentation
29
+
30
+ # Configure all nodes in nodeset
31
+ c.before :suite do
32
+ begin
33
+ copy_fixture_modules_to( hosts )
34
+
35
+ nonwin = hosts.dup
36
+ nonwin.delete_if {|h| h[:platform] =~ /windows/ }
37
+
38
+ begin
39
+ server = only_host_with_role(nonwin, 'server')
40
+ rescue ArgumentError => e
41
+ server = only_host_with_role(nonwin, 'default')
42
+ end
43
+ # Generate and install PKI certificates on each SUT
44
+ Dir.mktmpdir do |cert_dir|
45
+ run_fake_pki_ca_on(server, nonwin, cert_dir )
46
+ nonwin.each{ |sut| copy_pki_to( sut, cert_dir, '/etc/pki/simp-testing' )}
47
+ end
48
+
49
+ # add PKI keys
50
+ copy_keydist_to(server)
51
+ rescue StandardError, ScriptError => e
52
+ if ENV['PRY']
53
+ require 'pry'; binding.pry
54
+ else
55
+ raise e
56
+ end
57
+ end
58
+ end
59
+ end
60
+
61
+ describe 'windows' do
62
+
63
+ let(:hieradata){{
64
+ 'test::foo' => 'test'
65
+ }}
66
+
67
+ let(:manifest){ 'notify { "test": message => lookup("test::foo")}' }
68
+
69
+ hosts.each do |host|
70
+ context "on #{host}" do
71
+
72
+ let(:hiera_config){{
73
+ 'version' => 5,
74
+ 'hierarchy' => [
75
+ {
76
+ 'name' => 'Common',
77
+ 'path' => 'common.yaml'
78
+ },
79
+ {
80
+ 'name' => 'SIMP Compliance Engine',
81
+ 'lookup_key' => 'compliance_markup::enforcement'
82
+ }
83
+ ],
84
+ 'defaults' => {
85
+ 'data_hash' => 'yaml_data',
86
+ 'datadir' => hiera_datadir(host)
87
+ }
88
+ }}
89
+
90
+ if Simp::BeakerHelpers::Snapshot.exist?(host, 'puppet_installed')
91
+ Simp::BeakerHelpers::Snapshot.restore(host, 'puppet_installed')
92
+ else
93
+ Simp::BeakerHelpers::Snapshot.save(host, 'puppet_installed')
94
+ end
95
+
96
+ describe 'windows hosts coexising with linux hosts' do
97
+ context "on #{host}" do
98
+ it 'should have puppet installed' do
99
+ on(host, 'puppet --version')
100
+ end
101
+
102
+ it 'should be able to set the hiera config' do
103
+ set_hiera_config_on(host, hiera_config)
104
+ end
105
+
106
+ it 'should be able to set the hieradata' do
107
+ set_hieradata_on(host, hieradata)
108
+ end
109
+
110
+ it 'should be able to run puppet' do
111
+ output = apply_manifest_on(host, manifest).stdout
112
+
113
+ expect(output).to include "defined 'message' as 'test'"
114
+ end
115
+ end
116
+ end
117
+ end
118
+ end
119
+ end
@@ -0,0 +1,2 @@
1
+ ---
2
+ 'default_run': true
@@ -0,0 +1,33 @@
1
+ <%
2
+ if ENV['BEAKER_HYPERVISOR']
3
+ hypervisor = ENV['BEAKER_HYPERVISOR']
4
+ else
5
+ hypervisor = 'vagrant'
6
+ end
7
+ -%>
8
+ HOSTS:
9
+ win:
10
+ roles:
11
+ - windows
12
+ platform: windows-server-amd64
13
+ box: opentable/win-2012r2-standard-amd64-nocm # VBOX ONLY
14
+ hypervisor: <%= hypervisor %>
15
+ vagrant_memsize: 2048
16
+ vagrant_cpus: 2
17
+ user: vagrant
18
+ is_cygwin: false
19
+
20
+ el7:
21
+ roles:
22
+ - default
23
+ platform: el-7-x86_64
24
+ box: centos/7
25
+ hypervisor: <%= hypervisor %>
26
+
27
+ CONFIG:
28
+ log_level: verbose
29
+ type: aio
30
+ vagrant_memsize: 256
31
+ <% if ENV['BEAKER_PUPPET_ENVIRONMENT'] -%>
32
+ puppet_environment: <%= ENV['BEAKER_PUPPET_ENVIRONMENT'] %>
33
+ <% end -%>
@@ -0,0 +1,35 @@
1
+ <%
2
+ if ENV['BEAKER_HYPERVISOR']
3
+ hypervisor = ENV['BEAKER_HYPERVISOR']
4
+ else
5
+ hypervisor = 'vagrant'
6
+ end
7
+ -%>
8
+ HOSTS:
9
+ win:
10
+ roles:
11
+ - windows
12
+ platform: windows-server-amd64
13
+ box: gusztavvargadr/windows-server
14
+ box_version: 1607.0.1909
15
+ hypervisor: <%= hypervisor %>
16
+ vagrant_memsize: 2048
17
+ vagrant_cpus: 2
18
+ user: vagrant
19
+ communicator: winrm
20
+ is_cygwin: false
21
+
22
+ el7:
23
+ roles:
24
+ - default
25
+ platform: el-7-x86_64
26
+ box: centos/7
27
+ hypervisor: <%= hypervisor %>
28
+
29
+ CONFIG:
30
+ log_level: verbose
31
+ type: aio
32
+ vagrant_memsize: 256
33
+ <% if ENV['BEAKER_PUPPET_ENVIRONMENT'] -%>
34
+ puppet_environment: <%= ENV['BEAKER_PUPPET_ENVIRONMENT'] %>
35
+ <% end -%>
@@ -0,0 +1,34 @@
1
+ <%
2
+ if ENV['BEAKER_HYPERVISOR']
3
+ hypervisor = ENV['BEAKER_HYPERVISOR']
4
+ else
5
+ hypervisor = 'vagrant'
6
+ end
7
+ -%>
8
+ HOSTS:
9
+ win:
10
+ roles:
11
+ - windows
12
+ platform: windows-server-amd64
13
+ box: gusztavvargadr/windows-server
14
+ hypervisor: <%= hypervisor %>
15
+ vagrant_memsize: 2048
16
+ vagrant_cpus: 2
17
+ user: vagrant
18
+ communicator: winrm
19
+ is_cygwin: false
20
+
21
+ el7:
22
+ roles:
23
+ - default
24
+ platform: el-7-x86_64
25
+ box: centos/7
26
+ hypervisor: <%= hypervisor %>
27
+
28
+ CONFIG:
29
+ log_level: verbose
30
+ type: aio
31
+ vagrant_memsize: 256
32
+ <% if ENV['BEAKER_PUPPET_ENVIRONMENT'] -%>
33
+ puppet_environment: <%= ENV['BEAKER_PUPPET_ENVIRONMENT'] %>
34
+ <% end -%>