puppet-lint 0.4.0.pre1 → 1.0.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.
- data/.travis.yml +3 -4
- data/Gemfile +2 -5
- data/README.md +2 -149
- data/Rakefile +0 -5
- data/lib/puppet-lint.rb +74 -20
- data/lib/puppet-lint/bin.rb +20 -85
- data/lib/puppet-lint/checkplugin.rb +158 -12
- data/lib/puppet-lint/checks.rb +39 -222
- data/lib/puppet-lint/configuration.rb +12 -31
- data/lib/puppet-lint/data.rb +329 -0
- data/lib/puppet-lint/lexer.rb +37 -30
- data/lib/puppet-lint/lexer/token.rb +14 -16
- data/lib/puppet-lint/monkeypatches/string_prepend.rb +6 -0
- data/lib/puppet-lint/optparser.rb +105 -0
- data/lib/puppet-lint/plugins.rb +28 -9
- data/lib/puppet-lint/plugins/check_classes.rb +162 -238
- data/lib/puppet-lint/plugins/check_comments.rb +40 -25
- data/lib/puppet-lint/plugins/check_conditionals.rb +16 -20
- data/lib/puppet-lint/plugins/check_documentation.rb +14 -20
- data/lib/puppet-lint/plugins/check_nodes.rb +23 -0
- data/lib/puppet-lint/plugins/check_resources.rb +127 -141
- data/lib/puppet-lint/plugins/check_strings.rb +133 -107
- data/lib/puppet-lint/plugins/check_variables.rb +11 -11
- data/lib/puppet-lint/plugins/check_whitespace.rb +86 -92
- data/lib/puppet-lint/tasks/puppet-lint.rb +17 -1
- data/lib/puppet-lint/version.rb +1 -1
- data/puppet-lint.gemspec +4 -2
- data/spec/fixtures/test/manifests/ignore.pp +1 -0
- data/spec/fixtures/test/manifests/ignore_reason.pp +1 -0
- data/spec/puppet-lint/bin_spec.rb +104 -84
- data/spec/puppet-lint/configuration_spec.rb +19 -19
- data/spec/puppet-lint/ignore_overrides_spec.rb +97 -0
- data/spec/puppet-lint/lexer/token_spec.rb +9 -9
- data/spec/puppet-lint/lexer_spec.rb +352 -325
- data/spec/puppet-lint/plugins/check_classes/autoloader_layout_spec.rb +77 -23
- data/spec/puppet-lint/plugins/check_classes/class_inherits_from_params_class_spec.rb +14 -12
- data/spec/puppet-lint/plugins/check_classes/inherits_across_namespaces_spec.rb +18 -14
- data/spec/puppet-lint/plugins/check_classes/names_containing_dash_spec.rb +30 -30
- data/spec/puppet-lint/plugins/check_classes/nested_classes_or_defines_spec.rb +31 -26
- data/spec/puppet-lint/plugins/check_classes/parameter_order_spec.rb +34 -28
- data/spec/puppet-lint/plugins/check_classes/right_to_left_relationship_spec.rb +14 -12
- data/spec/puppet-lint/plugins/check_classes/variable_scope_spec.rb +74 -30
- data/spec/puppet-lint/plugins/check_comments/slash_comments_spec.rb +27 -20
- data/spec/puppet-lint/plugins/check_comments/star_comments_spec.rb +78 -13
- data/spec/puppet-lint/plugins/check_conditionals/case_without_default_spec.rb +17 -12
- data/spec/puppet-lint/plugins/check_conditionals/selector_inside_resource_spec.rb +13 -10
- data/spec/puppet-lint/plugins/check_documentation/documentation_spec.rb +21 -16
- data/spec/puppet-lint/plugins/check_nodes/unquoted_node_name_spec.rb +69 -0
- data/spec/puppet-lint/plugins/check_resources/duplicate_params_spec.rb +42 -38
- data/spec/puppet-lint/plugins/check_resources/ensure_first_param_spec.rb +22 -10
- data/spec/puppet-lint/plugins/check_resources/ensure_not_symlink_target_spec.rb +81 -18
- data/spec/puppet-lint/plugins/check_resources/file_mode_spec.rb +69 -112
- data/spec/puppet-lint/plugins/check_resources/unquoted_file_mode_spec.rb +27 -20
- data/spec/puppet-lint/plugins/check_resources/unquoted_resource_title_spec.rb +177 -171
- data/spec/puppet-lint/plugins/check_strings/double_quoted_strings_spec.rb +165 -88
- data/spec/puppet-lint/plugins/check_strings/only_variable_string_spec.rb +97 -22
- data/spec/puppet-lint/plugins/check_strings/puppet_url_without_modules_spec.rb +25 -0
- data/spec/puppet-lint/plugins/check_strings/quoted_booleans_spec.rb +97 -111
- data/spec/puppet-lint/plugins/check_strings/single_quote_string_with_variables_spec.rb +10 -9
- data/spec/puppet-lint/plugins/check_strings/variables_not_enclosed_spec.rb +53 -53
- data/spec/puppet-lint/plugins/check_variables/variable_contains_dash_spec.rb +26 -14
- data/spec/puppet-lint/plugins/check_whitespace/2sp_soft_tabs_spec.rb +10 -9
- data/spec/puppet-lint/plugins/check_whitespace/80chars_spec.rb +31 -15
- data/spec/puppet-lint/plugins/check_whitespace/arrow_alignment_spec.rb +340 -322
- data/spec/puppet-lint/plugins/check_whitespace/hard_tabs_spec.rb +30 -23
- data/spec/puppet-lint/plugins/check_whitespace/trailing_whitespace_spec.rb +42 -41
- data/spec/puppet-lint_spec.rb +3 -3
- data/spec/spec_helper.rb +109 -116
- metadata +109 -50
- data/spec/puppet-lint/plugins/check_classes/class_parameter_defaults_spec.rb +0 -60
@@ -1,23 +1,25 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe 'right_to_left_relationship' do
|
4
|
-
|
4
|
+
let(:msg) { 'right-to-left (<-) relationship' }
|
5
|
+
|
6
|
+
context 'chain 2 resources left to right' do
|
5
7
|
let(:code) { "Class[foo] -> Class[bar]" }
|
6
8
|
|
7
|
-
|
9
|
+
it 'should not detect any problems' do
|
10
|
+
expect(problems).to have(0).problems
|
11
|
+
end
|
8
12
|
end
|
9
13
|
|
10
|
-
|
14
|
+
context 'chain 2 resources right to left' do
|
11
15
|
let(:code) { "Class[foo] <- Class[bar]" }
|
12
16
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
should_not have_problem :kind => :error
|
21
|
-
}
|
17
|
+
it 'should only detect a single problem' do
|
18
|
+
expect(problems).to have(1).problem
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should create a warning' do
|
22
|
+
expect(problems).to contain_warning(msg).on_line(1).in_column(12)
|
23
|
+
end
|
22
24
|
end
|
23
25
|
end
|
@@ -1,35 +1,37 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe 'variable_scope' do
|
4
|
-
|
4
|
+
let(:msg) { 'top-scope variable being used without an explicit namespace' }
|
5
|
+
|
6
|
+
context 'class with no variables declared accessing top scope' do
|
5
7
|
let(:code) { "
|
6
8
|
class foo {
|
7
9
|
$bar = $baz
|
8
10
|
}"
|
9
11
|
}
|
10
12
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
should_not have_problem :kind => :error
|
19
|
-
}
|
13
|
+
it 'should only detect a single problem' do
|
14
|
+
expect(problems).to have(1).problem
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should create a warning' do
|
18
|
+
expect(problems).to contain_warning(msg).on_line(3).in_column(16)
|
19
|
+
end
|
20
20
|
end
|
21
21
|
|
22
|
-
|
22
|
+
context 'class with no variables declared accessing top scope explicitly' do
|
23
23
|
let(:code) { "
|
24
24
|
class foo {
|
25
25
|
$bar = $::baz
|
26
26
|
}"
|
27
27
|
}
|
28
28
|
|
29
|
-
|
29
|
+
it 'should not detect any problems' do
|
30
|
+
expect(problems).to have(0).problems
|
31
|
+
end
|
30
32
|
end
|
31
33
|
|
32
|
-
|
34
|
+
context 'class with variables declared accessing local scope' do
|
33
35
|
let(:code) { "
|
34
36
|
class foo {
|
35
37
|
$bar = 1
|
@@ -37,48 +39,52 @@ describe 'variable_scope' do
|
|
37
39
|
}"
|
38
40
|
}
|
39
41
|
|
40
|
-
|
42
|
+
it 'should not detect any problems' do
|
43
|
+
expect(problems).to have(0).problems
|
44
|
+
end
|
41
45
|
end
|
42
46
|
|
43
|
-
|
47
|
+
context 'class with parameters accessing local scope' do
|
44
48
|
let(:code) { "
|
45
49
|
class foo($bar='UNSET') {
|
46
50
|
$baz = $bar
|
47
51
|
}"
|
48
52
|
}
|
49
53
|
|
50
|
-
|
54
|
+
it 'should not detect any problems' do
|
55
|
+
expect(problems).to have(0).problems
|
56
|
+
end
|
51
57
|
end
|
52
58
|
|
53
|
-
|
59
|
+
context 'defined type with no variables declared accessing top scope' do
|
54
60
|
let(:code) { "
|
55
61
|
define foo() {
|
56
62
|
$bar = $fqdn
|
57
63
|
}"
|
58
64
|
}
|
59
65
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
should_not have_problem :kind => :error
|
68
|
-
}
|
66
|
+
it 'should only detect a single problem' do
|
67
|
+
expect(problems).to have(1).problem
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'should create a warning' do
|
71
|
+
expect(problems).to contain_warning(msg).on_line(3).in_column(16)
|
72
|
+
end
|
69
73
|
end
|
70
74
|
|
71
|
-
|
75
|
+
context 'defined type with no variables declared accessing top scope explicitly' do
|
72
76
|
let(:code) { "
|
73
77
|
define foo() {
|
74
78
|
$bar = $::fqdn
|
75
79
|
}"
|
76
80
|
}
|
77
81
|
|
78
|
-
|
82
|
+
it 'should not detect any problems' do
|
83
|
+
expect(problems).to have(0).problems
|
84
|
+
end
|
79
85
|
end
|
80
86
|
|
81
|
-
|
87
|
+
context '$name should be auto defined' do
|
82
88
|
let(:code) { "
|
83
89
|
define foo() {
|
84
90
|
$bar = $name
|
@@ -88,6 +94,44 @@ describe 'variable_scope' do
|
|
88
94
|
}"
|
89
95
|
}
|
90
96
|
|
91
|
-
|
97
|
+
it 'should not detect any problems' do
|
98
|
+
expect(problems).to have(0).problems
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
context 'define with required parameter' do
|
103
|
+
let(:code) { "
|
104
|
+
define tomcat::base (
|
105
|
+
$max_perm_gen,
|
106
|
+
$owner = hiera('app_user'),
|
107
|
+
$system_properties = {},
|
108
|
+
) { }"
|
109
|
+
}
|
110
|
+
|
111
|
+
it 'should not detect any problems' do
|
112
|
+
expect(problems).to have(0).problems
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
context 'future parser blocks' do
|
117
|
+
let(:code) { "
|
118
|
+
class foo() {
|
119
|
+
$foo = [1,2]
|
120
|
+
$foo.each |$a, $b| {
|
121
|
+
$a
|
122
|
+
$c
|
123
|
+
}
|
124
|
+
$b
|
125
|
+
}
|
126
|
+
" }
|
127
|
+
|
128
|
+
it 'should only detect a single problem' do
|
129
|
+
expect(problems).to have(2).problem
|
130
|
+
end
|
131
|
+
|
132
|
+
it 'should create two warnings' do
|
133
|
+
expect(problems).to contain_warning(msg).on_line(8).in_column(9)
|
134
|
+
expect(problems).to contain_warning(msg).on_line(6).in_column(11)
|
135
|
+
end
|
92
136
|
end
|
93
137
|
end
|
@@ -1,20 +1,23 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe 'slash_comments' do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
4
|
+
let(:msg) { '// comment found' }
|
5
|
+
|
6
|
+
context 'with fix disabled' do
|
7
|
+
context 'slash comments' do
|
8
|
+
let(:code) { "// foo" }
|
9
|
+
|
10
|
+
it 'should only detect a single problem' do
|
11
|
+
expect(problems).to have(1).problem
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'should create a warning' do
|
15
|
+
expect(problems).to contain_warning(msg).on_line(1).in_column(1)
|
16
|
+
end
|
14
17
|
end
|
15
18
|
end
|
16
19
|
|
17
|
-
|
20
|
+
context 'with fix enabled' do
|
18
21
|
before do
|
19
22
|
PuppetLint.configuration.fix = true
|
20
23
|
end
|
@@ -23,16 +26,20 @@ describe 'slash_comments' do
|
|
23
26
|
PuppetLint.configuration.fix = false
|
24
27
|
end
|
25
28
|
|
26
|
-
|
29
|
+
context 'slash comments' do
|
30
|
+
let(:code) { '// foo' }
|
31
|
+
|
32
|
+
it 'should only detect a single problem' do
|
33
|
+
expect(problems).to have(1).problem
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'should fix the manifest' do
|
37
|
+
expect(problems).to contain_fixed(msg).on_line(1).in_column(1)
|
38
|
+
end
|
27
39
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
:message => '// comment found',
|
32
|
-
:linenumber => 1,
|
33
|
-
:column => 1,
|
34
|
-
})
|
40
|
+
it 'should replace the double slash with a hash' do
|
41
|
+
expect(manifest).to eq("# foo")
|
42
|
+
end
|
35
43
|
end
|
36
|
-
its(:manifest) { should == '# foo' }
|
37
44
|
end
|
38
45
|
end
|
@@ -1,19 +1,84 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe 'star_comments' do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
4
|
+
let(:msg) { '/* */ comment found' }
|
5
|
+
|
6
|
+
context 'with fix disabled' do
|
7
|
+
context 'multiline comment w/ one line of content' do
|
8
|
+
let(:code) { "
|
9
|
+
/* foo
|
10
|
+
*/
|
11
|
+
"}
|
12
|
+
|
13
|
+
it 'should only detect a single problem' do
|
14
|
+
expect(problems).to have(1).problem
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should create a warning' do
|
18
|
+
expect(problems).to contain_warning(msg).on_line(2).in_column(9)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'with fix enabled' do
|
24
|
+
before do
|
25
|
+
PuppetLint.configuration.fix = true
|
26
|
+
end
|
27
|
+
|
28
|
+
after do
|
29
|
+
PuppetLint.configuration.fix = false
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'multiline comment w/ one line of content' do
|
33
|
+
let(:code) { "
|
34
|
+
/* foo
|
35
|
+
*/
|
36
|
+
"}
|
37
|
+
|
38
|
+
let(:fixed) { "
|
39
|
+
# foo
|
40
|
+
"}
|
41
|
+
|
42
|
+
it 'should only detect a single problem' do
|
43
|
+
expect(problems).to have(1).problem
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'should create a warning' do
|
47
|
+
expect(problems).to contain_fixed(msg).on_line(2).in_column(9)
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'should convert the multiline comment' do
|
51
|
+
expect(manifest).to eq(fixed)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
context 'multiline comment w/ multiple line of content' do
|
56
|
+
let(:code) { "
|
57
|
+
/* foo
|
58
|
+
* bar
|
59
|
+
* baz
|
60
|
+
*/
|
61
|
+
notify { 'foo': }
|
62
|
+
"}
|
63
|
+
|
64
|
+
let(:fixed) { "
|
65
|
+
# foo
|
66
|
+
# bar
|
67
|
+
# baz
|
68
|
+
notify { 'foo': }
|
69
|
+
"}
|
70
|
+
|
71
|
+
it 'should only detect a single problem' do
|
72
|
+
expect(problems).to have(1).problem
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'should create a warning' do
|
76
|
+
expect(problems).to contain_fixed(msg).on_line(2).in_column(9)
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'should convert the multiline comment' do
|
80
|
+
expect(manifest).to eq(fixed)
|
81
|
+
end
|
17
82
|
end
|
18
83
|
end
|
19
84
|
end
|
@@ -1,7 +1,9 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe 'case_without_default' do
|
4
|
-
|
4
|
+
let(:msg) { 'case statement without a default case' }
|
5
|
+
|
6
|
+
context 'case statement with a default case' do
|
5
7
|
let(:code) { "
|
6
8
|
case $foo {
|
7
9
|
bar: { }
|
@@ -9,10 +11,12 @@ describe 'case_without_default' do
|
|
9
11
|
}"
|
10
12
|
}
|
11
13
|
|
12
|
-
|
14
|
+
it 'should not detect any problems' do
|
15
|
+
expect(problems).to have(0).problems
|
16
|
+
end
|
13
17
|
end
|
14
18
|
|
15
|
-
|
19
|
+
context 'case statement without a default case' do
|
16
20
|
let(:code) { "
|
17
21
|
case $foo {
|
18
22
|
bar: { }
|
@@ -20,17 +24,16 @@ describe 'case_without_default' do
|
|
20
24
|
}"
|
21
25
|
}
|
22
26
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
})
|
27
|
+
it 'should only detect a single problem' do
|
28
|
+
expect(problems).to have(1).problem
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'should create a warning' do
|
32
|
+
expect(problems).to contain_warning(msg).on_line(2).in_column(7)
|
30
33
|
end
|
31
34
|
end
|
32
35
|
|
33
|
-
|
36
|
+
context 'issue-117' do
|
34
37
|
let(:code) { "
|
35
38
|
$mem = inline_template('<%
|
36
39
|
mem,unit = scope.lookupvar(\'::memorysize\').split
|
@@ -46,6 +49,8 @@ describe 'case_without_default' do
|
|
46
49
|
%><%= mem.to_i %>')
|
47
50
|
"}
|
48
51
|
|
49
|
-
|
52
|
+
it 'should not detect any problems' do
|
53
|
+
expect(problems).to have(0).problems
|
54
|
+
end
|
50
55
|
end
|
51
56
|
end
|
@@ -1,7 +1,9 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe 'selector_inside_resource' do
|
4
|
-
|
4
|
+
let(:msg) { 'selector inside resource block' }
|
5
|
+
|
6
|
+
context 'resource with a selector' do
|
5
7
|
let(:code) { "
|
6
8
|
file { 'foo':
|
7
9
|
ensure => $bar ? {
|
@@ -11,23 +13,24 @@ describe 'selector_inside_resource' do
|
|
11
13
|
}"
|
12
14
|
}
|
13
15
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
})
|
16
|
+
it 'should only detect a single problem' do
|
17
|
+
expect(problems).to have(1).problem
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should create a warning' do
|
21
|
+
expect(problems).to contain_warning(msg).on_line(3).in_column(16)
|
21
22
|
end
|
22
23
|
end
|
23
24
|
|
24
|
-
|
25
|
+
context 'resource with a variable as a attr value' do
|
25
26
|
let(:code) { "
|
26
27
|
file { 'foo',
|
27
28
|
ensure => $bar,
|
28
29
|
}"
|
29
30
|
}
|
30
31
|
|
31
|
-
|
32
|
+
it 'should not detect any problems' do
|
33
|
+
expect(problems).to have(0).problems
|
34
|
+
end
|
32
35
|
end
|
33
36
|
end
|