puppet-lint 0.2.0 → 0.2.1
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/lib/puppet-lint.rb +1 -3
- data/lib/puppet-lint/configuration.rb +7 -6
- data/lib/puppet-lint/plugin.rb +14 -24
- data/lib/puppet-lint/plugins/check_classes.rb +14 -10
- data/lib/puppet-lint/plugins/check_documentation.rb +10 -14
- data/lib/puppet-lint/plugins/check_resources.rb +56 -73
- data/lib/puppet-lint/version.rb +1 -1
- data/spec/puppet-lint/configuration_spec.rb +4 -1
- data/spec/puppet-lint/plugins/check_classes/autoloader_layout_spec.rb +51 -0
- data/spec/puppet-lint/plugins/check_classes/inherits_across_namespaces_spec.rb +23 -0
- data/spec/puppet-lint/plugins/check_classes/names_containing_dash_spec.rb +45 -0
- data/spec/puppet-lint/plugins/check_classes/nested_classes_or_defines_spec.rb +71 -0
- data/spec/puppet-lint/plugins/check_classes/parameter_order_spec.rb +67 -0
- data/spec/puppet-lint/plugins/check_classes/parameterised_classes_spec.rb +43 -0
- data/spec/puppet-lint/plugins/check_classes/right_to_left_relationship_spec.rb +23 -0
- data/spec/puppet-lint/plugins/check_classes/variable_scope_spec.rb +93 -0
- data/spec/puppet-lint/plugins/check_comments/slash_comments_spec.rb +16 -0
- data/spec/puppet-lint/plugins/check_comments/star_comments_spec.rb +19 -0
- data/spec/puppet-lint/plugins/{check_conditionals_spec.rb → check_conditionals/case_without_default_spec.rb} +1 -39
- data/spec/puppet-lint/plugins/check_conditionals/selector_inside_resource_spec.rb +33 -0
- data/spec/puppet-lint/plugins/{check_documentation_spec.rb → check_documentation/documentation_spec.rb} +1 -9
- data/spec/puppet-lint/plugins/check_resources/duplicate_params_spec.rb +23 -0
- data/spec/puppet-lint/plugins/check_resources/ensure_first_param_spec.rb +43 -0
- data/spec/puppet-lint/plugins/check_resources/ensure_not_symlink_target_spec.rb +26 -0
- data/spec/puppet-lint/plugins/check_resources/file_mode_spec.rb +43 -0
- data/spec/puppet-lint/plugins/check_resources/unquoted_file_mode_spec.rb +11 -0
- data/spec/puppet-lint/plugins/check_resources/unquoted_resource_title_spec.rb +110 -0
- data/spec/puppet-lint/plugins/check_strings/double_quoted_strings_spec.rb +83 -0
- data/spec/puppet-lint/plugins/check_strings/only_variable_string_spec.rb +16 -0
- data/spec/puppet-lint/plugins/check_strings/quoted_booleans_spec.rb +55 -0
- data/spec/puppet-lint/plugins/check_strings/single_quote_string_with_variables_spec.rb +16 -0
- data/spec/puppet-lint/plugins/check_strings/variables_not_enclosed_spec.rb +29 -0
- data/spec/puppet-lint/plugins/{check_variables_spec.rb → check_variables/variable_contains_dash_spec.rb} +1 -9
- data/spec/puppet-lint/plugins/check_whitespace/2sp_soft_tabs_spec.rb +20 -0
- data/spec/puppet-lint/plugins/check_whitespace/80chars_spec.rb +38 -0
- data/spec/puppet-lint/plugins/{check_whitespace_spec.rb → check_whitespace/arrow_alignment_spec.rb} +1 -86
- data/spec/puppet-lint/plugins/check_whitespace/hard_tabs_spec.rb +16 -0
- data/spec/puppet-lint/plugins/check_whitespace/trailing_whitespace_spec.rb +16 -0
- data/spec/spec_helper.rb +17 -0
- metadata +122 -92
- data/spec/puppet-lint/plugins/check_classes_spec.rb +0 -390
- data/spec/puppet-lint/plugins/check_comments_spec.rb +0 -40
- data/spec/puppet-lint/plugins/check_resources_spec.rb +0 -249
- data/spec/puppet-lint/plugins/check_strings_spec.rb +0 -175
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'names_containing_dash' do
|
4
|
+
describe 'module named foo-bar' do
|
5
|
+
let(:code) { 'class foo-bar { }' }
|
6
|
+
let(:fullpath) { '/etc/puppet/modules/foo-bar/manifests/init.pp' }
|
7
|
+
|
8
|
+
its(:problems) do
|
9
|
+
should only_have_problem({
|
10
|
+
:kind => :warning,
|
11
|
+
:message => 'class name containing a dash',
|
12
|
+
:linenumber => 1,
|
13
|
+
:column => 7,
|
14
|
+
})
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe 'define named foo-bar' do
|
19
|
+
let(:code) { 'define foo::foo-bar { }' }
|
20
|
+
let(:fullpath) { '/etc/puppet/modules/foo/manifests/foo-bar.pp' }
|
21
|
+
|
22
|
+
its(:problems) do
|
23
|
+
should only_have_problem({
|
24
|
+
:kind => :warning,
|
25
|
+
:message => 'defined type name containing a dash',
|
26
|
+
:linenumber => 1,
|
27
|
+
:column => 8,
|
28
|
+
})
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe 'class named bar-foo' do
|
33
|
+
let(:code) { 'class foo::bar-foo { }' }
|
34
|
+
let(:fullpath) { '/etc/puppet/modules/foo/manifests/bar-foo.pp' }
|
35
|
+
|
36
|
+
its(:problems) do
|
37
|
+
should only_have_problem({
|
38
|
+
:kind => :warning,
|
39
|
+
:message => 'class name containing a dash',
|
40
|
+
:linenumber => 1,
|
41
|
+
:column => 7,
|
42
|
+
})
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'nested_classes_or_defines' do
|
4
|
+
describe 'class on its own' do
|
5
|
+
let(:code) { "class foo { }" }
|
6
|
+
|
7
|
+
its(:problems) { should be_empty }
|
8
|
+
end
|
9
|
+
|
10
|
+
describe 'class inside a class' do
|
11
|
+
let(:code) { "
|
12
|
+
class foo {
|
13
|
+
class bar {
|
14
|
+
}
|
15
|
+
}"
|
16
|
+
}
|
17
|
+
|
18
|
+
its(:problems) {
|
19
|
+
should have_problem({
|
20
|
+
:kind => :warning,
|
21
|
+
:message => "class defined inside a class",
|
22
|
+
:linenumber => 3,
|
23
|
+
:column => 9,
|
24
|
+
})
|
25
|
+
should_not have_problem :kind => :error
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
describe 'instantiating a parametised class inside a class' do
|
30
|
+
let(:code) { "
|
31
|
+
class bar {
|
32
|
+
class { 'foo':
|
33
|
+
bar => 'foobar'
|
34
|
+
}
|
35
|
+
}"
|
36
|
+
}
|
37
|
+
|
38
|
+
its(:problems) { should be_empty }
|
39
|
+
end
|
40
|
+
|
41
|
+
describe 'instantiating a parametised class inside a define' do
|
42
|
+
let(:code) { "
|
43
|
+
define bar() {
|
44
|
+
class { 'foo':
|
45
|
+
bar => 'foobar'
|
46
|
+
}
|
47
|
+
}"
|
48
|
+
}
|
49
|
+
|
50
|
+
its(:problems) { should be_empty }
|
51
|
+
end
|
52
|
+
|
53
|
+
describe 'define inside a class' do
|
54
|
+
let(:code) { "
|
55
|
+
class foo {
|
56
|
+
define bar() {
|
57
|
+
}
|
58
|
+
}"
|
59
|
+
}
|
60
|
+
|
61
|
+
its(:problems) {
|
62
|
+
should have_problem({
|
63
|
+
:kind => :warning,
|
64
|
+
:message => "define defined inside a class",
|
65
|
+
:linenumber => 3,
|
66
|
+
:column => 9,
|
67
|
+
})
|
68
|
+
should_not have_problem :kind => :error
|
69
|
+
}
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'parameter_order' do
|
4
|
+
describe 'define with attrs in order' do
|
5
|
+
let(:code) { "define foo($bar, $baz='gronk') { }" }
|
6
|
+
|
7
|
+
its(:problems) { should be_empty }
|
8
|
+
end
|
9
|
+
|
10
|
+
describe 'define with parameter that calls a function' do
|
11
|
+
let(:code) { "define foo($bar=extlookup($name)) {}" }
|
12
|
+
|
13
|
+
its(:problems) { should == [] }
|
14
|
+
end
|
15
|
+
|
16
|
+
describe 'define with attrs out of order' do
|
17
|
+
let(:code) { "define foo($bar='baz', $gronk) { }" }
|
18
|
+
|
19
|
+
its(:problems) {
|
20
|
+
should have_problem({
|
21
|
+
:kind => :warning,
|
22
|
+
:message => "optional parameter listed before required parameter",
|
23
|
+
:linenumber => 1,
|
24
|
+
:column => 24,
|
25
|
+
})
|
26
|
+
should_not have_problem :kind => :error
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
describe 'class/define parameter set to another variable' do
|
31
|
+
let(:code) { "
|
32
|
+
define foo($bar, $baz = $name, $gronk=$::fqdn) {
|
33
|
+
}"
|
34
|
+
}
|
35
|
+
|
36
|
+
its(:problems) { should be_empty }
|
37
|
+
end
|
38
|
+
|
39
|
+
describe 'class/define parameter set to another variable with incorrect order' do
|
40
|
+
let(:code) { "
|
41
|
+
define foo($baz = $name, $bar, $gronk=$::fqdn) {
|
42
|
+
}"
|
43
|
+
}
|
44
|
+
|
45
|
+
its(:problems) {
|
46
|
+
should have_problem({
|
47
|
+
:kind => :warning,
|
48
|
+
:message => "optional parameter listed before required parameter",
|
49
|
+
:linenumber => 2,
|
50
|
+
:column => 32,
|
51
|
+
})
|
52
|
+
should_not have_problem :kind => :error
|
53
|
+
}
|
54
|
+
end
|
55
|
+
|
56
|
+
describe 'issue-101' do
|
57
|
+
let(:code) { "
|
58
|
+
define b (
|
59
|
+
$foo,
|
60
|
+
$bar='',
|
61
|
+
$baz={}
|
62
|
+
) { }
|
63
|
+
" }
|
64
|
+
|
65
|
+
its(:problems) { should == [] }
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'parameterised_classes' do
|
4
|
+
describe 'parameterised class with a default value' do
|
5
|
+
let(:code) { "class foo($bar, $baz='gronk') { }" }
|
6
|
+
|
7
|
+
its(:problems) {
|
8
|
+
should only_have_problem({
|
9
|
+
:kind => :warning,
|
10
|
+
:message => 'parameterised class parameter without a default value',
|
11
|
+
:linenumber => 1,
|
12
|
+
:column => 11,
|
13
|
+
})
|
14
|
+
}
|
15
|
+
end
|
16
|
+
|
17
|
+
describe 'parameterised class that inherits from a params class' do
|
18
|
+
let(:code) { "class foo($bar = $name) inherits foo::params { }" }
|
19
|
+
|
20
|
+
its(:problems) {
|
21
|
+
should have_problem({
|
22
|
+
:kind => :warning,
|
23
|
+
:message => "class inheriting from params class",
|
24
|
+
:linenumber => 1,
|
25
|
+
:column => 34,
|
26
|
+
})
|
27
|
+
should_not have_problem :kind => :error
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
describe 'class without parameters' do
|
32
|
+
let(:code) {"
|
33
|
+
class myclass {
|
34
|
+
|
35
|
+
if ( $::lsbdistcodename == 'squeeze' ) {
|
36
|
+
#TODO
|
37
|
+
}
|
38
|
+
}
|
39
|
+
"}
|
40
|
+
|
41
|
+
its(:problems) { should == [] }
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'right_to_left_relationship' do
|
4
|
+
describe 'chain 2 resources left to right' do
|
5
|
+
let(:code) { "Class[foo] -> Class[bar]" }
|
6
|
+
|
7
|
+
its(:problems) { should be_empty }
|
8
|
+
end
|
9
|
+
|
10
|
+
describe 'chain 2 resources right to left' do
|
11
|
+
let(:code) { "Class[foo] <- Class[bar]" }
|
12
|
+
|
13
|
+
its(:problems) {
|
14
|
+
should have_problem({
|
15
|
+
:kind => :warning,
|
16
|
+
:message => "right-to-left (<-) relationship",
|
17
|
+
:linenumber => 1,
|
18
|
+
:column => 12,
|
19
|
+
})
|
20
|
+
should_not have_problem :kind => :error
|
21
|
+
}
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'variable_scope' do
|
4
|
+
describe 'class with no variables declared accessing top scope' do
|
5
|
+
let(:code) { "
|
6
|
+
class foo {
|
7
|
+
$bar = $baz
|
8
|
+
}"
|
9
|
+
}
|
10
|
+
|
11
|
+
its(:problems) {
|
12
|
+
should have_problem({
|
13
|
+
:kind => :warning,
|
14
|
+
:message => "top-scope variable being used without an explicit namespace",
|
15
|
+
:linenumber => 3,
|
16
|
+
:column => 16,
|
17
|
+
})
|
18
|
+
should_not have_problem :kind => :error
|
19
|
+
}
|
20
|
+
end
|
21
|
+
|
22
|
+
describe 'class with no variables declared accessing top scope explicitly' do
|
23
|
+
let(:code) { "
|
24
|
+
class foo {
|
25
|
+
$bar = $::baz
|
26
|
+
}"
|
27
|
+
}
|
28
|
+
|
29
|
+
its(:problems) { should be_empty }
|
30
|
+
end
|
31
|
+
|
32
|
+
describe 'class with variables declared accessing local scope' do
|
33
|
+
let(:code) { "
|
34
|
+
class foo {
|
35
|
+
$bar = 1
|
36
|
+
$baz = $bar
|
37
|
+
}"
|
38
|
+
}
|
39
|
+
|
40
|
+
its(:problems) { should be_empty }
|
41
|
+
end
|
42
|
+
|
43
|
+
describe 'class with parameters accessing local scope' do
|
44
|
+
let(:code) { "
|
45
|
+
class foo($bar='UNSET') {
|
46
|
+
$baz = $bar
|
47
|
+
}"
|
48
|
+
}
|
49
|
+
|
50
|
+
its(:problems) { should be_empty }
|
51
|
+
end
|
52
|
+
|
53
|
+
describe 'defined type with no variables declared accessing top scope' do
|
54
|
+
let(:code) { "
|
55
|
+
define foo() {
|
56
|
+
$bar = $fqdn
|
57
|
+
}"
|
58
|
+
}
|
59
|
+
|
60
|
+
its(:problems) {
|
61
|
+
should have_problem({
|
62
|
+
:kind => :warning,
|
63
|
+
:message => "top-scope variable being used without an explicit namespace",
|
64
|
+
:linenumber => 3,
|
65
|
+
:column => 16,
|
66
|
+
})
|
67
|
+
should_not have_problem :kind => :error
|
68
|
+
}
|
69
|
+
end
|
70
|
+
|
71
|
+
describe 'defined type with no variables declared accessing top scope explicitly' do
|
72
|
+
let(:code) { "
|
73
|
+
define foo() {
|
74
|
+
$bar = $::fqdn
|
75
|
+
}"
|
76
|
+
}
|
77
|
+
|
78
|
+
its(:problems) { should be_empty }
|
79
|
+
end
|
80
|
+
|
81
|
+
describe '$name should be auto defined' do
|
82
|
+
let(:code) { "
|
83
|
+
define foo() {
|
84
|
+
$bar = $name
|
85
|
+
$baz = $title
|
86
|
+
$gronk = $module_name
|
87
|
+
$meep = $1
|
88
|
+
}"
|
89
|
+
}
|
90
|
+
|
91
|
+
its(:problems) { should be_empty }
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'slash_comments' do
|
4
|
+
describe 'slash comments' do
|
5
|
+
let(:code) { "// foo" }
|
6
|
+
|
7
|
+
its(:problems) do
|
8
|
+
should only_have_problem({
|
9
|
+
:kind => :warning,
|
10
|
+
:message => '// comment found',
|
11
|
+
:linenumber => 1,
|
12
|
+
:column => 1,
|
13
|
+
})
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'star_comments' do
|
4
|
+
describe 'slash asterisk comment' do
|
5
|
+
let(:code) { "
|
6
|
+
/* foo
|
7
|
+
*/
|
8
|
+
"}
|
9
|
+
|
10
|
+
its(:problems) do
|
11
|
+
should only_have_problem({
|
12
|
+
:kind => :warning,
|
13
|
+
:message => '/* */ comment found',
|
14
|
+
:linenumber => 2,
|
15
|
+
:column => 7,
|
16
|
+
})
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -1,44 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe
|
4
|
-
subject do
|
5
|
-
klass = described_class.new
|
6
|
-
fileinfo = {}
|
7
|
-
fileinfo[:fullpath] = defined?(fullpath).nil? ? '' : fullpath
|
8
|
-
klass.run(fileinfo, code)
|
9
|
-
klass
|
10
|
-
end
|
11
|
-
|
12
|
-
describe 'resource with a selector' do
|
13
|
-
let(:code) { "
|
14
|
-
file { 'foo':
|
15
|
-
ensure => $bar ? {
|
16
|
-
true => present,
|
17
|
-
default => absent,
|
18
|
-
},
|
19
|
-
}"
|
20
|
-
}
|
21
|
-
|
22
|
-
its(:problems) do
|
23
|
-
should only_have_problem({
|
24
|
-
:kind => :warning,
|
25
|
-
:message => 'selector inside resource block',
|
26
|
-
:linenumber => 3,
|
27
|
-
:column => 16,
|
28
|
-
})
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
describe 'resource with a variable as a attr value' do
|
33
|
-
let(:code) { "
|
34
|
-
file { 'foo',
|
35
|
-
ensure => $bar,
|
36
|
-
}"
|
37
|
-
}
|
38
|
-
|
39
|
-
its(:problems) { should be_empty }
|
40
|
-
end
|
41
|
-
|
3
|
+
describe 'case_without_default' do
|
42
4
|
describe 'case statement with a default case' do
|
43
5
|
let(:code) { "
|
44
6
|
case $foo {
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'selector_inside_resource' do
|
4
|
+
describe 'resource with a selector' do
|
5
|
+
let(:code) { "
|
6
|
+
file { 'foo':
|
7
|
+
ensure => $bar ? {
|
8
|
+
true => present,
|
9
|
+
default => absent,
|
10
|
+
},
|
11
|
+
}"
|
12
|
+
}
|
13
|
+
|
14
|
+
its(:problems) do
|
15
|
+
should only_have_problem({
|
16
|
+
:kind => :warning,
|
17
|
+
:message => 'selector inside resource block',
|
18
|
+
:linenumber => 3,
|
19
|
+
:column => 16,
|
20
|
+
})
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe 'resource with a variable as a attr value' do
|
25
|
+
let(:code) { "
|
26
|
+
file { 'foo',
|
27
|
+
ensure => $bar,
|
28
|
+
}"
|
29
|
+
}
|
30
|
+
|
31
|
+
its(:problems) { should be_empty }
|
32
|
+
end
|
33
|
+
end
|