Пример #1
0
def test_program(tmpdir, comm, executable):
    """ Tests ProgramProcess. Includes failure modes.  """
    from pytest import raises
    from pylada.process.program import ProgramProcess
    from pylada.process import NotStarted

    stdout = str(tmpdir.join('stdout'))
    program = ProgramProcess(
        executable,
        outdir=str(tmpdir),
        cmdline=['--sleep', 0, '--order', 4],
        stdout=stdout,
        dompi=True)
    # program not started. should fail.
    with raises(NotStarted):
        program.poll()

    with raises(NotStarted):
        program.wait()

    # now starting for real.
    assert program.start(comm) == False
    assert program.process is not None
    while not program.poll():
        continue
    extract = ExtractSingle(stdout)
    assert extract.success
    assert abs(extract.pi - 3.146801e+00) < 1e-2 * extract.error
    assert abs(extract.error - 0.005207865) < 1e-2 * extract.error
    assert extract.comm['n'] == comm['n']
    # restart
    assert program.process is None
    program.start(comm)
    assert program.process is None
Пример #2
0
def test_program(tmpdir, comm, executable):
    """ Tests ProgramProcess. Includes failure modes.  """
    from pytest import raises
    from pylada.process.program import ProgramProcess
    from pylada.process import NotStarted
    from pylada.process.tests.functional import ExtractSingle as Extract

    stdout = str(tmpdir.join('stdout'))
    program = ProgramProcess(
        executable,
        outdir=str(tmpdir),
        cmdline=['--sleep', 0, '--order', 4],
        stdout=stdout,
        dompi=True)
    # program not started. should fail.
    with raises(NotStarted):
        program.poll()

    with raises(NotStarted):
        program.wait()

    # now starting for real.
    assert program.start(comm) == False
    assert program.process is not None
    while not program.poll():
        continue
    extract = Extract(stdout)
    assert extract.success
    assert abs(extract.pi - 3.146801e+00) < 1e-2 * extract.error
    assert abs(extract.error - 0.005207865) < 1e-2 * extract.error
    assert extract.comm['n'] == comm['n']
    # restart
    assert program.process is None
    program.start(comm)
    assert program.process is None
Пример #3
0
def test_full_execution(executable, tmpdir, comm):
    from pylada.process.program import ProgramProcess
    from pylada.process import Fail
    stdout = str(tmpdir.join('stdout'))
    program = ProgramProcess(
        executable, outdir=str(tmpdir), stderr=str(tmpdir.join('OMG')),
        cmdline=['--sleep', 0, '--order', 50],
        stdout=stdout, dompi=True
    )
    program.start(comm)
    program.wait()
    assert True
Пример #4
0
def test_fail_at_end(executable, tmpdir, comm):
    from pytest import raises
    from pylada.process.program import ProgramProcess
    from pylada.process import Fail
    stdout = str(tmpdir.join('stdout'))
    program = ProgramProcess(
        executable, outdir=str(tmpdir), stderr=str(tmpdir.join('OMG')),
        cmdline=['--sleep', 0, '--order', 50, '--fail-at-end'],
        stdout=stdout, dompi=True
    )
    with raises(Fail):
        program.start(comm)
        program.wait()
Пример #5
0
def test_fail_on_poll_midway(tmpdir, comm, executable):
    """ Tests ProgramProcess. Includes failure modes.  """
    from pytest import raises
    from pylada.process.program import ProgramProcess
    from pylada.process import Fail

    stdout = str(tmpdir.join('stdout'))
    program = ProgramProcess(
        executable, outdir=str(tmpdir), stderr=str(tmpdir.join('OMG')),
        cmdline=['--sleep', 0, '--order', 50, '--fail-mid-call'],
        stdout=stdout, dompi=True
    )
    with raises(Fail):
        program.start(comm)
        program.wait()
