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)
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)
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
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()
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