示例#1
0
    def test_get_stack_dir(self):
        import roslib.packages
        from roslib.stacks import get_stack_dir, InvalidROSStackException, list_stacks
        self.assertEquals(rospkg.get_ros_root(), get_stack_dir('ros'))
        try:
            get_stack_dir('non_existent')
            self.fail("should have raised")
        except roslib.stacks.InvalidROSStackException:
            pass

        # make sure it agrees with rosstack
        stacks = list_stacks()
        from roslib.rospack import rosstackexec
        for s in stacks:
            d1 = get_stack_dir(s)
            d2 = rosstackexec(['find', s])
            self.assertEquals(d1, d2, "%s vs %s"%(d1, d2))

        # now manipulate the environment to test precedence
        # - save original RPP as we popen rosstack in other tests
        rpp = os.environ.get(rospkg.environment.ROS_PACKAGE_PATH, None)
        try:
            d = roslib.packages.get_pkg_dir('test_roslib')
            d = os.path.join(d, 'test', 'stack_tests')

            # - s1/s2/s3
            print "s1/s2/s3"            
            paths = [os.path.join(d, p) for p in ['s1', 's2', 's3']]
            os.environ[rospkg.environment.ROS_PACKAGE_PATH] = os.pathsep.join(paths)
            # - run multiple times to test caching
            for i in xrange(2):
                stacks = roslib.stacks.list_stacks()
                self.assert_('foo' in stacks)
                self.assert_('bar' in stacks)

                foo_p = os.path.join(d, 's1', 'foo')
                bar_p = os.path.join(d, 's1', 'bar')
                self.assertEquals(foo_p, roslib.stacks.get_stack_dir('foo'))
                self.assertEquals(bar_p, roslib.stacks.get_stack_dir('bar'))

            # - s2/s3/s1
            print "s2/s3/s1"
            
            paths = [os.path.join(d, p) for p in ['s2', 's3', 's1']]
            os.environ[rospkg.environment.ROS_PACKAGE_PATH] = os.pathsep.join(paths)
            stacks = roslib.stacks.list_stacks()
            self.assert_('foo' in stacks)
            self.assert_('bar' in stacks)

            foo_p = os.path.join(d, 's2', 'foo')
            bar_p = os.path.join(d, 's1', 'bar')
            self.assertEquals(foo_p, roslib.stacks.get_stack_dir('foo'))
            self.assertEquals(bar_p, roslib.stacks.get_stack_dir('bar'))
        finally:
            #restore rpp
            if rpp is not None:
                os.environ[rospkg.environment.ROS_PACKAGE_PATH] = rpp
            else:
                del os.environ[rospkg.environment.ROS_PACKAGE_PATH] 
示例#2
0
    def test_get_stack_dir(self):
        import roslib.rosenv
        import roslib.packages
        from roslib.stacks import get_stack_dir, InvalidROSStackException, list_stacks
        self.assertEquals(roslib.rosenv.get_ros_root(), get_stack_dir('ros'))
        try:
            get_stack_dir('non_existent')
            self.fail("should have raised")
        except roslib.stacks.InvalidROSStackException:
            pass

        # make sure it agrees with rosstack
        stacks = list_stacks()
        from roslib.rospack import rosstackexec
        for s in stacks:
            self.assertEquals(get_stack_dir(s), rosstackexec(['find', s]))

        # now manipulate the environment to test precedence
        # - save original RPP as we popen rosstack in other tests
        rpp = os.environ.get(roslib.rosenv.ROS_PACKAGE_PATH, None)
        try:
            d = roslib.packages.get_pkg_dir('test_roslib')
            d = os.path.join(d, 'test', 'stack_tests')

            # - s1/s2/s3
            print "s1/s2/s3"
            paths = [os.path.join(d, p) for p in ['s1', 's2', 's3']]
            os.environ[roslib.rosenv.ROS_PACKAGE_PATH] = os.pathsep.join(paths)
            # - run multiple times to test caching
            for i in xrange(2):
                stacks = roslib.stacks.list_stacks()
                self.assert_('foo' in stacks)
                self.assert_('bar' in stacks)

                foo_p = os.path.join(d, 's1', 'foo')
                bar_p = os.path.join(d, 's1', 'bar')
                self.assertEquals(foo_p, roslib.stacks.get_stack_dir('foo'))
                self.assertEquals(bar_p, roslib.stacks.get_stack_dir('bar'))

            # - s2/s3/s1
            print "s2/s3/s1"

            paths = [os.path.join(d, p) for p in ['s2', 's3', 's1']]
            os.environ[roslib.rosenv.ROS_PACKAGE_PATH] = os.pathsep.join(paths)
            stacks = roslib.stacks.list_stacks()
            self.assert_('foo' in stacks)
            self.assert_('bar' in stacks)

            foo_p = os.path.join(d, 's2', 'foo')
            bar_p = os.path.join(d, 's1', 'bar')
            self.assertEquals(foo_p, roslib.stacks.get_stack_dir('foo'))
            self.assertEquals(bar_p, roslib.stacks.get_stack_dir('bar'))
        finally:
            #restore rpp
            if rpp is not None:
                os.environ[roslib.rosenv.ROS_PACKAGE_PATH] = rpp
            else:
                del os.environ[roslib.rosenv.ROS_PACKAGE_PATH]