Пример #6
0
 def iter(self, outdir=None, sleep=None, overwrite=False, comm=None):
     from copy import deepcopy
     from os.path import join
     from pylada.process.program import ProgramProcess
     from pylada.misc import RelativePath
     self = deepcopy(self)
     outdir = RelativePath(outdir).path
     if sleep is not None:
         self.sleep = sleep
     order = self.order if hasattr(self.order, '__iter__') else [self.order]
     for o in order:
         stdout = join(outdir, 'stdout{0}'.format(o))
         stderr = join(outdir, 'stderr{0}'.format(o))
         if overwrite == False:
             extract = ExtractSingle(stdout)
             if extract.success:
                 yield extract
                 continue
         cmdline = ['--order', str(o), '--sleep', str(self.sleep)]
         if self.fail == 'midway':
             cmdline.append('--fail-mid-call')
         elif self.fail == 'end':
             cmdline.append('--fail-at-end')
         yield ProgramProcess(self.program, cmdline=cmdline, outdir=outdir,
                              stdout=stdout, stderr=stderr, dompi=True, comm=comm)
Пример #7
0
def test_fail_on_poll_midway(tmpdir, comm, executable):
    """ Tests ProgramProcess. Includes failure modes.  """
    from pytest import raises
    from pylada.process.program import ProgramProcess
    from pylada.process import Fail

    stdout = str(tmpdir.join('stdout'))
    program = ProgramProcess(
        executable,
        outdir=str(tmpdir),
        stderr=str(tmpdir.join('OMG')),
        cmdline=['--sleep', 0, '--order', 50, '--fail-mid-call'],
        stdout=stdout,
        dompi=True)
    with raises(Fail):
        program.start(comm)
        while not program.poll():
            continue
Пример #8
0
 def iter(self, outdir=None, sleep=None, overwrite=False, comm=None):
   from copy import deepcopy
   from os.path import join
   from pylada.process.program import ProgramProcess
   from pylada.misc import RelativePath
   self = deepcopy(self)
   outdir = RelativePath(outdir).path
   if sleep is not None: self.sleep = sleep
   stdout = join(outdir, 'stdout')
   stderr = join(outdir, 'stderr')
   if overwrite == False: 
     extract = ExtractSingle(stdout)
     if extract.success:
       yield extract
       return
   yield ProgramProcess( self.program, cmdline=['--order', str(self.order), '--sleep', str(self.sleep)],
                           outdir=outdir, stdout=stdout, stderr=stderr, dompi=False, comm=comm)
Пример #9
0
def test_full_execution(executable, tmpdir, comm):
    from pylada.process.program import ProgramProcess
    from pylada.process import Fail
    stdout = str(tmpdir.join('stdout'))
    program = ProgramProcess(executable,
                             outdir=str(tmpdir),
                             stderr=str(tmpdir.join('OMG')),
                             cmdline=['--sleep', 0, '--order', 50],
                             stdout=stdout,
                             dompi=True)
    program.start(comm)
    program.wait()
    assert True
Пример #10
0
def test_fail_at_end(executable, tmpdir, comm):
    from pytest import raises
    from pylada.process.program import ProgramProcess
    from pylada.process import Fail
    stdout = str(tmpdir.join('stdout'))
    program = ProgramProcess(
        executable,
        outdir=str(tmpdir),
        stderr=str(tmpdir.join('OMG')),
        cmdline=['--sleep', 0, '--order', 50, '--fail-at-end'],
        stdout=stdout,
        dompi=True)
    with raises(Fail):
        program.start(comm)
        program.wait()
