o
    YiD                     @   s\  d Z ddlmZ ddlmZ ddlmZ ddlZddlmZm	Z	 ddl
mZmZ ddlmZ ddlZg d	Zejd
d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dd Zejjd d! Zejjd"d# Zejjd$d% Zejjd&d' Z ejjd(d) Z!ejjd*d+ Z"ejjd,d- Z#ejjd.d/ Z$ejjd0d1 Z%dS )2zTests for Interactions API.   Client)	_base_url    )mockN)RequestResponse)AsyncHttpxClientBaseApiClient)ZGOOGLE_CLOUD_PROJECTZGEMINI_API_KEYGOOGLE_API_KEYZGOOGLE_CLOUD_LOCATIONT)Zautousec                 C   s   t D ]	}| j|dd qd S )NF)Zraising)ENV_VARSZdelenv)monkeypatchvar r   c/home/kim/smarthome/.venv/lib/python3.10/site-packages/google/genai/tests/interactions/test_auth.pyclear_env_vars#   s   r   c                 C   s   |  dd t }tjtd9}tdtddd|_|j	j
dd	d
 |  |jd d }t|jds8J |jd dksAJ W d    d S 1 sLw   Y  d S Nr   test-api-keysend   POST requestgemini-1.5-flashHellomodelinputr   z/v1beta/interactionsx-goog-api-key)setenvr   r   patchobject
HTTPClientr   r   return_valueinteractionscreateassert_called_once	call_argsstrurlendswithheadersr   client	mock_sendr   r   r   r   test_interactions_gemini_url(   s   "r0   c              	   C   s   |  dd t }tjtd>}tjtd}tdtddd|_	|j
jd	d
d |  W d    n1 s9w   Y  W d    d S W d    d S 1 sQw   Y  d S )Nr   r   _access_tokenr   r   r   r   r   r   r   r   )r    r   r   r!   r"   r
   r#   r   r   r$   r%   r&   assert_not_calledr   r.   mock_access_tokenr/   r   r   r   'test_interactions_gemini_no_vertex_auth9   s   
Pr5   c                 C   s   |  dd t }d|j_tjtd9}tdt	dddd	id
tdt	dddd	id
tdt	dddg|_
|jjddd |jdksEJ W d    d S 1 sPw   Y  d S Nr   r      r     r   r   retry-after-ms1r   r,   r   r   r   r   r   r   )r    r   _api_clientmax_retriesr   r!   r"   r#   r   r   side_effectr%   r&   
call_countr   r.   r/   r   r   r   test_interactions_gemini_retryH   s   "rA   c                 C   s   |  dd t }tjtd;}tdtddd|_|j	j
dd	d
did |  |jd d }|jd dks:J |jd dksCJ W d    d S 1 sNw   Y  d S Nr   r   r   r   r   r   r   r   r   zX-Custom-HeaderZ	TestValuer   r   extra_headersr   zx-custom-headerr   )r    r   r   r!   r"   r#   r   r   r$   r%   r&   r'   r(   r,   r-   r   r   r   &test_interactions_gemini_extra_headersV   s   "rE   c               	   C   s(  ddl m}  ddlm} ddlm} t }d|_tddd	|d
}tj	j
| ddd`}tj	j
|dt d<}|jjddd}|  |  |j\}}	|d j}
tdd |
 D s^J tdd |
 D skJ W d    n1 suw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr   r
   SyncAPIClientr   r   test-quota-projectTtest-projectus-central1vertexaiprojectlocationcredentialsr1   fake-vertex-tokenr$   r   gemini-2.5-flash/What is the largest planet in our solar system?r   c                 s   $    | ]\}}|d ko|dkV  qdS authorizationzBearer fake-vertex-tokenNr   .0keyvaluer   r   r   	<genexpr>   
    
z7test_interactions_vertex_auth_header.<locals>.<genexpr>c                 s   rU   zx-goog-user-projectrI   Nr   rX   r   r   r   r\      r]   )r<   r
   _interactions._base_clientrH   httpxr   r   Mockquota_project_idr!   r"   r%   r&   r'   r(   r,   anyitems)r
   rH   r#   credsr.   r4   r/   responseargskwargsr,   r   r   r   $test_interactions_vertex_auth_headerg   s@   

Pri   c            
   	   C   s   ddl m}  ddlm} t }tddd}tjj| dd	d
S}tjj|dt d
/}|jj	ddd}|
  |  |j\}}|d j}	tdd |	 D sSJ W d    n1 s]w   Y  W d    d S W d    d S 1 suw   Y  d S )Nr   rF   r   r   Tr   rM   Zapi_keyr1   rQ   rR   r   rS   rT   r   c                 s   rU   r   r   Nr   rX   r   r   r   r\      r]   z>test_interactions_vertex_key_no_auth_header.<locals>.<genexpr>)r<   r
   r`   r   r   ra   r!   r"   r%   r&   r'   r2   r(   r,   rc   rd   )
