
    UEj$N                        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        Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej6                  j8                  d        Zej6                  j8                  d        Zej6                  j8                  d        Zej6                  j8                  d        Z ej6                  j8                  d        Z!ej6                  j8                  d        Z"ej6                  j8                  d        Z#ej6                  j8                  d        Z$ej6                  j8                  d        Z%y)z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                 @    t         D ]  }| j                  |d        y )NF)raising)ENV_VARSdelenv)monkeypatchvars     _/var/www/html/qr/venv/lib/python3.12/site-packages/google/genai/tests/interactions/test_auth.pyclear_env_varsr   #   s$     /3./    c                    | j                  dd       t               }t        j                  j	                  t
        d      5 }t        dt        dd      ddid	
      |_        |j                  j                  dd       |j                          |j                  d   d   }t        |j                        j                  d      sJ |j                   d   dk(  sJ 	 d d d        y # 1 sw Y   y xY wNr   test-api-keysend   POST content-typeapplication/json{"status": "completed"}requestheaderscontent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endswithr&   r   client	mock_sendr%   s       r   test_interactions_gemini_urlr=   (   s    '8XF 
		:v	. 	C)!)#wvr7JUcewTx  C\  "]	""$ 	# 	
 	$$&%%a(+7;;(()?@@@/0NBBB	C 	C 	Cs   BC%%C.c           	         | j                  dd       t               }t        j                  j	                  t
        d      5 }t        j                  j	                  t        d      5 }t        dt        dd      dd	id
      |_	        |j                  j                  dd       |j                          d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r   _access_tokenr   r   r   r    r!   r"   r#   r$   r(   r)   r*   )r.   r   r   r/   r0   r   r1   r	   r   r2   r3   r4   assert_not_calledr   r;   mock_access_tokenr<   s       r   'test_interactions_gemini_no_vertex_authrC   9   s    '8XF 	

-9	.=N

*f-	.1:!)#wvr7JUcewTx  C\  "]	""$ 	# 	
 	++-	. 	. 	. 	. 	. 	.s%   %C&AC4CC	
CCc           
         | j                  dd       t               }d|j                  _        t        j
                  j                  t        d      5 }t        dt        dd      dd	d
d      t        dt        dd      dd	d
d      t        dt        dd      dd	id      g|_
        |j                  j                  dd       |j                  dk(  sJ 	 d d d        y # 1 sw Y   y xY wNr   r      r     r   r    1r"   zretry-after-msr!   r#   r$   r   r!   r(   r)   r*   r   )r.   r   _api_clientmax_retriesr   r/   r0   r1   r	   r   side_effectr3   r4   
call_countr   r;   r<   s      r   test_interactions_gemini_retryrO   H   s    '8XF%&F"			:v	. ))S'&""5RUgy?z  E^  _S'&""5RUgy?z  E^  _S'&""5Pb?c  nG  H!
	
 	"");7"K##q((() ) )s   BC""C+c                    | j                  dd       t               }t        j                  j	                  t
        d      5 }t        dt        dd      ddid	
      |_        |j                  j                  ddddi       |j                          |j                  d   d   }|j                  d   dk(  sJ |j                  d   dk(  sJ 	 d d d        y # 1 sw Y   y xY wNr   r   r   r   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/   r0   r1   r	   r   r2   r3   r4   r5   r6   r&   r:   s       r   &test_interactions_gemini_extra_headersrU   V   s    '8XF			:v	. 
C)!)#wvr7JUcewTx  C\  "]	""$,k: 	# 	

 	$$&%%a(+01[@@@/0NBBB
C 
C 
Cs   BCCc                     ddl m}  ddlm} t	        j
                         }d|_        t        ddd|	      }t        j                  j                  | d
