1import os
2import pytest
3import re
4import tempfile
5import checkpackagelib.test_util as util
6import checkpackagelib.lib_sysv as m
7from checkpackagelib.test_tool import check_file as tool_check_file
8
9workdir = os.path.join(tempfile.mkdtemp(suffix='-checkpackagelib-test-sysv'))
10workdir_regex = re.compile(r'/tmp/tmp[^/]*-checkpackagelib-test-sysv')
11
12
13Indent = [
14    ('empty file',
15     'any',
16     '',
17     []),
18    ('empty line',
19     'any',
20     '\n',
21     []),
22    ('ignore whitespace',
23     'any',
24     ' \n',
25     []),
26    ('spaces',
27     'any',
28     'case "$1" in\n'
29     '  start)',
30     [['any:2: should be indented with tabs (url#adding-packages-start-script)',
31       '  start)']]),
32    ('tab',
33     'any',
34     'case "$1" in\n'
35     '\tstart)',
36     []),
37    ('tabs and spaces',
38     'any',
39     'case "$1" in\n'
40     '\t  start)',
41     [['any:2: should be indented with tabs (url#adding-packages-start-script)',
42       '\t  start)']]),
43    ('spaces and tabs',
44     'any',
45     'case "$1" in\n'
46     '  \tstart)',
47     [['any:2: should be indented with tabs (url#adding-packages-start-script)',
48       '  \tstart)']]),
49    ]
50
51
52@pytest.mark.parametrize('testname,filename,string,expected', Indent)
53def test_Indent(testname, filename, string, expected):
54    warnings = util.check_file(m.Indent, filename, string)
55    assert warnings == expected
56
57
58NotExecutable = [
59    ('SysV',
60     'sh-shebang.sh',
61     0o775,
62     '#!/bin/sh',
63     ["dir/sh-shebang.sh:0: This file does not need to be executable,"
64      " just make sure you use '$(INSTALL) -D -m 0755' in the .mk file"]),
65    ]
66
67
68@pytest.mark.parametrize('testname,filename,permissions,string,expected', NotExecutable)
69def test_NotExecutable(testname, filename, permissions, string, expected):
70    warnings = tool_check_file(m.NotExecutable, filename, string, permissions)
71    assert warnings == expected
72
73
74Variables = [
75    ('empty file',
76     'any',
77     '',
78     [['any:0: DAEMON variable not defined (url#adding-packages-start-script)']]),
79    ('daemon and pidfile ok',
80     'package/busybox/S01syslogd',
81     'DAEMON="syslogd"\n'
82     'PIDFILE="/var/run/$DAEMON.pid"\n',
83     []),
84    ('wrong filename',
85     'package/busybox/S01syslog',
86     'DAEMON="syslogd"\n'
87     'PIDFILE="/var/run/${DAEMON}.pid"\n',
88     [['package/busybox/S01syslog:0: filename should be S<number><number><daemon name> (url#adding-packages-start-script)',
89       'expecting S<number><number>syslogd']]),
90    ('no pidfile ok',
91     'S99something',
92     'DAEMON="something"\n',
93     []),
94    ('hardcoded pidfile',
95     'S99something',
96     'DAEMON="something"\n'
97     'PIDFILE="/var/run/something.pid"\n',
98     [['S99something:2: Incorrect PIDFILE value  (url#adding-packages-start-script)',
99       'PIDFILE="/var/run/something.pid"\n',
100       'PIDFILE="/var/run/$DAEMON.pid"']]),
101    ('redefined daemon',
102     'S50any',
103     'DAEMON="any"\n'
104     'DAEMON="other"\n',
105     [['S50any:2: DAEMON variable redefined (url#adding-packages-start-script)',
106       'DAEMON="other"\n']]),
107    ('daemon name with dash',
108     'S82cups-browsed',
109     'DAEMON="cups-browsed"',
110     []),
111    ('daemon with path',
112     'S50avahi-daemon',
113     'DAEMON=/usr/sbin/avahi-daemon',
114     [['S50avahi-daemon:1: Do not include path in DAEMON (url#adding-packages-start-script)',
115       'DAEMON=/usr/sbin/avahi-daemon',
116       'DAEMON="avahi-daemon"']]),
117    ('daemon with path and wrong filename',
118     'S50avahi',
119     'DAEMON=/usr/sbin/avahi-daemon',
120     [['S50avahi:1: Do not include path in DAEMON (url#adding-packages-start-script)',
121       'DAEMON=/usr/sbin/avahi-daemon',
122       'DAEMON="avahi-daemon"'],
123      ['S50avahi:0: filename should be S<number><number><daemon name> (url#adding-packages-start-script)',
124       'expecting S<number><number>avahi-daemon']]),
125    ]
126
127
128@pytest.mark.parametrize('testname,filename,string,expected', Variables)
129def test_Variables(testname, filename, string, expected):
130    warnings = util.check_file(m.Variables, filename, string)
131    assert warnings == expected
132