
    cpiJ	                         d dl Zd dlmc mZ d dlZd dlZd dlZd dl	m
Z
mZ d dlZd dlmZ  G d de          Z G d dej                  Zedk    r ej                     dS dS )	    N)
HTTPServerBaseHTTPRequestHandler)RemoteLLMClientc                       e Zd Zd Zd ZdS )ProviderFailHandlerc                     |                      d           |                     dd           |                                  | j                            d           d S )N   Content-Type
text/plains   OK)send_responsesend_headerend_headerswfilewrite)selfs    8/home/asher/github/pulse/tests/test_provider_failover.pydo_GETzProviderFailHandler.do_GET	   sZ    3666
    c                 :   t          | j                            dd                    }|r| j                            |          nd}	 t          j        |                    d          pd          }n# t          $ r i }Y nw xY w|                    d          }t          | j
        d          s|| j
        _        |dk    r|                     d	           |                     d
d           |                                  | j                            t          j        ddi                              d                     d S |                     d	           |                     d
d           |                                  | j                            d           d S )NzContent-Lengthr   r   zutf-8z{}providerfirst_providerlocalr	   r
   zapplication/jsonresponselocal_okr   s[   gemini-3-flash-preview
403 Your API key was reported as leaked. Please use another API key.)intheadersgetrfilereadjsonloadsdecode	Exceptionhasattrserverr   r   r   r   r   r   dumpsencode)r   lengthbodyjr   s        r   do_POSTzProviderFailHandler.do_POST   s   T\%%&6::;;*09tzv&&&c	
4;;w//7488AA 	 	 	AAA	55$$t{$455 	2)1DK&ws###^-?@@@JTZZ(@AAHHQQRRRRR s###^\:::J|}}}}}s   )A2 2B BN)__name__
__module____qualname__r   r+    r   r   r   r      s7             ~ ~ ~ ~ ~r   r   c                   @    e Zd Zed             Zed             Zd ZdS )TestProviderFailoverc                    t          dt                    | _        | j        j        | _        t          j        | j        j        d          | _        | j        	                                 t          j        d           d| j         | _        d S )N)z	127.0.0.1r   T)targetdaemong{Gz?zhttp://127.0.0.1:)r   r   r%   server_portport	threadingThreadserve_foreverthreadstarttimesleepbaseclss    r   
setUpClasszTestProviderFailover.setUpClass(   sv     02EFF
:)%SZ-EdSSS


41sx11r   c                 n    | j                                          | j                            d           d S )N   )timeout)r%   shutdownr:   joinr?   s    r   tearDownClassz"TestProviderFailover.tearDownClass1   s2    

"""""r   c                     t          | j        dz             }|                     |j                   |                    d          }|                     |d           |                     | j        j        d           d S )Nz/askzhello worldr   zgemini-2.5-flash-lite)r   r>   
assertTrue	availableaskassertEqualr%   r   )r   crs      r   test_failover_to_local_providerz4TestProviderFailover.test_failover_to_local_provider6   ss    DI.//$$$EE-  J'''35LMMMMMr   N)r,   r-   r.   classmethodrA   rG   rO   r/   r   r   r1   r1   '   s\        2 2 [2 # # [#N N N N Nr   r1   __main__)builtins@py_builtins_pytest.assertion.rewrite	assertionrewrite
@pytest_arr7   r    r<   http.serverr   r   unittestpulser   r   TestCaser1   r,   mainr/   r   r   <module>r]      s                        : : : : : : : :  ! ! ! ! ! !~ ~ ~ ~ ~0 ~ ~ ~>N N N N N8, N N N. zHMOOOOO r   