diff options
-rw-r--r-- | scripts/Makefile | 3 | ||||
-rw-r--r-- | scripts/rpki/up_down.py | 12 | ||||
-rwxr-xr-x | scripts/xml-parse-test.py | 37 |
3 files changed, 43 insertions, 9 deletions
diff --git a/scripts/Makefile b/scripts/Makefile index 3db34124..0508953a 100644 --- a/scripts/Makefile +++ b/scripts/Makefile @@ -39,3 +39,6 @@ resource-cert-samples-regen: resource-cert-samples/.stamp resource-cert-samples/.stamp: generate-testrepo.py Makefile python generate-testrepo.py touch $@ + +wraptest: all + (echo '<wrapper>'; python xml-parse-test.py; echo '</wrapper>') | fgrep -v '<?xml' | xmlindent diff --git a/scripts/rpki/up_down.py b/scripts/rpki/up_down.py index 4811d068..b66691c5 100644 --- a/scripts/rpki/up_down.py +++ b/scripts/rpki/up_down.py @@ -25,8 +25,11 @@ class base_elt(object): elt.set(key, str(val)) return elt - def make_b64elt(self, elt, name): - lxml.etree.SubElement(elt, "{%s}%s" % (xmlns, name), nsmap=nsmap).text = base64.b64encode(getattr(self, name)) + def make_b64elt(self, elt, name, value=None): + if value is None: + value = getattr(self, name, None) + if value is not None: + lxml.etree.SubElement(elt, "{%s}%s" % (xmlns, name), nsmap=nsmap).text = base64.b64encode(value) class certificate_elt(base_elt): """ @@ -76,7 +79,8 @@ class class_elt(base_elt): def endElement(self, stack, name, text): if name == "issuer": - self.issuer = base64.b64decode(text) + self.issuer = POW.pkix.Certificate() + self.issuer.fromString(base64.b64decode(text)) else: assert name == "class", "Unexpected name %s, stack %s" % (name, stack) stack.pop() @@ -84,7 +88,7 @@ class class_elt(base_elt): def toXML(self): elt = self.make_elt("class", "class_name", "cert_url", "resource_set_as", "resource_set_ipv4", "resource_set_ipv6", "suggested_sia_head") elt.extend([i.toXML() for i in self.certs]) - self.make_b64elt(elt, "issuer") + self.make_b64elt(elt, "issuer", self.issuer.toString()) return elt class list_pdu(base_elt): diff --git a/scripts/xml-parse-test.py b/scripts/xml-parse-test.py index 8e830d8d..0993a02f 100755 --- a/scripts/xml-parse-test.py +++ b/scripts/xml-parse-test.py @@ -1,17 +1,19 @@ # $Id$ -import glob, rpki.up_down, rpki.left_right, xml.sax, lxml.etree, lxml.sax +import glob, rpki.up_down, rpki.left_right, xml.sax, lxml.etree, lxml.sax, pprint, POW, POW.pkix -def test(fileglob, schema, proto, encoding): +def test(fileglob, schema, sax_handler, encoding, tester=None): rng = lxml.etree.RelaxNG(lxml.etree.parse(schema)) files = glob.glob(fileglob) files.sort() for f in files: print "\n<!--", f, "-->" - handler = proto.sax_handler() + handler = sax_handler() et = lxml.etree.parse(f) rng.assertValid(et) lxml.sax.saxify(et, handler) + if (tester): + tester(et, handler.result) et = handler.result.toXML() print lxml.etree.tostring(et, pretty_print=True, encoding=encoding, xml_declaration=True) try: @@ -20,6 +22,31 @@ def test(fileglob, schema, proto, encoding): print rng.error_log.last_error raise -test("up-down-protocol-samples/*.xml", "up-down-medium-schema.rng", rpki.up_down, encoding="utf-8") +def pprint_cert(cert): + print POW.derRead(POW.X509_CERTIFICATE, cert.toString()).pprint() -test("left-right-protocol-samples/*.xml", "left-right-schema.rng", rpki.left_right, encoding="us-ascii") +def ud_tester(et, msg): + assert isinstance(msg, rpki.up_down.message_pdu) + if isinstance(msg.payload, rpki.up_down.list_response_pdu): + for c in msg.payload.classes: + for i in range(len(c.certs)): + print "[Certificate #%d]" % i + pprint_cert(c.certs[i].cert) + print "[Issuer]" + pprint_cert(c.issuer) + print "Type:", et.getroot().get("type") + +def lr_tester(et, msg): + assert isinstance(msg, rpki.left_right.msg) + +test(fileglob="up-down-protocol-samples/*.xml", + schema="up-down-medium-schema.rng", + sax_handler=rpki.up_down.sax_handler, + encoding="utf-8", + tester=ud_tester) + +test(fileglob="left-right-protocol-samples/*.xml", + schema="left-right-schema.rng", + sax_handler=rpki.left_right.sax_handler, + encoding="us-ascii", + tester=lr_tester) |