
    M/e&                     >   d Z ddlmZ ddlZddlZddlZddlZddlm	Z	 ddl
Z
ddl
mZ ddlZddlZddlZddlmZ ddlmZ ddlmZ ddlmZ  G d	 d
e
j,                        Z G d de
j,                        Z e
j2                  ej4                  j7                          d       G d de
j,                               Z G d de
j,                        Z G d de
j,                        Zedk(  r4 ej@                   ejB                  ejD                  dd e#gz                yy)zTests for acme.standalone.    N)Set)mock)
challenges)crypto_util)errors)	test_utilc                       e Zd ZdZd Zd Zy)TLSServerTestz$Tests for acme.standalone.TLSServer.c                 b    ddl m}  |dt        j                  d      }|j	                          y )Nr   	TLSServer r   T)bind_and_activate)acme.standaloner   socketserverBaseRequestHandlerserver_closeselfr   servers      F/usr/lib/python3/dist-packages/acme/_internal/tests/standalone_test.py	test_bindzTLSServerTest.test_bind   s)    -\44N    c                     t         j                  r1ddlm}  |dt        j
                  dd      }|j                          y y )Nr   r   r   T)r   ipv6)sockethas_ipv6r   r   r   r   r   r   s      r   	test_ipv6zTLSServerTest.test_ipv6   s8    ??188DW[]F!	 r   N)__name__
__module____qualname____doc__r   r    r   r   r
   r
      s    ."r   r
   c                   @    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)HTTP01ServerTestz'Tests for acme.standalone.HTTP01Server.c                    t         j                  j                  t        j                  d            | _        t               | _        ddlm	}  |d| j                        | _
        | j                  j                  j                         d   | _        t        j                  | j                  j                         | _        | j"                  j%                          y )Nrsa1024_key.pemr   HTTP01Serverr   	resources   target)joseJWKloadr   load_vectoraccount_keysetr,   r   r*   r   r   getsocknameport	threadingThreadserve_foreverthreadstart)r   r*   s     r   setUpzHTTP01ServerTest.setUp+   s    88==!!"346!e0"7dnnEKK&&224Q7	&&dkk.G.GHr   c                     | j                   j                          | j                  j                          | j                   j	                          y Nr   shutdownr;   joinr   r   s    r   tearDownzHTTP01ServerTest.tearDown7   2      "r   c                     t        j                  dj                  | j                        d      }|j                  dk(  sJ |j
                  sJ y Nzhttp://localhost:{0}Fverifyz'ACME client standalone challenge solverrequestsgetformatr7   textokr   responses     r   
test_indexzHTTP01ServerTest.test_index<   D    <<"))$))4UD}} IIII{{{r   c                     t        j                  dj                  | j                        d      }|j                  t
        j                  k(  sJ y Nzhttp://localhost:{0}/fooFrH   rK   rL   rM   r7   status_codehttp_client	NOT_FOUNDrP   s     r   test_404zHTTP01ServerTest.test_404B   ?    <<&--dii8H##{'<'<<<<r   c                 n   t        j                  d      }|j                  | j                        \  }}ddlm} |j                  |||      }|r| j                  j                  |       |j                  j                  |j                  d| j                  j                         | j                        S Ns   xxxxxxxxxxxxxxxx)tokenr   )HTTP01RequestHandler)challrQ   
validation	localhost)r7   r   HTTP01response_and_validationr4   r   r_   HTTP01Resourcer,   addrQ   simple_verifyr`   
public_keyr7   r   rg   r`   rQ   ra   r_   resources          r   _test_http01zHTTP01ServerTest._test_http01G       !!4$<<T=M=MN*8'66(z 7 CNNx(  ..NNK)9)9)D)D)F /  	r   c                 ,    | j                  d      sJ y NTrg   rl   rC   s    r   test_http01_foundz"HTTP01ServerTest.test_http01_foundT         T ***r   c                 ,    | j                  d      rJ y NFrp   rq   rC   s    r   test_http01_not_foundz&HTTP01ServerTest.test_http01_not_foundW       $$$////r   c                 r   ddl m}  |dt               d      5 }t        j                  |j
                        }|j                          t        j                         5 }|j                  d|j                  j                         d   f       t        j                  |j                        }|j                          |j                  d	       |j                         }	 |j                  t        j                         |rJ d
       	 d d d        d d d        y #  Y xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r)   r   g?)r,   timeoutr.   rb   r-   g      @z"Server shutdown should not be hung)r   r*   r5   r8   r9   r:   r<   r   connectr6   rA   rB   is_alive	SHUT_RDWR)r   r*   r   server_threadclientstop_threadis_hungs          r   test_timely_shutdownz%HTTP01ServerTest.test_timely_shutdownZ   s   0'SUDA 	IV%,,F4H4HIM! IFV]]-F-F-H-KLM'..fooF!!#""2&'002OOF$4$45
 #H$HH{7I		I 	II I		I 	Is=   AD-B D! D?	D!	D-DD!!D*	&D--D6N)r    r!   r"   r#   r=   rD   rR   rZ   rl   rr   rv   r   r$   r   r   r&   r&   '   s.    1