d      5 }t        j                  j                  |dt        dt        dd      ddid            5 }|j                  j                  dd      }|j                          |j                          |j                  \  }}|d   j                  }	t!        d |	j#                         D              sJ t!        d |	j#                         D              sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r   r   r   test-quota-projectTtest-projectus-central1vertexaiprojectlocationcredentialsr?   fake-vertex-tokenr2   r   r   r   r    r!   r"   r#   r$   gemini-2.5-flash/What is the largest planet in our solar system?r*   c              3   :   K   | ]  \  }}|d k(  xr |dk(    ywauthorizationzBearer fake-vertex-tokenN .0keyvalues      r   	<genexpr>z7test_interactions_vertex_auth_header.<locals>.<genexpr>   /      +C 	F5,F#FF+   c              3   :   K   | ]  \  }}|d k(  xr |dk(    ywzx-goog-user-projectrX   Nrg   rh   s      r   rl   z7test_interactions_vertex_auth_header.<locals>.<genexpr>   0      +C 	$$F2F)FF+rn   )rJ   r   httpxr   r   Mockquota_project_idr/   r0   r	   r   r3   r4   r5   r6   r&   anyitems
r   r1   credsr;   rB   r<   responseargskwargsr&   s
             r   $test_interactions_vertex_auth_headerr|   g   se   *(
))+%/%4-]bc& jj
7J  + 
jj
fWVR-@>[mJn  yR  S  	+  "")) ? * H
   "((*&&LD&1gooG +!--/+ + + +  +!--/+ + + +-+ + + + + +s%   <EB E6EE	EEc                  h   ddl m}  ddlm} t	        j
                         }t        dd      }t        j                  j                  | dd	
      5 }t        j                  j                  |dt        dt        dd      ddid      
      5 }|j                  j                  dd      }|j                          |j                          |j                  \  }}|d   j                  }	t!        d |	j#                         D              sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   rW   r   r   Tr   r\   api_keyr?   r`   ra   r   r   r   r    r!   r"   r#   r$   rb   rc   r*   c              3   :   K   | ]  \  }}|d k(  xr |dk(    ywr-   r   Nrg   rh   s      r   rl   z>test_interactions_vertex_key_no_auth_header.<locals>.<genexpr>   /      +C 	;E^$;;+rn   )rJ   r   rr   r   r   rs   r/   r0   r	   r   r3   r4   r5   r@   r6   r&   ru   rv   rw   s
             r   +test_interactions_vertex_key_no_auth_headerr      s1   *(
))+%48& jj
7J  + 
jj
fWVR-@>[mJn  yR  S  	+  "")) ? * H
   "'')&&LD&1gooG +!--/+ + + +'+ + + + + +s%   <D(A>DD(D%	!D((D1c            	         t        j                         } d| _        t        ddd|       }t         j                  j                  t        dd      5 }t        j                  d	      5 }t        d
t        dd      ddid      |_	        |j                  j                  dd       |j                          |j                  d   d   }t        |j                        dk(  sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NrX   TrY   rZ   r[   r?   
fake-tokenra   zhttpx.Client.sendr   r   r    r!   r"   r#   r$   r(   r)   r*   r   nhttps://us-central1-aiplatform.googleapis.com/v1beta1/projects/test-project/locations/us-central1/interactions)r   rs   rt   r   r/   r0   r   r	   r   r2   r3   r4   r5   r6   r7   r8   )rx   r;   rB   r<   r%   s        r   test_interactions_vertex_urlr      s   IIKE1ET>M_deF 	

-|TTXi

&'T+4!)#wvr7JUcewTx  C\  "]	""$ 	# 	
 	$$&%%a(+7;;  $T  T  	T  TT T T T T Ts%   C?'A:C3"C?3C<	8C??Dc                  6   ddl m}  ddlm} t	        j
                         }d|_        t        ddd|	      }d
|j                   _        g d}t        |      fd}t        j                  j                  | d|      5 }t        j                  j                  |d      5 }t        dt        dd      dddd      t        dt        dd      dddd      t        dt        dd      ddid      g}t        |      g fd}	|	|_        |j                  j                  dd       |j                   dk(  sJ |j                   dk(  sJ t#        d      D ]  }
|
   d   d||
    k(  rJ  	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w) Nr   rW   r   r   rX   TrY   rZ   r[   rF   token1token2token3c                      t               S Nnext
token_iters   r   	get_tokenzAtest_interactions_vertex_auth_refresh_on_retry.<locals>.get_token       Jr   r?   rL   r   rG   r   r    rH   r"   rI   r#   r$   r   r!   c                 b    j                  t        | j                               t              S r   appenddictr&   r   reqrz   r{   recorded_headersresponse_iters      r   my_sendz?test_interactions_vertex_auth_refresh_on_retry.<locals>.my_send   s%    ##D$56&&r   r(   r)   r*   rf   Bearer )rJ   r   rr   r   r   rs   rt   rK   iterr/   r0   r	   r   rL   r3   r4   rM   range)r   r1   rx   r;   token_valuesr   rB   r<   	responsesr   ir   r   r   s              @@@r   .test_interactions_vertex_auth_refresh_on_retryr      s   ,*IIKE1ET>M_deF%&F"1Ll#J  	

-iPWTe

*f-W1: S'&""5RUgy?z  E^  _S'&""5RUgy?z  E^  _S'&""5Pb?c  nG  H
	
 Y	' !(	"");7"K ++q000##q(((q 	WA#A&7W\RS_DU;VVVV	W+W W W W W Ws+   !F"CF.F2FF	FFc            	      .   ddl m}  ddlm} t	        j
                         }d|_        t        ddd|	      }t        j                  j                  | d
d      5 }t        j                  j                  |d      5 }t        dt        dd      ddid      |_        |j                  j                  ddddi       |j                          |j                  d   d   j                   }|d   dk(  sJ |j#                          |j#                          |j                  j                  ddddi       |j                          |j                  d   d   j                   }|d   dk(  sJ d|vsJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   rW   r   r   rX   TrY   rZ   r[   r?   default-tokenra   r   r   r   r    r!   r"   r#   r$   r(   r)   AuthorizationBearer manual-tokenrS   rf   r-   
manual-key)rJ   r   rr   r   r   rs   rt   r/   r0   r	   r   r2   r3   r4   r5   r6   r&   
reset_mock)r   r1   rx   r;   rB   r<   r&   s          r   /test_interactions_vertex_extra_headers_overrider      s   ,*IIKE1ET>M_deF 	

