# $Id$

import glob, rpki.up_down, rpki.left_right, rpki.relaxng, xml.sax, lxml.etree, lxml.sax, POW, POW.pkix

verbose = False

def test(fileglob, schema, sax_handler, encoding, tester=None):
  rng = rpki.relaxng.RelaxNG(schema)
  files = glob.glob(fileglob)
  files.sort()
  for f in files:
    print "\n<!--", f, "-->"
    handler = sax_handler()
    elt_in = lxml.etree.parse(f).getroot()
    rng.assertValid(elt_in)
    lxml.sax.saxify(elt_in, handler)
    elt_out = handler.result.toXML()
    rng.assertValid(elt_out)
    if (tester):
      tester(elt_in, elt_out, handler.result)
    print lxml.etree.tostring(elt_out, pretty_print=True, encoding=encoding, xml_declaration=True)

def pprint_cert(cert):
  print POW.derRead(POW.X509_CERTIFICATE, cert.toString()).pprint()

def ud_tester(elt_in, elt_out, msg):
  assert isinstance(msg, rpki.up_down.message_pdu)
  if verbose:
    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)

def lr_tester(elt_in, elt_out, msg):
  assert isinstance(msg, rpki.left_right.msg)
  if verbose:
    for bsc in [x for x in msg if isinstance(x, rpki.left_right.bsc_elt)]:
      for cert in bsc.signing_cert:
        pprint_cert(cert)

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)
/td><td class='form'><form class='right' method='get' action='/sra/rpki.net/log/buildtools/make-python-executable.py'>
<input type='hidden' name='id' value='c27571f78e6f4515d0eb33fada0c40d394193b6d'/><select name='qt'>
<option value='grep'>log msg</option>
<option value='author'>author</option>
<option value='committer'>committer</option>
<option value='range'>range</option>
</select>
<input class='txt' type='search' size='10' name='q' value=''/>
<input type='submit' value='search'/>
</form>
</td></tr></table>
<div class='path'>path: <a href='/sra/rpki.net/tree/?id=c27571f78e6f4515d0eb33fada0c40d394193b6d'>root</a>/<a href='/sra/rpki.net/tree/buildtools?id=c27571f78e6f4515d0eb33fada0c40d394193b6d'>buildtools</a>/<a href='/sra/rpki.net/tree/buildtools/make-python-executable.py?id=c27571f78e6f4515d0eb33fada0c40d394193b6d'>make-python-executable.py</a></div><div class='content'>blob: eeb31e39288f062fa4e76657eb9b404c57e1394c (<a href='/sra/rpki.net/plain/buildtools/make-python-executable.py?id=c27571f78e6f4515d0eb33fada0c40d394193b6d'>plain</a>) (<a href='/sra/rpki.net/blame/buildtools/make-python-executable.py?id=c27571f78e6f4515d0eb33fada0c40d394193b6d'>blame</a>)
<table summary='blob content' class='blob'>
<tr><td class='linenumbers'><pre><a id='n1' href='#n1'>1</a>
<a id='n2' href='#n2'>2</a>
<a id='n3' href='#n3'>3</a>
<a id='n4' href='#n4'>4</a>
<a id='n5' href='#n5'>5</a>
<a id='n6' href='#n6'>6</a>
<a id='n7' href='#n7'>7</a>
<a id='n8' href='#n8'>8</a>
<a id='n9' href='#n9'>9</a>
<a id='n10' href='#n10'>10</a>
<a id='n11' href='#n11'>11</a>
<a id='n12' href='#n12'>12</a>
<a id='n13' href='#n13'>13</a>
<a id='n14' href='#n14'>14</a>
<a id='n15' href='#n15'>15</a>
<a id='n16' href='#n16'>16</a>
<a id='n17' href='#n17'>17</a>
<a id='n18' href='#n18'>18</a>
<a id='n19' href='#n19'>19</a>
<a id='n20' href='#n20'>20</a>
<a id='n21' href='#n21'>21</a>
<a id='n22' href='#n22'>22</a>
<a id='n23' href='#n23'>23</a>
<a id='n24' href='#n24'>24</a>
<a id='n25' href='#n25'>25</a>
<a id='n26' href='#n26'>26</a>
<a id='n27' href='#n27'>27</a>
<a id='n28' href='#n28'>28</a>
<a id='n29' href='#n29'>29</a>
<a id='n30' href='#n30'>30</a>
<a id='n31' href='#n31'>31</a>
<a id='n32' href='#n32'>32</a>
<a id='n33' href='#n33'>33</a>
<a id='n34' href='#n34'>34</a>
<a id='n35' href='#n35'>35</a>
<a id='n36' href='#n36'>36</a>
<a id='n37' href='#n37'>37</a>
<a id='n38' href='#n38'>38</a>
</pre></td>
<td class='lines'><pre><code>