From 9de9ca37cefd06156e62d0faa8ac9f9c41305b91 Mon Sep 17 00:00:00 2001 From: Danimar Ribeiro Date: Mon, 15 Jun 2015 15:24:56 -0300 Subject: [PATCH] =?UTF-8?q?Corrigido=20testes=20unit=C3=A1rios?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pytrustnfe/servicos/assinatura.py | 9 ++++++++- pytrustnfe/test/test_assinatura.py | 30 ++++++++++++++++++++++-------- pytrustnfe/test/teste.pfx | Bin 0 -> 1764 bytes pytrustnfe/test/xml_assinado.xml | 37 +++++++++++++++++++++++++++++++++++++ requirements.txt | 3 ++- 5 files changed, 69 insertions(+), 10 deletions(-) create mode 100644 pytrustnfe/test/teste.pfx create mode 100644 pytrustnfe/test/xml_assinado.xml 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 0000000000000000000000000000000000000000..bb326abdd505200a18d4540c606db1052fc220f3 GIT binary patch literal 1764 zcmY+DdpOkj7so&IH3nnI-Ihy~OY1U?yJC?jk=r2KGQVkDo6OIMVPmq)kfCgoOH^b= z+Q*PI387z_ni9%wHg`ozuB8^^64`G(``dl?InVi=b6)3jKF{Zm^TshzV-P|D$3zvQ zWQ;Q0GM42KQV1>+^(&Hz%7XD398;qHUoDApBvYac#vIs-P_lnbVbBPO%Y^E2OsEE@ zi9-J$!;i}&rDYU-9M*2`HH9FlZX^@B;H&p0B%{;h3A5F|u*_;}QPi|BrKH$V=Y6K@ zH6CL})I7~_UNT2LYpt(B)|H=oQGdAm7DX7ZK@3~Z+EV))!4t32nwIP=MF@!uP1Mh^ z^)F=mZSxcxR;@+E)HSS&;*X?EVCH^#Gf9YNF0iDf-w|Teef)n@iqS$IDIQ99n|3%S zU8lv!)r+;}U%{%it-L%|>+as;Ld)dHHPI_IOV?M-pE+&)p&%VG9+e=~oGNgY3}{&B z5~qs`66Pe|pBd39qOgx<25I4YSmesqKj?@4n5?%MpGh#|jXg%AOfSPYqz;Qi!Sk=*1975 zq$zHwG+y18)Z;Q4UGQ%>?LOZC;Y_w$-Mb#Ha;y zbHlE&h-~zOHiiD^YA^F_!T1KH>thu$N=_Xibl&!C;XY?*Ox>@Jph@W9#=9lV3Ue(e z$;Jx=!h^$n!YsUz;=# zx1-dI(SuX|d(CB3%}_`r0sw#u`Uk3*d1)U8bYKPcfCIn`xB^RH4M$Vp0-Gz$O=02! z%;Byn*avWMZy%i50t?v8VcQ2!x&r5K#1Eslv48~U$G=VK0H1I765uKfgo9XEiBJFjy%Y)- zX9J9CAq0TK&3`(Gf5{c~Rj$!WPZYzq9$fh<*Hk8yTAu#m#fe?=MbPEf!CtD~YqrNb z>+Y#Y&LSPI0~TJDyxQ!jCcHtK*i@*XKQBD`WhDB|)pGtomBG2=7sPqWSS5k|n1RA` z8-cubI>vK)L2&e z;Ds5#`2w!VLQ!4vPl<5`EBYacqQN-}+<`v~z~HV_Wpxt0N`Or&B!19R2)KHdp!5U_op^cW_*U zv6jy(=RSD|-@lQAv&IYZQN`4X&R$EJCT=$(Yo%R?2&Ay;0`VE#WKCQ{d(^-?~=Qo?(Yn{@1t(cBfS_`jc(+HNGj7Pk4cZ~NL%tZ z_9trWtVlHTCubHmDVn^R$TI#=mStgb@5hUa$yQ%HO^LG%=` + +]> + 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