cfdi-cert/source/tests/test.py

154 lines
4.3 KiB
Python

#!/usr/bin/env python3
# coding: utf-8
import sys
from pathlib import Path
p = str(Path(__file__).resolve().parent.parent)
sys.path.insert(0, p)
import unittest
from test_config import *
from cfdi_cert import CertValidate, CertSign
# ~ @unittest.SkipTest
class BaseTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
pass
@classmethod
def tearDownClass(cls):
pass
def setUp(self):
msg = f'In method: {self._testMethodName}'
print(msg)
def tearDown(self):
pass
class TestCertValidate(BaseTest):
def test_validate_not_vigente(self):
path_cer = path_certs / 'novigente.cer'
path_key = path_certs / 'novigente.key'
cer = path_cer.read_bytes()
key = path_key.read_bytes()
cert = CertValidate()
result = cert.validate(cer, key, PASSWORD)
self.assertFalse(result)
expected = 'El certificado no es vigente'
result = cert.error
self.assertEqual(expected, result)
return
def test_validate_not_couple(self):
path_cer = path_certs / 'nopareja.cer'
path_key = path_certs / 'nopareja.key'
cer = path_cer.read_bytes()
key = path_key.read_bytes()
cert = CertValidate()
result = cert.validate(cer, key, PASSWORD)
self.assertFalse(result)
expected = 'El CER y el KEY no son pareja'
result = cert.error
self.assertEqual(expected, result)
return
def test_validate_wrong_password(self):
cert = CertValidate()
cer = path_cer.read_bytes()
key = path_key.read_bytes()
result = cert.validate(cer, key, 'letmein')
self.assertFalse(result)
expected = 'La contraseña es incorrecta'
result = cert.error
self.assertEqual(expected, result)
return
def test_get_key_enc_pem(self):
cert = CertValidate()
cer = path_cer.read_bytes()
key = path_key.read_bytes()
result = cert.validate(cer, key, PASSWORD)
self.assertTrue(result)
words = (cert.rfc, str(cert.serial_number1), MY_TOKEN)
result = cert.get_key_enc(words)
self.assertIsNotNone(result)
result = cert.get_key_pem(result, words)
self.assertIsNotNone(result)
return
def test_validate_cert(self):
cert = CertValidate()
cer = path_cer.read_bytes()
key = path_key.read_bytes()
result = cert.validate(cer, key, PASSWORD)
self.assertTrue(result)
return
class TestCertSign(BaseTest):
def test_sign(self):
cert = CertValidate()
cer = path_cer.read_bytes()
key = path_key.read_bytes()
result = cert.validate(cer, key, PASSWORD)
self.assertTrue(result)
words = (cert.rfc, str(cert.serial_number1), MY_TOKEN)
key_enc = cert.get_key_enc(words)
expected = 'ZSOD/SNUP0YmogV7h94ysXxERPSy8M+EBfWK4oKWkGRIMqSM1DEGLVi0IE0YNDoZTnBSWULsozCxOwt5rJdGE1tr2OTaXaHMubvC88vhqiv62mOeU/vGCv2yPbKcbjOpKDSQ/pEGlgUd69mESwekjpPI0c0NUWlnkO81eHr+Z8v7hTnJxoopvDiMAkg82snPDIFoIBEePcB/VL8oABRLKh9/2UHFMeS0YKQJWApPEaXD1ycxUbBqXgbi2OwQgM4vWMNX0qsiHyuEI82/zUZ8WLj+GHG6m+P/VKs9nYfEurXh68wZZqT1nzUNHudQxGVFdrwgj+uh7kl3O0Swoi160w=='
cert = CertSign(key_enc, words)
data = 'Ingrid Bergman'
result = cert.sign(data)
self.assertEqual(expected, result)
return
def test_sign_with_pem(self):
cert = CertValidate()
cer = path_cer.read_bytes()
key = path_key.read_bytes()
result = cert.validate(cer, key, PASSWORD)
self.assertTrue(result)
words = (cert.rfc, str(cert.serial_number1), MY_TOKEN)
key_enc = cert.get_key_enc(words)
key_pem = cert.get_key_pem(key_enc, words)
expected = 'ZSOD/SNUP0YmogV7h94ysXxERPSy8M+EBfWK4oKWkGRIMqSM1DEGLVi0IE0YNDoZTnBSWULsozCxOwt5rJdGE1tr2OTaXaHMubvC88vhqiv62mOeU/vGCv2yPbKcbjOpKDSQ/pEGlgUd69mESwekjpPI0c0NUWlnkO81eHr+Z8v7hTnJxoopvDiMAkg82snPDIFoIBEePcB/VL8oABRLKh9/2UHFMeS0YKQJWApPEaXD1ycxUbBqXgbi2OwQgM4vWMNX0qsiHyuEI82/zUZ8WLj+GHG6m+P/VKs9nYfEurXh68wZZqT1nzUNHudQxGVFdrwgj+uh7kl3O0Swoi160w=='
cert = CertSign(key_pem)
data = 'Ingrid Bergman'
result = cert.sign(data)
self.assertEqual(expected, result)
return
if __name__ == '__main__':
unittest.main(exit=False)