-W.[l

*f-.1:!)#wvr7JUcewTx  C\  "]	 	""$*,AB 	# 	

 	$$&%%a(+33'+@@@@$$& 	""$+\: 	# 	

 	$$&%%a(+33'(L888g---9. . . . . .s%   !F:C3E?.F?F	FFc                   K   | j                  dd       t               }t        j                  j	                  t
        d      5 }t        dt        dd      ddid	
      |_        |j                  j                  j                  dd       d {    |j                          |j                  d   d   }t        |j                        j!                  d      sJ |j"                  d   dk(  sJ 	 d d d        y 7 j# 1 sw Y   y xY wwr   )r.   r   r   r/   r0   r
   r	   r   r2   aior3   r4   r5   r6   r7   r8   r9   r&   r:   s       r   "test_async_interactions_gemini_urlr     s    '8XF			+V	4 	C	!)#wvr7JUcewTx  C\  "]	jj%%,,$ - 
 	
 	
 	$$&%%a(+7;;(()?@@@/0NBBB	C 	C	
	C 	Cs2   ADAC;C9A C;0	D9C;;D Dc           	        K   | j                  dd       t               }t        j                  j	                  t
        d      5 }t        j                  j	                  t        d      5 }t        dt        dd      dd	id
      |_	        |j                  j                  j                  dd       d {    |j                          d d d        d d d        y 7 %# 1 sw Y   xY w# 1 sw Y   y xY ww)Nr   r   _async_access_tokenr   r   r   r    r!   r"   r#   r$   r(   r)   r*   )r.   r   r   r/   r0   r   r
   r	   r   r2   r   r3   r4   r@   rA   s       r   -test_async_interactions_gemini_no_vertex_authr     s     '8XF 	

-)>?	.CT

*F3	.7@!)#wvr7JUcewTx  C\  "]	jj%%,,$ - 
 	
 	
 	++-	. 	. 	.
	
	. 	. 	. 	.sI   AC3%C'(AC3C4CC'	C3CC$	 C''C0,C3c           
         K   | j                  dd       t               }d|j                  j                  _        t
        j                  j                  t        d      5 }t        dt        dd      dd	d
