Changeset f806b61 for tests/pybin


Ignore:
Timestamp:
Mar 28, 2019, 5:19:52 PM (3 years ago)
Author:
tdelisle <tdelisle@…>
Branches:
arm-eh, cleanup-dtors, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr
Children:
b611fc3
Parents:
ea62265
Message:

Tests are now run in temporary directory

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tests/pybin/tools.py

    rea62265 rf806b61  
    1111import subprocess
    1212import sys
     13import tempfile
    1314import time
    1415import types
    1516
    1617from pybin import settings
    17 from subprocess import Popen, PIPE, STDOUT
    1818
    1919################################################################################
     
    2727        # if this is a dry_run, only print the commands that would be ran
    2828        if settings.dry_run :
    29                 cmd = "cmd: {}".format(' '.join(cmd))
    30                 if output and output != subprocess.DEVNULL and output != subprocess.PIPE:
     29                cmd = "{} cmd: {}".format(os.getcwd(), ' '.join(cmd))
     30                if output and not isinstance(output, int):
    3131                        cmd += " > "
    3232                        cmd += output
    3333
    34                 if error and error != subprocess.DEVNULL and error != subprocess.PIPE and error != subprocess.STDOUT:
     34                if error and not isinstance(error, int):
    3535                        cmd += " 2> "
    3636                        cmd += error
    3737
    38                 if input and input != subprocess.DEVNULL and os.path.isfile(input):
     38                if input and not isinstance(input, int) and os.path.isfile(input):
    3939                        cmd += " < "
    4040                        cmd += input
     
    4545        with contextlib.ExitStack() as onexit:
    4646                # add input redirection if needed
    47                 if input and input != subprocess.DEVNULL:
    48                         if os.path.isfile(input):
    49                                 input = open(input)
    50                                 onexit.push(input)
    51                         else:
    52                                 input = None
     47                input = openfd(input, 'r', onexit, True)
    5348
    5449                # add output redirection if needed
    55                 if output and output != subprocess.DEVNULL and output != subprocess.PIPE:
    56                         output = open(output, 'w')
    57                         onexit.push(output)
     50                output = openfd(output, 'w', onexit, False)
     51
     52                # add error redirection if needed
     53                error = openfd(error, 'w', onexit, False)
    5854
    5955                # run the desired command
     
    6359                                stdin =input,
    6460                                stdout=output,
    65                                 stderr=STDOUT,
     61                                stderr=error,
    6662                                timeout=settings.timeout.single if timeout else None
    6763                        )
     
    9187def is_exe(fname):
    9288        return os.path.isfile(fname) and os.access(fname, os.X_OK)
     89
     90def openfd(file, mode, exitstack, checkfile):
     91        if not file:
     92                return file
     93
     94        if isinstance(file, int):
     95                return file
     96
     97        if checkfile and not os.path.isfile(file):
     98                return None
     99
     100        file = open(file, mode)
     101        exitstack.push(file)
     102        return file
    93103
    94104# Remove 1 or more files silently
     
    159169    return None
    160170
     171@contextlib.contextmanager
     172def tempdir():
     173        cwd = os.getcwd()
     174        with tempfile.TemporaryDirectory() as temp:
     175                os.chdir(temp)
     176                try:
     177                        yield temp
     178                finally:
     179                        os.chdir(cwd)
     180
    161181################################################################################
    162182#               file handling
     
    259279
    260280def core_info(path):
     281        if not os.path.isfile(path):
     282                return 1, "ERR Executable path is wrong"
     283
    261284        cmd   = os.path.join(settings.SRCDIR, "pybin/print-core.gdb")
    262285        if not os.path.isfile(cmd):
    263286                return 1, "ERR Printing format for core dumps not found"
    264287
    265         dname = os.path.dirname(path)
    266         core  = os.path.join(dname, "core" )
    267         if not os.path.isfile(path):
    268                 return 1, "ERR Executable path is wrong"
     288        core  = os.path.join(os.getcwd(), "core" )
    269289
    270290        if not os.path.isfile(core):
Note: See TracChangeset for help on using the changeset viewer.