r
   r#   re   r.   r4   r/   rf   rg   rh   r,   r   r   r   +test_interactions_vertex_key_no_auth_header   s6   

Prl   c                  C   s   t  } d| _tddd| d}t d/}tdtdd	d
|_|jj	ddd |
  |jd d }t|jdks;J W d    d S 1 sFw   Y  d S )NrI   TrJ   rK   rL   zhttpx.Client.sendr   r   r   r   r   r   r   r   nhttps://us-central1-aiplatform.googleapis.com/v1beta1/projects/test-project/locations/us-central1/interactions)r   ra   rb   r   r!   r   r   r$   r%   r&   r'   r(   r)   r*   )re   r.   r/   r   r   r   r   test_interactions_vertex_url   s   "rn   c            
   	      sz  ddl m}  ddlm} t }d|_tddd|d	}d
|j _g d}t|  fdd}tj	j
| d|d}}tj	
|d]}tdtddddidtdtddddidtdtdddg|_|jjddd |jdksoJ |jdksvJ tdD ]}|j| d d j}	|	d d||  ksJ qzW d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr   rF   r   r   rI   TrJ   rK   rL   r7   Ztoken1Ztoken2Ztoken3c                      s   t  S Nnextr   Z
token_iterr   r   	get_token   s   zAtest_interactions_vertex_auth_refresh_on_retry.<locals>.get_tokenr1   r>   r   r8   r   r   r9   r:   r;   r   r   r   r   r   rW   Bearer )r<   r
   r`   r   r   ra   rb   r=   iterr!   r"   r   r   r>   r%   r&   r?   rangecall_args_listr,   )
r
   r#   re   r.   token_valuesrt   r4   r/   ir,   r   rs   r   .test_interactions_vertex_auth_refresh_on_retry   s6   Pr|   c               	   C   sh  ddl m}  ddlm} t }d|_tddd|d	}tjj| d
dd}tj|df}t	dt
ddd|_|jjddddid |  |jd d j}|d dksVJ |  |  |  |jjddddid |  |jd d j}|d dksJ d|vsJ |  W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr   rF   r   r   rI   TrJ   rK   rL   r1   default-tokenrR   r   r   r   r   r   r   r   AuthorizationBearer manual-tokenrC   rW   r   
manual-key)r<   r
   r`   r   r   ra   rb   r!   r"   r   r   r$   r%   r&   r'   r(   r,   r2   
reset_mock)r
   r#   re   r.   r4   r/   r,   r   r   r   /test_interactions_vertex_extra_headers_override   sD   
Pr   c                    s   |  dd t }tjtd=}tdtddd|_|j	j
jdd	d
I d H  |  |jd d }t|jds=J |jd dksFJ W d    d S 1 sQw   Y  d S r   )r    r   r   r!   r"   r	   r   r   r$   aior%   r&   r'   r(   r)   r*   r+   r,   r-   r   r   r   "test_async_interactions_gemini_url  s   "r   c              	      s   |  dd t }tjtdB}tjtd"}tdtddd|_	|j
jjd	d
dI d H  |  W d    n1 s>w   Y  W d    d S W d    d S 1 sVw   Y  d S )Nr   r   _async_access_tokenr   r   r   r   r   r   r   r   )r    r   r   r!   r"   r
   r	   r   r   r$   r   r%   r&   r2   r3   r   r   r   -test_async_interactions_gemini_no_vertex_auth  s    
