aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scripts/Makefile3
-rw-r--r--scripts/rpki/up_down.py12
-rwxr-xr-xscripts/xml-parse-test.py37
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)