d      t        dt        dd      dd	d
d      t        dt        dd      dd	id      g|_        |j                  j                  j                  dd       d {    |j                  dk(  sJ 	 d d d        y 7 # 1 sw Y   y xY wwrE   )r.   r   r   rJ   rK   r   r/   r0   r
   r	   r   rL   r3   r4   rM   rN   s      r   $test_async_interactions_gemini_retryr   '  s    '8XF)*FJJ&			+V	4 )	S'&""5RUgy?z  E^  _S'&""5RUgy?z  E^  _S'&""5Pb?c  nG  H!
	
 jj%%,,3EW,UUU##q((() ) 	V) )s1   ADBD D !D7	D DDDc                   K   | j                  dd       t               }t        j                  j	                  t
        d      5 }t        dt        dd      ddid	
      |_        |j                  j                  j                  ddddi       d {    |j                          |j                  d   d   }|j                  d   dk(  sJ |j                  d   dk(  sJ 	 d d d        y 7 X# 1 sw Y   y xY wwrQ   )r.   r   r   r/   r0   r
   r	   r   r2   r   r3   r4   r5   r6   r&   r:   s       r   ,test_async_interactions_gemini_extra_headersr   6  s
    '8XF			+V	4 
C	!)#wvr7JUcewTx  C\  "]	jj%%,,$,k: - 
 	
 	

 	$$&%%a(+01[@@@/0NBBB
C 
C	

C 
Cs2   AC8AC,C*AC,!	C8*C,,C51C8c                    K   ddl m}  ddl m} t        j                         }d|_        t        ddd|      }t        j                  j                  | d	d
      5 }t        j                  j                  |dt        dt        dd      ddid            5 }|j                  j                  j                  dd       d {   }|j                          |j                          |j                  \  }}|d   j                   }	t#        d |	j%                         D              sJ t#        d |	j%                         D              sJ 	 d d d        d d d        y 7 # 1 sw Y   xY w# 1 sw Y   y xY ww)Nr   rW   r
   rX   TrY   rZ   r[   r?   r`   ra   r   r   r   r    r!   r"   r#   r$   rb   rc   r*   r   c              3   :   K   | ]  \  }}|d k(  xr |dk(    ywre   rg   rh   s      r   rl   z=test_async_interactions_vertex_auth_header.<locals>.<genexpr>c  rm   rn   c              3   :   K   | ]  \  }}|d k(  xr |dk(    ywrp   rg   rh   s      r   rl   z=test_async_interactions_vertex_auth_header.<locals>.<genexpr>f  rq   rn   )rJ   r   r
   r   rs   rt   r   r/   r0   r	   r   r   r3   r4   r5   r6   r&   ru   rv   )
r   r
   rx   r;   rB   r<   ry   rz   r{   r&   s
             r   *test_async_interactions_vertex_auth_headerr   G  s|    *-
))+%/%4-]bc& jj
7J  + 
jj
FWVR-@>[mJn  yR  S  	+  ZZ,,33 ? 4  H
   "((*&&LD&1gooG +!--/+ + + +  +!--/+ + + +-+ + ++ + + +sI   AE5<E)+EEBE
E)	E5EE&	"E))E2.E5c                  l  K   ddl m}  t        dd      }t        j                  j                  | dd      5 }t        j                  j                  t        d	t        d
t        dd      ddid            5 }|j                  j                  j                  dd       d {   }|j                          |j                          |j                  \  }}|d   j                  }t!        d |j#                         D              sJ 	 d d d        d d d        y 7 v# 1 sw Y   xY w# 1 sw Y   y xY ww)Nr   rW   Tr   r~   r   r`   ra   r   r   r   r    r!   r"   r#   r$   rb   rc   r*   r   c              3   :   K   | ]  \  }}|d k(  xr |dk(    ywr   rg   rh   s      r   rl   zDtest_async_interactions_vertex_key_no_auth_header.<locals>.<genexpr>  r   rn   )rJ   r   r   r   r/   r0   r
   r	   r   r   r3   r4   r5   r@   r6   r&   ru   rv   )r   r;   rB   r<   ry   rz   r{   r&   s           r   1test_async_interactions_vertex_key_no_auth_headerr   j  s;    *48& jj
.=P  + 
jj
FWVR-@>[mJn  yR  S  	+  ZZ,,33 ? 4  H
   "'')&&LD&1gooG +!--/+ + + +'+ + ++ + + +sH   6D4A D(8+D#D$A$D	D(	D4DD%	!D((D1-D4c            	      h  K   ddl m}  t        j                         }d|_        t        ddd|      }t        j                  j                  t        dd	
      5 }t        j                  j                  | d      5 }t        dt        dd      ddid      |_        |j                  j                  j                  dd       d {    |j                          |j                   d   d   }t#        |j$                        dk(  sJ 	 d d d        d d d        y 7 R# 1 sw Y   xY w# 1 sw Y   y xY ww)Nr   r   rX   TrY   rZ   r[   r?   r   ra   r   r   r   r    r!   r"   r#   r$   r(   r)   r*   r   r   )rJ   r
   r   rs   rt   r   r/   r0   r   r	   r   r2   r   r3   r4   r5   r6   r7   r8   )r
   rx   r;   rB   r<   r%   s         r   "test_async_interactions_vertex_urlr     s=    /IIKE1ET>M_deF 	

