def test_load_string(self): # make sure load_string isn't broken loader = roslaunch.xmlloader.XmlLoader() mock = RosLaunchMock() # test with no <launch /> element # #1582: test error message as well try: loader.load_string('<foo />', mock) self.fail("no root lauch element passed") except Exception, e: self.assertEquals(str(e), "Invalid roslaunch XML syntax: no root <launch> tag")
def test_load_string(self): # make sure load_string isn't broken loader = roslaunch.xmlloader.XmlLoader() mock = RosLaunchMock() # test with no <launch /> element # #1582: test error message as well try: loader.load_string('<foo />', mock) self.fail("no root lauch element passed") except Exception, e: self.assertEquals( str(e), "Invalid roslaunch XML syntax: no root <launch> tag")
def test_load_string(self): # make sure load_string isn't broken loader = roslaunch.xmlloader.XmlLoader() mock = RosLaunchMock() # test with no <launch /> element # #1582: test error message as well try: loader.load_string('<foo />', mock) self.fail("no root lauch element passed") except Exception as e: self.assertEquals( str(e), "Invalid roslaunch XML syntax: no root <launch> tag") f = open(os.path.join(self.xml_dir, 'test-node-valid.xml'), 'r') try: s = f.read() finally: f.close() loader.load_string(s, mock) # sanity check self.assert_(mock.nodes) self.assert_([n for n in mock.nodes if n.type == 'test_base']) # check exception case f = open(os.path.join(self.xml_dir, 'invalid-xml.xml'), 'r') try: s = f.read() finally: f.close() try: loader.load_string(s, mock) self.fail('load_string should have thrown an exception') except roslaunch.xmlloader.XmlParseException: pass
def test_load_string(self): # make sure load_string isn't broken loader = roslaunch.xmlloader.XmlLoader() mock = RosLaunchMock() # test with no <launch /> element # #1582: test error message as well try: loader.load_string('<foo />', mock) self.fail("no root lauch element passed") except Exception as e: self.assertEquals(str(e), "Invalid roslaunch XML syntax: no root <launch> tag") f = open(os.path.join(self.xml_dir, 'test-node-valid.xml'), 'r') try: s = f.read() finally: f.close() loader.load_string(s, mock) # sanity check self.assert_(mock.nodes) self.assert_([n for n in mock.nodes if n.type == 'test_base']) # check exception case f = open(os.path.join(self.xml_dir, 'invalid-xml.xml'), 'r') try: s = f.read() finally: f.close() try: loader.load_string(s, mock) self.fail('load_string should have thrown an exception') except roslaunch.xmlloader.XmlParseException: pass
for f in roslaunch_files: try: logger.info('loading config file %s' % f) loader.load(f, config, verbose=verbose) except roslaunch.xmlloader.XmlParseException, e: raise RLException(e) except roslaunch.loader.LoadException, e: raise RLException(e) # we need this for the hardware test systems, which builds up # roslaunch launch files in memory if roslaunch_strs: for launch_str in roslaunch_strs: try: logger.info('loading config file from string') loader.load_string(launch_str, config) except roslaunch.xmlloader.XmlParseException, e: raise RLException('Launch string: %s\nException: %s' % (launch_str, e)) except roslaunch.loader.LoadException, e: raise RLException('Launch string: %s\nException: %s' % (launch_str, e)) if port: logger.info("overriding master port to %s" % port) config.master.set_port(port) # make sure our environment is correct config.validate() # choose machines for the nodes
class TestXmlLoader(unittest.TestCase): def setUp(self): from roslib.packages import get_pkg_dir self.xml_dir = os.path.join(get_pkg_dir('test_roslaunch'), 'test', 'xml') def _load(self, test_file): loader = roslaunch.xmlloader.XmlLoader() mock = RosLaunchMock() self.assert_(os.path.exists(test_file), "cannot locate test file %s" % test_file) loader.load(test_file, mock) return mock def _load_valid_nodes(self, tests): mock = self._load(os.path.join(self.xml_dir, 'test-node-valid.xml')) nodes = [n for n in mock.nodes if n.type in tests] self.assertEquals(len(tests), len(nodes)) return nodes def _load_valid_rostests(self, tests): mock = self._load(os.path.join(self.xml_dir, 'test-test-valid.xml')) nodes = [n for n in mock.tests if n.type in tests] self.assertEquals(len(tests), len(nodes)) return nodes def _load_valid_machines(self, tests): mock = self._load(os.path.join(self.xml_dir, 'test-machine-valid.xml')) machines = [m for m in mock.machines if m.name in tests] self.assertEquals(len(tests), len(machines)) return machines def test_load_string(self): # make sure load_string isn't broken loader = roslaunch.xmlloader.XmlLoader() mock = RosLaunchMock() # test with no <launch /> element # #1582: test error message as well try: loader.load_string('<foo />', mock) self.fail("no root lauch element passed") except Exception, e: self.assertEquals( str(e), "Invalid roslaunch XML syntax: no root <launch> tag") f = open(os.path.join(self.xml_dir, 'test-node-valid.xml'), 'r') try: s = f.read() finally: f.close() loader.load_string(s, mock) # sanity check self.assert_(mock.nodes) self.assert_([n for n in mock.nodes if n.type == 'test_base']) # check exception case f = open(os.path.join(self.xml_dir, 'invalid-xml.xml'), 'r') try: s = f.read() finally: f.close() try: loader.load_string(s, mock) self.fail('load_string should have thrown an exception') except roslaunch.xmlloader.XmlParseException: pass
# load the roslaunch_files into the config for f in roslaunch_files: try: logger.info('loading config file %s'%f) loader.load(f, config, verbose=verbose) except roslaunch.xmlloader.XmlParseException, e: raise RLException(e) except roslaunch.loader.LoadException, e: raise RLException(e) # we need this for the hardware test systems, which builds up # roslaunch launch files in memory if roslaunch_strs: for launch_str in roslaunch_strs: try: logger.info('loading config file from string') loader.load_string(launch_str, config) except roslaunch.xmlloader.XmlParseException, e: raise RLException('Launch string: %s\nException: %s'%(launch_str, e)) except roslaunch.loader.LoadException, e: raise RLException('Launch string: %s\nException: %s'%(launch_str, e)) # make sure our environment is correct config.validate() # choose machines for the nodes if assign_machines: config.assign_machines() return config
def load_config_default(roslaunch_files, port, roslaunch_strs=None, loader=None, verbose=False, assign_machines=True, ignore_unset_args=False): """ Base routine for creating a ROSLaunchConfig from a set of roslaunch_files and or launch XML strings and initializing it. This config will have a core definition and also set the master to run on port. @param roslaunch_files: list of launch files to load. Each item may also be a tuple where the first item is the launch file and the second item is a string containing arguments. @type roslaunch_files: [str|(str, str)] @param port: roscore/master port override. Set to 0 or None to use default. @type port: int @param roslaunch_strs: (optional) roslaunch XML strings to load @type roslaunch_strs: [str] @param verbose: (optional) print info to screen about model as it is loaded. @type verbose: bool @param assign_machines: (optional) assign nodes to machines (default: True) @type assign_machines: bool @param ignore_unset_args: (optional) ignore default arg requirements (default: False) @type ignore_unset_args: bool @return: initialized rosconfig instance @rytpe: L{ROSLaunchConfig} initialized rosconfig instance @raises: RLException """ logger = logging.getLogger('roslaunch.config') # This is the main roslaunch server process. Load up the # files specified on the command line and launch the # requested resourcs. config = ROSLaunchConfig() if port: config.master.uri = rosgraph.network.create_local_xmlrpc_uri(port) loader = loader or roslaunch.xmlloader.XmlLoader() loader.ignore_unset_args = ignore_unset_args # load the roscore file first. we currently have # last-declaration wins rules. roscore is just a # roslaunch file with special load semantics load_roscore(loader, config, verbose=verbose) # load the roslaunch_files into the config for f in roslaunch_files: if isinstance(f, tuple): f, args = f else: args = None try: logger.info('loading config file %s'%f) loader.load(f, config, argv=args, verbose=verbose) except roslaunch.xmlloader.XmlParseException as e: raise RLException(e) except roslaunch.loader.LoadException as e: raise RLException(e) # we need this for the hardware test systems, which builds up # roslaunch launch files in memory if roslaunch_strs: for launch_str in roslaunch_strs: try: logger.info('loading config file from string') loader.load_string(launch_str, config) except roslaunch.xmlloader.XmlParseException as e: raise RLException('Launch string: %s\nException: %s'%(launch_str, e)) except roslaunch.loader.LoadException as e: raise RLException('Launch string: %s\nException: %s'%(launch_str, e)) # choose machines for the nodes if assign_machines: config.assign_machines() return config
def load_config_default(roslaunch_files, port, roslaunch_strs=None, loader=None, verbose=False, assign_machines=True): """ Base routine for creating a ROSLaunchConfig from a set of roslaunch_files and or launch XML strings and initializing it. This config will have a core definition and also set the master to run on port. @param roslaunch_files: list of launch files to load @type roslaunch_files: [str] @param port: roscore/master port override. Set to 0 or None to use default. @type port: int @param roslaunch_strs: (optional) roslaunch XML strings to load @type roslaunch_strs: [str] @param verbose: (optional) print info to screen about model as it is loaded. @type verbose: bool @param assign_machines: (optional) assign nodes to machines (default: True) @type assign_machines: bool @return: initialized rosconfig instance @rytpe: L{ROSLaunchConfig} initialized rosconfig instance @raises: RLException """ logger = logging.getLogger('roslaunch.config') # This is the main roslaunch server process. Load up the # files specified on the command line and launch the # requested resourcs. config = ROSLaunchConfig() if port: config.master.uri = rosgraph.network.create_local_xmlrpc_uri(port) loader = loader or roslaunch.xmlloader.XmlLoader() # load the roscore file first. we currently have # last-declaration wins rules. roscore is just a # roslaunch file with special load semantics load_roscore(loader, config, verbose=verbose) # load the roslaunch_files into the config for f in roslaunch_files: try: logger.info('loading config file %s'%f) loader.load(f, config, verbose=verbose) except roslaunch.xmlloader.XmlParseException as e: raise RLException(e) except roslaunch.loader.LoadException as e: raise RLException(e) # we need this for the hardware test systems, which builds up # roslaunch launch files in memory if roslaunch_strs: for launch_str in roslaunch_strs: try: logger.info('loading config file from string') loader.load_string(launch_str, config) except roslaunch.xmlloader.XmlParseException as e: raise RLException('Launch string: %s\nException: %s'%(launch_str, e)) except roslaunch.loader.LoadException as e: raise RLException('Launch string: %s\nException: %s'%(launch_str, e)) # choose machines for the nodes if assign_machines: config.assign_machines() return config