|
@@ -0,0 +1,61 @@
|
|
|
+# Copyright (C) 2010 CZ NIC
|
|
|
+#
|
|
|
+# Permission to use, copy, modify, and distribute this software for any
|
|
|
+# purpose with or without fee is hereby granted, provided that the above
|
|
|
+# copyright notice and this permission notice appear in all copies.
|
|
|
+#
|
|
|
+# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SYSTEMS CONSORTIUM
|
|
|
+# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
|
|
|
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
|
|
|
+# INTERNET SYSTEMS CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
|
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
|
|
|
+# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
|
|
+# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
|
|
|
+# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
|
+
|
|
|
+"""Tests to see if every python process renames itself."""
|
|
|
+import unittest
|
|
|
+import os
|
|
|
+import os.path
|
|
|
+import isc.utils.process
|
|
|
+import re
|
|
|
+
|
|
|
+class TestRename(unittest.TestCase):
|
|
|
+ """Test scanning all python scripts if they rename themself."""
|
|
|
+ def __scan(self, directory, script, fun):
|
|
|
+ # Scan one script if it contains call to the renaming function
|
|
|
+ filename = os.path.join(directory, script)
|
|
|
+ data = ''.join(open(filename).readlines())
|
|
|
+ prettyname = 'src' + filename[filename.rfind('../') + 2:]
|
|
|
+ self.assertTrue(fun.search(data),
|
|
|
+ "Didn't find a call to isc.utils.process.rename in " + prettyname)
|
|
|
+
|
|
|
+ def test_calls(self):
|
|
|
+ """
|
|
|
+ Test if every script renames itself.
|
|
|
+
|
|
|
+ Scan all Makefile.in and look for scripts.
|
|
|
+ Then scan them by looking at the source text
|
|
|
+ (without actually running them)
|
|
|
+ """
|
|
|
+ # Regexp to find all the *_SCRIPTS = something lines,
|
|
|
+ # including line continuations (backslash and newline)
|
|
|
+ lines = re.compile(r'^\w+_SCRIPTS\s*=\s*((.|\\\n)*)$',
|
|
|
+ re.MULTILINE)
|
|
|
+ # Script name regular expression
|
|
|
+ scripts = re.compile(r'((\w|[-.0-9])+)')
|
|
|
+ # Line with the call
|
|
|
+ fun = re.compile(r'^\s*isc\.utils\.process\.rename\s*\(.*\)\s*(|#.*)$',
|
|
|
+ re.MULTILINE)
|
|
|
+
|
|
|
+ # Find all Makefile.in and extract names of scripts
|
|
|
+ for (d, _, fs) in os.walk('@top_srcdir@'):
|
|
|
+ if 'Makefile.in' in fs:
|
|
|
+ makefile = ''.join(open(os.path.join(d,
|
|
|
+ "Makefile.in")).readlines())
|
|
|
+ for (var, _) in lines.findall(makefile):
|
|
|
+ for (script, _) in scripts.findall(var):
|
|
|
+ self.__scan(d, script, fun)
|
|
|
+
|
|
|
+if __name__ == "__main__":
|
|
|
+ unittest.main()
|