Exemple #1
0
    def test_get_test_results_dir(self):
        from roslib.rosenv import get_ros_root, get_test_results_dir
        import tempfile, os
        base = tempfile.gettempdir()
        ros_test_results_dir = os.path.join(base, 'ros_test_results_dir')
        ros_home_dir = os.path.join(base, 'ros_home_dir')
        home_dir = os.path.expanduser('~')

        # ROS_TEST_RESULTS_DIR has precedence
        env = {
            'ROS_ROOT': get_ros_root(),
            'ROS_TEST_RESULTS_DIR': ros_test_results_dir,
            'ROS_HOME': ros_home_dir
        }
        self.assertEquals(ros_test_results_dir, get_test_results_dir(env=env))

        env = {'ROS_ROOT': get_ros_root(), 'ROS_HOME': ros_home_dir}
        self.assertEquals(os.path.join(ros_home_dir, 'test_results'),
                          get_test_results_dir(env=env))

        env = {'ROS_ROOT': get_ros_root()}
        self.assertEquals(os.path.join(home_dir, '.ros', 'test_results'),
                          get_test_results_dir(env=env))

        # test default assignment of env. Don't both checking return value as we would duplicate get_test_results_dir
        self.assert_(get_test_results_dir() is not None)
  def test_command_line(self):
    from subprocess import Popen, PIPE
    from roslib.rosenv import get_ros_root
    # ros has no deps.  this test is also a tripwire for crasher bug
    output = Popen(['roscreate-stack', get_ros_root(), '--show-deps'], stdout=PIPE, stderr=PIPE).communicate()
    self.assertEquals('', output[0].strip())
    self.assertEquals('', output[1].strip())
    
    # go into fake environment
    d = roslib.packages.get_pkg_dir('test_roscreate')
    d = os.path.join(d, 'test', 'fake-pkg')
    # manipulate our environment as roscreate-stack is dependent on this
    os.environ['ROS_PACKAGE_PATH'] = d
    stack1 = os.path.join(d, 'stack1')
    stack2 = os.path.join(d, 'stack2')
    
    output = Popen(['roscreate-stack', stack1, '--show-deps'], stdout=PIPE, stderr=PIPE).communicate()
    self.assertEquals('<depend stack="ros"/> <!-- roslib -->', output[0].strip())
    self.assertEquals('', output[1].strip())

    output = Popen(['roscreate-stack', stack2, '--show-deps'], stdout=PIPE, stderr=PIPE).communicate()
    self.assert_('<depend stack="ros"/>' in output[0], output[0])
    self.assert_('<depend stack="stack1"/>' in output[0], output[0])
    self.assertEquals(2, len(output[0].strip().split('\n')))
    self.assertEquals('', output[1].strip())
  def test_get_ros_home(self):
    from roslib.rosenv import get_ros_root, get_ros_home
    import tempfile, os
    base = tempfile.gettempdir()
    ros_home_dir = os.path.join(base, 'ros_home_dir')
    home_dir = os.path.expanduser('~')

    # ROS_HOME has precedence
    env = {'ROS_ROOT': get_ros_root(), 'ROS_HOME': ros_home_dir }
    self.assertEquals(ros_home_dir, get_ros_home(env=env))

    env = {'ROS_ROOT': get_ros_root()}
    self.assertEquals(os.path.join(home_dir, '.ros'), get_ros_home(env=env))

    # test default assignment of env. Don't both checking return value 
    self.assert_(get_ros_home() is not None)
