aboutsummaryrefslogtreecommitdiffstats
path: root/src/scripts/python_unittests_unix.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/scripts/python_unittests_unix.py')
-rwxr-xr-xsrc/scripts/python_unittests_unix.py67
1 files changed, 67 insertions, 0 deletions
diff --git a/src/scripts/python_unittests_unix.py b/src/scripts/python_unittests_unix.py
new file mode 100755
index 000000000..fe9f06a62
--- /dev/null
+++ b/src/scripts/python_unittests_unix.py
@@ -0,0 +1,67 @@
+#!/usr/bin/env python3
+
+"""
+Unittests for Botan Python scripts. Those tests only need to pass un UNIX-like
+operating systems.
+
+Requires Python 3.
+
+(C) 2017 Simon Warta (Kullo GmbH)
+
+Botan is released under the Simplified BSD License (see license.txt)
+"""
+
+import os
+import sys
+import unittest
+
+sys.path.append("../..") # Botan repo root
+from install import prepend_destdir # pylint: disable=wrong-import-position
+from install import PrependDestdirError # pylint: disable=wrong-import-position
+
+
+class PrependDestdir(unittest.TestCase):
+ def test_absolute_destdir(self):
+ os.environ["DESTDIR"] = "/"
+ self.assertEqual(prepend_destdir("/home/me"), "/home/me")
+ self.assertEqual(prepend_destdir("/home/me/"), "/home/me")
+ self.assertEqual(prepend_destdir("/home/me/../me2"), "/home/me2")
+
+ os.environ["DESTDIR"] = "/opt"
+ self.assertEqual(prepend_destdir("/home/me"), "/opt/home/me")
+ self.assertEqual(prepend_destdir("/home/me/"), "/opt/home/me")
+ self.assertEqual(prepend_destdir("/home/me/../me2"), "/opt/home/me2")
+
+ def test_relative_destdir(self):
+ os.environ["DESTDIR"] = "."
+ self.assertEqual(prepend_destdir("/home/me"), "./home/me")
+ self.assertEqual(prepend_destdir("/home/me/"), "./home/me")
+ self.assertEqual(prepend_destdir("/home/me/../me2"), "./home/me2")
+
+ os.environ["DESTDIR"] = "bar"
+ self.assertEqual(prepend_destdir("/home/me"), "bar/home/me")
+ self.assertEqual(prepend_destdir("/home/me/"), "bar/home/me")
+ self.assertEqual(prepend_destdir("/home/me/../me2"), "bar/home/me2")
+
+ def test_relative(self):
+ # No destdir set
+ os.environ["DESTDIR"] = ""
+ self.assertEqual(prepend_destdir("foo"), "foo")
+ self.assertEqual(prepend_destdir("../foo"), "../foo")
+
+ # Destdir set
+ os.environ["DESTDIR"] = "/opt"
+ with self.assertRaises(PrependDestdirError):
+ prepend_destdir("foo")
+ with self.assertRaises(PrependDestdirError):
+ prepend_destdir("../foo")
+
+ def test_escaping(self):
+ os.environ["DESTDIR"] = "/opt"
+ with self.assertRaises(PrependDestdirError):
+ prepend_destdir("/foo/../..")
+
+
+if __name__ == '__main__':
+ unittest.TestCase.longMessage = True
+ unittest.main()