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