Exemple #4
0
    def test_get_ros_home(self):
        from roslib.rosenv import get_ros_root, get_ros_home
        import tempfile, os
        base = tempfile.gettempdir()
        ros_home_dir = os.path.join(base, 'ros_home_dir')
        home_dir = os.path.expanduser('~')

        # ROS_HOME has precedence
        env = {'ROS_ROOT': get_ros_root(), 'ROS_HOME': ros_home_dir}
        self.assertEquals(ros_home_dir, get_ros_home(env=env))

        env = {'ROS_ROOT': get_ros_root()}
        self.assertEquals(os.path.join(home_dir, '.ros'),
                          get_ros_home(env=env))

        # test default assignment of env. Don't both checking return value
        self.assert_(get_ros_home() is not None)
  def test_get_test_results_dir(self):
    from roslib.rosenv import get_ros_root, get_test_results_dir
    import tempfile, os
    base = tempfile.gettempdir()
    ros_test_results_dir = os.path.join(base, 'ros_test_results_dir')
    ros_home_dir = os.path.join(base, 'ros_home_dir')
    home_dir = os.path.expanduser('~')

    # ROS_TEST_RESULTS_DIR has precedence
    env = {'ROS_ROOT': get_ros_root(), 'ROS_TEST_RESULTS_DIR': ros_test_results_dir, 'ROS_HOME': ros_home_dir }
    self.assertEquals(ros_test_results_dir, get_test_results_dir(env=env))

    env = {'ROS_ROOT': get_ros_root(), 'ROS_HOME': ros_home_dir }
    self.assertEquals(os.path.join(ros_home_dir, 'test_results'), get_test_results_dir(env=env))

    env = {'ROS_ROOT': get_ros_root()}
    self.assertEquals(os.path.join(home_dir, '.ros', 'test_results'), get_test_results_dir(env=env))

    # test default assignment of env. Don't both checking return value as we would duplicate get_test_results_dir
    self.assert_(get_test_results_dir() is not None)
Exemple #6
0
    def test_on_ros_path(self):
        from roslib.rosenv import on_ros_path, get_ros_root, resolve_paths, get_ros_package_path

        self.assert_(on_ros_path(get_ros_root()))

        # this test should be on ros_path
        self.assert_(on_ros_path('.'))
        self.assert_(on_ros_path('test_roslib_rosenv.py'))

        paths = resolve_paths(get_ros_package_path()).split(os.pathsep)
        for p in paths:
            self.assert_(on_ros_path(p), "failed: %s, [%s]" % (p, paths))

        self.failIf(on_ros_path(os.tempnam()))
  def test_get_ros_root(self):
    from roslib.rosenv import get_ros_root
    self.assertEquals(None, get_ros_root(required=False, env={}))
    self.assertEquals(None, get_ros_root(False, {}))    
    try:
      get_ros_root(required=True, env={})
      self.fail("get_ros_root should have failed")
    except: pass

    env = {'ROS_ROOT': '/fake/path'}
    self.assertEquals('/fake/path', get_ros_root(required=False, env=env))
    try:
      get_ros_root(required=True, env=env)
      self.fail("get_ros_root should have failed")
    except: pass
Exemple #8
0
    def test_get_ros_root(self):
        from roslib.rosenv import get_ros_root
        self.assertEquals(None, get_ros_root(required=False, env={}))
        self.assertEquals(None, get_ros_root(False, {}))
        try:
            get_ros_root(required=True, env={})
            self.fail("get_ros_root should have failed")
        except:
            pass

        env = {'ROS_ROOT': '/fake/path'}
        self.assertEquals('/fake/path', get_ros_root(required=False, env=env))
        try:
            get_ros_root(required=True, env=env)
            self.fail("get_ros_root should have failed")
        except:
            pass
