
    i B              	       <   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
mZmZmZmZmZ dZdZ G d dej                  Z G d dej                  Z G d	 d
ej                  Z G d dej                  Zdedededej        e         fdZdS )    N)consterrorsnet
server_lib
transformstypeszsignkey-prod-000000zsignkey-prod-111111c                   h     e Zd Zd fdZddZddZddZddZddZdd	Z	dd
Z
ddZddZ xZS )Test_create_serve_urlreturnNc                    t                                                       t          j                            t
          j        j        j        d            t          j                            t
          j        j	        j        d            d S N)
supersetUposenvironpopr   EnvKeySERVE_ORIGINvalue
SERVE_PATHself	__class__s    W/root/projects/qq-shell/venv/lib/python3.11/site-packages/inngest/_internal/net_test.pyr   zTest_create_serve_url.setUp   sV    

u|06===

u|.4d;;;;;    c                 J    t          j        d dd d           }d}||k    sJ d S )Nhttps://foo.test/api/inngestpublic_pathrequest_urlserve_origin
serve_pathr   create_serve_urlr   actualexpecteds      r   test_only_request_urlz+Test_create_serve_url.test_only_request_url   sC    %6	
 
 
 2!!!!!!r   c                 J    t          j        d ddd           }d}||k    sJ d S )Nr   https://bar.testr   https://bar.test/api/inngestr#   r%   s      r   test_serve_originz'Test_create_serve_url.test_serve_origin"   sC    %6+	
 
 
 2!!!!!!r   c                     dt           j        t          j        j        j        <   t          j        d ddd           }d}||k    sJ d S )Nzhttps://bar-env.testr   r*   r   r+   )r   r   r   r   r   r   r   r$   r%   s      r   test_serve_origin_env_varz/Test_create_serve_url.test_serve_origin_env_var,   sW    6L
5<,23%6+	
 
 
 2!!!!!!r   c                 J    t          j        d ddd           }d}||k    sJ d S )Nr   zbar.testr   r+   r#   r%   s      r    test_serve_origin_missing_schemez6Test_create_serve_url.test_serve_origin_missing_scheme8   sC    %6#	
 
 
 2!!!!!!r   c                 J    t          j        d ddd           }d}||k    sJ d S )Nr   zhttps://bar.test:8080r   z!https://bar.test:8080/api/inngestr#   r%   s      r   test_serve_origin_portz,Test_create_serve_url.test_serve_origin_portB   sC    %60	
 
 
 7!!!!!!r   c                 J    t          j        d dd d          }d}||k    sJ d S )Nr   /custom/pathr   https://foo.test/custom/pathr#   r%   s      r   test_serve_pathz%Test_create_serve_url.test_serve_pathL   sC    %6%	
 
 
 2!!!!!!r   c                     dt           j        t          j        j        j        <   t          j        d dd d          }d}||k    sJ d S )Nz	/env/pathr   r4   r   r5   )r   r   r   r   r   r   r   r$   r%   s      r   test_serve_path_env_varz-Test_create_serve_url.test_serve_path_env_varV   sW    4?
5<*01%6%	
 
 
 2!!!!!!r   c                 J    t          j        d ddd          }d}||k    sJ d S )Nr   r*   r4   r   zhttps://bar.test/custom/pathr#   r%   s      r   test_serve_origin_and_pathz0Test_create_serve_url.test_serve_origin_and_pathb   sC    %6+%	
 
 
 2!!!!!!r   c                 J    t          j        dddd          }d}||k    sJ dS )z>
        public_path takes precedence over serve_path
        z/public/pathr   Nz/serve/pathr   zhttps://foo.test/public/pathr#   r%   s      r   test_public_pathz&Test_create_serve_url.test_public_pathl   sE    
 %&6$	
 
 
 2!!!!!!r   r   N)__name__
__module____qualname__r   r(   r,   r.   r0   r2   r6   r8   r:   r<   __classcell__r   s   @r   r
   r
      s        < < < < < <
" " " "" " " "
" 
" 
" 
"" " " "" " " "" " " "
" 
" 
" 
"" " " "" " " " " " " "r   r
   c                   6    e Zd ZddZddZddZddZddZdS )	Test_RequestSignaturer   Nc           	         t          j        ddi                              d          }t          t	          j                    dz            }t          |t          |          }t          |t                    rJ t          j
        j        j        d| d| i}t          t          j        ||t          j        j        t          d           t                    rJ d S )Nmsghiutf-8  s=&t=bodyheadersmodesigning_keysigning_key_fallback)jsondumpsencoderoundtime_sign_signing_key
isinstance	Exceptionr   	HeaderKey	SIGNATUREr   r   validate_request_sig
ServerKindCLOUDr   rM   unix_mssigrN   s        r   test_successz"Test_RequestSignature.test_success|   s    z5$-((//88	d*++D,00c9----- *02Hs2H2Hw2H2H
 $*0(%)   	
 	
 		
 		
 		
 		
 		
