
    \j69                        d dl Z d dlmZmZmZ d dlmZ d dlmZ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 d dlmZmZ d dlmZmZ dddd dgddZddddddgdddZ G d de      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,d) Z-d* Z.d+ Z/d, Z0d- Z1d. Z2d/ Z3d0 Z4d1 Z5d2 Z6d3 Z7d4 Z8d5 Z9d6 Z:d7 Z;d8 Z<y)9    N)LDClientConfigContext)BigSegmentsConfig)BigSegmentsStatusEvaluationDetail)InMemoryFeatureStore)_hash_for_user_key)_make_big_segment_ref)FeatureStore)FEATURESSEGMENTS)*)MockBigSegmentStore)MockEventProcessorMockUpdateProcessor)make_clientuserkey1d   Fvalue1keyversiononoffVariation
variationstrackEventskey2      xvalue2T  r   r   r   r   r   r   debugEventsUntilDatec                   F    e Zd Zd fdZd fdZd Zd Zd Zed        Z	y	)
ErroringFeatureStorec                     | S N r"   s    J/root/env/lib/python3.12/site-packages/testing/test_ldclient_evaluation.py<lambda>zErroringFeatureStore.<lambda>$   s         c                     t               r*   NotImplementedError)selfkindr   callbacks       r-   getzErroringFeatureStore.get$       !##r/   c                     | S r*   r+   r,   s    r-   r.   zErroringFeatureStore.<lambda>'   s    1 r/   c                     t               r*   r1   )r3   r4   r5   s      r-   allzErroringFeatureStore.all'   r7   r/   c                      y r*   r+   )r3   r4   items      r-   upsertzErroringFeatureStore.upsert*       r/   c                      y r*   r+   )r3   r   r   s      r-   deletezErroringFeatureStore.delete-   r>   r/   c                      y r*   r+   )r3   datas     r-   initzErroringFeatureStore.init0   r>   r/   c                      y)NTr+   )r3   s    r-   initializedz ErroringFeatureStore.initialized3   s    r/   N)
__name__
__module____qualname__r6   r:   r=   r@   rC   propertyrE   r+   r/   r-   r(   r(   #   s7    &1 $ "- $  r/   r(   c                     | j                   }t        |      r |       }|D cg c]  }|j                  |k(  s|j                    c}S c c}w r*   )recordscallable	levelnamemessage)caploglevelloglineslines       r-   get_log_linesrS   7   s=    ~~H:%-IT51HDLLIIIs
   A	A	c                      t        dd      j                         } t               }|j                  t        d| ii       t        |      }d|j                  dt        d      k(  sJ y Nfeature.keyvaluedefaultrX   )build_off_flag_with_valuebuildr	   rC   r   r   	variationr   featurestoreclients      r-   #test_variation_for_existing_featurera   ?   s_    'w?EEGG "E	JJ='234Ff&&}dI&NNNNr/   c                  *   ddi} t        d      j                  d      j                  dd      j                  dd      j	                         }t               }|j                  t        d|ii       t        |      }d|j                  d| d	      k(  sJ y )
Nr   userkeyrV   Twrongrightr!   rX   rY   )
FlagBuilderr   r   targetr[   r	   rC   r   r   r\   )ur^   r_   r`   s       r-   'test_variation_passes_user_to_evaluatorri   F   s    		A=),,T2==gwOVVWXZcdjjlG "E	JJ='234Ff&&}a&KKKKr/   c                  L   t        j                  d      } t        d      j                  d      j	                  dd      j                  dd      j                         }t               }|j                  t        d|ii       t        |      }d|j                  d| d      k(  sJ y )	Nrc   rV   Trd   re   r!   rX   rY   )r   createrf   r   r   rg   r[   r	   rC   r   r   r\   cr^   r_   r`   s       r-   *test_variation_passes_context_to_evaluatorrn   N   s    y!A=),,T2==gwOVVWXZcdjjlG "E	JJ='234Ff&&}a&KKKKr/   c                  h    t               } t        |       }d|j                  dt        d      k(  sJ y )NrX   rV   rY   )r	   r   r\   r   )r_   r`   s     r-   "test_variation_for_unknown_featurerp   V   s4     "EF((i(PPPPr/   c                      t        dd      j                         } t               }|j                  t        d| ii       t        |      }d|j                  dd d      k(  sJ y rU   rZ   r[   r	   rC   r   r   r\   r]   s      r-    test_variation_when_user_is_noners   [   s_    'w?EEGG "E	JJ='234F((i(PPPPr/   c                      t        dd      j                         } t               }|j                  t        d| ii       t        |      }d|j                  di d      k(  sJ y rU   rr   r]   s      r-   #test_variation_when_user_has_no_keyru   b   s_    'w?EEGG "E	JJ='234F((Y(OOOOr/   c                      t        j                  d      } t        dd      j                         }t	               }|j                  t        d|ii       t        |      }d|j                  d| d      k(  sJ y )N rV   rW   rX   rY   )	r   rk   rZ   r[   r	   rC   r   r   r\   rl   s       r-   "test_variation_for_invalid_contextrx   i   sm    rA'w?EEGG "E	JJ='234F((9(MMMMr/   c                      t        d      j                  d      j                         } t               }|j	                  t
        d| ii       t        |      }d|j                  dt        d      k(  sJ y )NrV   FrX   rY   )	rf   r   r[   r	   rC   r   r   r\   r   )
