
    \jb4                        d dl Z d dlZd dlmZ d dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZmZ d d	l d d
lmZmZmZmZ d dlmZ d dlmZmZmZmZ dZdZ dZ!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*ejV                  jY                  dg d      d        Z-ejV                  jY                  dg d      d        Z.d Z/d Z0d  Z1d! Z2d" Z3d# Z4d$ Z5y)%    N)Event)Config)InMemoryFeatureStore)StreamingUpdateProcessor)_DiagnosticAccumulator)VERSION)FEATURESSEGMENTS)*)start_serverBasicResponseCauseNetworkErrorSequentialHandlerdo_proxy_tests)make_delete_eventmake_patch_eventmake_put_eventstream_contentgMbP?      c                     t               } t               }t               5 }t        t	                     5 }t        d|j                        }|j                  d|       t        || |d       5 }|j                          |j                         }|j                  dk(  sJ |j                  j                  d      dk(  sJ |j                  j                  d      dt        z   k(  sJ |j                  j                  d      J |j                  j                  d	      J 	 d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)
Nsdk-keysdk_key
stream_uri/allGETAuthorizationz
User-AgentzPythonClient/X-LaunchDarkly-WrapperX-LaunchDarkly-Tags)r   r   r   r   r   r   urifor_pathr   startawait_requestmethodheadersgetr   storereadyserverstreamconfigspreqs          P/root/env/lib/python3.12/site-packages/testing/impl/datasource/test_streaming.pytest_request_propertiesr2      s<    "EGE	 F6N,- 	FifjjIFOOFF+)&%E F
**,zzU***{{79DDD{{|4'8QQQQ{{'?@HHH{{'<=EEEF		FF F
F F		F 	FF Fs;   E8E+B3D8E'E8E=EE		EEc                     t               } t               }t               5 }t        t	                     5 }t        d|j                  dd      }|j                  d|       t        || |d       5 }|j                          |j                         }|j                  j                  d      dk(  sJ 	 d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   Flaskz0.1.0)r   r   wrapper_namewrapper_versionr   r    zFlask/0.1.0r   r   r   r   r   r   r"   r#   r   r$   r%   r'   r(   r)   s          r1   test_sends_wrapper_headerr8   -   s     "EGE	 	R6N,- 	Rifjj+2gOFOOFF+)&%E R
**,{{'?@MQQQR	R	R 	RR R	R 	R	R 	Rs;   C :C-AC/C7C CCC	C  C)c                     t               } t               }t               5 }t        t	                     5 }t        d|j                  d      }|j                  d|       t        || |d       5 }|j                          |j                         }|j                  j                  d      dk(  sJ 	 d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r4   )r   r   r5   r   r    r7   r)   s          r1   )test_sends_wrapper_header_without_versionr:   <   s     "EGE	 	L6N,- 	Lifjj+24FOOFF+)&%E L
**,{{'?@GKKKL	L	L 	LL L	L 	L	L 	Ls;   C9C,AC.C6CCCC	CC(c            	         t               } t               }t               5 }t        t	                     5 }t        d|j                  ddd      }|j                  d|       t        || |d       5 }|j                          |j                         }|j                  j                  d      dk(  sJ 	 d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)	Nr   zmy-idz
my-version)idversion)r   r   applicationr   r!   z3application-id/my-id application-version/my-versionr7   r)   s          r1   test_sends_tag_headerr?   K   s     "EGE	 	w6N,- 	wifjj18\*RTFOOFF+)&%E w
**,{{'<=Avvvvw	w	w 	ww w	w 	w	w 	ws;   C"<C/AC
1C9C"
CCC	C""C+c                     t               } t               }t        d      j                  d      j	                         }t        d      j                  d      j	                         }t               5 }t        t        |g|g            5 }t        d|j                        }|j                  d|       t        || |d       5 }|j                          |j                  t               |j!                         sJ t#        | t$        |       t#        | t&        |       d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nflagkey   segkeyr   r   r   )r   r   FlagBuilderr=   buildSegmentBuilderr   r   r   r   r"   r#   r   r$   wait
start_waitinitializedexpect_itemr	   r
   )r*   r+   flagsegmentr,   r-   r.   r/   s           r1   test_receives_put_eventrM   Z   s    "EGEy!))!,224DX&..q1779G	 
66NT8w[AB 		6fifjjIFOOFF+)&%E 6


