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