test_lib_sysv.py 3.9 KB

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