diff --git a/avocado/utils/script.py b/avocado/utils/script.py index ccde94b59348f901ca6be3c648a20f9701031278..4c71a792453e38fbab7aeae997dcf376043e8f06 100644 --- a/avocado/utils/script.py +++ b/avocado/utils/script.py @@ -17,19 +17,26 @@ Module to handle scripts creation. """ import os -import tempfile +import stat import shutil +import tempfile from . import path as utils_path +#: What is commonly known as "0775" or "u=rwx,g=rwx,o=rx" +DEFAULT_MODE = (stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR | + stat.S_IRGRP | stat.S_IWGRP | stat.S_IXGRP | + stat.S_IROTH | stat.S_IXOTH) + + class Script(object): """ Class that represents a script. """ - def __init__(self, path, content, mode=0775): + def __init__(self, path, content, mode=DEFAULT_MODE): """ Creates an instance of :class:`Script`. @@ -38,7 +45,7 @@ class Script(object): :param path: the script file name. :param content: the script content. - :param mode: set file mode, default to 0775. + :param mode: set file mode, defaults what is commonly known as 0775. """ self.path = path self.content = content @@ -94,7 +101,7 @@ class TemporaryScript(Script): Class that represents a temporary script. """ - def __init__(self, name, content, prefix='avocado_script', mode=0775): + def __init__(self, name, content, prefix='avocado_script', mode=DEFAULT_MODE): """ Creates an instance of :class:`TemporaryScript`. @@ -124,7 +131,7 @@ class TemporaryScript(Script): self.stored = False -def make_script(path, content, mode=0775): +def make_script(path, content, mode=DEFAULT_MODE): """ Creates a new script stored in the file system. @@ -138,7 +145,7 @@ def make_script(path, content, mode=0775): return scpt.path -def make_temp_script(name, content, prefix='avocado_script', mode=0775): +def make_temp_script(name, content, prefix='avocado_script', mode=DEFAULT_MODE): """ Creates a new temporary script stored in the file system. diff --git a/selftests/functional/test_interrupt.py b/selftests/functional/test_interrupt.py index 20ad7388dbb025f9c053f43e538a63c049e7f5ea..1dfcc02f7fa2a67f163f2f4d06cb83d081aa9d5d 100644 --- a/selftests/functional/test_interrupt.py +++ b/selftests/functional/test_interrupt.py @@ -3,6 +3,7 @@ import sys import tempfile import time import shutil +import stat import aexpect import psutil @@ -21,6 +22,11 @@ basedir = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', '..') basedir = os.path.abspath(basedir) +# What is commonly known as "0755" or "u=rwx,g=rx,o=rx" +DEFAULT_MODE = (stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR | + stat.S_IRGRP | stat.S_IXGRP | + stat.S_IROTH | stat.S_IXOTH) + BAD_TEST = """#!/usr/bin/env python import signal import time @@ -60,7 +66,8 @@ class InterruptTest(unittest.TestCase): data_factory.generate_random_string(5)) bad_test = script.TemporaryScript(bad_test_basename, BAD_TEST, 'avocado_interrupt_test', - mode=0755) + mode=DEFAULT_MODE) + bad_test.save() os.chdir(basedir) @@ -121,7 +128,7 @@ class InterruptTest(unittest.TestCase): data_factory.generate_random_string(5)) good_test = script.TemporaryScript(good_test_basename, GOOD_TEST, 'avocado_interrupt_test', - mode=0755) + mode=DEFAULT_MODE) good_test.save() os.chdir(basedir) diff --git a/selftests/functional/test_loader.py b/selftests/functional/test_loader.py index ebe4d35b18fa03984b03e934210fcd31baf4d2f5..231687e250a0ff0040a41c928332cb3dffcb3a5d 100644 --- a/selftests/functional/test_loader.py +++ b/selftests/functional/test_loader.py @@ -2,6 +2,7 @@ import os import sys import subprocess import time +import stat import tempfile import shutil import signal @@ -139,11 +140,19 @@ if __name__ == "__main__": class LoaderTestFunctional(unittest.TestCase): + MODE_0664 = (stat.S_IRUSR | stat.S_IWUSR | + stat.S_IRGRP | stat.S_IWGRP | + stat.S_IROTH) + + MODE_0775 = (stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR | + stat.S_IRGRP | stat.S_IWGRP | stat.S_IXGRP | + stat.S_IROTH | stat.S_IXOTH) + def setUp(self): os.chdir(basedir) self.tmpdir = tempfile.mkdtemp(prefix='avocado_' + __name__) - def _test(self, name, content, exp_str, mode=0664, count=1): + def _test(self, name, content, exp_str, mode=MODE_0664, count=1): test_script = script.TemporaryScript(name, content, 'avocado_loader_test', mode=mode) @@ -166,7 +175,7 @@ class LoaderTestFunctional(unittest.TestCase): self.assertEquals(test_process.returncode, exit_codes.AVOCADO_TESTS_FAIL) def test_simple(self): - self._test('simpletest.sh', SIMPLE_TEST, 'SIMPLE', 0775) + self._test('simpletest.sh', SIMPLE_TEST, 'SIMPLE', self.MODE_0775) def test_simple_not_exec(self): self._test('simpletest.sh', SIMPLE_TEST, 'NOT_A_TEST') @@ -182,7 +191,7 @@ class LoaderTestFunctional(unittest.TestCase): test_script = script.TemporaryScript('sleepeleven.py', AVOCADO_TEST_SLEEP_ELEVEN, 'avocado_loader_test', - mode=0664) + mode=self.MODE_0664) test_script.save() cmd_line = ('./scripts/avocado list -V %s' % test_script.path) initial_time = time.time() @@ -197,14 +206,14 @@ class LoaderTestFunctional(unittest.TestCase): def test_multiple_class(self): self._test('multipleclasses.py', AVOCADO_TEST_MULTIPLE_CLASSES, - 'INSTRUMENTED', 0664, 2) + 'INSTRUMENTED', self.MODE_0664, 2) def test_multiple_methods_same_name(self): self._test('multiplemethods.py', AVOCADO_TEST_MULTIPLE_METHODS_SAME_NAME, 'INSTRUMENTED', 0664, 1) def test_load_not_a_test(self): - self._test('notatest.py', NOT_A_TEST, 'SIMPLE', 0775) + self._test('notatest.py', NOT_A_TEST, 'SIMPLE', self.MODE_0775) def test_load_not_a_test_not_exec(self): self._test('notatest.py', NOT_A_TEST, 'NOT_A_TEST') diff --git a/selftests/functional/test_utils.py b/selftests/functional/test_utils.py index 69abd781b12e4356ef03b67053cb88aac0fea818..c2fa1a6ffbd35beab66c698f876043836eb00817 100644 --- a/selftests/functional/test_utils.py +++ b/selftests/functional/test_utils.py @@ -1,5 +1,6 @@ import os import sys +import stat import time import tempfile import shutil @@ -11,6 +12,12 @@ else: from avocado.utils import process + +# What is commonly known as "0775" or "u=rwx,g=rwx,o=rx" +DEFAULT_MODE = (stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR | + stat.S_IRGRP | stat.S_IWGRP | stat.S_IXGRP | + stat.S_IROTH | stat.S_IXOTH) + FAKE_VMSTAT_CONTENTS = """#!/usr/bin/env python import time import random @@ -122,12 +129,12 @@ class ProcessTest(unittest.TestCase): self.fake_vmstat = os.path.join(self.base_logdir, 'vmstat') with open(self.fake_vmstat, 'w') as fake_vmstat_obj: fake_vmstat_obj.write(FAKE_VMSTAT_CONTENTS) - os.chmod(self.fake_vmstat, 0775) + os.chmod(self.fake_vmstat, DEFAULT_MODE) self.fake_uptime = os.path.join(self.base_logdir, 'uptime') with open(self.fake_uptime, 'w') as fake_uptime_obj: fake_uptime_obj.write(FAKE_UPTIME_CONTENTS) - os.chmod(self.fake_uptime, 0775) + os.chmod(self.fake_uptime, DEFAULT_MODE) def test_process_start(self): proc = process.SubProcess('%s 1' % self.fake_vmstat) diff --git a/selftests/unit/test_loader.py b/selftests/unit/test_loader.py index 54229b2390eabe4e9df0c604f0d76472cfb81498..95edb78ede7b9ab21ffc5439267257886c3ba8a9 100644 --- a/selftests/unit/test_loader.py +++ b/selftests/unit/test_loader.py @@ -1,3 +1,4 @@ +import stat import sys import multiprocessing @@ -13,6 +14,12 @@ from avocado.utils import script # We need to access protected members pylint: disable=W0212 +#: What is commonly known as "0664" or "u=rw,g=rw,o=r" +DEFAULT_NON_EXEC_MODE = (stat.S_IRUSR | stat.S_IWUSR | + stat.S_IRGRP | stat.S_IWGRP | + stat.S_IROTH) + + AVOCADO_TEST_OK = """#!/usr/bin/env python from avocado import Test from avocado import main @@ -153,7 +160,7 @@ class LoaderTest(unittest.TestCase): def test_load_simple_not_exec(self): simple_test = script.TemporaryScript('simpletest.sh', SIMPLE_TEST, 'avocado_loader_unittest', - mode=0664) + mode=DEFAULT_NON_EXEC_MODE) simple_test.save() test_class, test_parameters = ( self.loader.discover(simple_test.path, True)[0]) @@ -176,7 +183,7 @@ class LoaderTest(unittest.TestCase): avocado_not_a_test = script.TemporaryScript('notatest.py', NOT_A_TEST, 'avocado_loader_unittest', - mode=0664) + mode=DEFAULT_NON_EXEC_MODE) avocado_not_a_test.save() test_class, test_parameters = ( self.loader.discover(avocado_not_a_test.path, True)[0]) @@ -214,7 +221,7 @@ class LoaderTest(unittest.TestCase): avocado_simple_test = script.TemporaryScript('simpletest.py', PY_SIMPLE_TEST, 'avocado_loader_unittest', - mode=0664) + mode=DEFAULT_NON_EXEC_MODE) avocado_simple_test.save() test_class, test_parameters = ( self.loader.discover(avocado_simple_test.path, True)[0]) @@ -227,7 +234,7 @@ class LoaderTest(unittest.TestCase): avocado_multiple_tests = script.TemporaryScript('multipletests.py', AVOCADO_MULTIPLE_TESTS, 'avocado_multiple_tests_unittest', - mode=0664) + mode=DEFAULT_NON_EXEC_MODE) avocado_multiple_tests.save() suite = self.loader.discover(avocado_multiple_tests.path, True) self.assertEqual(len(suite), 2) @@ -254,7 +261,7 @@ class LoaderTest(unittest.TestCase): avocado_multiple_tests = script.TemporaryScript('multipletests.py', AVOCADO_MULTIPLE_TESTS_SAME_NAME, 'avocado_multiple_tests_unittest', - mode=0664) + mode=DEFAULT_NON_EXEC_MODE) avocado_multiple_tests.save() suite = self.loader.discover(avocado_multiple_tests.path, True) self.assertEqual(len(suite), 1) @@ -279,7 +286,7 @@ class LoaderTest(unittest.TestCase): avocado_pass_test = script.TemporaryScript('disable.py', AVOCADO_TEST_OK_DISABLED, 'avocado_loader_unittest', - 0664) + DEFAULT_NON_EXEC_MODE) avocado_pass_test.save() test_class, test_parameters = ( self.loader.discover(avocado_pass_test.path, True)[0]) @@ -290,7 +297,7 @@ class LoaderTest(unittest.TestCase): avocado_nested_test = script.TemporaryScript('nested.py', AVOCADO_TEST_NESTED_TAGGED, 'avocado_loader_unittest', - 0664) + DEFAULT_NON_EXEC_MODE) avocado_nested_test.save() test_class, test_parameters = ( self.loader.discover(avocado_nested_test.path, True)[0])