:&~~'''E8T2E8W56			6
6 
6
6 6			6 		6
6 
6s=   /E
8D>?AD2D>!E
2D;7D>>E	E

Ec            	         t               } t               }t        d      j                  d      j	                         }t        d      j                  d      j	                         }t        d      j                  d      j	                         }t        d      j                  d      j	                         }t               5 }t        t        |g|g            5 }t        d|j                        }|j                  d|       t        || |d       5 }	|	j                          |j                  t               |	j!                         sJ t#        | t$        |       t#        | t&        |       |j)                  t+        t$        |             t-        | t$        |       |j)                  t+        t&        |             t-        | t&        |       d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)NrA   rB      rC   r   r   r   )r   r   rD   r=   rE   rF   r   r   r   r   r"   r#   r   r$   rG   rH   rI   rJ   r	   r
   pushr   expect_update)
r*   r+   flagv1flagv2	segmentv1	segmentv2r,   r-   r.   r/   s
             r1   test_receives_patch_eventsrV   l   s    "EGE#++A.446F#++A.446Fx(00399;Ix(00399;I	 :6NV:}EF 	:&ifjjIFOOFF+)&%E :


:&~~'''E8V4E8Y7,Xv>?eXv6,XyABeXy9:		:: :
: :		: 	:: :s=   ?G:8G.B:G"	G.G:"G+'G..G7	3G::Hc            
         t               } t               }t        d      j                  d      j	                         }t        d      j                  d      j	                         }t               5 }t        t        |g|g            5 }t        d|j                        }|j                  d|       t        || |d       5 }|j                          |j                  t               |j!                         sJ t#        | t$        |       t#        | t&        |       |j)                  t+        t$        |d   d             t-        | t$        |d          |j)                  t+        t&        |d   d             t-        | t&        |d          d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)	NrA   rB   rC   r   r   r   keyrO   )r   r   rD   r=   rE   rF   r   r   r   r   r"   r#   r   r$   rG   rH   rI   rJ   r	   r
   rP   r   expect_delete)r*   r+   rR   rT   r,   r-   r.   r/   s           r1   test_receives_delete_eventsrZ      s{    "EGE#++A.446Fx(00399;I	 A6NV:}EF 	A&ifjjIFOOFF+)&%E A


:&~~'''E8V4E8Y7-huqIJeXve}=-h	%8H!LMeXy/?@A		AA A
A A		A 	AA As=   /F88F,?CF F,F8 F)%F,,F5	1F88Gc            
      j   t               } t               }t        d      j                  d      j	                         }t        d      j                  d      j	                         }t               5 }t        t        |g            5 }t        t        |g            5 }t        d|j                  t              }|j                  dt        ||             t        || |d       5 }|j                          |j                   |j!                  t"               |j%                         sJ t'        | t(        |       |j+                          |j                   t-        | t(        |       d d d        d d d        d d d        d d d        y # 1 sw Y   "xY w# 1 sw Y   &xY w# 1 sw Y   *xY w# 1 sw Y   y xY w)NrA   rB   rO   r   r   r   initial_reconnect_delayr   )r   r   rD   r=   rE   r   r   r   r   r"   brief_delayr#   r   r   r$   r%   rG   rH   rI   rJ   r	   closerQ   )	r*   r+   rR   rS   r,   stream1stream2r.   r/   s	            r1   #test_reconnects_if_stream_is_brokenrb      s`    "EGE#++A.446F#++A.446F	 ;6NV:67 	;7z :; ;w)&**hst(9'7(KL-feUDI 	;RHHJ((JJz*>>+++x8MMO((!%6:	;	;	;; ;	; 	;	; ;	; 	;; ;sV   /F)FAF"BF	$F,F4F)F
FFFF&	"F))F2c                  (   t               } t               }t               }t               5 }t	        t                     5 }t        | | |      }t        d|j                  t              }|j                  d|       t        |||d       5 }|j                          |j                  t               |j                         sJ |j                    |j                    d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r\   r   )r   r   r   r   r   r   r   r   r"   r^   r#   r   r$   rG   rH   rI   r%   )error_handlerr*   r+   r,   r-   two_errors_then_successr.   r/   s           r1   test_retries_on_network_errorrf      s    %'M "EGE	 %6N,- 
	%&7}V\&]#ifjjdopFOOF$;<)&%E %


:&~~'''$$$$%
	%% %% %
	% 
	%% %s<   DA
C<AC0C<D0C95C<<D	DDstatus)i  i  i  i    c                    t        |       }t               }t               }t               5 }t	        t                     5 }t        |||      }t        d|j                  t              }|j                  d|       t        |||d       5 }|j                          |j                  t               |j                         sJ |j!                  d       d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r\   r   r   )r   r   r   r   r   r   r   r   r"   r^   r#   r   r$   rG   rH   rI   should_have_requests)	rg   rd   r*   r+   r,   r-   re   r.   r/   s	            r1   test_recoverable_http_errorrk      s    !&)M "EGE	 
/6N,- 		/&7}V\&]#ifjjdopFOOF$;<)&%E /


