view test/test_run.py @ 171:c0ea6cbb0fd2

Add "--debbuildopts -b" to "pbuilder build" command line to stop pbuilder from creating a source package. The .changes would otherwise contain references to that new source package instead of the one we passed to pbuilder. The checksums for the two source packages would be different so the .changes file would not match the source package that treepkg produces.
author Bernhard Herzog <bh@intevation.de>
date Mon, 23 Jun 2008 16:12:01 +0000
parents c7ac67366492
children 98de92b816d4
line wrap: on
line source
# Copyright (C) 2008 by Intevation GmbH
# Authors:
# Bernhard Herzog <bh@intevation.de>
#
# This program is free software under the GPL (>=v2)
# Read the file COPYING coming with the software for details.

"""Tests for treepkg.run"""

import sys
import os
import unittest

from treepkg.run import call, capture_output, SubprocessError



class TestCall(unittest.TestCase):

    def test_call_defaults(self):
        call([sys.executable, "-c", "pass"])

    def test_call_error(self):
        """Test call with a subprocess that exits with a non-zero exit code"""
        try:
            call([sys.executable, "-c", "import sys; sys.exit(1)"])
        except SubprocessError, exc:
            self.assertEquals(exc.returncode, 1)
        else:
            self.fail("call did not raise an exception")

    def test_call_extra_env(self):
        """Test call with the extra_env parameter"""
        subprocess_cmd = [sys.executable, "-c",
                          "import sys, os;"
                          "value = os.environ.get('TREEPKG_TEST');"
                          "sys.exit(int(value != 'xyzzy'))"
                          ]
        # sanity check that the extra environment variable we use for
        # the test is not set yet
        self.assertRaises(SubprocessError, call, subprocess_cmd)

        # the actual test
        try:
            call(subprocess_cmd, extra_env=dict(TREEPKG_TEST="xyzzy"))
        except SubprocessError, exc:
            self.fail("the extra_env variables were not set properly")
        else:
            # test OK
            pass

    def test_call_inputdata(self):
        """Test call with inputdata passed to the subprocesses stdin"""
        # FIXME: If the feature being tested is not implemented
        # properly, it's likely that the subprocess will wait
        # indefinitely waiting for input.
        data = "1"
        subprocess_cmd = [sys.executable, "-c",
                          "import sys; sys.exit(int(raw_input("")))"]
        try:
            call(subprocess_cmd, inputdata=data)
        except SubprocessError, exc:
            self.assertEquals(exc.returncode, 1)

class TestCaptureOutput(unittest.TestCase):

    def test_capture_output_stdout(self):
        text = "explicit is better than implicit"
        self.assertEquals(capture_output([sys.executable, "-c",
                                          "print %r" % text]),
                          text + "\n")

    def test_capture_output_stderr(self):
        self.assertEquals(capture_output([sys.executable, "-c",
                                          "import sys;"
                                          "print 'on stdout';"
                                          " sys.stdout.flush();"
                                          "print >>sys.stderr, 'on stderr'"]),
                          "on stdout\non stderr\n")

    def test_capture_output_exception(self):
        try:
            capture_output([sys.executable, "-c",
                            "import sys;"
                            "print 'Beautiful is better than ugly';"
                            " sys.exit(1)"])
        except SubprocessError, exc:
            self.assertEquals(exc.returncode, 1)
            self.assertEquals(exc.output, "Beautiful is better than ugly\n")
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)