Пример #11
0
def test(executable):
  """ Tests ProgramProcess. Includes failure modes.  """
  from tempfile import mkdtemp
  from os.path import join 
  from shutil import rmtree
  from pylada.process.program import ProgramProcess
  from pylada.process import Fail, NotStarted
  from pylada.misc import Changedir
  from pylada import default_comm as comm
  from functional import ExtractSingle as Extract
  dir = mkdtemp()
  try: 
    with Changedir(dir) as pwd: pass
    stdout = join(dir, 'stdout')
    program = ProgramProcess( executable, outdir=dir, 
                              cmdline=['--sleep', 0, '--order', 4], 
                              stdout=stdout, dompi=True )
    # program not started. should fail.
    try: program.poll()
    except NotStarted: pass
    else: raise Exception()
    try: program.wait()
    except NotStarted: pass
    else: raise Exception()

    # now starting for real.
    assert program.start(comm) == False
    assert program.process is not None
    while not program.poll():  continue
    extract = Extract(stdout)
    assert extract.success
    assert abs(extract.pi-3.146801e+00) < 1e-2 * extract.error
    assert abs(extract.error-0.005207865) < 1e-2 * extract.error
    assert extract.comm['n'] == comm['n']
    # restart
    assert program.process is None
    program.start(comm)
    assert program.process is None
  finally: rmtree(dir)

  # fail on poll
  try: 
    with Changedir(dir) as pwd: pass
    stdout = join(dir, 'stdout')
    program = ProgramProcess( executable, outdir=dir, 
                              stderr=join(dir, 'shit'),
                              cmdline=['--sleep', 0, '--order', 666], 
                              stdout=stdout, dompi=True )
    program.start(comm)
    while not program.poll():  continue
  except Fail: pass
  except: raise
  else: raise Exception()
  finally: rmtree(dir)

  # fail on wait
  try: 
    with Changedir(dir) as pwd: pass
    stdout = join(dir, 'stdout')
    program = ProgramProcess( executable, outdir=dir, 
                              stderr=join(dir, 'shit'),
                              cmdline=['--sleep', 0, '--order', 666], 
                              stdout=stdout, dompi=True )
    program.start(comm)
    program.wait()
  except Fail: pass
  else: raise Exception()
  finally: rmtree(dir)

  try: 
    with Changedir(dir) as pwd: pass
    stdout = join(dir, 'stdout')
    program = ProgramProcess( executable, outdir=dir, 
                              stderr=join(dir, 'shit'),
                              cmdline=['--sleep', 0, '--order', 6666], 
                              stdout=stdout, dompi=True )
    program.start(comm)
    while not program.poll():  continue
  except Fail: pass
  else: raise Exception()
  finally: rmtree(dir)
Пример #12
0
def test(executable):
    """ Tests ProgramProcess. Includes failure modes.  """
    from tempfile import mkdtemp
    from os.path import join
    from shutil import rmtree
    from pylada.process.program import ProgramProcess
    from pylada.process import Fail, NotStarted
    from pylada.misc import Changedir
    from pylada import default_comm as comm
    from functional import ExtractSingle as Extract
    dir = mkdtemp()
    try:
        with Changedir(dir) as pwd:
            pass
        stdout = join(dir, 'stdout')
        program = ProgramProcess(executable,
                                 outdir=dir,
                                 cmdline=['--sleep', 0, '--order', 4],
                                 stdout=stdout,
                                 dompi=True)
        # program not started. should fail.
        try:
            program.poll()
        except NotStarted:
            pass
        else:
            raise Exception()
        try:
            program.wait()
        except NotStarted:
            pass
        else:
            raise Exception()

        # now starting for real.
        assert program.start(comm) == False
        assert program.process is not None
        while not program.poll():
            continue
        extract = Extract(stdout)
        assert extract.success
        assert abs(extract.pi - 3.146801e+00) < 1e-2 * extract.error
        assert abs(extract.error - 0.005207865) < 1e-2 * extract.error
        assert extract.comm['n'] == comm['n']
        # restart
        assert program.process is None
        program.start(comm)
        assert program.process is None
    finally:
        rmtree(dir)

    # fail on poll
    try:
        with Changedir(dir) as pwd:
            pass
        stdout = join(dir, 'stdout')
        program = ProgramProcess(executable,
                                 outdir=dir,
                                 stderr=join(dir, 'shit'),
                                 cmdline=['--sleep', 0, '--order', 666],
                                 stdout=stdout,
                                 dompi=True)
        program.start(comm)
        while not program.poll():
            continue
    except Fail:
        pass
    except:
        raise
    else:
        raise Exception()
    finally:
        rmtree(dir)

    # fail on wait
    try:
        with Changedir(dir) as pwd:
            pass
        stdout = join(dir, 'stdout')
        program = ProgramProcess(executable,
                                 outdir=dir,
                                 stderr=join(dir, 'shit'),
                                 cmdline=['--sleep', 0, '--order', 666],
                                 stdout=stdout,
                                 dompi=True)
        program.start(comm)
        program.wait()
    except Fail:
        pass
    else:
        raise Exception()
    finally:
        rmtree(dir)

    try:
        with Changedir(dir) as pwd:
            pass
        stdout = join(dir, 'stdout')
        program = ProgramProcess(executable,
                                 outdir=dir,
                                 stderr=join(dir, 'shit'),
                                 cmdline=['--sleep', 0, '--order', 6666],
                                 stdout=stdout,
                                 dompi=True)
        program.start(comm)
        while not program.poll():
            continue
    except Fail:
        pass
    else:
        raise Exception()
    finally:
        rmtree(dir)