diff --git a/pytrustnfe/servicos/assinatura.py b/pytrustnfe/servicos/assinatura.py index 9200fb6..f7f16d3 100644 --- a/pytrustnfe/servicos/assinatura.py +++ b/pytrustnfe/servicos/assinatura.py @@ -1,9 +1,11 @@ +#coding=utf-8 ''' Created on Jun 14, 2015 @author: danimar ''' import xmlsec, libxml2 +import os.path NAMESPACE_SIG = 'http://www.w3.org/2000/09/xmldsig#' @@ -12,7 +14,11 @@ class Assinatura(object): def __init__(self, arquivo, senha): self.arquivo = arquivo self.senha = senha - + + def _checar_certificado(self): + if not os.path.isfile(self.arquivo): + raise Exception('Caminho do certificado não existe.') + def _inicializar_cripto(self): libxml2.initParser() libxml2.substituteEntitiesDefault(1) @@ -30,6 +36,7 @@ class Assinatura(object): def assina_xml(self, xml): + self._checar_certificado() self._inicializar_cripto() try: doc_xml = libxml2.parseMemory(xml.encode('utf-8'), len(xml.encode('utf-8'))) diff --git a/pytrustnfe/test/test_assinatura.py b/pytrustnfe/test/test_assinatura.py index e261e49..d9aa829 100644 --- a/pytrustnfe/test/test_assinatura.py +++ b/pytrustnfe/test/test_assinatura.py @@ -5,27 +5,41 @@ Created on Jun 14, 2015 @author: danimar ''' import unittest +import os, os.path from pytrustnfe.servicos.assinatura import Assinatura XML_ASSINAR = '' \ + '' \ + ']>' \ '' \ ' ' \ ' Hello, World!' \ ' ' \ '' -XML_ASSINADO = '' class test_assinatura(unittest.TestCase): + + caminho = os.path.dirname(__file__) - def test_assinar_xml(self): - print 'oola' - assinatura = Assinatura('/home/danimar/Desktop/INFOGER.pfx', '123456') - - self.assertRaises(RuntimeError, assinatura.assina_xml, XML_ASSINAR) + def test_assinar_xml_arquivo_invalido(self): + print self.caminho + assinatura = Assinatura(os.path.join(self.caminho, 'teste_nao_existe.pfx'), '123456') + self.assertRaises(Exception, assinatura.assina_xml, XML_ASSINAR) + + def test_assinar_xml_senha_invalida(self): + assinatura = Assinatura(os.path.join(self.caminho,'teste.pfx'), '123') + self.assertRaises(Exception, assinatura.assina_xml, XML_ASSINAR) + def test_assinar_xml_valido(self): + assinatura = Assinatura(os.path.join(self.caminho,'teste.pfx'), '123456') + xml = assinatura.assina_xml(XML_ASSINAR) + xml_assinado = open(os.path.join(self.caminho, 'xml_assinado.xml'), 'r').read() + + self.assertEqual(xml_assinado, xml, 'Xml assinado é inválido') -#if __name__ == "__main__": +if __name__ == "__main__": #import sys;sys.argv = ['', 'Test.testName'] -# unittest.main() + unittest.main() \ No newline at end of file diff --git a/pytrustnfe/test/teste.pfx b/pytrustnfe/test/teste.pfx new file mode 100644 index 0000000..bb326ab Binary files /dev/null and b/pytrustnfe/test/teste.pfx differ diff --git a/pytrustnfe/test/xml_assinado.xml b/pytrustnfe/test/xml_assinado.xml new file mode 100644 index 0000000..178375c --- /dev/null +++ b/pytrustnfe/test/xml_assinado.xml @@ -0,0 +1,37 @@ + + +]> + Hello, World! + + + + + + + + + +Ux0WbUl0+Ck1vAlonmbcqD+iO0o= + + +D7mPbktbL8eVjjlvHwHdttEBhBldotZtA6hIJ9I51PZ1Nb3KMxemEOMqbHcD4uZB +AJ1/b0sHNst/CoOepACIwGIzUuQShYswuW9Bq84IeM4DIOu35kcaUmVAesdmPsg4 +eSBmzGHdUZYopiEO9l2iGJpPrDEDkiXtv2uN7jjKHiI= + + +MIICMTCCAZqgAwIBAgIQfYOsIEVuAJ1FwwcTrY0t1DANBgkqhkiG9w0BAQUFADBX +MVUwUwYDVQQDHkwAewA1ADkARgAxAEUANAA2ADEALQBEAEQARQA1AC0ANABEADIA +RgAtAEEAMAAxAEEALQA4ADMAMwAyADIAQQA5AEUAQgA4ADMAOAB9MB4XDTE1MDYx +NTA1NDc1N1oXDTE2MDYxNDExNDc1N1owVzFVMFMGA1UEAx5MAHsANQA5AEYAMQBF +ADQANgAxAC0ARABEAEUANQAtADQARAAyAEYALQBBADAAMQBBAC0AOAAzADMAMgAy +AEEAOQBFAEIAOAAzADgAfTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAk41G +nqXXLaiOC/y0/cA4tbS+NZCqI+x4EsztgDFvPPlHstiVYcLRkni4i93gK9zoC6g0 +mh66HMVzAfE8vRNwW5b7m6nWS1SiHBon7/Mqsw4MIq3SC+J/fTbKpqwyfAuH2YZl +AiQuQc85fyllAMLh2WrA7JgOLR/5tF3kLtpbHdECAwEAATANBgkqhkiG9w0BAQUF +AAOBgQArdh+RyT6VxKGsXk1zhHsgwXfToe6GpTF4W8PHI1+T0WIsNForDhvst6nm +QtgAhuZM9rxpOJuNKc+pM29EixpAiZZiRMCSWEItNyEVdUIi+YnKBcAHd88TwO86 +d126MWQ2O8cu5W1VoDp7hYBYKOnLbYi11/StO+0rzK+oPYAvIw== + + + diff --git a/requirements.txt b/requirements.txt index 9f580cb..edacdc8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1,2 @@ -nose \ No newline at end of file +nose +mock \ No newline at end of file