Exemple #9
0
    def start(self):
        """
        Start the process.

        @raise pmon.FatalProcessLaunch: if process cannot be started and it
        is not likely to ever succeed
        """
        super(LocalProcess, self).start()
        try:
            self.lock.acquire()
            self.started = self.stopped = False

            full_env = self.env

            # _configure_logging() can mutate self.args
            try:
                logfileout, logfileerr = self._configure_logging()
            except Exception as e:
                printerrlog('[%s] ERROR: unable to configure logging [%s]' %
                            (self.name, str(e)))
                # it's not safe to inherit from this process as
                # rostest changes stdout to a StringIO, which is not a
                # proper file.
                logfileout, logfileerr = subprocess.PIPE, subprocess.PIPE

            if self.cwd == 'node':
                cwd = os.path.dirname(self.args[0])
            elif self.cwd == 'cwd':
                cwd = os.getcwd()
            elif self.cwd == 'ros-root':
                from roslib.rosenv import get_ros_root
                cwd = get_ros_root()
            else:
                cwd = rospkg.get_ros_home()
            if not os.path.exists(cwd):
                try:
                    os.makedirs(cwd)
                except OSError:
                    # exist_ok=True
                    pass

            try:
                self.popen = subprocess.Popen(self.args,
                                              cwd=cwd,
                                              stdout=logfileout,
                                              stderr=logfileerr,
                                              env=full_env,
                                              close_fds=True,
                                              preexec_fn=os.setsid)
            except OSError as e:
                self.started = True  # must set so is_alive state is correct
                if e.errno == errno.ENOEXEC:  # Exec format error
                    raise pmon.FatalProcessLaunch(
                        "Unable to launch [%s]. \nIf it is a script, you may be missing a '#!' declaration at the top."
                        % self.name)
                elif e.errno == errno.ENOENT:  # no such file or directory
                    raise pmon.FatalProcessLaunch(
                        """Roslaunch got a '%s' error while attempting to run:

%s

Please make sure that all the executables in this command exist and have
executable permission. This is often caused by a bad launch-prefix.""" %
                        (msg, ' '.join(self.args)))
                else:
                    raise pmon.FatalProcessLaunch('unable to launch [%s]: %s' %
                                                  (' '.join(self.args), msg))

            self.started = True
            # Check that the process is either still running (poll returns
            # None) or that it completed successfully since when we
            # launched it above (poll returns the return code, 0).
            poll_result = self.popen.poll()
            if poll_result is None or poll_result == 0:
                self.pid = self.popen.pid
                printlog_bold('process[%s]: started with pid [%s]' %
                              (self.name, self.pid))
                return True
            else:
                printerrlog('failed to start local process: %s' %
                            (' '.join(self.args)))
                return False
        finally:
            self.lock.release()
Exemple #10
0
    def test_get_ros_root(self):
        from roslib.rosenv import get_ros_root
        self.assertEquals(None, get_ros_root(required=False, env={}))
        self.assertEquals(None, get_ros_root(False, {}))
        try:
            get_ros_root(required=True, env={})
            self.fail("get_ros_root should have failed")
        except:
            pass

        env = {'ROS_ROOT': '/fake/path'}
        self.assertEquals('/fake/path', get_ros_root(required=False, env=env))
        try:
            get_ros_root(required=True, env=env)
            self.fail("get_ros_root should have failed")
        except:
            pass

        real_ros_root = get_ros_root(required=True)

        # make sure that ros root is a directory
        p = os.path.join(real_ros_root, 'Makefile')
        env = {'ROS_ROOT': p}
        self.assertEquals(p, get_ros_root(required=False, env=env))
        try:
            get_ros_root(required=True, env=env)
            self.fail("get_ros_root should have failed")
        except:
            pass
  def test_get_ros_root(self):
    from roslib.rosenv import get_ros_root
    self.assertEquals(None, get_ros_root(required=False, env={}))
    self.assertEquals(None, get_ros_root(False, {}))    
    try:
      get_ros_root(required=True, env={})
      self.fail("get_ros_root should have failed")
    except: pass

    env = {'ROS_ROOT': '/fake/path'}
    self.assertEquals('/fake/path', get_ros_root(required=False, env=env))
    try:
      get_ros_root(required=True, env=env)
      self.fail("get_ros_root should have failed")
    except: pass

    real_ros_root = get_ros_root(required=True)
    
    # make sure that ros root is a directory
    p = os.path.join(real_ros_root, 'Makefile')
    env = {'ROS_ROOT': p}
    self.assertEquals(p, get_ros_root(required=False, env=env))
    try:
      get_ros_root(required=True, env=env)
      self.fail("get_ros_root should have failed")
    except: pass