示例#3
0
    def test_get_stack_dir(self):
        import roslib.packages
        from roslib.stacks import get_stack_dir
        try:
            get_stack_dir('non_existent')
            self.fail('should have raised')
        except roslib.stacks.InvalidROSStackException:
            pass

        # now manipulate the environment to test precedence
        # - save original RPP as we popen rosstack in other tests
        rpp = os.environ.get(rospkg.environment.ROS_PACKAGE_PATH, None)
        try:
            d = roslib.packages.get_pkg_dir('roslib')
            d = os.path.join(d, 'test', 'stack_tests')

            # - s1/s2/s3
            print('s1/s2/s3')
            paths = [os.path.join(d, p) for p in ['s1', 's2', 's3']]
            os.environ[rospkg.environment.ROS_PACKAGE_PATH] = os.pathsep.join(paths)
            # - run multiple times to test caching
            for i in range(2):
                stacks = roslib.stacks.list_stacks()
                self.assert_('foo' in stacks)
                self.assert_('bar' in stacks)

                foo_p = os.path.join(d, 's1', 'foo')
                bar_p = os.path.join(d, 's1', 'bar')
                self.assertEquals(foo_p, roslib.stacks.get_stack_dir('foo'))
                self.assertEquals(bar_p, roslib.stacks.get_stack_dir('bar'))

            # - s2/s3/s1
            print('s2/s3/s1')

            paths = [os.path.join(d, p) for p in ['s2', 's3', 's1']]
            os.environ[rospkg.environment.ROS_PACKAGE_PATH] = os.pathsep.join(paths)
            stacks = roslib.stacks.list_stacks()
            self.assert_('foo' in stacks)
            self.assert_('bar' in stacks)

            foo_p = os.path.join(d, 's2', 'foo')
            bar_p = os.path.join(d, 's1', 'bar')
            self.assertEquals(foo_p, roslib.stacks.get_stack_dir('foo'))
            self.assertEquals(bar_p, roslib.stacks.get_stack_dir('bar'))
        finally:
            # restore rpp
            if rpp is not None:
                os.environ[rospkg.environment.ROS_PACKAGE_PATH] = rpp
            else:
                del os.environ[rospkg.environment.ROS_PACKAGE_PATH]
示例#4
0
    def test_stack_rosdeps(self):
        import rosdeb
        from rosdeb.rosutil import stack_rosdeps
        from roslib.stacks import get_stack_dir

        # this test will have to be updated as we change our supported platform set
        platforms = ['lucid', 'jaunty', 'karmic']

        # stick to stacks that should have high confidence of resolving properly
        stacks = [
            'ros', 'common', 'common_msgs', 'driver_common', 'geometry',
            'image_common', 'image_pipeline', 'joystick_drivers', 'navigation',
            'sound_drivers', 'visualization', 'visualization_common'
        ]

        base_reqd = rosdeb.rosutil.IMPLICIT_DEPS

        rosdeps = {}
        for platform in platforms:
            rosdeps[platform] = {}
            for stack_name in stacks:
                stack_dir = get_stack_dir(stack_name)

                rosdeps[platform][stack_name] = deps = stack_rosdeps(
                    stack_name, stack_dir, platform)
                for reqd in base_reqd:
                    self.assert_(reqd in deps)

        tests = [
            ('ros', ['python-yaml']),
            ('ros_release', []),
            #('navigation', ['python-yaml', 'libnetpbm10-dev']),
            #('geometry', ['libglut3-dev', 'graphviz', 'python-sip4-dev', 'sip4']),
        ]

        # make sure common_msgs has no additional rosdeps
        for p in ['lucid', 'karmic', 'jaunty']:
            self.failIf(set(rosdeps[p]['common_msgs']) ^ set(base_reqd))

        for stack, reqd in tests:
            for r in reqd:
                for p in ['lucid', 'karmic', 'jaunty']:
                    self.assert_(r in rosdeps[p][stack], r)
    def test_stack_rosdeps(self):
        import rosdeb
        from rosdeb.rosutil import stack_rosdeps
        from roslib.stacks import get_stack_dir

        # this test will have to be updated as we change our supported platform set
        platforms = ['lucid', 'jaunty', 'karmic']

        # stick to stacks that should have high confidence of resolving properly
        stacks = ['ros', 'common', 'common_msgs', 'driver_common', 'geometry', 'image_common', 'image_pipeline', 'joystick_drivers', 'navigation', 'sound_drivers', 'visualization', 'visualization_common']

        base_reqd = rosdeb.rosutil.IMPLICIT_DEPS
        
        rosdeps = {}
        for platform in platforms:
            rosdeps[platform] = {}
            for stack_name in stacks:
                stack_dir = get_stack_dir(stack_name)
                
                rosdeps[platform][stack_name] = deps = stack_rosdeps(stack_name, stack_dir, platform)
                for reqd in base_reqd:
                    self.assert_(reqd in deps)

        tests = [
            ('ros', ['python-yaml']),
            ('ros_release', []),
            #('navigation', ['python-yaml', 'libnetpbm10-dev']),
            #('geometry', ['libglut3-dev', 'graphviz', 'python-sip4-dev', 'sip4']),
            ]

        # make sure common_msgs has no additional rosdeps
        for p in ['lucid', 'karmic', 'jaunty']:
            self.failIf(set(rosdeps[p]['common_msgs']) ^ set(base_reqd))

        for stack, reqd in tests:
            for r in reqd:
                for p in ['lucid', 'karmic', 'jaunty']:
                    self.assert_(r in rosdeps[p][stack], r)