-|TTXi

*F3T7@!)#wvr7JUcewTx  C\  "]	jj%%,,$ - 
 	
 	
 	$$&%%a(+7;;  $T  T  	T  TT T T
	
T T T TsJ   AD2!D&:ADDA DD&	D2DD#	D&&D/+D2c                  z  K   ddl m}  ddl m} t        j                         }d|_        t        ddd|      }d	|j                  j                   _        g d
}t        |      fd}t        j                  j                  | d|      5 }t        j                  j                  |d      5 }t        dt        dd      dddd      t        dt        dd      dddd      t        dt        dd      ddid      g}t        |      g fd}	|	|_        |j                  j                  j!                  dd       d {    |j"                  dk(  sJ |j"                  dk(  sJ t%        d      D ]  }
|
   d   d||
    k(  rJ  	 d d d        d d d        y 7 [# 1 sw Y   xY w# 1 sw Y   y xY ww)Nr   rW   r   rX   TrY   rZ   r[   rF   r   c                      t               S r   r   r   s   r   r   zGtest_async_interactions_vertex_auth_refresh_on_retry.<locals>.get_token  r   r   r?   r   r   rG   r   r    rH   r"   rI   r#   r$   r   r!   c                 j   K   j                  t        | j                               t              S wr   r   r   s      r   r   zEtest_async_interactions_vertex_auth_refresh_on_retry.<locals>.my_send  s)     ##D$56&&s   03r(   r)   r*   rf   r   )rJ   r   r
   r   rs   rt   r   r   rK   r   r/   r0   r	   r   rL   r3   r4   rM   r   )r   r
   rx   r;   r   r   rB   r<   r   r   r   r   r   r   s              @@@r   4test_async_interactions_vertex_auth_refresh_on_retryr     s    ,/IIKE1ET>M_deF)*FJJ&1Ll#J  	

-iPWTe

*F3W7@ S'&""5RUgy?z  E^  _S'&""5RUgy?z  E^  _S'&""5Pb?c  nG  H
	
 Y	' !(	jj%%,,3EW,UUU ++q000##q(((q 	WA#A&7W\RS_DU;VVVV	W)W W W  	V!W W W WsP   BF;!F/.BF#F!AF#F#F/	F;!F##F,	(F//F84F;c            	        K   ddl m}  ddl m} t        j                         }d|_        t        ddd|      }t        j                  j                  | d	d
      5 }t        j                  j                  |d      5 }t        dt        dd      ddid      |_        |j                  j                  j                  ddddi       d {    |j                          |j                   d   d   j"                  }|d   dk(  sJ |j%                          |j%                          |j                  j                  j                  ddddi       d {    |j                          |j                   d   d   j"                  }|d   dk(  sJ d|vsJ 	 d d d        d d d        y 7 7 T# 1 sw Y   xY w# 1 sw Y   y xY ww)Nr   rW   r   rX   TrY   rZ   r[   r?   r   ra   r   r   r   r    r!   r"   r#   r$   r(   r)   r   r   rS   r   rf   r-   r   )rJ   r   r
   r   rs   rt   r   r/   r0   r	   r   r2   r   r3   r4   r5   r6   r&   r   )r   r
   rx   r;   rB   r<   r&   s          r   5test_async_interactions_vertex_extra_headers_overrider     s    ,/IIKE1ET>M_deF 	

-W.[l

*F3.7@!)#wvr7JUcewTx  C\  "]	 jj%%,,$*,AB - 
 	
 	

 	$$&%%a(+33'+@@@@$$& jj%%,,$+\: - 
 	
 	

 	$$&%%a(+33'(L888g---9. . .	
	
). . . .s]   AG!F5<AF)
F%BF)F'A F)F5	G%F)'F))F2	.F55F>:G)&__doc__r    r   r   unittestr   pytestrr   r   r	   rJ   r
   r   r1   osr   fixturer   r=   rC   rO   rU   r|   r   r   r   r   markasyncior   r   r   r   r   r   r   r   r   rg   r   r   <module>r      s  " "     # : & 	 / /C".)C" +D+<T$%WP$.L C C . . ) ) C C   +  +D + +6 T T& $W $WL $. $.r   