empty_flagr_   r`   s      r-   .test_variation_for_flag_that_evaluates_to_noner{   q   sh    ]+..u5;;=J "E	JJ=*567F((i(PPPPr/   c                      t        dd      j                         } t               }|j                  t        d| ii       t        |      }t        ddddi      }||j                  dt        d      k(  sJ y )NrV   rW   r   r4   OFFrX   rY   )	rZ   r[   r	   rC   r   r   r   variation_detailr   r^   r_   r`   expecteds       r-   *test_variation_detail_for_existing_featurer   x   sq    'w?EEGG "E	JJ='234FVUO<Hv..}dI.VVVVr/   c                      t               } t        |       }t        dd ddd      }||j                  dt        d      k(  sJ y )NrX   ERRORFLAG_NOT_FOUNDr4   	errorKindrV   rY   )r	   r   r   r~   r   )r_   r`   r   s      r-   )test_variation_detail_for_unknown_featurer      sH     "EF	4'P`1abHv..}dI.VVVVr/   c                      t        dd      j                         } t               }|j                  t        d| ii       t        |      }t        dd ddd      }||j                  dd d      k(  sJ y NrV   rW   rX   r   USER_NOT_SPECIFIEDr   rY   rZ   r[   r	   rC   r   r   r   r~   r   s       r-   'test_variation_detail_when_user_is_noner      ss    'w?EEGG "E	JJ='234F	4'Pd1efHv..}dI.VVVVr/   c                      t        dd      j                         } t               }|j                  t        d| ii       t        |      }t        dd ddd      }||j                  di d      k(  sJ y r   r   r   s       r-   *test_variation_detail_when_user_has_no_keyr      ss    'w?EEGG "E	JJ='234F	4'Pd1efHv..}c9.UUUUr/   c                  6   t        d      j                  d      j                         } t               }|j	                  t
        d| ii       t        |      }t        dd ddi      }|j                  dt        d      }||k(  sJ |j                         dk(  sJ y )NrV   FrX   r4   r}   rY   T)rf   r   r[   r	   rC   r   r   r   r~   r   is_default_value)rz   r_   r`   r   actuals        r-   5test_variation_detail_for_flag_that_evaluates_to_noner      s    ]+..u5;;=J "E	JJ=*567F	4&%AH$$]D)$LFv""$,,,r/   c                     t               }t        |      }|j                  dddid      dk(  sJ t        | d      }|dgk(  sJ y )NrV   r   r   rX   rY   r   SUnexpected error while retrieving feature flag "feature.key": NotImplementedError())r(   r   r\   rS   rO   r_   r`   errlogs       r-   .test_variation_when_feature_store_throws_errorr      sX     "EFMUF+<iPT]]]]67+Flnnnnr/   c                     t               }t        |      }t        dd ddd      }|j                  dddid      }||k(  sJ |j	                         d	k(  sJ t        | d      }|d
gk(  sJ y )NrX   r   	EXCEPTIONr   rV   r   r   rY   Tr   )r(   r   r   r~   r   rS   )rO   r_   r`   r   r   r   s         r-   5test_variation_detail_when_feature_store_throws_errorr      s     "EF	4'P[1\]H$$]eV4Ey$YFv""$,,,67+Flnnnnr/   c                     t        d      j                  d      j                  d      j                         } t	        |       }t               }|j                  t        |d   |it        | d   | ii       t               }|j                          |j                  t        t        d         t        |       di       t        d|t!        |      t"        t$              }t'        |      5 }|j)                  |d   t        d      }|j*                  dk(  sJ |j,                  d	   t.        j0                  k(  sJ 	 d d d        y # 1 sw Y   y xY w)
NsegkeyTr!   r   SDK_KEY)r_   )sdk_keyfeature_storebig_segmentsevent_processor_classupdate_processor_classFbigSegmentsStatus)SegmentBuilder	unbounded
generationr[   "make_boolean_flag_matching_segmentr	   rC   r   r   r    setup_metadata_always_up_to_datesetup_membershipr
   r   r   r   r   r   r   r   r~   rW   reasonr   HEALTHY)segmentflagr_   segstoreconfigr`   details          r-   test_flag_using_big_segmentr      s+   X&006AA!DJJLG-g6D "E	JJT%[$0(geng<WYZ"$H--/0e=AVW^A_ae?gh&X602F 