r   c           	      f   t          t          j                    dz            }t          dt          |          }t	          |t
                    rJ t          j        j        j	        d| d| i}t	          t          j        d|t          j        j        t          d           t
                    rJ d S )NrI   s   {"msg":"a & b"}rJ   rK   s   {"msg":"a \u0026 b"}rL   )rU   rV   rW   rX   rY   rZ   r   r[   r\   r   r   r]   r^   r_   )r   ra   rb   rN   s       r   test_escape_sequencesz+Test_RequestSignature.test_escape_sequences   s    	d*++&g>>c9----- *02Hs2H2Hw2H2H
 $-*0(%)   	
 	
 		
 		
 		
 		
 		
r   c                    t          j        ddi                              d          }t          t	          j                    dz            }t          |t          |          }t          |t                    rJ t          j
        j        j        d| d| i}t          j        ddi                              d          }t          j        ||t          j        j        t          d	          }t          |t"          j                  sJ dS )
zR
        Validation fails if the body is changed after signature creation
        rF   barrH   rI   rJ   rK   zyou've been hackedNrL   )rR   rS   rT   rU   rV   rW   rX   rY   rZ   r   r[   r\   r   r   r]   r^   r_   r   SigVerificationFailedError)r   rM   ra   rb   rN   
validations         r   test_body_tamperz&Test_RequestSignature.test_body_tamper   s    
 z5%.))0099	d*++D,00c9----- *02Hs2H2Hw2H2H
 z5"6788??HH-&,$!%
 
 

 *f&GHHHHHHHr   c           	         t          j        ddi                              d          }t          t	          j                    dz            }t          |t          |          }t          |t                    rJ t          j
        j        j        d| d| i}t          t          j        ||t          j        j        t"          t                    t                    rJ dS )	zt
        Validation succeeds if the primary signing key fails but the fallback
        signing key succeeds
        rF   rG   rH   rI   rJ   rK   rL   N)rR   rS   rT   rU   rV   rW   _signing_key_fallbackrY   rZ   r   r[   r\   r   r   r]   r^   r_   rX   r`   s        r   test_rotationz#Test_RequestSignature.test_rotation   s     z5$-((//88	d*++D/99c9----- *02Hs2H2Hw2H2H
 $*0(%:   	
 	
 		
 		
 		
 		
 		
r   c           	         t          j        ddi                              d          }t          t	          j                    dz            }t          |d|          }t          |t                    rJ t          j	        j
        j        d| d| i}t          t          j        ||t          j        j        t           t"                    t                    sJ d	S )
zE
        Validation fails after trying both the signing keys
        rF   rG   rH   rI   zsomething-elserJ   rK   rL   N)rR   rS   rT   rU   rV   rW   rY   rZ   r   r[   r\   r   r   r]   r^   r_   rX   rl   r`   s        r    test_fails_for_both_signing_keysz6Test_RequestSignature.test_fails_for_both_signing_keys   s    
 z5$-((//88	d*++D*G44c9----- *02Hs2H2Hw2H2H
 $*0(%:   	
 	
 		
 		
 		
 		
 		
r   r=   )r>   r?   r@   rc   re   rj   rm   ro    r   r   rD   rD   {   s|        
 
 
 
(
 
 
 
&I I I I0
 
 
 
2
 
 
 
 
 
r   rD   c                        e Zd Zd fdZdej        ej        gej        f         dej	        fdZ
dej        ej        gej        f         dej        fdZddZddZdd	Zdd
Z xZS )Test_fetch_with_auth_fallbackr   Nc                 |    t                                                       t          j        dd          | _        d S )NGETzhttp://localhost)r   r   httpxRequest_reqr   s    r   r   z#Test_fetch_with_auth_fallback.setUp   s,    M%);<<			r   handlerc                 L     G fddt           j                  } |            S )Nc                   8    e Zd Zdej        dej        f fdZdS )HTest_fetch_with_auth_fallback._create_async_transport.<locals>.Transportrequestr   c                    K    |          S r   rp   r   r|   rx   s     r   handle_async_requestz]Test_fetch_with_auth_fallback._create_async_transport.<locals>.Transport.handle_async_request   s       ww'''r   N)r>   r?   r@   ru   rv   Responser   rx   s   r   	Transportr{      sI        (( ( ( ( ( ( ( ( (r   r   )ru   AsyncBaseTransportr   rx   r   s    ` r   _create_async_transportz5Test_fetch_with_auth_fallback._create_async_transport   sH    	( 	( 	( 	( 	( 	( 	(0 	( 	( 	( y{{r   c                 L     G fddt           j                  } |            S )Nc                   8    e Zd Zdej        dej        f fdZdS )BTest_fetch_with_auth_fallback._create_transport.<locals>.Transportr|   r   c                      |          S r   rp   r~   s     r   handle_requestzQTest_fetch_with_auth_fallback._create_transport.<locals>.Transport.handle_request  s    ww'''r   N)r>   r?   r@   ru   rv   r   r   r   s   r   r   r     sE        (em ( ( ( ( ( ( ( ( (r   r   )ru   BaseTransportr   s    ` r   _create_transportz/Test_fetch_with_auth_fallback._create_transport   sH    	( 	( 	( 	( 	( 	( 	(+ 	( 	( 	( y{{r   c                   K   ddt           j        dt           j        ffd}t          j        t          j        |                     |                                                    t          j        | 	                    |                    | j
        t          t                     d{V }t          |t                    rJ |j        dk    sJ d	k    sJ dt          j        t          j        | 	                    |                    | j
        t          t                    }t          |t                    rJ |j        dk    sJ d	k    sJ dS )