:&~~'''++A.	/		/
/ 
// /		/ 		/
/ 
/s<   DA
C6A	C*C6D*C3/C66C?	;DD)i  i  i  c                    t        |       }t               }t               }t               5 }t	        t                     5 }t        ||      }t        d|j                  t              }|j                  d|       t        |||d       5 }|j                          |j                  d       |j                         rJ |j                  d       d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r\   r   r   rB   )r   r   r   r   r   r   r   r   r"   r^   r#   r   r$   rG   rI   rj   )	rg   rd   r*   r+   r,   r-   error_then_successr.   r/   s	            r1   test_unrecoverable_http_errorrn      s    !&)M "EGE	 
/6N,- 		/!2=&!IifjjdopFOOF$67)&%E /


1>>+++++A.	/		/
/ 
// /		/ 		/
/ 
/s<   C=A	C1AC%C1C=%C.*C11C:	6C==Dc                 $    d }t        |d|        y )Nc                    t               }t               }t        t                     5 }| j	                  |j
                  dz   |       t        |||d       5 }|j                          | j                          |s'|j                  t               |j                         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   r   r#   stream_base_urir   r$   wait_until_request_receivedrG   rH   rI   )r,   r.   securer*   r+   r-   r/   s          r1   _stream_processor_proxy_testz5test_http_proxy.<locals>._stream_processor_proxy_test   s    $&N,- 	,OOF22V;VD)&%E 
,
 224 JJz*>>+++
,	, 	,
, 
,	, 	,s$   .B=A
B1 B=1B:	6B==Cr   r   )monkeypatchrt   s     r1   test_http_proxyrv      s    ,  /D    c                     t               } t               }t               5 }t        t	                     5 }t        d|j                        }|j                  d|       t        d      }t        || ||      5 }|j                          |j                  t               |j                  dd      d   }t        |      dk(  sJ |d   d   du sJ 	 d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)	Nr   r   r   rB   r   streamInitsfailedF)r   r   r   r   r   r   r"   r#   r   r   r$   rG   rH   create_event_and_resetlen)r*   r+   r,   r-   r.   
diag_accumr/   recorded_initss           r1   .test_records_diagnostic_on_stream_init_successr      s     "EGE	 <6N,- 	<ifjjIFOOFF+/2J)&%
K <r


:&!+!B!B1a!H!W>*a///%a(2e;;;<	<< << <	< 	<< <s<   C?AC36AC'C3C?'C0,C33C<	8C??Dc                  b   t               } t               }t               5 }t        t	                     5 }t        t        d      |      }t        d|j                  t              }|j                  d|       t        d      }t        || ||      5 }|j                          |j                  t               |j!                  dd      d   }t#        |      dk(  sJ |d   d	   d
u sJ |d   d	   du sJ 	 d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nrh   r   r\   r   rB   r   ry   rO   rz   TF)r   r   r   r   r   r   r   r   r"   r^   r#   r   r   r$   rG   rH   r{   r|   )	r*   r+   r,   r-   rm   r.   r}   r/   r~   s	            r1   .test_records_diagnostic_on_stream_init_failurer     s&    "EGE	 <6N,- 	<!2=3Ev!NifjjdopFOOF$67/2J)&%
K <r


:&!+!B!B1a!H!W>*a///%a(2d:::%a(2e;;;<	<< << <	< 	<< <s<   D%ADA#D4D<D%DDD"	D%%D.c                 <    | j                  ||d   d       |k(  sJ y )NrX   c                     | S N xs    r1   <lambda>zexpect_item.<locals>.<lambda>   s    ! rw   )r(   )r*   kinditems      r1   rJ   rJ     s!    99T4;4<<<rw   c                 &    t        | ||d   |       y )NrX   
await_item)r*   r   expected_items      r1   rQ   rQ   "  s    udM%0-@rw   c                      t        | ||d        y r   r   )r*   r   rX   s      r1   rY   rY   %  s    udC&rw   c                 d   t        j                          t        z   }t        j                          |k  rGt        j                  d       | j                  ||d       }||k(  ry t        j                          |k  rGJ d|t	        j
                  |      t	        j
                        t        fz         )Ng?c                     | S r   r   r   s    r1   r   zawait_item.<locals>.<lambda>,  s    a rw   z8expected %s = %s but value was still %s after %d seconds)timeupdate_waitsleepr(   jsondumps)r*   r   rX   r   deadlinecurrent_items         r1   r   r   (  s    yy{[(H
))+
 

4yysK8=(	 ))+
 
 WLPSUYU_U_`mUnptpzpz  |H  qI  KV  PW  W  W5rw   )6r   pytest	threadingr   r   ldclient.configr   ldclient.feature_storer   "ldclient.impl.datasource.streamingr    ldclient.impl.events.diagnosticsr   ldclient.versionr   ldclient.versioned_data_kindr	   r
   testing.builderstesting.http_utilr   r   r   r   testing.proxy_test_utilr   testing.stub_utilr   r   r   r   r^   rH   r   r2   r8   r:   r?   rM   rV   rZ   rb   rf   markparametrizerk   rn   rv   r   r   rJ   rQ   rY   r   r   rw   r1   <module>r      s        " 7 G C $ ;  _ _ 2 a a 
F$RLw6$:4A0;.%" #>?/ @/  #45/ 6/ E&<"<&=A'Wrw   