puppet-lint-nine-check 0.3.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,257 @@
1
+ require "spec_helper"
2
+
3
+ describe "class_alignment_params_newline" do
4
+ let(:msg) { "`%s` should be in a new line (expected in line %d, but found it in line %d)" }
5
+
6
+ context "with fix disabled" do
7
+ context "tidy code" do
8
+ let(:code) do
9
+ <<-END
10
+ class bar(
11
+ $someparam = 'somevalue',
12
+ $another,
13
+ String $nope,
14
+ $foo,
15
+ Variant[Undef, Enum['UNSET'], Stdlib::Port] $db_port,
16
+ # $aaa,
17
+ String $third = 'meh',
18
+ Array[Int, Int] $asdf = 'asdf',
19
+ ) { }
20
+ END
21
+ end
22
+
23
+ it "should detect 0 problems" do
24
+ expect(problems).to have(0).problems
25
+ end
26
+ end
27
+
28
+ context "messy code" do
29
+ let(:code) do
30
+ <<-END
31
+ class bar( $someparam = 'somevalue',
32
+ $another, String $nope, $foo,
33
+ Variant[Undef, Enum['UNSET'], Stdlib::Port] $db_port,
34
+ # $aaa,
35
+ String $third = 'meh', Array[Int, Int] $asdf = 'asdf',
36
+ ) { }
37
+ END
38
+ end
39
+
40
+ it "should detect 4 problems" do
41
+ expect(problems).to have(4).problems
42
+ end
43
+
44
+ it "should create four warnings" do
45
+ expect(problems).to contain_warning(format(msg, "$someparam", 2, 1)).on_line(1).in_column(77)
46
+ expect(problems).to contain_warning(format(msg, "$nope", 3, 2)).on_line(2).in_column(30)
47
+ expect(problems).to contain_warning(format(msg, "$foo", 3, 2)).on_line(2).in_column(37)
48
+ expect(problems).to contain_warning(format(msg, "$asdf", 6, 5)).on_line(5).in_column(101)
49
+ end
50
+ end
51
+ end
52
+
53
+ context "with fix enabled" do
54
+ before do
55
+ PuppetLint.configuration.fix = true
56
+ end
57
+
58
+ after do
59
+ PuppetLint.configuration.fix = false
60
+ end
61
+
62
+ context "messy code" do
63
+ let(:code) do
64
+ <<-END
65
+ class bar( $someparam = 'somevalue',
66
+ $another, String $nope, $foo,
67
+ Variant[Undef, Enum['UNSET'], Stdlib::Port] $db_port,
68
+ # $aaa,
69
+ String $third = 'meh', Array[Int, Int] $asdf = 'asdf',
70
+ ) { }
71
+ END
72
+ end
73
+
74
+ let(:fixed) do
75
+ <<-END
76
+ class bar(
77
+ $someparam = 'somevalue',
78
+ $another,
79
+ String $nope,
80
+ $foo,
81
+ Variant[Undef, Enum['UNSET'], Stdlib::Port] $db_port,
82
+ # $aaa,
83
+ String $third = 'meh',
84
+ Array[Int, Int] $asdf = 'asdf',
85
+ ) { }
86
+ END
87
+ end
88
+
89
+ it "should fix the problems" do
90
+ expect(manifest).to eq(fixed)
91
+ end
92
+ end
93
+
94
+ context "in a single line" do
95
+ let(:code) do
96
+ <<-END
97
+ class foo ($foo = 1, $bar = $a) {}
98
+ class foo ($foo = 1, $bar = $a, $foo = 1, $bar = $a, $foo = 1, $bar = $a) {}
99
+
100
+ class bar ($foo = 1, $bar = $a,) {}
101
+ class bar ($foo = 1, $bar = $a, $foo = 1, $bar = $a, $foo = 1, $bar = $a,) {}
102
+
103
+ class aaa ( $foo = 1, $bar = $a,) {}
104
+ class aaa ( Integer $foo = 1, $bar = $a, $foo = 1, $bar = $a, $foo = 1, $bar = $a,) {}
105
+
106
+ class bbb ( $foo = 1, $bar = $a, ) {}
107
+ class bbb ( $foo = 1, $bar = $a, $foo = 1, $bar = $a, $foo = 1, $bar = $a, ) {}
108
+
109
+ class ccc ($foo = 1) {}
110
+
111
+ class ddd {}
112
+
113
+ class eee (
114
+ $foo = 1,
115
+ $workers = max($::processorcount, 1),
116
+ $database_path = $aaa,) inherits sap_zabbix::params { }
117
+ { }
118
+
119
+ class fff ($foo, $bar=[], $foo, $bar=[], $foo, $bar=[], $listen_ips = [$::ipaddress]) {}
120
+
121
+ define ggg ($foo, $bar=[]) {}
122
+
123
+ define long_ggg ($foo, $bar=[], $foo, $bar=[], $foo, $bar=[], $foo, $bar=[]) {}
124
+
125
+ define asdf ($prefix, $pattern, $expire, $port, $prefix, $pattern, $expire, $port) { }
126
+
127
+ define asdf ($prefix, $pattern, $expire, $port, $prefix, $pattern=$a and $b, $epe=-$foo, $port=!$foo) { }
128
+
129
+ class aaa (
130
+ $aaa = func('bbb', $ccc), $bar = $a, $foo = 1, $bar = $a,
131
+ ) {}
132
+
133
+ class name (
134
+ Boolean $foo,
135
+ Optional[String[1]] $bar,
136
+ ) { }
137
+ END
138
+ end
139
+
140
+ let(:fixed) do
141
+ <<-END
142
+ class foo ($foo = 1, $bar = $a) {}
143
+ class foo (
144
+ $foo = 1,
145
+ $bar = $a,
146
+ $foo = 1,
147
+ $bar = $a,
148
+ $foo = 1,
149
+ $bar = $a
150
+ ) {}
151
+
152
+ class bar ($foo = 1, $bar = $a,) {}
153
+ class bar (
154
+ $foo = 1,
155
+ $bar = $a,
156
+ $foo = 1,
157
+ $bar = $a,
158
+ $foo = 1,
159
+ $bar = $a,
160
+ ) {}
161
+
162
+ class aaa ( $foo = 1, $bar = $a,) {}
163
+ class aaa (
164
+ Integer $foo = 1,
165
+ $bar = $a,
166
+ $foo = 1,
167
+ $bar = $a,
168
+ $foo = 1,
169
+ $bar = $a,
170
+ ) {}
171
+
172
+ class bbb ( $foo = 1, $bar = $a, ) {}
173
+ class bbb (
174
+ $foo = 1,
175
+ $bar = $a,
176
+ $foo = 1,
177
+ $bar = $a,
178
+ $foo = 1,
179
+ $bar = $a,
180
+ ) {}
181
+
182
+ class ccc ($foo = 1) {}
183
+
184
+ class ddd {}
185
+
186
+ class eee (
187
+ $foo = 1,
188
+ $workers = max($::processorcount, 1),
189
+ $database_path = $aaa,
190
+ ) inherits sap_zabbix::params { }
191
+ { }
192
+
193
+ class fff (
194
+ $foo,
195
+ $bar=[],
196
+ $foo,
197
+ $bar=[],
198
+ $foo,
199
+ $bar=[],
200
+ $listen_ips = [$::ipaddress]
201
+ ) {}
202
+
203
+ define ggg ($foo, $bar=[]) {}
204
+
205
+ define long_ggg (
206
+ $foo,
207
+ $bar=[],
208
+ $foo,
209
+ $bar=[],
210
+ $foo,
211
+ $bar=[],
212
+ $foo,
213
+ $bar=[]
214
+ ) {}
215
+
216
+ define asdf (
217
+ $prefix,
218
+ $pattern,
219
+ $expire,
220
+ $port,
221
+ $prefix,
222
+ $pattern,
223
+ $expire,
224
+ $port
225
+ ) { }
226
+
227
+ define asdf (
228
+ $prefix,
229
+ $pattern,
230
+ $expire,
231
+ $port,
232
+ $prefix,
233
+ $pattern=$a and $b,
234
+ $epe=-$foo,
235
+ $port=!$foo
236
+ ) { }
237
+
238
+ class aaa (
239
+ $aaa = func('bbb', $ccc),
240
+ $bar = $a,
241
+ $foo = 1,
242
+ $bar = $a,
243
+ ) {}
244
+
245
+ class name (
246
+ Boolean $foo,
247
+ Optional[String[1]] $bar,
248
+ ) { }
249
+ END
250
+ end
251
+
252
+ it "should fix the problems" do
253
+ expect(manifest).to eq(fixed)
254
+ end
255
+ end
256
+ end
257
+ end
@@ -0,0 +1,321 @@
1
+ require "spec_helper"
2
+
3
+ describe "class_alignment_params" do
4
+ let(:msg) { "indentation of $ is not properly aligned (expected in column %d, but found it in column %d)" }
5
+
6
+ context "with fix disabled" do
7
+ context "with correct indentation" do
8
+ let(:code) do
9
+ <<-END
10
+ class foo (
11
+ $foo = 1,
12
+ $bar = 2,
13
+ $gronk = 3,
14
+ $baz = 4,
15
+ $meh = 5,
16
+ ) {}
17
+ END
18
+ end
19
+
20
+ it "should not detect any problems" do
21
+ expect(problems).to have(0).problems
22
+ end
23
+ end
24
+
25
+ context "single resource with a misaligned $" do
26
+ let(:code) do
27
+ <<-END
28
+ class foo (
29
+ $foo = 1,
30
+ $bar = 2,
31
+ $gronk = 3,
32
+ $baz = 4,
33
+ $meh = 5,
34
+ ) {}
35
+ END
36
+ end
37
+
38
+ it "should detect four problems" do
39
+ expect(problems).to have(4).problems
40
+ end
41
+
42
+ it "should create four warnings" do
43
+ expect(problems).to contain_warning(format(msg, 13, 11)).on_line(3).in_column(11)
44
+ expect(problems).to contain_warning(format(msg, 13, 11)).on_line(4).in_column(11)
45
+ expect(problems).to contain_warning(format(msg, 13, 11)).on_line(5).in_column(11)
46
+ expect(problems).to contain_warning(format(msg, 13, 12)).on_line(6).in_column(12)
47
+ end
48
+ end
49
+
50
+ context "complex resource with a misaligned $" do
51
+ let(:code) do
52
+ <<-END
53
+ class foo (
54
+ $foo = 1,
55
+ $bar = $baz ? {
56
+ gronk => 2,
57
+ meh => 3,
58
+ },
59
+ $meep = 4,
60
+ $bah= 5,
61
+ ) {}
62
+ END
63
+ end
64
+
65
+ it "should detect three problems" do
66
+ expect(problems).to have(3).problems
67
+ end
68
+
69
+ it "should create three warnings" do
70
+ expect(problems).to contain_warning(format(msg, 13, 11)).on_line(3).in_column(11)
71
+ expect(problems).to contain_warning(format(msg, 13, 15)).on_line(7).in_column(15)
72
+ expect(problems).to contain_warning(format(msg, 13, 17)).on_line(8).in_column(17)
73
+ end
74
+ end
75
+
76
+ context "resource with unaligned $ in commented line" do
77
+ let(:code) do
78
+ <<-END
79
+ class foo (
80
+ $ensure = directory,
81
+ # $purge = true,
82
+ ) {}
83
+ END
84
+ end
85
+
86
+ it "should not detect any problems" do
87
+ expect(problems).to have(0).problems
88
+ end
89
+ end
90
+
91
+ context "multiline resource with a single line of params" do
92
+ let(:code) do
93
+ <<-END
94
+ class mymodule::do_thing (
95
+ $whatever = 'bar', $one = 'two',
96
+ ) {}
97
+ END
98
+ end
99
+
100
+ it "should not detect any problems" do
101
+ expect(problems).to have(0).problems
102
+ end
103
+ end
104
+
105
+ context "resource with aligned $ too far out" do
106
+ let(:code) do
107
+ <<-END
108
+ class foo (
109
+ $ensure = file,
110
+ $mode = '0444',
111
+ ) {}
112
+ END
113
+ end
114
+
115
+ it "should detect 0 problems" do
116
+ expect(problems).to have(0).problems
117
+ end
118
+ end
119
+
120
+ context "resource with multiple params where one is an empty hash" do
121
+ let(:code) do
122
+ <<-END
123
+ class foo (
124
+ $a = true,
125
+ $b = {
126
+ }
127
+ ) {}
128
+ END
129
+ end
130
+
131
+ it "should not detect any problems" do
132
+ expect(problems).to have(0).problems
133
+ end
134
+ end
135
+
136
+ context "multiline resource with multiple params on a line" do
137
+ let(:code) do
138
+ <<-END
139
+ class test (
140
+ $a = 'foo', $bb = 'bar',
141
+ $ccc = 'baz',
142
+ ) {}
143
+ END
144
+ end
145
+
146
+ it "should detect 0 problems" do
147
+ expect(problems).to have(0).problems
148
+ end
149
+ end
150
+ end
151
+
152
+ context "with fix enabled" do
153
+ before do
154
+ PuppetLint.configuration.fix = true
155
+ end
156
+
157
+ after do
158
+ PuppetLint.configuration.fix = false
159
+ end
160
+
161
+ context "single resource with a misaligned $" do
162
+ let(:code) do
163
+ <<-END
164
+ class foo (
165
+ $foo = 1,
166
+ $bar = 2,
167
+ $gronk = 3,
168
+ $baz = 4,
169
+ $meh = 5,
170
+ ) {}
171
+ END
172
+ end
173
+
174
+ let(:fixed) do
175
+ <<-END
176
+ class foo (
177
+ $foo = 1,
178
+ $bar = 2,
179
+ $gronk = 3,
180
+ $baz = 4,
181
+ $meh = 5,
182
+ ) {}
183
+ END
184
+ end
185
+
186
+ it "should detect four problems" do
187
+ expect(problems).to have(4).problems
188
+ end
189
+
190
+ it "should fix the manifest" do
191
+ expect(problems).to contain_fixed(format(msg, 13, 15)).on_line(3).in_column(15)
192
+ expect(problems).to contain_fixed(format(msg, 13, 15)).on_line(4).in_column(15)
193
+ expect(problems).to contain_fixed(format(msg, 13, 17)).on_line(5).in_column(17)
194
+ expect(problems).to contain_fixed(format(msg, 13, 11)).on_line(6).in_column(11)
195
+ end
196
+
197
+ it "should align the class_paramss" do
198
+ expect(manifest).to eq(fixed)
199
+ end
200
+ end
201
+
202
+ context "complex resource with a misaligned =" do
203
+ let(:code) do
204
+ <<-END
205
+ class foo (
206
+ $foo = 1,
207
+ $bar = $baz ? {
208
+ gronk => $a,
209
+ meh => $b,
210
+ },
211
+ $meep= 4,
212
+ $bah = 5,
213
+ ) {}
214
+ END
215
+ end
216
+
217
+ let(:fixed) do
218
+ <<-END
219
+ class foo (
220
+ $foo = 1,
221
+ $bar = $baz ? {
222
+ gronk => $a,
223
+ meh => $b,
224
+ },
225
+ $meep= 4,
226
+ $bah = 5,
227
+ ) {}
228
+ END
229
+ end
230
+
231
+ it "should detect three problems" do
232
+ expect(problems).to have(3).problems
233
+ end
234
+
235
+ it "should fix the manifest" do
236
+ expect(problems).to contain_fixed(format(msg, 13, 11)).on_line(3).in_column(11)
237
+ expect(problems).to contain_fixed(format(msg, 13, 11)).on_line(7).in_column(11)
238
+ expect(problems).to contain_fixed(format(msg, 13, 11)).on_line(8).in_column(11)
239
+ end
240
+
241
+ it "should align the class_paramss" do
242
+ expect(manifest).to eq(fixed)
243
+ end
244
+ end
245
+
246
+ context "multiline resource with multiple params on a line" do
247
+ let(:code) do
248
+ <<-END
249
+ class test (
250
+ $a = 'foo', $bb = 'bar',
251
+ $ccc = 'baz',
252
+ ) {}
253
+ END
254
+ end
255
+
256
+ let(:fixed) do
257
+ <<-END
258
+ class test (
259
+ $a = 'foo', $bb = 'bar',
260
+ $ccc = 'baz',
261
+ ) {}
262
+ END
263
+ end
264
+
265
+ it "should detect 1 problem" do
266
+ expect(problems).to have(1).problems
267
+ end
268
+
269
+ it "should fix 1 problem" do
270
+ expect(problems).to contain_fixed(format(msg, 13, 11)).on_line(3).in_column(11)
271
+ end
272
+
273
+ it "should move the extra param onto its own line and realign" do
274
+ expect(manifest).to eq(fixed)
275
+ end
276
+ end
277
+
278
+ context "multiline resource with inline variables" do
279
+ let(:code) do
280
+ <<-END
281
+ class name (
282
+ $aaa = function('foo', 'bar'),
283
+ $bbb = function('foo', 'bar'),
284
+ Boolean $key1 = false,
285
+ Enum['never', 'allow', 'try', 'demand'] $key2,
286
+ $materializer_version = $foo ? {
287
+ default => "foo ${bar} baz ${gronk} qux 0.4.1-1.el${::facts['operatingsystemmajrelease']}"
288
+ }) { }
289
+ END
290
+ end
291
+
292
+ let(:fixed) do
293
+ <<-END
294
+ class name (
295
+ $aaa = function('foo', 'bar'),
296
+ $bbb = function('foo', 'bar'),
297
+ Boolean $key1 = false,
298
+ Enum['never', 'allow', 'try', 'demand'] $key2,
299
+ $materializer_version = $foo ? {
300
+ default => "foo ${bar} baz ${gronk} qux 0.4.1-1.el${::facts['operatingsystemmajrelease']}"
301
+ }) { }
302
+ END
303
+ end
304
+
305
+ it "should detect 4 problems" do
306
+ expect(problems).to have(4).problems
307
+ end
308
+
309
+ it "should fix 4 problems" do
310
+ expect(problems).to contain_fixed(format(msg, 53, 13)).on_line(2).in_column(13)
311
+ expect(problems).to contain_fixed(format(msg, 53, 15)).on_line(3).in_column(15)
312
+ expect(problems).to contain_fixed(format(msg, 53, 21)).on_line(4).in_column(21)
313
+ expect(problems).to contain_fixed(format(msg, 53, 11)).on_line(6).in_column(11)
314
+ end
315
+
316
+ it "should move the extra param onto its own line and realign" do
317
+ expect(manifest).to eq(fixed)
318
+ end
319
+ end
320
+ end
321
+ end
@@ -0,0 +1,75 @@
1
+ require "spec_helper"
2
+
3
+ describe "no_symbolic_file_modes" do
4
+ let(:msg) { "mode should be a 4 digit octal value, not a symbolic mode" }
5
+
6
+ context "when the manifest has no file resources" do
7
+ let(:code) do
8
+ <<-TEST_CLASS
9
+ class no_file_resource {
10
+ host { 'syslog':
11
+ ip => '10.10.10.10',
12
+ }
13
+ }
14
+ TEST_CLASS
15
+ end
16
+
17
+ it "does not detect any problems" do
18
+ expect(problems.size).to eq(0)
19
+ end
20
+ end
21
+
22
+ context "when file has an all octal mode" do
23
+ let(:code) do
24
+ <<-TEST_CLASS
25
+ class octal_file_mode {
26
+ file { '/tmp/octal-mode':
27
+ mode => '0600',
28
+ }
29
+ }
30
+ TEST_CLASS
31
+ end
32
+
33
+ it "does not detect any problems" do
34
+ expect(problems.size).to eq(0)
35
+ end
36
+ end
37
+
38
+ context "when file mode is specified in a variable" do
39
+ let(:code) do
40
+ <<-TEST_CLASS
41
+ class octal_file_mode {
42
+ $mode = 'ug=rw,o=rx'
43
+
44
+ file { '/tmp/octal-mode':
45
+ mode => $mode,
46
+ }
47
+ }
48
+ TEST_CLASS
49
+ end
50
+
51
+ it "does not detect any problems" do
52
+ expect(problems.size).to eq(0)
53
+ end
54
+ end
55
+
56
+ context "when file has a symbolic mode" do
57
+ let(:code) do
58
+ <<-TEST_CLASS
59
+ class symbolic_file_mode {
60
+ file { '/tmp/symbolic-mode':
61
+ mode => 'ug=rw,o=rx',
62
+ }
63
+ }
64
+ TEST_CLASS
65
+ end
66
+
67
+ it "detects a single problem" do
68
+ expect(problems.size).to eq(1)
69
+ end
70
+
71
+ it "creates a warning" do
72
+ expect(problems).to contain_warning(msg).on_line(3).in_column(21)
73
+ end
74
+ end
75
+ end