zF
        The signing key is valid, so the fallback isn't used
        r   r|   r   c                    dz  | j                             d          }|t          j        dd|           S dt	          j        t                     }||k    rt          j        dd|           S t          j        dd|           S N   authorization  r   contentr|   zBearer    )rN   getru   r   r   hash_signing_keyrX   r|   actual_tokenexpected_token	req_counts      r   rx   zETest_fetch_with_auth_fallback.test_signing_key_works.<locals>.handler  s    NI"?..??L#~c3HHHHE*5lCCEE  ~--~c3HHHH>#sGDDDDr   	transportrP   rQ   Nr   r   ru   rv   r   r   fetch_with_auth_fallbackThreadAwareAsyncHTTPClientr   
initializeClientr   rw   rX   rl   rY   rZ   status_codefetch_with_auth_fallback_syncr   rx   resr   s      @r   test_signing_key_worksz4Test_fetch_with_auth_fallback.test_signing_key_works	       
 		EU] 	Eu~ 	E 	E 	E 	E 	E 	E  0*66w??  jllL4#9#9'#B#BCCCI$!6
 
 
 
 
 
 
 
 
 c9-----#%%%%A~~~~	/L4#9#9'#B#BCCCI$!6	
 
 
 c9-----#%%%%A~~~~~~r   c                   K   ddt           j        dt           j        ffd}t          j        t          j        |                     |                                                    t          j        | 	                    |                    | j
        t          t                     d{V }t          |t                    rJ |j        dk    sJ d	k    sJ dt          j        t          j        | 	                    |                    | j
        t          t                    }t          |t                    rJ |j        dk    sJ d	k    sJ dS )
zE
        The signing key is invalid, so the fallback is used
        r   r|   r   c                    dz  | j                             d          }|t          j        dd|           S dt	          j        t                     }||k    rt          j        dd|           S t          j        dd|           S r   rN   r   ru   r   r   r   rl   r   s      r   rx   zNTest_fetch_with_auth_fallback.test_signing_key_fallback_works.<locals>.handler?      NI"?..??L#~c3HHHHN*56KLLNN  ~--~c3HHHH>#sGDDDDr   r   r   Nr      r   r   s      @r   test_signing_key_fallback_worksz=Test_fetch_with_auth_fallback.test_signing_key_fallback_works8  r   r   c                   K   ddt           j        dt           j        ffd}t          j        t          j        |                     |                                                    t          j        | 	                    |                    | j
        dd           d	{V }t          |t                    rJ |j        d
k    sJ dk    sJ dt          j        t          j        | 	                    |                    | j
        dd          }t          |t                    rJ |j        d
k    sJ dk    sJ d	S )z/
        Both signing keys are invalid
        r   r|   r   c                    dz  | j                             d          }|t          j        dd|           S dt	          j        t                     }||k    rt          j        dd|           S t          j        dd|           S r   r   r   s      r   rx   zPTest_fetch_with_auth_fallback.test_signing_key_fallback_invalid.<locals>.handlern  r   r   r   zsignkey-prod-aaaaaazsignkey-prod-bbbbbbr   Nr   r   ru   rv   r   r   r   r   r   r   r   r   rw   rY   rZ   r   r   r   s      @r   !test_signing_key_fallback_invalidz?Test_fetch_with_auth_fallback.test_signing_key_fallback_invalidg  s     
 		EU] 	Eu~ 	E 	E 	E 	E 	E 	E  0*66w??  jllL4#9#9'#B#BCCCI-!6
 
 
 
 
 
 
 
 
 c9-----#%%%%A~~~~	/L4#9#9'#B#BCCCI-!6	
 
 
 c9-----#%%%%A~~~~~~r   c                   K   ddt           j        dt           j        ffd}t          j        t          j        |                     |                                                    t          j        | 	                    |                    | j
        dd           d{V }t          |t                    rJ |j        dk    sJ d	k    sJ dt          j        t          j        | 	                    |                    | j
        dd          }t          |t                    rJ |j        dk    sJ d	k    sJ dS )
