
    4pi                         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          }|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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	Exceptionr   r   r   r   r   dumpsencode)r   lengthbodyjr   s        r   do_POSTzProviderFailHandler.do_POST   sw   T\%%&6::;;*09tzv&&&c	
4;;w//7488AA 	 	 	AAA	55$$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   server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)r2   shutdownr8   joinr=   s    r   tearDownClassz"TestProviderFailover.tearDownClass.   s2    

"""""r   c                     t          | j        dz             }|                     |j                   |                    d          }|                     |d           d S )Nz/askzhello worldr   )r   r<   
assertTrue	availableaskassertEqual)r   crs      r   test_failover_to_local_providerz4TestProviderFailover.test_failover_to_local_provider3   sW    DI.//$$$EE-  J'''''r   N)r)   r*   r+   classmethodr?   rE   rM   r,   r   r   r.   r.   $   sW        2 2 [2 # # [#( ( ( ( (r   r.   __main__)r5   r   r:   http.serverr   r   unittestpulser   r   TestCaser.   r)   mainr,   r   r   <module>rU      s          : : : : : : : :  ! ! ! ! ! !~ ~ ~ ~ ~0 ~ ~ ~8( ( ( ( (8, ( ( (* zHMOOOOO r   