def setUp(self):
     """setup gateway and topology for each test"""
     # gateway
     self.gateway = Gateway()
     self.chan = self.gateway.channel
     # topology
     graph = TopologyGraph()
     graph.add_route(NodeSet(HOSTNAME), NodeSet('n[1-2]'))
     graph.add_route(NodeSet('n1'), NodeSet('n[10-49]'))
     graph.add_route(NodeSet('n2'), NodeSet('n[50-89]'))
     self.topology = graph.to_tree(HOSTNAME)
     # xml parser with Communication.XMLReader as content handler
     self.xml_reader = XMLReader()
     self.parser = xml.sax.make_parser(["IncrementalParser"])
     self.parser.setContentHandler(self.xml_reader)
Esempio n. 2
0
    def testInvalidMsgStreams(self):
        """test detecting invalid messages"""
        patterns = [
            '<message type="BLA" msgid="-1"></message>',
            '<message type="ACK"></message>',
            '<message type="ACK" msgid="0" ack="12"><foo></foo></message>',
            '<message type="ACK" msgid="0" ack="12">some stuff</message>',
            '<message type="ACK" msgid="123"></message>',
            '<message type="OUT" msgid="123" reason="foo"></message>',
            '<message type="OUT" msgid="123" output="foo" nodes="bar">shoomp</message>',
            '<message type="CFG" msgid="123"><foo></bar></message>',
            '<message type="CFG" msgid="123"><foo></message>',
            '<message type="CTL" msgid="123"><param></param></message>',
            '<message type="CTL" msgid="123"></message>',
            '<message type="CTL" msgid="123"><param><action target="node123" type="foobar"></action></param></message>',
            '<message type="CTL" msgid="123"><action type="foobar"></message>',
            '<message type="CTL" msgid="123"><action type="foobar" target="node1"><param cmd="yeepee"></param></action></message>',
            '<message type="CTL" msgid="123"><action type="foobar"><param cmd="echo fnords"></param></action></message>',
            '<message type="CTL" msgid="123"><action type="shell" target="node1"></action></message>',
            '<message type="CTL" msgid="123"><action type="" target="node1"><param cmd="echo fnords"></param></action></message>',
            '<param cmd=""></param></message>',
            '<message type="ERR" msgid="123"></message>',
            '<message type="ERR" msgid="123" reason="blah">unexpected payload</message>',
            '<message type="ERR" msgid="123" reason="blah"><foo bar="boo"></foo></message>',
        ]
        for msg_xml in patterns:
            parser = xml.sax.make_parser(['IncrementalParser'])
            parser.setContentHandler(XMLReader())

            parser.feed('<?xml version="1.0" encoding="UTF-8"?>\n')
            parser.feed('<channel>\n')

            try:
                parser.feed(msg_xml)
            except MessageProcessingError as m:
                # actually this is Ok, we want this exception to be raised
                pass
            else:
                self.fail('Invalid message goes undetected: %s' % msg_xml)