z
        Still send a request when we don't have a signing key.  This is
        necessary to work with the Dev Server
        r   r|   r   c                     dz  | j                             d          }|t          j        dd|           S t          j        dd|           S )Nr   r   i  r   r   r   )rN   r   ru   r   )r|   r   r   s     r   rx   zBTest_fetch_with_auth_fallback.test_no_signing_key.<locals>.handler  sU    NI"?..??L'~c3HHHH>#sGDDDDr   r   Nr   r   r   r   r   s      @r   test_no_signing_keyz1Test_fetch_with_auth_fallback.test_no_signing_key  s      		EU] 	Eu~ 	E 	E 	E 	E 	E 	E 0*66w??  jllL4#9#9'#B#BCCCI!%
 
 
 
 
 
 
 
 
 c9-----#%%%%A~~~~	/L4#9#9'#B#BCCCI!%	
 
 
 c9-----#%%%%A~~~~~~r   r=   )r>   r?   r@   r   typingCallableru   rv   r   r   r   r   r   r   r   r   r   rA   rB   s   @r   rr   rr      s       = = = = = =%-%.!@A 
	!   %-%.!@A 
	   - - - -^- - - -^- - - -^( ( ( ( ( ( ( (r   rr   c                   .    e Zd ZddZddZddZddZdS )Test_parse_urlr   Nc                     t          j        dt          j        j                  dk    sJ t          j        dt          j        j                  dk    sJ d S )Nzfoo.testrO   zhttps://foo.testzhttp://foo.test)r   	parse_urlr   r^   r_   
DEV_SERVERr   s    r   test_no_schemezTest_parse_url.test_no_scheme  sl    M*:+@+FGGG!" " " " M*:+@+KLLL ! ! ! ! ! !r   c                 D   t          j        dt          j        j                  dk    sJ t          t          j        dt          j        j                  t                    sJ t          t          j        dt          j        j                  t                    sJ d S )Nzhttp://foo:8080r   fooz
http://foo)r   r   r   r^   r_   rY   rZ   r   s    r   test_no_domainzTest_parse_url.test_no_domain  s    M+*2G2MNNN ! ! ! ! M%j&;&ABBBI
 
 	
 	
 	
 M,Z-B-HIII
 
 	
 	
 	
 	
 	
r   c                 \    t          j        dt          j        j                  dk    sJ d S )Nzhttp://foo:8080/barr   )r   r   r   r^   r_   r   s    r   	test_pathzTest_parse_url.test_path  sD    M%J,A,G   %% % % % % %r   c                 J   t          t          j        dt          j        j                  t                    sJ t          t          j        dt          j        j                  t                    sJ t          t          j        dt          j        j                  t                    sJ t          t          j        dt          j        j                  t                    sJ t          t          j        dt          j        j                  t                    sJ d S )Ntruer   1false0 )rY   r   r   r   r^   r_   rZ   r   s    r   test_boolean_stringsz#Test_parse_url.test_boolean_strings  s"   M&z'<'BCCCY
 
 	
 	
 	
 M#J$9$?@@@)
 
 	
 	
 	
 M'
(=(CDDDi
 
 	
 	
 	
 M#J$9$?@@@)
 
 	
 	
 	
 M":#8#>???
 
 	
 	
 	
 	
 	
r   r=   )r>   r?   r@   r   r   r   r   rp   r   r   r   r     sd        
 
 
 

 
 
 

 
 
 

 
 
 
 
 
r   r   rM   rP   ra   r   c                 x   t          j        |           }t          |t                    r|S t          j        |          }t          j        |                    d          |t          j	                  }|
                    t          |                              d                     |                                S )NrH   )r   canonicalizerY   rZ   remove_signing_key_prefixhmacnewrT   hashlibsha256updatestr	hexdigest)rM   rP   ra   canonicalizedmacs        r   rW   rW     s    +D11M-++ 6{CCK
(7## C
 JJs7||""7++,,,==??r   )r   r   rR   r   rV   r   unittestunittest.mockru   inngest._internalr   r   r   r   r   r   rX   rl   TestCaser
   rD   IsolatedAsyncioTestCaserr   r   bytesr   int
MaybeErrorrW   rp   r   r   <module>r      s      				         O O O O O O O O O O O O O O O O$- f" f" f" f" f"H- f" f" f"Ro
 o
 o
 o
 o
H- o
 o
 o
dQ Q Q Q QH$D Q Q Qh/
 /
 /
 /
 /
X& /
 /
 /
d C # %:J3:O      r   