aboutsummaryrefslogtreecommitdiffstats
path: root/tests/unittests/utilities_tests.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unittests/utilities_tests.py')
-rw-r--r--tests/unittests/utilities_tests.py103
1 files changed, 103 insertions, 0 deletions
diff --git a/tests/unittests/utilities_tests.py b/tests/unittests/utilities_tests.py
new file mode 100644
index 00000000..64be9f1e
--- /dev/null
+++ b/tests/unittests/utilities_tests.py
@@ -0,0 +1,103 @@
+# This file is part of the sos project: https://github.com/sosreport/sos
+#
+# This copyrighted material is made available to anyone wishing to use,
+# modify, copy, or redistribute it subject to the terms and conditions of
+# version 2 of the GNU General Public License.
+#
+# See the LICENSE file in the source distribution for further information.
+import os.path
+import unittest
+
+# PYCOMPAT
+from io import StringIO
+
+from sos.utilities import (grep, is_executable, sos_get_command_output,
+ find, tail, shell_out)
+
+TEST_DIR = os.path.dirname(__file__)
+
+
+class GrepTest(unittest.TestCase):
+
+ def test_file_obj(self):
+ test_s = u"\n".join(
+ ['this is only a test', 'there are only two lines'])
+ test_fo = StringIO(test_s)
+ matches = grep(".*test$", test_fo)
+ self.assertEquals(matches, ['this is only a test\n'])
+
+ def test_real_file(self):
+ matches = grep(".*unittest$", __file__.replace(".pyc", ".py"))
+ self.assertEquals(matches, ['import unittest\n'])
+
+ def test_open_file(self):
+ matches = grep(".*unittest$", open(__file__.replace(".pyc", ".py")))
+ self.assertEquals(matches, ['import unittest\n'])
+
+ def test_grep_multiple_files(self):
+ matches = grep(".*unittest$",
+ __file__.replace(".pyc", ".py"), "does_not_exist.txt")
+ self.assertEquals(matches, ['import unittest\n'])
+
+
+class TailTest(unittest.TestCase):
+
+ def test_tail(self):
+ t = tail("tests/tail_test.txt", 10)
+ self.assertEquals(t, b"last line\n")
+
+ def test_tail_too_many(self):
+ t = tail("tests/tail_test.txt", 200)
+ expected = open("tests/tail_test.txt", "r").read()
+ self.assertEquals(t, str.encode(expected))
+
+
+class ExecutableTest(unittest.TestCase):
+
+ def test_nonexe_file(self):
+ path = os.path.join(TEST_DIR, 'utility_tests.py')
+ self.assertFalse(is_executable(path))
+
+ def test_exe_file(self):
+ self.assertTrue(is_executable('true'))
+
+ def test_exe_file_abs_path(self):
+ self.assertTrue(is_executable("/usr/bin/timeout"))
+
+ def test_output(self):
+ result = sos_get_command_output("echo executed")
+ self.assertEquals(result['status'], 0)
+ self.assertEquals(result['output'], "executed\n")
+
+ def test_output_non_exe(self):
+ path = os.path.join(TEST_DIR, 'utility_tests.py')
+ result = sos_get_command_output(path)
+ self.assertEquals(result['status'], 127)
+ self.assertEquals(result['output'], b"")
+
+ def test_output_chdir(self):
+ cmd = "/bin/bash -c 'echo $PWD'"
+ result = sos_get_command_output(cmd, chdir=TEST_DIR)
+ print(result)
+ self.assertEquals(result['status'], 0)
+ self.assertEquals(result['output'].strip(), TEST_DIR)
+
+ def test_shell_out(self):
+ self.assertEquals("executed\n", shell_out('echo executed'))
+
+
+class FindTest(unittest.TestCase):
+
+ def test_find_leaf(self):
+ leaves = find("leaf", TEST_DIR)
+ self.assertTrue(any(name.endswith("leaf") for name in leaves))
+
+ def test_too_shallow(self):
+ leaves = find("leaf", TEST_DIR, max_depth=1)
+ self.assertFalse(any(name.endswith("leaf") for name in leaves))
+
+ def test_not_in_pattern(self):
+ leaves = find("leaf", TEST_DIR, path_pattern="tests/path")
+ self.assertFalse(any(name.endswith("leaf") for name in leaves))
+
+# vim: set et ts=4 sw=4 :