1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package unit
16
17 import (
18 "bytes"
19 "fmt"
20 "reflect"
21 "testing"
22 )
23
24 func TestDeserialize(t *testing.T) {
25 tests := []struct {
26 input []byte
27 output []*UnitOption
28 }{
29
30 {
31 []byte(`[Unit]
32 Description=Foo
33 Description=Bar
34 Requires=baz.service
35 After=baz.service
36 `),
37 []*UnitOption{
38 &UnitOption{"Unit", "Description", "Foo"},
39 &UnitOption{"Unit", "Description", "Bar"},
40 &UnitOption{"Unit", "Requires", "baz.service"},
41 &UnitOption{"Unit", "After", "baz.service"},
42 },
43 },
44
45
46 {
47 []byte(`[Unit]
48 Description=Foo
49
50 [Service]
51 ExecStart=/usr/bin/sleep infinity
52
53 [X-Third-Party]
54 Pants=on
55
56 `),
57 []*UnitOption{
58 &UnitOption{"Unit", "Description", "Foo"},
59 &UnitOption{"Service", "ExecStart", "/usr/bin/sleep infinity"},
60 &UnitOption{"X-Third-Party", "Pants", "on"},
61 },
62 },
63
64
65 {
66 []byte(`[Unit]
67 [Service]
68 [X-Third-Party]
69 `),
70 []*UnitOption{},
71 },
72
73
74 {
75 []byte(`[Service]
76 Environment= "FOO=BAR" "BAZ=QUX"
77 `),
78 []*UnitOption{
79 &UnitOption{"Service", "Environment", "\"FOO=BAR\" \"BAZ=QUX\""},
80 },
81 },
82
83
84 {
85 []byte(`[Unit]
86 Description= Unnecessarily wrapped \
87 words here
88 `),
89 []*UnitOption{
90 &UnitOption{"Unit", "Description", `Unnecessarily wrapped \
91 words here`},
92 },
93 },
94
95
96 {
97 []byte(`; comment alpha
98 # comment bravo
99 [Unit]
100 ; comment charlie
101 # comment delta
102 #Description=Foo
103 Description=Bar
104 ; comment echo
105 # comment foxtrot
106 `),
107 []*UnitOption{
108 &UnitOption{"Unit", "Description", "Bar"},
109 },
110 },
111
112
113 {
114 []byte(`[Unit]
115 Description=Bar\
116 # comment alpha
117
118 Description=Bar\
119 # comment bravo \
120 Baz
121 `),
122 []*UnitOption{
123 &UnitOption{"Unit", "Description", "Bar\\\n# comment alpha"},
124 &UnitOption{"Unit", "Description", "Bar\\\n# comment bravo \\\nBaz"},
125 },
126 },
127
128
129 {
130 []byte(`Description=Foo
131 [Unit]
132 Description=Bar
133 `),
134 []*UnitOption{
135 &UnitOption{"Unit", "Description", "Bar"},
136 },
137 },
138
139
140 {
141 []byte(`<<<<<<<<
142 [Unit]
143 Description=Bar
144 `),
145 []*UnitOption{
146 &UnitOption{"Unit", "Description", "Bar"},
147 },
148 },
149
150
151 {
152 []byte(`[Unit]
153 <<<<<<<<=Bar
154 `),
155 []*UnitOption{
156 &UnitOption{"Unit", "<<<<<<<<", "Bar"},
157 },
158 },
159
160
161 {
162 []byte(`[Unit]
163 Some Thing = Bar
164 `),
165 []*UnitOption{
166 &UnitOption{"Unit", "Some Thing", "Bar"},
167 },
168 },
169
170
171 {
172 []byte(`[Unit]
173 Description=Bar`),
174 []*UnitOption{
175 &UnitOption{"Unit", "Description", "Bar"},
176 },
177 },
178
179
180 {
181 []byte(`[Unit]
182 Description=Bar \`),
183 []*UnitOption{
184 &UnitOption{"Unit", "Description", "Bar \\"},
185 },
186 },
187
188
189 {
190 []byte(`[©]
191 µ☃=ÇôrèÕ$`),
192 []*UnitOption{
193 &UnitOption{"©", "µ☃", "ÇôrèÕ$"},
194 },
195 },
196
197
198 {
199 []byte(`[Unit]
200 Description =words here
201 `),
202 []*UnitOption{
203 &UnitOption{"Unit", "Description", "words here"},
204 },
205 },
206
207
208 {
209 []byte(`[Unit]
210 Description= words here `),
211 []*UnitOption{
212 &UnitOption{"Unit", "Description", "words here"},
213 },
214 },
215
216
217 {
218 []byte(`[Unit]
219 Description= words here \
220 `),
221 []*UnitOption{
222 &UnitOption{"Unit", "Description", "words here \\\n"},
223 },
224 },
225
226
227 {
228 []byte(`[Service]
229 ExecStart=/bin/bash -c "while true; do echo \"ping\"; sleep 1; done"
230 `),
231 []*UnitOption{
232 &UnitOption{"Service", "ExecStart", `/bin/bash -c "while true; do echo \"ping\"; sleep 1; done"`},
233 },
234 },
235
236
237 {
238 []byte(`[Service]
239 ExecStart=/bin/bash echo poof \ `),
240 []*UnitOption{
241 &UnitOption{"Service", "ExecStart", `/bin/bash echo poof \`},
242 },
243 },
244
245 {
246 []byte(`[Service]
247 ExecStart=/bin/bash -c "echo ................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................."`),
248 []*UnitOption{
249 &UnitOption{"Service", "ExecStart", `/bin/bash -c "echo ................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................."`},
250 },
251 },
252
253 {
254 []byte(`[Service]
255 ExecStart=/bin/bash -c "echo ................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................."
256 Option=value
257 `),
258 []*UnitOption{
259 &UnitOption{"Service", "ExecStart", `/bin/bash -c "echo ................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................."`},
260 &UnitOption{"Service", "Option", "value"},
261 },
262 },
263 }
264
265 assert := func(expect, output []*UnitOption) error {
266 if len(expect) != len(output) {
267 return fmt.Errorf("expected %d items, got %d", len(expect), len(output))
268 }
269
270 for i := range expect {
271 if !reflect.DeepEqual(expect[i], output[i]) {
272 return fmt.Errorf("item %d: expected %v, got %v", i, expect[i], output[i])
273 }
274 }
275
276 return nil
277 }
278
279 for i, tt := range tests {
280 output, err := DeserializeOptions(bytes.NewReader(tt.input))
281 if err != nil {
282 t.Errorf("case %d: unexpected error parsing unit: %v", i, err)
283 continue
284 }
285
286 err = assert(tt.output, output)
287 if err != nil {
288 t.Errorf("case %d: %v", i, err)
289 t.Log("Expected options:")
290 logUnitOptionSlice(t, tt.output)
291 t.Log("Actual options:")
292 logUnitOptionSlice(t, output)
293 }
294 }
295 }
296
297 func TestDeserializeSections(t *testing.T) {
298 tests := []struct {
299 input []byte
300 output []*UnitSection
301 }{
302
303 {
304 []byte(`[Unit]
305 Description=Foo
306 Description=Bar
307 Requires=baz.service
308 After=baz.service
309 `),
310 []*UnitSection{
311 &UnitSection{
312 Section: "Unit",
313 Entries: []*UnitEntry{
314 &UnitEntry{"Description", "Foo"},
315 &UnitEntry{"Description", "Bar"},
316 &UnitEntry{"Requires", "baz.service"},
317 &UnitEntry{"After", "baz.service"},
318 },
319 },
320 },
321 },
322 {
323 []byte(`[Route]
324 Destination=10.0.0.1/24
325 Gateway=10.0.10.1
326
327 [Route]
328 Destination=10.0.2.1/24
329 Gateway=10.0.10.1
330 `),
331 []*UnitSection{
332 &UnitSection{
333 Section: "Route",
334 Entries: []*UnitEntry{
335 &UnitEntry{"Destination", "10.0.0.1/24"},
336 &UnitEntry{"Gateway", "10.0.10.1"},
337 },
338 },
339 &UnitSection{
340 Section: "Route",
341 Entries: []*UnitEntry{
342 &UnitEntry{"Destination", "10.0.2.1/24"},
343 &UnitEntry{"Gateway", "10.0.10.1"},
344 },
345 },
346 },
347 },
348 }
349
350 assert := func(expect, output []*UnitSection) error {
351 if len(expect) != len(output) {
352 return fmt.Errorf("expected %d sections, got %d", len(expect), len(output))
353 }
354
355 for i := range expect {
356 if !reflect.DeepEqual(expect[i], output[i]) {
357 return fmt.Errorf("item %d: expected %v, got %v", i, expect[i], output[i])
358 }
359 }
360
361 return nil
362 }
363
364 for i, tt := range tests {
365 output, err := DeserializeSections(bytes.NewReader(tt.input))
366 if err != nil {
367 t.Errorf("case %d: unexpected error parsing unit: %v", i, err)
368 continue
369 }
370
371 err = assert(tt.output, output)
372 if err != nil {
373 t.Errorf("case %d: %v", i, err)
374 t.Log("Expected options:")
375 for _, s := range tt.output {
376 t.Log(s)
377 }
378 t.Log("Actual options:")
379 for _, s := range output {
380 t.Log(s)
381 }
382 }
383 }
384 }
385
386 func TestDeserializeFail(t *testing.T) {
387 tests := [][]byte{
388
389 []byte(`[Unit
390 Description=Foo
391 `),
392
393
394 []byte(`[Unit] pants
395 Description=Foo
396 `),
397
398
399 []byte(`[Unit]
400 Description
401 `),
402
403
404 []byte(`[Unit]
405 <<<<<<
406 Description=Foo
407 `),
408 }
409
410 for i, tt := range tests {
411 output, err := DeserializeOptions(bytes.NewReader(tt))
412 if err == nil {
413 t.Errorf("case %d: unexpected nil error", i)
414 t.Log("Output:")
415 logUnitOptionSlice(t, output)
416 }
417 }
418 }
419
420 func logUnitOptionSlice(t *testing.T, opts []*UnitOption) {
421 for idx, opt := range opts {
422 t.Logf("%d: %v", idx, opt)
423 }
424 }
425
426 func TestDeserializeLineTooLong(t *testing.T) {
427 tests := [][]byte{
428
429 []byte(`[Seeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeervice]
430 `),
431
432 []byte(`[Service]
433 ExecStart=/bin/bash -c "echo ..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................."
434 `),
435
436 []byte(`
437 # test unit file
438
439 [Service]
440 ExecStartPre=-/usr/bin/docker rm %p
441 ExecStartPre=-/usr/bin/docker pull busybox
442 ExecStart=/usr/bin/docker run --rm --name %p --net=host \
443 -e "test=1123t" \
444 -e "test=1123t" \
445 -e "fiz=1123t" \
446 -e "buz=1123t" \
447 -e "FOO=BARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBABARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARRBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBAR"BARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBABARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARRBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBAR" \
448 busybox sleep 10
449 ExecStop=-/usr/bin/docker kill %p
450 SyslogIdentifier=busybox
451 Restart=always
452 RestartSec=10s
453 `),
454
455 []byte(`arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 character arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 character arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 character arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 character arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters arbitrary and extraordinarily long line that is far greater than 2048 characters`),
456
457 []byte(`[Service]
458 ExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStartExecStart=/bin/true
459 `),
460 }
461
462 for i, tt := range tests {
463 output, err := DeserializeOptions(bytes.NewReader(tt))
464 if err != ErrLineTooLong {
465 t.Errorf("case %d: unexpected err: %v", i, err)
466 t.Log("Output:")
467 logUnitOptionSlice(t, output)
468 }
469 }
470 }
471
View as plain text