test_output_check.py 5.7 KB
Newer Older
1 2
import os
import sys
3 4
import tempfile
import shutil
5 6 7 8 9

if sys.version_info[:2] == (2, 6):
    import unittest2 as unittest
else:
    import unittest
10

11
from avocado.core import exit_codes
12 13 14 15
from avocado.utils import process
from avocado.utils import script


16
basedir = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', '..')
17 18 19 20 21 22 23 24
basedir = os.path.abspath(basedir)


OUTPUT_SCRIPT_CONTENTS = """#!/bin/sh
echo "Hello, avocado!"
"""


25
class RunnerSimpleTest(unittest.TestCase):
26 27

    def setUp(self):
28
        self.tmpdir = tempfile.mkdtemp(prefix='avocado_' + __name__)
29 30 31 32 33
        self.output_script = script.TemporaryScript(
            'output_check.sh',
            OUTPUT_SCRIPT_CONTENTS,
            'avocado_output_check_functional')
        self.output_script.save()
34

35
    @unittest.skip("Temporary plugin infrastructure removal")
36 37
    def test_output_record_none(self):
        os.chdir(basedir)
38 39
        cmd_line = ('./scripts/avocado run --job-results-dir %s --sysinfo=off %s --output-check-record none' %
                    (self.tmpdir, self.output_script.path))
40
        result = process.run(cmd_line, ignore_status=True)
41
        expected_rc = exit_codes.AVOCADO_ALL_OK
42 43 44 45 46 47 48 49
        self.assertEqual(result.exit_status, expected_rc,
                         "Avocado did not return rc %d:\n%s" %
                         (expected_rc, result))
        stdout_file = os.path.join("%s.data/stdout.expected" % self.output_script)
        stderr_file = os.path.join("%s.data/stderr.expected" % self.output_script)
        self.assertFalse(os.path.isfile(stdout_file))
        self.assertFalse(os.path.isfile(stderr_file))

50
    @unittest.skip("Temporary plugin infrastructure removal")
51 52
    def test_output_record_stdout(self):
        os.chdir(basedir)
53 54
        cmd_line = ('./scripts/avocado run --job-results-dir %s --sysinfo=off %s --output-check-record stdout' %
                    (self.tmpdir, self.output_script.path))
55
        result = process.run(cmd_line, ignore_status=True)
56
        expected_rc = exit_codes.AVOCADO_ALL_OK
57 58 59 60 61 62 63 64
        self.assertEqual(result.exit_status, expected_rc,
                         "Avocado did not return rc %d:\n%s" %
                         (expected_rc, result))
        stdout_file = os.path.join("%s.data/stdout.expected" % self.output_script)
        stderr_file = os.path.join("%s.data/stderr.expected" % self.output_script)
        self.assertTrue(os.path.isfile(stdout_file))
        self.assertFalse(os.path.isfile(stderr_file))

65
    @unittest.skip("Temporary plugin infrastructure removal")
66 67
    def test_output_record_all(self):
        os.chdir(basedir)
68 69
        cmd_line = ('./scripts/avocado run --job-results-dir %s --sysinfo=off %s --output-check-record all' %
                    (self.tmpdir, self.output_script.path))
70
        result = process.run(cmd_line, ignore_status=True)
71
        expected_rc = exit_codes.AVOCADO_ALL_OK
72 73 74 75 76 77 78 79
        self.assertEqual(result.exit_status, expected_rc,
                         "Avocado did not return rc %d:\n%s" %
                         (expected_rc, result))
        stdout_file = os.path.join("%s.data/stdout.expected" % self.output_script)
        stderr_file = os.path.join("%s.data/stderr.expected" % self.output_script)
        self.assertTrue(os.path.isfile(stdout_file))
        self.assertTrue(os.path.isfile(stderr_file))

80
    @unittest.skip("Temporary plugin infrastructure removal")
81 82
    def test_output_record_and_check(self):
        self.test_output_record_all()
83 84
        cmd_line = ('./scripts/avocado run --job-results-dir %s --sysinfo=off %s' %
                    (self.tmpdir, self.output_script.path))
85
        result = process.run(cmd_line, ignore_status=True)
86
        expected_rc = exit_codes.AVOCADO_ALL_OK
87 88 89 90
        self.assertEqual(result.exit_status, expected_rc,
                         "Avocado did not return rc %d:\n%s" %
                         (expected_rc, result))

91
    @unittest.skip("Temporary plugin infrastructure removal")
92 93 94
    def test_output_tamper_stdout(self):
        self.test_output_record_all()
        tampered_msg = "I PITY THE FOOL THAT STANDS ON MY WAY!"
95
        stdout_file = os.path.join("%s.data/stdout.expected" % self.output_script.path)
96 97
        with open(stdout_file, 'w') as stdout_file_obj:
            stdout_file_obj.write(tampered_msg)
98 99
        cmd_line = ('./scripts/avocado run --job-results-dir %s --sysinfo=off %s --xunit -' %
                    (self.tmpdir, self.output_script.path))
100
        result = process.run(cmd_line, ignore_status=True)
101
        expected_rc = exit_codes.AVOCADO_TESTS_FAIL
102 103 104 105 106
        self.assertEqual(result.exit_status, expected_rc,
                         "Avocado did not return rc %d:\n%s" %
                         (expected_rc, result))
        self.assertIn(tampered_msg, result.stdout)

107
    @unittest.skip("Temporary plugin infrastructure removal")
108 109 110
    def test_disable_output_check(self):
        self.test_output_record_all()
        tampered_msg = "I PITY THE FOOL THAT STANDS ON MY WAY!"
111
        stdout_file = os.path.join("%s.data/stdout.expected" % self.output_script.path)
112 113
        with open(stdout_file, 'w') as stdout_file_obj:
            stdout_file_obj.write(tampered_msg)
114 115
        cmd_line = ('./scripts/avocado run --job-results-dir %s --sysinfo=off %s --output-check=off --xunit -' %
                    (self.tmpdir, self.output_script.path))
116
        result = process.run(cmd_line, ignore_status=True)
117
        expected_rc = exit_codes.AVOCADO_ALL_OK
118 119 120 121 122 123
        self.assertEqual(result.exit_status, expected_rc,
                         "Avocado did not return rc %d:\n%s" %
                         (expected_rc, result))
        self.assertNotIn(tampered_msg, result.stdout)

    def tearDown(self):
124
        self.output_script.remove()
125
        shutil.rmtree(self.tmpdir)
126 127 128

if __name__ == '__main__':
    unittest.main()