Pr   c                    s   |  dd t }d|jj_tjtd=}t	dt
dddd	id
t	dt
dddd	id
t	dt
dddg|_|jjjdddI d H  |jdksKJ W d    d S 1 sVw   Y  d S r6   )r    r   r   r<   r=   r   r!   r"   r	   r   r   r>   r%   r&   r?   r@   r   r   r   $test_async_interactions_gemini_retry"  s   
"r   c                    s   |  dd t }tjtd?}tdtddd|_|j	j
jdd	d
didI d H  |  |jd d }|jd dks?J |jd dksHJ W d    d S 1 sSw   Y  d S rB   )r    r   r   r!   r"   r	   r   r   r$   r   r%   r&   r'   r(   r,   r-   r   r   r   ,test_async_interactions_gemini_extra_headers1  s   "r   c               	      s2  ddl m}  ddlm} ddl m} t }d|_tddd|d	}tj	j
| d
ddd}tj	j
|dt d@}|jjjdddI d H }|  |  |j\}}	|d j}
tdd |
 D scJ tdd |
 D spJ W d    n1 szw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr   rF   rG   r	   rI   TrJ   rK   rL   r   rQ   rR   r   rS   rT   r   r   c                 s   rU   rV   r   rX   r   r   r   r\   _  r]   z=test_async_interactions_vertex_auth_header.<locals>.<genexpr>c                 s   rU   r^   r   rX   r   r   r   r\   b  r]   )r<   r
   r_   rH   r	   r   ra   rb   r   r!   r"   r   r%   r&   r'   r(   r,   rc   rd   )r
   rH   r	   re   r.   r4   r/   rf   rg   rh   r,   r   r   r   *test_async_interactions_vertex_auth_headerB  sB   

Pr   c               	      s   ddl m}  tddd}tjj| dddW}tjjtd	t d3}|jj	j
d
ddI d H }|  |  |j\}}|d j}tdd | D sNJ W d    n1 sXw   Y  W d    d S W d    d S 1 spw   Y  d S )Nr   rF   Tr   rj   r   rQ   rR   r   rS   rT   r   r   c                 s   rU   rk   r   rX   r   r   r   r\   ~  r]   zDtest_async_interactions_vertex_key_no_auth_header.<locals>.<genexpr>)r<   r
   r   r   r!   r"   r	   ra   r   r%   r&   r'   r2   r(   r,   rc   rd   )r
   r.   r4   r/   rf   rg   rh   r,   r   r   r   1test_async_interactions_vertex_key_no_auth_headerf  s4   

Pr   c                     s   ddl m}  t }d|_tddd|d}tj| d3}td	t	d
dd|_
|jjjdddI d H  |  |jd d }t|jdksHJ W d    d S 1 sSw   Y  d S )Nr   r   rI   TrJ   rK   rL   r   r   r   r   r   r   r   r   r   rm   )r<   r	   r   ra   rb   r   r!   r"   r   r   r$   r   r%   r&   r'   r(   r)   r*   )r	   re   r.   r/   r   r   r   r   "test_async_interactions_vertex_url  s   "r   c            
   	      s  ddl m}  ddl m} t }d|_tddd|d}d	|jj _g d
}t	|  fdd}tj
j| d|d}tj
|da}tdtddddidtdtddddidtdtdddg|_|jjjdddI d H  |jdksuJ |jdks|J tdD ]}|j| d d j}	|	d d||  ksJ qW d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr   rF   r   rI   TrJ   rK   rL   r7   ro   c                      s
   t  S rp   rq   r   rs   r   r   rt     s   zGtest_async_interactions_vertex_auth_refresh_on_retry.<locals>.get_tokenr   ru   r   r8   r   r   r9   r:   r;   r   r   r   r   r   r   rW   rv   )r<   r
   r	   r   ra   rb   r   r   r=   rw   r!   r"   r   r   r>   r%   r&   r?   rx   ry   r,   )
r
   r	   re   r.   rz   rt   r4   r/   r{   r,   r   rs   r   4test_async_interactions_vertex_auth_refresh_on_retry  s8   
Pr   c               	      sz  ddl m}  ddl m} t }d|_tddd|d}tjj| d	d
d}tj|dn}t	dt
ddd|_|jjjddddidI d H  |  |jd d j}|d dks[J |  |  |  |jjjddddidI d H  |  |jd d j}|d dksJ d|vsJ |  W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr   rF   r   rI   TrJ   rK   rL   r   r}   rR   r   r   r   r   r   r   r   r~   r   rC   r   rW   r   r   )r<   r
   r	   r   ra   rb   r   r!   r"   r   r   r$   r   r%   r&   r'   r(   r,   r2   r   )r
   r	   re   r.   r4   r/   r,   r   r   r   5test_async_interactions_vertex_extra_headers_override  sF   
Pr   )&__doc__r   r   r   Zunittestr   Zpytestr`   r   r   r<   r	   r
   r#   osr   Zfixturer   r0   r5   rA   rE   ri   rl   rn   r|   r   markZasyncior   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sN   

##(




#


!