&	 OV((edEB||t###}}015F5N5NNNNO O Os   (AE  E	c                      t               } | j                  t        t        t        di       t        |       }|j                  t              j                         }|dddk(  sJ y )Nr   r   r   r#   )	r	   rC   r   flag1flag2r   all_flags_stater   to_values_mapr_   r`   results      r-   test_all_flags_returns_valuesr      sV     "E	JJUE;=>F##D)779Fx;;;;r/   c                      t               } | j                  t        t        t        di       t        |       }|j                  d       }|j                  rJ y Nr   r	   rC   r   r   r   r   r   validr   s      r-   +test_all_flags_returns_none_if_user_is_noner      sI     "E	JJUE;=>F##D)F|||r/   c                      t               } | j                  t        t        t        di       t        |       }|j                  i       }|j                  rJ y r   r   r   s      r-   .test_all_flags_returns_none_if_user_has_no_keyr      sI     "E	JJUE;=>F##C(F|||r/   c                     t               }t        |      }|j                  ddi      j                  rJ t	        | d      }|dgk(  sJ y )Nr   r   r   >Unable to read flags for all_flag_state: NotImplementedError()r(   r   r   r   rS   r   s       r-   9test_all_flags_returns_none_if_feature_store_throws_errorr      sQ     "EF%%v&78>>>>67+FWYYYYr/   c            	         t               } | j                  t        t        t        di       t        |       }|j                  t              }|j                  sJ |j                         }|dddddddd	d
ddd	dk(  sJ y )Nr   r   r#   r   r   )r\   r   r!   r    Tr$   )r\   r   r   r&   r   r   $flagsState$valid
r	   rC   r   r   r   r   r   r   r   to_json_dictr_   r`   stater   s       r-   "test_all_flags_state_returns_stater      s     "E	JJUE;=>F""4(E;;;!F 
 #(,	
    r/   c            
         t               } | j                  t        t        t        di       t        |       }|j                  t        d      }|j                  sJ |j                         }|dddddd	id
dddddd	iddddk(  sJ y )Nr   T)with_reasonsr   r#   r   r   r4   r}   )r\   r   r   r!   r    r$   )r\   r   r   r&   r   r   r   r   s       r-   /test_all_flags_state_returns_state_with_reasonsr      s     "E	JJUE;=>F""4d";E;;;!F !5/ #(,!5/
 #   r/   c                  \   ddddgdddd} ddddgdd	dd}d
dddgddddd}ddddgdddd}t               }|j                  t        | d   | |d   ||d   ||d   |ii       t        |      }|j	                  t
        d      }|j                  sJ |j                         }|dddk(  sJ y )Nzserver-side-1Fr   ar   )r   r   r   r   
clientSider   r   zserver-side-2br    client-side-1r   T,  )r   r   r   r   r   r   r   r   client-side-2r#   i  r   )client_side_only)r   r   )r	   rC   r   r   r   r   r   r   )r   r   flag3flag4r_   r`   r   valuess           r-   :test_all_flags_state_can_be_filtered_for_client_side_flagsr     s   gE gE  l	E  lE !"E	JJU5\5%,uU|UZ\abg\hjoqstF""4$"?E;;;  "F8MMMMr/   c                     t        j                          dz  dz   } dddddgdd}d	d
ddddgdd}ddddddgd| d}t               }|j                  t        |||di       t	        |      }|j                  t        dd      }|j                  dk(  sJ |j                         }|dddddidd
dddiddd| ddiddddk(  sJ y )Nr$   i r   r   Fr   r   r   r   r    r!   r"   r#   Tkey3r   value3r%   )r   r   r   )r   details_only_for_tracked_flagsr\   r4   r}   )r\   r   r   r   )r\   r   r&   r   )r   r   r   r   r   )	timer	   rC   r   r   r   r   r   r   )future_timer   r   r   r_   r`   r   r   s           r-   9test_all_flags_state_can_omit_details_for_untracked_flagsr   E  s=   99;%/K lE X'E X' +E !"E	JJUE5JLMF""4d[_"`E;;$!F Q #!5/	 (3!5/	
" +   r/   c                      t               } | j                  t        t        t        di       t        |       }|j                  d       }|j                  dk(  sJ y Nr   Fr   r_   r`   r   s      r-   8test_all_flags_state_returns_empty_state_if_user_is_noner   ~  sL     "E	JJUE;=>F""4(E;;%r/   c                      t               } | j                  t        t        t        di       t        |       }|j                  i       }|j                  dk(  sJ y r   r   r   s      r-   ;test_all_flags_state_returns_empty_state_if_user_has_no_keyr     sL     "E	JJUE;=>F""3'E;;%r/   c                     t               }t        |      }|j                  ddi      }|j                  dk(  sJ t	        | d      }|dgk(  sJ y )Nr   r   Fr   r   r   )rO   r_   r`   r   r   s        r-   @test_all_flags_returns_empty_state_if_feature_store_throws_errorr     sY     "EF""UF#45E;;%67+FWYYYYr/   )=r   ldclient.clientr   r   r   ldclient.configr   ldclient.evaluationr   r   ldclient.feature_storer	   ldclient.impl.big_segmentsr
   ldclient.impl.evaluatorr   ldclient.interfacesr   ldclient.versioned_data_kindr   r   testing.builderstesting.mock_componentsr   testing.stub_utilr   r   testing.test_ldclientr   r   r   r   r(   rS   ra   ri   rn   rp   rs   ru   rx   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r+   r/   r-   <module>r      s    5 5 - C 7 9 9 , ;  7 E 3 
,	 
# 	< (JOLLQ
QPNQWWWV-ooO(<Z26.N`7r  Zr/   