#
=
+0Ir   r&   zpyOpenSSL too oldc                   (    e Zd ZdZd Zd Zd Zd Zy)TLSALPN01ServerTestz)Test for acme.standalone.TLSALPN01Server.c                    dt        j                  d      t        j                  d      fi| _        dt        j                  d      t        j                  d      fi| _        ddlm}  |d| j                  | j                  	      | _        t        j                  | j                  j                  
      | _        | j                  j                          y )N	   localhostzrsa2048_key.pemzrsa2048_cert.pemzrsa4096_key.pemzrsa4096_cert.pemr   )TLSALPN01Server)rb   r   )certschallenge_certsr.   )r   load_pyopenssl_private_key	load_certr   r   r   r   r   r8   r9   r:   r;   r<   )r   r   s     r   r=   zTLSALPN01ServerTest.setUpu   s    "001BC 23%
 

 !-001BC 23/
   	4%&6djj $ 4 46  &&dkk.G.GHr   c                     | j                   j                          | j                  j                          | j                   j	                          y r?   r@   rC   s    r   rD   zTLSALPN01ServerTest.tearDown   rE   r   c                    | j                   j                  j                         d d \  }}t        j                  d||ddg      }t        j                  |      t        j                  | j                  d   d         k(  sJ y )N   r   r-   s
   acme-tls/1hostr7   ry   alpn_protocols)r   r   r6   r   	probe_snir0   ComparableX509r   )r   r   r7   certs       r   test_challenge_certsz(TLSALPN01ServerTest.test_challenge_certs   s    [[''335bq9
d$$t$)?, ""4(##D$8$8$Fq$IJK 	K Kr   c                     | j                   j                  j                         d d \  }}t        j                  t
        j                        5  t        j                  d||ddg       d d d        y # 1 sw Y   y xY w)Nr   r   r-   s   bad-alpnr   )	r   r   r6   pytestraisesr   Errorr   r   )r   r   r7   s      r   test_bad_alpnz!TLSALPN01ServerTest.test_bad_alpn   sf    [[''335bq9
d]]6<<( 	.!!4dA +}.	. 	. 	.s   A33A<N)r    r!   r"   r#   r=   rD   r   r   r$   r   r   r   r   q   s    3"#K.r   r   c                   p    e Zd ZdZ G d dej
                        Z ej                  d      d        Z	d Z
