Revision 68857643 test/ganeti.utils_unittest.py

b/test/ganeti.utils_unittest.py
1698 1698
      self.assertEqual(validity, (None, None))
1699 1699

  
1700 1700

  
1701
class TestSignX509Certificate(unittest.TestCase):
1702
  KEY = "My private key!"
1703
  KEY_OTHER = "Another key"
1704

  
1705
  def test(self):
1706
    # Generate certificate valid for 5 minutes
1707
    (_, cert_pem) = utils.GenerateSelfSignedX509Cert(None, 300)
1708

  
1709
    cert = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM,
1710
                                           cert_pem)
1711

  
1712
    # No signature at all
1713
    self.assertRaises(errors.GenericError,
1714
                      utils.LoadSignedX509Certificate, cert_pem, self.KEY)
1715

  
1716
    # Invalid input
1717
    self.assertRaises(errors.GenericError, utils.LoadSignedX509Certificate,
1718
                      "", self.KEY)
1719
    self.assertRaises(errors.GenericError, utils.LoadSignedX509Certificate,
1720
                      "X-Ganeti-Signature: \n", self.KEY)
1721
    self.assertRaises(errors.GenericError, utils.LoadSignedX509Certificate,
1722
                      "X-Ganeti-Sign: $1234$abcdef\n", self.KEY)
1723
    self.assertRaises(errors.GenericError, utils.LoadSignedX509Certificate,
1724
                      "X-Ganeti-Signature: $1234567890$abcdef\n", self.KEY)
1725
    self.assertRaises(errors.GenericError, utils.LoadSignedX509Certificate,
1726
                      "X-Ganeti-Signature: $1234$abc\n\n" + cert_pem, self.KEY)
1727

  
1728
    # Invalid salt
1729
    for salt in list("-_@$,:;/\\ \t\n"):
1730
      self.assertRaises(errors.GenericError, utils.SignX509Certificate,
1731
                        cert_pem, self.KEY, "foo%sbar" % salt)
1732

  
1733
    for salt in ["HelloWorld", "salt", string.letters, string.digits,
1734
                 utils.GenerateSecret(numbytes=4),
1735
                 utils.GenerateSecret(numbytes=16),
1736
                 "{123:456}".encode("hex")]:
1737
      signed_pem = utils.SignX509Certificate(cert, self.KEY, salt)
1738

  
1739
      self._Check(cert, salt, signed_pem)
1740

  
1741
      self._Check(cert, salt, "X-Another-Header: with a value\n" + signed_pem)
1742
      self._Check(cert, salt, (10 * "Hello World!\n") + signed_pem)
1743
      self._Check(cert, salt, (signed_pem + "\n\na few more\n"
1744
                               "lines----\n------ at\nthe end!"))
1745

  
1746
  def _Check(self, cert, salt, pem):
1747
    (cert2, salt2) = utils.LoadSignedX509Certificate(pem, self.KEY)
1748
    self.assertEqual(salt, salt2)
1749
    self.assertEqual(cert.digest("sha1"), cert2.digest("sha1"))
1750

  
1751
    # Other key
1752
    self.assertRaises(errors.GenericError, utils.LoadSignedX509Certificate,
1753
                      pem, self.KEY_OTHER)
1754

  
1755

  
1701 1756
if __name__ == '__main__':
1702 1757
  testutils.GanetiTestProgram()

Also available in: Unified diff