puppet-lint 0.1.9 → 0.1.10
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +19 -0
- data/bin/puppet-lint +33 -11
- data/lib/puppet-lint.rb +112 -33
- data/lib/puppet-lint/configuration.rb +57 -0
- data/lib/puppet-lint/plugin.rb +122 -11
- data/lib/puppet-lint/plugins/check_classes.rb +57 -68
- data/lib/puppet-lint/plugins/check_conditionals.rb +19 -22
- data/lib/puppet-lint/plugins/check_resources.rb +42 -32
- data/lib/puppet-lint/plugins/check_strings.rb +34 -18
- data/lib/puppet-lint/plugins/check_variables.rb +11 -6
- data/lib/puppet-lint/plugins/check_whitespace.rb +39 -11
- data/puppet-lint.gemspec +3 -1
- data/spec/puppet-lint/check_classes_spec.rb +59 -53
- data/spec/puppet-lint/check_conditionals_spec.rb +5 -9
- data/spec/puppet-lint/check_resources_spec.rb +36 -35
- data/spec/puppet-lint/check_strings_spec.rb +17 -27
- data/spec/puppet-lint/check_variables_spec.rb +8 -3
- data/spec/puppet-lint/check_whitespace_spec.rb +7 -13
- data/spec/spec_helper.rb +98 -0
- metadata +19 -4
@@ -3,79 +3,69 @@ require 'spec_helper'
|
|
3
3
|
describe PuppetLint::Plugins::CheckStrings do
|
4
4
|
subject do
|
5
5
|
klass = described_class.new
|
6
|
-
klass.
|
6
|
+
klass.run(defined?(path).nil? ? '' : path, code)
|
7
7
|
klass
|
8
8
|
end
|
9
9
|
|
10
10
|
describe 'double quoted string containing a variable insinde single quotes' do
|
11
11
|
let(:code) { "exec { \"/usr/bin/wget -O - '${source}' | /usr/bin/apt-key add -\": }" }
|
12
12
|
|
13
|
-
its(:
|
14
|
-
its(:errors) { should be_empty }
|
13
|
+
its(:problems) { should be_empty }
|
15
14
|
end
|
16
15
|
|
17
16
|
describe 'multiple strings in a line' do
|
18
17
|
let(:code) { "\"aoeu\" '${foo}'" }
|
19
18
|
|
20
|
-
its(:
|
21
|
-
|
19
|
+
its(:problems) {
|
20
|
+
should have_problem :kind => :warning, :message => 'double quoted string containing no variables', :linenumber => '1'
|
21
|
+
should have_problem :kind => :error, :message => 'single quoted string containing a variable found', :linenumber => '1'
|
22
|
+
}
|
22
23
|
end
|
23
24
|
|
24
25
|
describe 'string containing only a variable' do
|
25
26
|
let(:code) { '"${foo}"' }
|
26
27
|
|
27
|
-
its(:
|
28
|
-
|
28
|
+
its(:problems) {
|
29
|
+
should only_have_problem :kind => :warning, :message => "string containing only a variable", :linenumber => '1'
|
30
|
+
}
|
29
31
|
end
|
30
32
|
|
31
33
|
describe 'variable not enclosed in {}' do
|
32
34
|
let(:code) { '" $gronk"' }
|
33
35
|
|
34
|
-
its(:
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
if Puppet.version.start_with? "2.7"
|
39
|
-
describe 'variable containing a dash' do
|
40
|
-
let(:code) { '" $foo-bar"' }
|
36
|
+
its(:problems) {
|
37
|
+
should only_have_problem :kind => :warning, :message => "variable not enclosed in {}", :linenumber => '1'
|
38
|
+
}
|
41
39
|
|
42
|
-
its(:warnings) { should include "variable contains a dash on line 1" }
|
43
|
-
its(:errors) { should be_empty }
|
44
|
-
end
|
45
40
|
end
|
46
41
|
|
47
42
|
describe 'double quoted string nested in a single quoted string' do
|
48
43
|
let(:code) { "'grep \"status=sent\" /var/log/mail.log'" }
|
49
44
|
|
50
|
-
its(:
|
51
|
-
its(:errors) { should be_empty }
|
45
|
+
its(:problems) { should be_empty }
|
52
46
|
end
|
53
47
|
|
54
48
|
describe 'double quoted string after a comment' do
|
55
49
|
let(:code) { "service { 'foo': } # \"bar\"" }
|
56
50
|
|
57
|
-
its(:
|
58
|
-
its(:errors) { should be_empty }
|
51
|
+
its(:problems) { should be_empty }
|
59
52
|
end
|
60
53
|
|
61
54
|
describe 'double quoted string containing newline but no variables' do
|
62
55
|
let(:code) { '"foo\n"' }
|
63
56
|
|
64
|
-
its(:
|
65
|
-
its(:errors) { should be_empty }
|
57
|
+
its(:problems) { should be_empty }
|
66
58
|
end
|
67
59
|
|
68
60
|
describe 'quoted false' do
|
69
61
|
let(:code) { "class { 'foo': boolFlag => 'false' }" }
|
70
62
|
|
71
|
-
its(:
|
72
|
-
its(:errors) { should be_empty }
|
63
|
+
its(:problems) { should only_have_problem :kind => :warning, :message => "quoted boolean value found", :linenumber => 1 }
|
73
64
|
end
|
74
65
|
|
75
66
|
describe 'quoted true' do
|
76
67
|
let(:code) { "class { 'foo': boolFlag => 'true' }" }
|
77
68
|
|
78
|
-
its(:
|
79
|
-
its(:errors) { should be_empty }
|
69
|
+
its(:problems) { should only_have_problem :kind => :warning, :message => "quoted boolean value found", :linenumber => 1 }
|
80
70
|
end
|
81
71
|
end
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe PuppetLint::Plugins::CheckVariables do
|
4
4
|
subject do
|
5
5
|
klass = described_class.new
|
6
|
-
klass.
|
6
|
+
klass.run(defined?(path).nil? ? '' : path, code)
|
7
7
|
klass
|
8
8
|
end
|
9
9
|
|
@@ -11,8 +11,13 @@ describe PuppetLint::Plugins::CheckVariables do
|
|
11
11
|
describe 'a variable containing a dash' do
|
12
12
|
let(:code) { "$foo-bar" }
|
13
13
|
|
14
|
-
its(:
|
15
|
-
|
14
|
+
its(:problems) { should have_problem :kind => :warning, :message => "variable contains a dash", :linenumber => 1 }
|
15
|
+
end
|
16
|
+
|
17
|
+
describe 'variable containing a dash' do
|
18
|
+
let(:code) { '" $foo-bar"' }
|
19
|
+
|
20
|
+
its(:problems) { should have_problem :kind => :warning, :message => "variable contains a dash", :linenumber => 1 }
|
16
21
|
end
|
17
22
|
end
|
18
23
|
end
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe PuppetLint::Plugins::CheckWhitespace do
|
4
4
|
subject do
|
5
5
|
klass = described_class.new
|
6
|
-
klass.
|
6
|
+
klass.run(defined?(path).nil? ? '' : path, code)
|
7
7
|
klass
|
8
8
|
end
|
9
9
|
|
@@ -18,8 +18,7 @@ describe PuppetLint::Plugins::CheckWhitespace do
|
|
18
18
|
}"
|
19
19
|
}
|
20
20
|
|
21
|
-
its(:
|
22
|
-
its(:errors) { should be_empty }
|
21
|
+
its(:problems) { should be_empty }
|
23
22
|
end
|
24
23
|
|
25
24
|
describe 'selectors in the middle of a resource' do
|
@@ -33,8 +32,7 @@ describe PuppetLint::Plugins::CheckWhitespace do
|
|
33
32
|
}"
|
34
33
|
}
|
35
34
|
|
36
|
-
its(:
|
37
|
-
its(:errors) { should be_empty }
|
35
|
+
its(:problems) { should be_empty }
|
38
36
|
end
|
39
37
|
|
40
38
|
describe 'file resource with a source line > 80c' do
|
@@ -44,8 +42,7 @@ describe PuppetLint::Plugins::CheckWhitespace do
|
|
44
42
|
}"
|
45
43
|
}
|
46
44
|
|
47
|
-
its(:
|
48
|
-
its(:errors) { should be_empty }
|
45
|
+
its(:problems) { should be_empty }
|
49
46
|
end
|
50
47
|
|
51
48
|
describe 'selector inside a resource' do
|
@@ -58,8 +55,7 @@ describe PuppetLint::Plugins::CheckWhitespace do
|
|
58
55
|
group => 'foo4',
|
59
56
|
mode => '0755'," }
|
60
57
|
|
61
|
-
its(:
|
62
|
-
its(:errors) { should be_empty }
|
58
|
+
its(:problems) { should be_empty }
|
63
59
|
end
|
64
60
|
|
65
61
|
describe 'selector inside a hash inside a resource' do
|
@@ -75,8 +71,7 @@ describe PuppetLint::Plugins::CheckWhitespace do
|
|
75
71
|
group => 'foo4',
|
76
72
|
mode => '0755'," }
|
77
73
|
|
78
|
-
its(:
|
79
|
-
its(:errors) { should be_empty }
|
74
|
+
its(:problems) { should be_empty }
|
80
75
|
end
|
81
76
|
|
82
77
|
describe 'issue #37' do
|
@@ -107,7 +102,6 @@ describe PuppetLint::Plugins::CheckWhitespace do
|
|
107
102
|
}"
|
108
103
|
}
|
109
104
|
|
110
|
-
its(:
|
111
|
-
its(:errors) { should be_empty }
|
105
|
+
its(:problems) { should be_empty }
|
112
106
|
end
|
113
107
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -9,3 +9,101 @@ require 'puppet-lint'
|
|
9
9
|
#PuppetLint::CheckPlugin.any_instance.stub(:error) do |arg|
|
10
10
|
# raise PuppetLint::Error
|
11
11
|
#end
|
12
|
+
|
13
|
+
# filter_array_of_hashes(array, filter) -> an_array
|
14
|
+
#
|
15
|
+
# Filters out hashes by applying filter_hash to each hash
|
16
|
+
# in the array. All set value/key pairs in filter_hash must
|
17
|
+
# match before a hash is allowed.
|
18
|
+
# Returns all hashes that matched in an array.
|
19
|
+
#
|
20
|
+
# filter_array_of_hashes(
|
21
|
+
# [
|
22
|
+
# {:filter => 1, :name => 'one'},
|
23
|
+
# {:filter => 2, :name => 'two'},
|
24
|
+
# {:filter => 3, :name => 'three'},
|
25
|
+
# ],
|
26
|
+
# { :filter => 2 }
|
27
|
+
# )
|
28
|
+
# => [{:filter=>2, :name=>"two"}]
|
29
|
+
#
|
30
|
+
# filter_array_of_hashes([{:f => 1}, {:f => 2}], {})
|
31
|
+
# => [{:f=>1}, {:f=>2}]
|
32
|
+
#
|
33
|
+
def filter_array_of_hashes(array_of_hashes, filter_hash)
|
34
|
+
array_of_hashes.select { |hash_to_check|
|
35
|
+
val = true
|
36
|
+
filter_hash.each do |k,v|
|
37
|
+
if ! hash_to_check.key?(k)
|
38
|
+
val = false
|
39
|
+
break
|
40
|
+
elsif hash_to_check[k].to_s != v.to_s
|
41
|
+
val = false
|
42
|
+
break
|
43
|
+
end
|
44
|
+
end
|
45
|
+
val
|
46
|
+
}
|
47
|
+
end
|
48
|
+
|
49
|
+
RSpec::Matchers.define :have_problem do |filter|
|
50
|
+
|
51
|
+
match do |problems|
|
52
|
+
filter_array_of_hashes(problems, filter).length > 0
|
53
|
+
end
|
54
|
+
|
55
|
+
failure_message_for_should do |problems|
|
56
|
+
message = "could not find any problems matching the filter."
|
57
|
+
message << "
|
58
|
+
* filter = #{filter.inspect}
|
59
|
+
* problems = [
|
60
|
+
"
|
61
|
+
problems.each { |prob| message << " #{prob.inspect}," }
|
62
|
+
message << "
|
63
|
+
]"
|
64
|
+
message
|
65
|
+
end
|
66
|
+
|
67
|
+
failure_message_for_should_not do |problems|
|
68
|
+
message = "some problems matched the filter."
|
69
|
+
message << "
|
70
|
+
* filter = #{filter.inspect}
|
71
|
+
* matched = [
|
72
|
+
"
|
73
|
+
filter_array_of_hashes(problems, filter).each { |prob| message << " #{prob.inspect}," }
|
74
|
+
message << "
|
75
|
+
]"
|
76
|
+
message
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
RSpec::Matchers.define :only_have_problem do |filter|
|
82
|
+
|
83
|
+
match do |actual|
|
84
|
+
res = filter_array_of_hashes(actual, filter)
|
85
|
+
res.length == actual.length
|
86
|
+
end
|
87
|
+
|
88
|
+
failure_message_for_should do |problems|
|
89
|
+
left = problems - filter_problems(actual, filter)
|
90
|
+
message = "There were problems not matching filter."
|
91
|
+
message << "
|
92
|
+
* filter = #{filter.inspect}
|
93
|
+
* unmatched = [
|
94
|
+
"
|
95
|
+
left.each { |prob| message << " #{prob.inspect}," }
|
96
|
+
message << "
|
97
|
+
]"
|
98
|
+
message
|
99
|
+
end
|
100
|
+
|
101
|
+
failure_message_for_should_not do |problems|
|
102
|
+
message = "There were no problems found besides the ones matched with filter."
|
103
|
+
message << "
|
104
|
+
* filter = #{filter.inspect}
|
105
|
+
"
|
106
|
+
message
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: puppet-lint
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 10
|
10
|
+
version: 0.1.10
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Tim Sharpe
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2012-01-11 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: rspec
|
@@ -31,6 +31,20 @@ dependencies:
|
|
31
31
|
version: "0"
|
32
32
|
type: :development
|
33
33
|
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: rdoc
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
none: false
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
hash: 3
|
43
|
+
segments:
|
44
|
+
- 0
|
45
|
+
version: "0"
|
46
|
+
type: :development
|
47
|
+
version_requirements: *id002
|
34
48
|
description: |-
|
35
49
|
Checks your Puppet manifests against the Puppetlabs
|
36
50
|
style guide and alerts you to any discrepancies.
|
@@ -43,6 +57,7 @@ extra_rdoc_files: []
|
|
43
57
|
|
44
58
|
files:
|
45
59
|
- bin/puppet-lint
|
60
|
+
- lib/puppet-lint/configuration.rb
|
46
61
|
- lib/puppet-lint/plugin.rb
|
47
62
|
- lib/puppet-lint/plugins/check_classes.rb
|
48
63
|
- lib/puppet-lint/plugins/check_conditionals.rb
|