o
    iD                     @   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)GOOGLE_CLOUD_PROJECTGEMINI_API_KEYGOOGLE_API_KEYGOOGLE_CLOUD_LOCATIONT)autousec                 C   s   t D ]	}| j|dd qd S )NF)raising)ENV_VARSdelenv)monkeypatchvar r   g/home/ubuntu/transcripts/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   "r6   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   r4   mock_access_tokenr5   r   r   r   'test_interactions_gemini_no_vertex_auth9   s   
Pr;   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   r2   r   r   r    r!   r"   r   )r&   r   _api_clientmax_retriesr   r'   r(   r)   r   r   side_effectr+   r,   
call_countr   r4   r5   r   r   r   test_interactions_gemini_retryH   s   "rG   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-Header	TestValuer#   r$   extra_headersr   zx-custom-headerr%   )r&   r   r   r'   r(   r)   r   r   r*   r+   r,   r-   r.   r2   r3   r   r   r   &test_interactions_gemini_extra_headersV   s   "rL   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credentialsr7   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   r\   zx-goog-user-projectrP   Nr   r_   r   r   r   rc      rd   )rB   r
   _interactions._base_clientrO   httpxr   r   Mockquota_project_idr'   r(   r+   r,   r-   r.   r2   anyitems)r
   rO   r)   credsr4   r:   r5   responseargskwargsr2   r   r   r   $test_interactions_vertex_auth_headerg   s@   

Prp   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   rM   r   r   Tr   rT   api_keyr7   rX   rY   r   rZ   r[   r"   c                 s   r\   r%   r   Nr   r_   r   r   r   rc      rd   z>test_interactions_vertex_key_no_auth_header.<locals>.<genexpr>)rB   r
   rg   r   r   rh   r'   r(   r+   r,   r-   r8   r.   r2   rj   rk   )
r
   r)   rl   r4   r:   r5   rm   rn   ro   r2   r   r   r   +test_interactions_vertex_key_no_auth_header   s6   

Prt   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 )NrP   TrQ   rR   rS   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   rh   ri   r   r'   r   r   r*   r+   r,   r-   r.   r/   r0   )rl   r4   r5   r   r   r   r   test_interactions_vertex_url   s   "rv   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   rM   r   r   rP   TrQ   rR   rS   r=   token1token2token3c                      s   t  S Nnextr   
token_iterr   r   	get_token   s   zAtest_interactions_vertex_auth_refresh_on_retry.<locals>.get_tokenr7   rD   r   r>   r   r   r?   r@   rA   r   r   r    r!   r"   r^   Bearer )rB   r
   rg   r   r   rh   ri   rC   iterr'   r(   r   r   rD   r+   r,   rE   rangecall_args_listr2   )
r
   r)   rl   r4   token_valuesr   r:   r5   ir2   r   r~   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   rM   r   r   rP   TrQ   rR   rS   r7   default-tokenrY   r   r   r   r   r   r    r!   AuthorizationBearer manual-tokenrJ   r^   r%   
manual-key)rB   r
   rg   r   r   rh   ri   r'   r(   r   r   r*   r+   r,   r-   r.   r2   r8   
reset_mock)r
   r)   rl   r4   r:   r5   r2   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/   r0   r1   r2   r3   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,   r8   r9   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 r<   )r&   r   r   rB   rC   r   r'   r(   r	   r   r   rD   r+   r,   rE   rF   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 rH   )r&   r   r   r'   r(   r	   r   r   r*   r   r+   r,   r-   r.   r2   r3   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   rM   rN   r	   rP   TrQ   rR   rS   r   rX   rY   r   rZ   r[   r"   r   c                 s   r\   r]   r   r_   r   r   r   rc   _  rd   z=test_async_interactions_vertex_auth_header.<locals>.<genexpr>c                 s   r\   re   r   r_   r   r   r   rc   b  rd   )rB   r
   rf   rO   r	   r   rh   ri   r   r'   r(   r   r+   r,   r-   r.   r2   rj   rk   )r
   rO   r	   rl   r4   r:   r5   rm   rn   ro   r2   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   rM   Tr   rq   r   rX   rY   r   rZ   r[   r"   r   c                 s   r\   rs   r   r_   r   r   r   rc   ~  rd   zDtest_async_interactions_vertex_key_no_auth_header.<locals>.<genexpr>)rB   r
   r   r   r'   r(   r	   rh   r   r+   r,   r-   r8   r.   r2   rj   rk   )r
   r4   r:   r5   rm   rn   ro   r2   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   rP   TrQ   rR   rS   r   r   r   r   r   r    r!   r"   r   ru   )rB   r	   r   rh   ri   r   r'   r(   r   r   r*   r   r+   r,   r-   r.   r/   r0   )r	   rl   r4   r5   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   rM   r   rP   TrQ   rR   rS   r=   rw   c                      s
   t  S r{   r|   r   r~   r   r   r     s   zGtest_async_interactions_vertex_auth_refresh_on_retry.<locals>.get_tokenr   r   r   r>   r   r   r?   r@   rA   r   r   r    r!   r"   r   r^   r   )rB   r
   r	   r   rh   ri   r   r   rC   r   r'   r(   r   r   rD   r+   r,   rE   r   r   r2   )
r
   r	   rl   r4   r   r   r:   r5   r   r2   r   r~   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   rM   r   rP   TrQ   rR   rS   r   r   rY   r   r   r   r   r   r    r!   r   r   rJ   r   r^   r%   r   )rB   r
   r	   r   rh   ri   r   r'   r(   r   r   r*   r   r+   r,   r-   r.   r2   r8   r   )r
   r	   rl   r4   r:   r5   r2   r   r   r   5test_async_interactions_vertex_extra_headers_override  sF   
Pr   )&__doc__r   r   r   unittestr   pytestrg   r   r   rB   r	   r
   r)   osr   fixturer   r6   r;   rG   rL   rp   rt   rv   r   r   markasyncior   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sN   

##(




#


!