y)BaseDualNetworkedServersTestz2Test for acme.standalone.BaseDualNetworkedServers.c                   "     e Zd ZdZ fdZ xZS )1BaseDualNetworkedServersTest.SingleProtocolServerzUServer that only serves on a single protocol. FreeBSD has this behavior for AF_INET6.c                    |j                  dd      }|rt        j                  | _        d|d<   nt        j                  | _        t        |   |i | |r^t        t        dd      }| j                  j                  |t        j                  d       	 | j                          | j                          y y #  | j                           xY w)Nr   Fr   IPPROTO_IPV6)   r-   )popr   AF_INET6address_familyAF_INETsuper__init__getattr
setsockoptIPV6_V6ONLYserver_bindserver_activater   )r   argskwargsr   level	__class__s        r   r   z:BaseDualNetworkedServersTest.SingleProtocolServer.__init__   s    ::fe,D&,oo#.3*+&,nn#Gd-f-  ;&&uf.@.@!D$$&((* %%'s    B6 6C	)r    r!   r"   r#   r   __classcell__)r   s   @r   SingleProtocolServerr      s    c	 	r   r   zsocket.socket.bindc                 D   ddl m} ddlm} t	        j
                  |d      |_        t        j                  t        j
                        5 } |t        j                  dt        j                         d d d        j                  j                   |k(  sJ y # 1 sw Y   %xY w)Nr   )
EADDRINUSEBaseDualNetworkedServerszFake addr in use errorr   )errnor   r   r   r   errorside_effectr   r   r   r   r   r   value)r   	mock_bindr   r   exc_infos        r   test_fail_to_bindz.BaseDualNetworkedServersTest.test_fail_to_bind   sy    $< &Z9Q R	]]6<<( 	:H$,AA88:	:
 ~~##z111	: 	:s   'BBc                     ddl m}  |t        j                  dt        j
                        }|j                         }d }|D ]  }|d   }|r||k(  sJ |} |j                  D ]  }|j                           y )Nr   r   r   r-   )	r   r   r   r   r   r   getsocknamesserversr   )r   r   r   	socknames	prev_portsocknamer7   r   s           r   test_ports_equalz-BaseDualNetworkedServersTest.test_ports_equal   s    <*(==++- ((*		! 	HA;D D(((I		
 oo 	"F!	"r   N)r    r!   r"   r#   r   	TCPServerr   r   patchr   r   r$   r   r   r   r      s<    <|55 , TZZ$%2 &2"r   r   c                   :    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
y	)
HTTP01DualNetworkedServersTestz5Tests for acme.standalone.HTTP01DualNetworkedServers.c                 L   t         j                  j                  t        j                  d            | _        t               | _        ddlm	}  |d| j                        | _
        | j                  j                         d   d   | _        | j                  j                          y )Nr(   r   )HTTP01DualNetworkedServersr   r+   r-   )r0   r1   r2   r   r3   r4   r5   r,   r   r   r   r   r7   r:   )r   r   s     r   r=   z$HTTP01DualNetworkedServersTest.setUp   sr    88==!!"346!e>1'T^^TLL--/215	""$r   c                 8    | j                   j                          y r?   )r   shutdown_and_server_closerC   s    r   rD   z'HTTP01DualNetworkedServersTest.tearDown   s    ..0r   c                     t        j                  dj                  | j                        d      }|j                  dk(  sJ |j
                  sJ y rG   rJ   rP   s     r   rR   z)HTTP01DualNetworkedServersTest.test_index   rS   r   c                     t        j                  dj                  | j                        d      }|j                  t
        j                  k(  sJ y rU   rV   rP   s     r   rZ   z'HTTP01DualNetworkedServersTest.test_404   r[   r   c                 n   t        j                  d      }|j                  | j                        \  }}ddlm} |j                  |||      }|r| j                  j                  |       |j                  j                  |j                  d| j                  j                         | j                        S r]   rc   rj   s          r   rl   z+HTTP01DualNetworkedServersTest._test_http01   rm   r   c                 ,    | j                  d      sJ y ro   rq   rC   s    r   rr   z0HTTP01DualNetworkedServersTest.test_http01_found  rs   r   c                 ,    | j                  d      rJ y ru   rq   rC   s    r   rv   z4HTTP01DualNetworkedServersTest.test_http01_not_found  rw   r   N)r    r!   r"   r#   r=   rD   rR   rZ   rl   rr   rv   r$   r   r   r   r      s(    ?	%1=
+0r   r   __main__r-   )$r#   http.clientr~   rX   r   r   sysr8   typingr   unittestr   josepyr0   r   rK   acmer   r   r   acme._internal.testsr   TestCaser
   r&   skipIf	TLSALPN01is_supportedr   r   r   r    exitmainargv__file__r$   r   r   <module>r      s      !   
           *"H%% "$GIx(( GIT Z))6688:MN0.(++ 0. O0.f7"8#4#4 7"t-0X%6%6 -0` zCHH[V[[!"
234 r   