puppet-check 1.6.1 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +21 -1
- data/README.md +27 -24
- data/lib/puppet-check/cli.rb +5 -6
- data/lib/puppet-check/data_parser.rb +14 -22
- data/lib/puppet-check/output_results.rb +6 -5
- data/lib/puppet-check/puppet_parser.rb +24 -18
- data/lib/puppet-check/rspec_puppet_support.rb +21 -8
- data/lib/puppet-check/ruby_parser.rb +13 -8
- data/lib/puppet-check/tasks.rb +1 -1
- data/lib/{puppet-check.rb → puppet_check.rb} +23 -24
- data/spec/octocatalog-diff/{octocatalog-diff.cfg.rb → octocatalog_diff.cfg.rb} +6 -6
- data/spec/puppet-check/cli_spec.rb +3 -3
- data/spec/puppet-check/data_parser_spec.rb +41 -43
- data/spec/puppet-check/output_results_spec.rb +9 -18
- data/spec/puppet-check/puppet_parser_spec.rb +19 -17
- data/spec/puppet-check/regression_check_spec.rb +7 -9
- data/spec/puppet-check/rspec_puppet_support_spec.rb +13 -5
- data/spec/puppet-check/ruby_parser_spec.rb +18 -14
- data/spec/puppet-check/tasks_spec.rb +3 -3
- data/spec/{puppet-check_spec.rb → puppet_check_spec.rb} +9 -10
- data/spec/spec_helper.rb +7 -2
- data/spec/system/system_spec.rb +4 -4
- metadata +36 -37
@@ -19,19 +19,19 @@ class PuppetCheck
|
|
19
19
|
self.class.settings = settings
|
20
20
|
|
21
21
|
# settings defaults
|
22
|
-
self.class.defaults
|
22
|
+
self.class.defaults(settings)
|
23
23
|
|
24
24
|
# grab all of the files to be processed
|
25
25
|
files = self.class.parse_paths(paths)
|
26
26
|
|
27
27
|
# parse the files
|
28
|
-
execute_parsers(files, settings
|
28
|
+
execute_parsers(files, settings)
|
29
29
|
|
30
30
|
# output the diagnostic results
|
31
|
-
settings[:output_format] == 'text' ? OutputResults.text : OutputResults.markup
|
31
|
+
settings[:output_format] == 'text' ? OutputResults.text : OutputResults.markup(settings[:output_format])
|
32
32
|
|
33
33
|
# progress to regression checks if no errors in file checks
|
34
|
-
if self.class.settings[:error_files].empty? && (!
|
34
|
+
if self.class.settings[:error_files].empty? && (!settings[:fail_on_warning] || self.class.settings[:warning_files].empty?)
|
35
35
|
begin
|
36
36
|
require_relative 'puppet-check/regression_check'
|
37
37
|
# if octocatalog-diff is not installed then return immediately
|
@@ -41,7 +41,7 @@ class PuppetCheck
|
|
41
41
|
|
42
42
|
# perform smoke checks if there were no errors and the user desires
|
43
43
|
begin
|
44
|
-
catalog = RegressionCheck.smoke(settings[:octonodes], settings[:octoconfig]) if settings[:
|
44
|
+
catalog = RegressionCheck.smoke(settings[:octonodes], settings[:octoconfig]) if settings[:smoke]
|
45
45
|
# smoke check failure? output message and return 2
|
46
46
|
rescue OctocatalogDiff::Errors::CatalogError => err
|
47
47
|
puts 'There was a smoke check error:'
|
@@ -51,7 +51,7 @@ class PuppetCheck
|
|
51
51
|
end
|
52
52
|
# perform regression checks if there were no errors and the user desires
|
53
53
|
# begin
|
54
|
-
# catalog = RegressionCheck.regression(settings[:octonodes], settings[:octoconfig]) if settings[:
|
54
|
+
# catalog = RegressionCheck.regression(settings[:octonodes], settings[:octoconfig]) if settings[:regression]
|
55
55
|
# rescue OctocatalogDiff::Errors::CatalogError => err
|
56
56
|
# puts 'There was a catalog compilation error during the regression check:'
|
57
57
|
# puts err
|
@@ -68,20 +68,19 @@ class PuppetCheck
|
|
68
68
|
end
|
69
69
|
|
70
70
|
# establish default settings
|
71
|
-
def self.defaults
|
72
|
-
# initialize
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
@settings[:regression_check] ||= false
|
71
|
+
def self.defaults(settings)
|
72
|
+
# initialize fail on warning, style check, and regression check bools
|
73
|
+
settings[:fail_on_warning] ||= false
|
74
|
+
settings[:style] ||= false
|
75
|
+
settings[:smoke] ||= false
|
76
|
+
settings[:regression] ||= false
|
78
77
|
|
79
78
|
# initialize ssl keys for eyaml checks
|
80
|
-
|
81
|
-
|
79
|
+
settings[:public] ||= nil
|
80
|
+
settings[:private] ||= nil
|
82
81
|
|
83
82
|
# initialize output format option
|
84
|
-
|
83
|
+
settings[:output_format] ||= 'text'
|
85
84
|
|
86
85
|
# initialize diagnostic output arrays
|
87
86
|
@settings[:error_files] = []
|
@@ -90,12 +89,12 @@ class PuppetCheck
|
|
90
89
|
@settings[:ignored_files] = []
|
91
90
|
|
92
91
|
# initialize octocatalog-diff options
|
93
|
-
|
94
|
-
|
92
|
+
settings[:octoconfig] ||= '.octocatalog-diff.cfg.rb'
|
93
|
+
settings[:octonodes] ||= %w[localhost.localdomain]
|
95
94
|
|
96
95
|
# initialize style arg arrays
|
97
|
-
|
98
|
-
|
96
|
+
settings[:puppetlint_args] ||= []
|
97
|
+
settings[:rubocop_args] ||= []
|
99
98
|
end
|
100
99
|
|
101
100
|
# parse the paths and return the array of files
|
@@ -120,16 +119,16 @@ class PuppetCheck
|
|
120
119
|
end
|
121
120
|
|
122
121
|
# categorize and pass the files out to the parsers to determine their status
|
123
|
-
def execute_parsers(files,
|
122
|
+
def execute_parsers(files, settings)
|
124
123
|
# check manifests
|
125
124
|
manifests, files = files.partition { |file| File.extname(file) == '.pp' }
|
126
|
-
PuppetParser.manifest(manifests,
|
125
|
+
PuppetParser.manifest(manifests, settings[:style], settings[:puppetlint_args]) unless manifests.empty?
|
127
126
|
# check puppet templates
|
128
127
|
templates, files = files.partition { |file| File.extname(file) == '.epp' }
|
129
128
|
PuppetParser.template(templates) unless templates.empty?
|
130
129
|
# check ruby files
|
131
130
|
rubies, files = files.partition { |file| File.extname(file) == '.rb' }
|
132
|
-
RubyParser.ruby(rubies, style,
|
131
|
+
RubyParser.ruby(rubies, settings[:style], settings[:rubocop_args]) unless rubies.empty?
|
133
132
|
# check ruby templates
|
134
133
|
templates, files = files.partition { |file| File.extname(file) == '.erb' }
|
135
134
|
RubyParser.template(templates) unless templates.empty?
|
@@ -144,7 +143,7 @@ class PuppetCheck
|
|
144
143
|
# DataParser.eyaml(eyamls, public, private) unless eyamls.empty?
|
145
144
|
# check misc ruby
|
146
145
|
librarians, files = files.partition { |file| File.basename(file) =~ /(?:Puppet|Module|Rake|Gem)file$/ }
|
147
|
-
RubyParser.librarian(librarians, style,
|
146
|
+
RubyParser.librarian(librarians, settings[:style], settings[:rubocop_args]) unless librarians.empty?
|
148
147
|
# ignore everything else
|
149
148
|
self.class.settings[:ignored_files].concat(files)
|
150
149
|
end
|
@@ -4,13 +4,13 @@ module OctocatalogDiff
|
|
4
4
|
class Config
|
5
5
|
def self.config
|
6
6
|
settings = {}
|
7
|
-
octocatalog_diff_dir = File.dirname(__FILE__)
|
7
|
+
octocatalog_diff_dir = "#{File.dirname(__FILE__)}/"
|
8
8
|
|
9
|
-
settings[:hiera_config] = octocatalog_diff_dir
|
10
|
-
settings[:hiera_path] = octocatalog_diff_dir
|
11
|
-
settings[:fact_file] = octocatalog_diff_dir
|
12
|
-
settings[:puppet_binary] = if
|
13
|
-
octocatalog_diff_dir
|
9
|
+
settings[:hiera_config] = "#{octocatalog_diff_dir}hiera.yaml"
|
10
|
+
settings[:hiera_path] = "#{octocatalog_diff_dir}hieradata"
|
11
|
+
settings[:fact_file] = "#{octocatalog_diff_dir}facts.yaml"
|
12
|
+
settings[:puppet_binary] = if ENV['TRAVIS'] == 'true'
|
13
|
+
"#{octocatalog_diff_dir}../../bin/puppet"
|
14
14
|
else
|
15
15
|
'/usr/local/bin/puppet'
|
16
16
|
end
|
@@ -13,8 +13,8 @@ describe PuppetCheck::CLI do
|
|
13
13
|
expect { PuppetCheck::CLI.parse(%w[-s -f -asdf foo]) }.to raise_error(OptionParser::InvalidOption)
|
14
14
|
end
|
15
15
|
|
16
|
-
it 'allows
|
17
|
-
expect(PuppetCheck::CLI.parse(%w[
|
16
|
+
it 'allows fail on warnings, style, smoke, and regression checks to be enabled' do
|
17
|
+
expect(PuppetCheck::CLI.parse(%w[--fail-on-warnings -s -r --smoke foo])).to include(fail_on_warnings: true, style: true, smoke: true, regression: true)
|
18
18
|
end
|
19
19
|
|
20
20
|
it 'correctly parser EYAML options' do
|
@@ -42,7 +42,7 @@ describe PuppetCheck::CLI do
|
|
42
42
|
end
|
43
43
|
|
44
44
|
it 'correctly parses multiple sets of arguments' do
|
45
|
-
expect(PuppetCheck::CLI.parse(%w[-s
|
45
|
+
expect(PuppetCheck::CLI.parse(%w[-s --puppet-lint puppetlint-arg-one,puppetlint-arg-two --rubocop rubocop-arg-one,rubocop-arg-two foo])).to include(style: true, puppetlint_args: ['--puppetlint-arg-one', '--puppetlint-arg-two'], rubocop_args: ['--except', 'rubocop-arg-one,rubocop-arg-two'])
|
46
46
|
end
|
47
47
|
end
|
48
48
|
end
|
@@ -10,106 +10,104 @@ describe DataParser do
|
|
10
10
|
|
11
11
|
context '.yaml' do
|
12
12
|
it 'puts a bad syntax yaml file in the error files array' do
|
13
|
-
DataParser.yaml([fixtures_dir
|
13
|
+
DataParser.yaml(["#{fixtures_dir}hieradata/syntax.yaml"])
|
14
14
|
expect(PuppetCheck.settings[:error_files][0]).to match(%r{^#{fixtures_dir}hieradata/syntax.yaml:\nblock sequence entries are not allowed})
|
15
15
|
expect(PuppetCheck.settings[:warning_files]).to eql([])
|
16
16
|
expect(PuppetCheck.settings[:clean_files]).to eql([])
|
17
17
|
end
|
18
18
|
it 'puts a good yaml file with potential hiera issues in the warning files array' do
|
19
|
-
DataParser.yaml([fixtures_dir
|
19
|
+
DataParser.yaml(["#{fixtures_dir}hieradata/style.yaml"])
|
20
20
|
expect(PuppetCheck.settings[:error_files]).to eql([])
|
21
21
|
expect(PuppetCheck.settings[:warning_files][0]).to match(%r{^#{fixtures_dir}hieradata/style.yaml:\nValue\(s\) missing in key.*\nValue\(s\) missing in key.*\nThe string --- appears more than once in this data and Hiera may fail to parse it correctly})
|
22
22
|
expect(PuppetCheck.settings[:clean_files]).to eql([])
|
23
23
|
end
|
24
24
|
it 'puts a good yaml file in the clean files array' do
|
25
|
-
DataParser.yaml([fixtures_dir
|
25
|
+
DataParser.yaml(["#{fixtures_dir}hieradata/good.yaml"])
|
26
26
|
expect(PuppetCheck.settings[:error_files]).to eql([])
|
27
27
|
expect(PuppetCheck.settings[:warning_files]).to eql([])
|
28
28
|
expect(PuppetCheck.settings[:clean_files]).to eql(["#{fixtures_dir}hieradata/good.yaml"])
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
end
|
32
|
+
context '.eyaml' do
|
33
|
+
before(:each) do
|
34
|
+
PuppetCheck.settings[:ignored_files] = []
|
35
|
+
end
|
37
36
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
end
|
37
|
+
it 'returns a warning if a public key was not specified' do
|
38
|
+
expect { DataParser.eyaml(['foo.eyaml'], nil, 'private.pem') }.to output("Public X509 and/or Private RSA PKCS7 certs were not specified. EYAML checks will not be executed.\n").to_stderr
|
39
|
+
end
|
40
|
+
it 'returns a warning if a private key was not specified' do
|
41
|
+
expect { DataParser.eyaml(['foo.eyaml'], 'public.pem', nil) }.to output("Public X509 and/or Private RSA PKCS7 certs were not specified. EYAML checks will not be executed.\n").to_stderr
|
42
|
+
end
|
43
|
+
it 'returns a warning if the public key or private key are not existing files' do
|
44
|
+
expect { DataParser.eyaml(['foo.eyaml'], 'public.pem', 'private.pem') }.to output("Specified Public X509 and/or Private RSA PKCS7 certs do not exist. EYAML checks will not be executed.\n").to_stderr
|
45
|
+
end
|
46
|
+
it 'puts a bad syntax eyaml file in the error files array' do
|
47
|
+
# DataParser.eyaml(["#{fixtures_dir}hieradata/syntax.eyaml'], fixtures_dir + 'keys/public_key.pkcs7.pem', fixtures_dir + 'keys/private_key.pkcs7.pem")
|
48
|
+
# expect(PuppetCheck.settings[:error_files][0]).to match(%r{^#{fixtures_dir}hieradata/syntax.eyaml:\nblock sequence entries are not allowed})
|
49
|
+
expect(PuppetCheck.settings[:warning_files]).to eql([])
|
50
|
+
expect(PuppetCheck.settings[:clean_files]).to eql([])
|
51
|
+
end
|
52
|
+
it 'puts a good eyaml file with potential hiera issues in the warning files array' do
|
53
|
+
# DataParser.eyaml(["#{fixtures_dir}hieradata/style.eyaml'], fixtures_dir + 'keys/public_key.pkcs7.pem', fixtures_dir + 'keys/private_key.pkcs7.pem")
|
54
|
+
expect(PuppetCheck.settings[:error_files]).to eql([])
|
55
|
+
# expect(PuppetCheck.settings[:warning_files][0]).to match(%r{^#{fixtures_dir}hieradata/style.eyaml:\nValue\(s\) missing in key.*\nValue\(s\) missing in key.*\nThe string --- appears more than once in this data and Hiera will fail to parse it correctly})
|
56
|
+
expect(PuppetCheck.settings[:clean_files]).to eql([])
|
57
|
+
end
|
58
|
+
it 'puts a good eyaml file in the clean files array' do
|
59
|
+
# DataParser.eyaml(["#{fixtures_dir}hieradata/good.eyaml'], fixtures_dir + 'keys/public_key.pkcs7.pem', fixtures_dir + 'keys/private_key.pkcs7.pem")
|
60
|
+
expect(PuppetCheck.settings[:error_files]).to eql([])
|
61
|
+
expect(PuppetCheck.settings[:warning_files]).to eql([])
|
62
|
+
# expect(PuppetCheck.settings[:clean_files]).to eql(["#{fixtures_dir}hieradata/good.eyaml"])
|
65
63
|
end
|
66
64
|
end
|
67
65
|
|
68
66
|
context '.json' do
|
69
67
|
it 'puts a bad syntax json file in the error files array' do
|
70
|
-
DataParser.json([fixtures_dir
|
68
|
+
DataParser.json(["#{fixtures_dir}hieradata/syntax.json"])
|
71
69
|
expect(PuppetCheck.settings[:error_files][0]).to match(%r{^#{fixtures_dir}hieradata/syntax.json:\n.*unexpected token})
|
72
70
|
expect(PuppetCheck.settings[:warning_files]).to eql([])
|
73
71
|
expect(PuppetCheck.settings[:clean_files]).to eql([])
|
74
72
|
end
|
75
73
|
it 'puts a bad metadata json file in the error files array' do
|
76
|
-
DataParser.json([fixtures_dir
|
74
|
+
DataParser.json(["#{fixtures_dir}metadata_syntax/metadata.json"])
|
77
75
|
expect(PuppetCheck.settings[:error_files][0]).to match(%r{^#{fixtures_dir}metadata_syntax/metadata.json:\nRequired field.*\nField 'requirements'.*\nDuplicate dependencies.*\nDeprecated field.*\nSummary exceeds})
|
78
76
|
expect(PuppetCheck.settings[:warning_files]).to eql([])
|
79
77
|
expect(PuppetCheck.settings[:clean_files]).to eql([])
|
80
78
|
end
|
81
79
|
it 'puts a bad style metadata json file in the warning files array' do
|
82
|
-
DataParser.json([fixtures_dir
|
80
|
+
DataParser.json(["#{fixtures_dir}metadata_style/metadata.json"])
|
83
81
|
expect(PuppetCheck.settings[:error_files]).to eql([])
|
84
82
|
expect(PuppetCheck.settings[:warning_files][0]).to match(%r{^#{fixtures_dir}metadata_style/metadata.json:\n'pe' is missing an upper bound.\n.*operatingsystem_support.*\nLicense identifier})
|
85
83
|
expect(PuppetCheck.settings[:clean_files]).to eql([])
|
86
84
|
end
|
87
85
|
it 'puts another bad style metadata json file in the warning files array' do
|
88
|
-
DataParser.json([fixtures_dir
|
86
|
+
DataParser.json(["#{fixtures_dir}metadata_style_two/metadata.json"])
|
89
87
|
expect(PuppetCheck.settings[:error_files]).to eql([])
|
90
88
|
expect(PuppetCheck.settings[:warning_files][0]).to match(%r{^#{fixtures_dir}metadata_style_two/metadata.json:\n'puppetlabs/one' has non-semantic versioning.*\n'puppetlabs/two' is missing an upper bound\.\n.*operatingsystem.*\n.*operatingsystemrelease})
|
91
89
|
expect(PuppetCheck.settings[:clean_files]).to eql([])
|
92
90
|
end
|
93
91
|
it 'puts a bad task metadata json file in the warning files array' do
|
94
|
-
DataParser.json([fixtures_dir
|
92
|
+
DataParser.json(["#{fixtures_dir}task_metadata/task_bad.json"])
|
95
93
|
expect(PuppetCheck.settings[:error_files]).to eql([])
|
96
94
|
expect(PuppetCheck.settings[:warning_files][0]).to match(%r{^#{fixtures_dir}task_metadata/task_bad.json:\ndescription value is not a String\ninput_method value is not one of environment, stdin, or powershell\nparameters value is not a Hash\npuppet_task_version value is not an Integer\nsupports_noop value is not a Boolean})
|
97
95
|
expect(PuppetCheck.settings[:clean_files]).to eql([])
|
98
96
|
end
|
99
97
|
it 'puts a good json file in the clean files array' do
|
100
|
-
DataParser.json([fixtures_dir
|
98
|
+
DataParser.json(["#{fixtures_dir}hieradata/good.json"])
|
101
99
|
expect(PuppetCheck.settings[:error_files]).to eql([])
|
102
100
|
expect(PuppetCheck.settings[:warning_files]).to eql([])
|
103
101
|
expect(PuppetCheck.settings[:clean_files]).to eql(["#{fixtures_dir}hieradata/good.json"])
|
104
102
|
end
|
105
103
|
it 'puts a good metadata json file in the clean files array' do
|
106
|
-
DataParser.json([fixtures_dir
|
104
|
+
DataParser.json(["#{fixtures_dir}metadata_good/metadata.json"])
|
107
105
|
expect(PuppetCheck.settings[:error_files]).to eql([])
|
108
106
|
expect(PuppetCheck.settings[:warning_files]).to eql([])
|
109
107
|
expect(PuppetCheck.settings[:clean_files]).to eql(["#{fixtures_dir}metadata_good/metadata.json"])
|
110
108
|
end
|
111
109
|
it 'puts a good task metadata json file in the clean files array' do
|
112
|
-
DataParser.json([fixtures_dir
|
110
|
+
DataParser.json(["#{fixtures_dir}task_metadata/task_good.json"])
|
113
111
|
expect(PuppetCheck.settings[:error_files]).to eql([])
|
114
112
|
expect(PuppetCheck.settings[:warning_files]).to eql([])
|
115
113
|
expect(PuppetCheck.settings[:clean_files]).to eql(["#{fixtures_dir}task_metadata/task_good.json"])
|
@@ -37,48 +37,39 @@ describe OutputResults do
|
|
37
37
|
end
|
38
38
|
|
39
39
|
it 'outputs files with errors as yaml' do
|
40
|
-
PuppetCheck.settings[:output_format] = 'yaml'
|
41
40
|
PuppetCheck.settings[:error_files] = ['foo: i had an error']
|
42
|
-
expect { OutputResults.markup }.to output("---\nerrors:\n- 'foo: i had an error'\n").to_stdout
|
41
|
+
expect { OutputResults.markup('yaml') }.to output("---\nerrors:\n- 'foo: i had an error'\n").to_stdout
|
43
42
|
end
|
44
43
|
it 'outputs files with warnings as yaml' do
|
45
|
-
PuppetCheck.settings[:output_format] = 'yaml'
|
46
44
|
PuppetCheck.settings[:warning_files] = ['foo: i had a warning']
|
47
|
-
expect { OutputResults.markup }.to output("---\nwarnings:\n- 'foo: i had a warning'\n").to_stdout
|
45
|
+
expect { OutputResults.markup('yaml') }.to output("---\nwarnings:\n- 'foo: i had a warning'\n").to_stdout
|
48
46
|
end
|
49
47
|
it 'outputs files with no errors or warnings as yaml' do
|
50
|
-
PuppetCheck.settings[:output_format] = 'yaml'
|
51
48
|
PuppetCheck.settings[:clean_files] = ['foo: i was totally good to go']
|
52
|
-
expect { OutputResults.markup }.to output("---\nclean:\n- 'foo: i was totally good to go'\n").to_stdout
|
49
|
+
expect { OutputResults.markup('yaml') }.to output("---\nclean:\n- 'foo: i was totally good to go'\n").to_stdout
|
53
50
|
end
|
54
51
|
it 'outputs files that were not processed as yaml' do
|
55
|
-
PuppetCheck.settings[:output_format] = 'yaml'
|
56
52
|
PuppetCheck.settings[:ignored_files] = ['foo: who knows what i am']
|
57
|
-
expect { OutputResults.markup }.to output("---\nignored:\n- 'foo: who knows what i am'\n").to_stdout
|
53
|
+
expect { OutputResults.markup('yaml') }.to output("---\nignored:\n- 'foo: who knows what i am'\n").to_stdout
|
58
54
|
end
|
59
55
|
it 'outputs files with errors as json' do
|
60
|
-
PuppetCheck.settings[:output_format] = 'json'
|
61
56
|
PuppetCheck.settings[:error_files] = ['foo: i had an error']
|
62
|
-
expect { OutputResults.markup }.to output("{\n \"errors\": [\n \"foo: i had an error\"\n ]\n}\n").to_stdout
|
57
|
+
expect { OutputResults.markup('json') }.to output("{\n \"errors\": [\n \"foo: i had an error\"\n ]\n}\n").to_stdout
|
63
58
|
end
|
64
59
|
it 'outputs files with warnings as json' do
|
65
|
-
PuppetCheck.settings[:output_format] = 'json'
|
66
60
|
PuppetCheck.settings[:warning_files] = ['foo: i had a warning']
|
67
|
-
expect { OutputResults.markup }.to output("{\n \"warnings\": [\n \"foo: i had a warning\"\n ]\n}\n").to_stdout
|
61
|
+
expect { OutputResults.markup('json') }.to output("{\n \"warnings\": [\n \"foo: i had a warning\"\n ]\n}\n").to_stdout
|
68
62
|
end
|
69
63
|
it 'outputs files with no errors or warnings as json' do
|
70
|
-
PuppetCheck.settings[:output_format] = 'json'
|
71
64
|
PuppetCheck.settings[:clean_files] = ['foo: i was totally good to go']
|
72
|
-
expect { OutputResults.markup }.to output("{\n \"clean\": [\n \"foo: i was totally good to go\"\n ]\n}\n").to_stdout
|
65
|
+
expect { OutputResults.markup('json') }.to output("{\n \"clean\": [\n \"foo: i was totally good to go\"\n ]\n}\n").to_stdout
|
73
66
|
end
|
74
67
|
it 'outputs files that were not processed as json' do
|
75
|
-
PuppetCheck.settings[:output_format] = 'json'
|
76
68
|
PuppetCheck.settings[:ignored_files] = ['foo: who knows what i am']
|
77
|
-
expect { OutputResults.markup }.to output("{\n \"ignored\": [\n \"foo: who knows what i am\"\n ]\n}\n").to_stdout
|
69
|
+
expect { OutputResults.markup('json') }.to output("{\n \"ignored\": [\n \"foo: who knows what i am\"\n ]\n}\n").to_stdout
|
78
70
|
end
|
79
71
|
it 'raises an error for an unsupported output format' do
|
80
|
-
|
81
|
-
expect { OutputResults.markup }.to raise_error(RuntimeError, 'puppet-check: Unsupported output format \'awesomesauce\' was specified.')
|
72
|
+
expect { OutputResults.markup('awesomesauce') }.to raise_error(RuntimeError, 'puppet-check: Unsupported output format \'awesomesauce\' was specified.')
|
82
73
|
end
|
83
74
|
end
|
84
75
|
end
|
@@ -10,60 +10,62 @@ describe PuppetParser do
|
|
10
10
|
|
11
11
|
context '.manifest' do
|
12
12
|
it 'puts a bad syntax Puppet manifest in the error files array' do
|
13
|
-
PuppetParser.manifest([fixtures_dir
|
14
|
-
|
15
|
-
|
16
|
-
expect(PuppetCheck.settings[:error_files][0]).to match(%r{^#{fixtures_dir}manifests/syntax.pp:\nSupport for ruby version.*\n.*\nThis Variable has no effect.*\nIllegal variable name})
|
13
|
+
PuppetParser.manifest(["#{fixtures_dir}manifests/syntax.pp"], false, [])
|
14
|
+
if Gem::Version.new(Puppet::PUPPETVERSION) >= Gem::Version.new('6.5.0')
|
15
|
+
expect(PuppetCheck.settings[:error_files][0]).to match(%r{^#{fixtures_dir}manifests/syntax.pp:\nLanguage validation logged 2 errors})
|
17
16
|
else
|
18
17
|
expect(PuppetCheck.settings[:error_files][0]).to match(%r{^#{fixtures_dir}manifests/syntax.pp:\nThis Variable has no effect.*\nIllegal variable name})
|
19
18
|
end
|
20
19
|
expect(PuppetCheck.settings[:warning_files]).to eql([])
|
21
20
|
expect(PuppetCheck.settings[:clean_files]).to eql([])
|
22
21
|
end
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
22
|
+
# puppet 5 api has output issues for this fixture
|
23
|
+
unless Gem::Version.new(Puppet::PUPPETVERSION) < Gem::Version.new('6.0.0')
|
24
|
+
it 'puts a bad syntax at eof Puppet manifest in the error files array' do
|
25
|
+
PuppetParser.manifest(["#{fixtures_dir}manifests/eof_syntax.pp"], false, [])
|
26
|
+
expect(PuppetCheck.settings[:error_files][0]).to match(%r{^#{fixtures_dir}manifests/eof_syntax.pp:\nSyntax error at end of input})
|
27
|
+
expect(PuppetCheck.settings[:warning_files]).to eql([])
|
28
|
+
expect(PuppetCheck.settings[:clean_files]).to eql([])
|
29
|
+
end
|
28
30
|
end
|
29
31
|
it 'puts a bad parser and lint style Puppet manifest in the warning files array' do
|
30
|
-
PuppetParser.manifest([fixtures_dir
|
32
|
+
PuppetParser.manifest(["#{fixtures_dir}manifests/style_parser.pp"], true, [])
|
31
33
|
expect(PuppetCheck.settings[:error_files]).to eql([])
|
32
34
|
expect(PuppetCheck.settings[:warning_files][0]).to match(%r{^#{fixtures_dir}manifests/style_parser.pp:\nUnrecognized escape sequence.*\nUnrecognized escape sequence.*\n.*double quoted string containing})
|
33
35
|
expect(PuppetCheck.settings[:clean_files]).to eql([])
|
34
36
|
end
|
35
37
|
it 'puts a bad lint style Puppet manifest in the warning files array' do
|
36
|
-
PuppetParser.manifest([fixtures_dir
|
38
|
+
PuppetParser.manifest(["#{fixtures_dir}manifests/style_lint.pp"], true, [])
|
37
39
|
expect(PuppetCheck.settings[:error_files]).to eql([])
|
38
|
-
expect(PuppetCheck.settings[:warning_files][0]).to match(%r{^#{fixtures_dir}manifests/style_lint.pp:\n.*double quoted string containing.*\n.*indentation of})
|
40
|
+
expect(PuppetCheck.settings[:warning_files][0]).to match(%r{^#{fixtures_dir}manifests/style_lint.pp:\n.*(?:indentation of|double quoted string containing).*\n.*(?:indentation of|double quoted string containing)})
|
39
41
|
expect(PuppetCheck.settings[:clean_files]).to eql([])
|
40
42
|
end
|
41
43
|
it 'puts a bad style Puppet manifest in the clean files array when puppetlint_args ignores its warnings' do
|
42
|
-
PuppetParser.manifest([fixtures_dir
|
44
|
+
PuppetParser.manifest(["#{fixtures_dir}manifests/style_lint.pp"], true, ['--no-double_quoted_strings-check', '--no-arrow_alignment-check'])
|
43
45
|
expect(PuppetCheck.settings[:error_files]).to eql([])
|
44
46
|
expect(PuppetCheck.settings[:warning_files]).to eql([])
|
45
47
|
expect(PuppetCheck.settings[:clean_files]).to eql(["#{fixtures_dir}manifests/style_lint.pp"])
|
46
48
|
end
|
47
49
|
it 'puts a good Puppet manifest in the clean files array' do
|
48
|
-
PuppetParser.manifest([fixtures_dir
|
50
|
+
PuppetParser.manifest(["#{fixtures_dir}manifests/good.pp"], true, [])
|
49
51
|
expect(PuppetCheck.settings[:error_files]).to eql([])
|
50
52
|
expect(PuppetCheck.settings[:warning_files]).to eql([])
|
51
53
|
expect(PuppetCheck.settings[:clean_files]).to eql(["#{fixtures_dir}manifests/good.pp"])
|
52
54
|
end
|
53
55
|
it 'throws a well specified error for an invalid PuppetLint argument' do
|
54
|
-
expect { PuppetParser.manifest([fixtures_dir
|
56
|
+
expect { PuppetParser.manifest(["#{fixtures_dir}manifests/style_lint.pp"], true, ['--non-existent', '--does-not-exist']) }.to raise_error(RuntimeError, 'puppet-lint: invalid option supplied among --non-existent --does-not-exist')
|
55
57
|
end
|
56
58
|
end
|
57
59
|
|
58
60
|
context '.template' do
|
59
61
|
it 'puts a bad syntax Puppet template in the error files array' do
|
60
|
-
PuppetParser.template([fixtures_dir
|
62
|
+
PuppetParser.template(["#{fixtures_dir}templates/syntax.epp"])
|
61
63
|
expect(PuppetCheck.settings[:error_files][0]).to match(%r{^#{fixtures_dir}templates/syntax.epp:\nThis Name has no effect})
|
62
64
|
expect(PuppetCheck.settings[:warning_files]).to eql([])
|
63
65
|
expect(PuppetCheck.settings[:clean_files]).to eql([])
|
64
66
|
end
|
65
67
|
it 'puts a good Puppet template in the clean files array' do
|
66
|
-
PuppetParser.template([fixtures_dir
|
68
|
+
PuppetParser.template(["#{fixtures_dir}templates/good.epp"])
|
67
69
|
expect(PuppetCheck.settings[:error_files]).to eql([])
|
68
70
|
expect(PuppetCheck.settings[:warning_files]).to eql([])
|
69
71
|
expect(PuppetCheck.settings[:clean_files]).to eql(["#{fixtures_dir}templates/good.epp"])
|
@@ -5,13 +5,11 @@ require_relative '../../lib/puppet-check/regression_check'
|
|
5
5
|
describe RegressionCheck do
|
6
6
|
context '.config' do
|
7
7
|
# json gem got messed up for the EOL Ruby versions
|
8
|
-
if
|
9
|
-
|
10
|
-
expect { RegressionCheck.config(fixtures_dir + 'metadata.json') }.to raise_error(OctocatalogDiff::Errors::ConfigurationFileContentError, 'Configuration must define OctocatalogDiff::Config!')
|
11
|
-
end
|
8
|
+
it 'raise an appropriate error if the file is malformed' do
|
9
|
+
expect { RegressionCheck.config("#{fixtures_dir}metadata.json") }.to raise_error(OctocatalogDiff::Errors::ConfigurationFileContentError, 'Configuration must define OctocatalogDiff::Config!')
|
12
10
|
end
|
13
11
|
it 'loads in a good octocatalog-diff config file' do
|
14
|
-
expect { RegressionCheck.config(octocatalog_diff_dir
|
12
|
+
expect { RegressionCheck.config("#{octocatalog_diff_dir}octocatalog_diff.cfg.rb") }.not_to raise_exception
|
15
13
|
end
|
16
14
|
it 'loads in the settings from the file correctly' do
|
17
15
|
end
|
@@ -19,16 +17,16 @@ describe RegressionCheck do
|
|
19
17
|
|
20
18
|
context '.smoke' do
|
21
19
|
# octocatalog-diff is returning a blank error for these tests
|
22
|
-
unless
|
20
|
+
unless ENV['TRAVIS'] == 'true' || ENV['CIRCLECI'] == 'true'
|
23
21
|
it 'returns a pass for a successful catalog compilation' do
|
24
|
-
expect { RegressionCheck.smoke(['good.example.com'], "#{octocatalog_diff_dir}
|
22
|
+
expect { RegressionCheck.smoke(['good.example.com'], "#{octocatalog_diff_dir}octocatalog_diff.cfg.rb") }.not_to raise_exception
|
25
23
|
end
|
26
24
|
it 'returns a failure for a catalog with an error' do
|
27
|
-
expect { RegressionCheck.smoke(['does_not_exist.example.com'], "#{octocatalog_diff_dir}
|
25
|
+
expect { RegressionCheck.smoke(['does_not_exist.example.com'], "#{octocatalog_diff_dir}octocatalog_diff.cfg.rb") }.to raise_error(OctocatalogDiff::Errors::CatalogError)
|
28
26
|
end
|
29
27
|
end
|
30
28
|
it 'returns a failure for a good and bad catalog' do
|
31
|
-
# RegressionCheck.smoke(['good.example.com', 'syntax_error.example.com'], "#{fixtures_dir}
|
29
|
+
# RegressionCheck.smoke(['good.example.com', 'syntax_error.example.com'], "#{fixtures_dir}octocatalog_diff.cfg.rb")
|
32
30
|
end
|
33
31
|
end
|
34
32
|
|
@@ -1,12 +1,12 @@
|
|
1
|
-
require_relative '../spec_helper
|
1
|
+
require_relative '../spec_helper'
|
2
2
|
require_relative '../../lib/puppet-check/rspec_puppet_support'
|
3
3
|
require 'fileutils'
|
4
4
|
|
5
5
|
describe RSpecPuppetSupport do
|
6
6
|
after(:all) do
|
7
7
|
# cleanup rspec_puppet_setup
|
8
|
-
File.delete(
|
9
|
-
%w[manifests modules].each { |dir| FileUtils.rm_r(
|
8
|
+
File.delete("#{fixtures_dir}/spec/spec_helper.rb")
|
9
|
+
%w[manifests modules].each { |dir| FileUtils.rm_r("#{fixtures_dir}/spec/fixtures/#{dir}") }
|
10
10
|
end
|
11
11
|
|
12
12
|
context '.run' do
|
@@ -14,7 +14,15 @@ describe RSpecPuppetSupport do
|
|
14
14
|
before(:each) { Dir.chdir(fixtures_dir) }
|
15
15
|
|
16
16
|
it 'creates missing directories, missing site.pp, missing symlinks, and a missing spec_helper' do
|
17
|
-
|
17
|
+
# travis ci
|
18
|
+
if ENV['TRAVIS'] == 'true'
|
19
|
+
expect { rspec_puppet_setup }.to output("puppetlabs/gruntmaster has an unspecified, or specified but unsupported, download method.\n").to_stderr
|
20
|
+
# circle ci
|
21
|
+
elsif ENV['CIRCLECI'] == 'true'
|
22
|
+
expect { rspec_puppet_setup }.to output("git is not installed and cannot be used to retrieve dependency modules\nsubversion is not installed and cannot be used to retrieve dependency modules\npuppetlabs/gruntmaster has an unspecified, or specified but unsupported, download method.\n").to_stderr
|
23
|
+
else
|
24
|
+
expect { rspec_puppet_setup }.to output("subversion is not installed and cannot be used to retrieve dependency modules\npuppetlabs/gruntmaster has an unspecified, or specified but unsupported, download method.\n").to_stderr
|
25
|
+
end
|
18
26
|
|
19
27
|
# .file_setup
|
20
28
|
expect(File.directory?('spec/fixtures/manifests')).to be true
|
@@ -24,7 +32,7 @@ describe RSpecPuppetSupport do
|
|
24
32
|
expect(File.file?('spec/spec_helper.rb')).to be true
|
25
33
|
|
26
34
|
# .dependency_setup
|
27
|
-
expect(File.directory?('spec/fixtures/modules/puppetlabs-lvm')).to be true
|
35
|
+
expect(File.directory?('spec/fixtures/modules/puppetlabs-lvm')).to be true unless ENV['CIRCLECI'] == 'true'
|
28
36
|
expect(File.directory?('spec/fixtures/modules/stdlib')).to be true
|
29
37
|
end
|
30
38
|
end
|