
    }i                         d Z ddlZddlmc mZ ddlZddlZej                  j                  dd       d Zedk(  r e        yy)z6Tests for Story 2.01 (Track B): Redis L1 Working State    Nz/mnt/e/genesis-systemc            
      0&   ddl mmm}   dddddgdg d d	      }|j                  }d}||k(  }|st        j                  d
|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d}||k(  }|st        j                  d
|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d}||k(  }|st        j                  d
|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }ddg}||k(  }|st        j                  d
|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                   }d}||k(  }|st        j                  d
|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j"                  }d}||k(  }|st        j                  d
|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j$                  }d }||u }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}t'        d               }|j(                  }d} ||      }d}	||	k(  }
|
st        j                  d
|
fd||	f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      t        j                  |	      dz  }dd|iz  }t        t        j                  |            d x}x}x}x}
}	|j(                  }d} ||      }d }	||	k(  }
|
st        j                  d
|
fd||	f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      t        j                  |	      dz  }dd|iz  }t        t        j                  |            d x}x}x}x}
}	|j(                  }d!} ||      }d"}	||	k(  }
|
st        j                  d
|
fd||	f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      t        j                  |	      dz  }dd|iz  }t        t        j                  |            d x}x}x}x}
}	t'        d#        d$d%d&'      }|j                  }g }||k(  }|st        j                  d
|fd||f      d(t        j                         v st        j                  |      rt        j                  |      nd(t        j                  |      t        j                  |      dz  }t        j*                  d)|j                         d*z   d|iz  }t        t        j                  |            d x}x}}|j                   }d!}||k(  }|st        j                  d
|fd||f      d(t        j                         v st        j                  |      rt        j                  |      nd(t        j                  |      t        j                  |      dz  }t        j*                  d+|j                          d*z   d|iz  }t        t        j                  |            d x}x}}|j,                  }g }||k(  }|st        j                  d
|fd,||f      d(t        j                         v st        j                  |      rt        j                  |      nd(t        j                  |      t        j                  |      dz  }t        j*                  d)|j,                         d*z   d|iz  }t        t        j                  |            d x}x}}|j$                  }d }||u }|st        j                  d|fd||f      d(t        j                         v st        j                  |      rt        j                  |      nd(t        j                  |      t        j                  |      dz  }t        j*                  d-|j$                         d*z   d|iz  }t        t        j                  |            d x}x}}|j"                  }d}||k(  }|st        j                  d
|fd||f      d(t        j                         v st        j                  |      rt        j                  |      nd(t        j                  |      t        j                  |      dz  }t        j*                  d.|j"                         d*z   d|iz  }t        t        j                  |            d x}x}}t'        d/       dd0l m} d1}||u }|st        j                  d|fd2||f      d3t        j                         v st        j                  |      rt        j                  |      nd3t        j                  |      d4z  }t        j*                  d5      d6z   d7|iz  }t        t        j                  |            d x}}t'        d8       d9} |:      }|j0                  }||k(  }|st        j                  d
|fd;||f      d<t        j                         v st        j                  |      rt        j                  |      nd<t        j                  |      d=t        j                         v st        j                  |      rt        j                  |      nd=d>z  }d?d@|iz  }t        t        j                  |            d x}}|j2                  }d }||u }|st        j                  d|fdA||f      d<t        j                         v st        j                  |      rt        j                  |      nd<t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}t'        dB       dd l}ddClm}  dDd%d&dEgdFdGgdHdI	      } ||      }|dJ   }dD}||k(  }|slt        j                  d
|fdK||f      t        j                  |      t        j                  |      dLz  }d?d@|iz  }t        t        j                  |            d x}x}}|dM   }dEg}||k(  }|slt        j                  d
|fdK||f      t        j                  |      t        j                  |      dLz  }d?d@|iz  }t        t        j                  |            d x}x}}|dN   }dI}||k(  }|slt        j                  d
|fdK||f      t        j                  |      t        j                  |      dLz  }d?d@|iz  }t        t        j                  |            d x}x}}|j;                  |      }|j=                  |      }|dJ   }dD}||k(  }|slt        j                  d
|fdK||f      t        j                  |      t        j                  |      dLz  }d?d@|iz  }t        t        j                  |            d x}x}}|dO   }dH}||k(  }|slt        j                  d
|fdK||f      t        j                  |      t        j                  |      dLz  }d?d@|iz  }t        t        j                  |            d x}x}}t'        dP       fdQ}	 t?        j@                   |              t'        dS       y # tB        $ r}t'        dR|        Y d }~(d }~ww xY w)TNr   )RedisL1StateRedisL1Client	REDIS_URLztest-123zsession-abcztask-456redisqdranttesting)task_id
session_idactive_task_idfocus_entitiescurrent_hypothesisexhausted_pathsactive_blockerversion==)z/%(py2)s
{%(py2)s = %(py0)s.task_id
} == %(py5)sstatepy0py2py5assert %(py7)spy7z2%(py2)s
{%(py2)s = %(py0)s.session_id
} == %(py5)s)z6%(py2)s
{%(py2)s = %(py0)s.active_task_id
} == %(py5)sz6%(py2)s
{%(py2)s = %(py0)s.focus_entities
} == %(py5)sz:%(py2)s
{%(py2)s = %(py0)s.current_hypothesis
} == %(py5)s)z/%(py2)s
{%(py2)s = %(py0)s.version
} == %(py5)sis)z6%(py2)s
{%(py2)s = %(py0)s.active_blocker
} is %(py5)sz-BB1 PASSED: RedisL1State fields set correctlyabczgenesis:state:task:abc)zJ%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s._key
}(%(py4)s)
} == %(py9)sclient)r   r   py4py6py9zassert %(py11)spy11ztask-999zgenesis:state:task:task-999 zgenesis:state:task:z(BB2 PASSED: Key prefix format is correcttsa)r
   r   r   state2zExpected [], got 
>assert %(py7)szExpected '', got )z7%(py2)s
{%(py2)s = %(py0)s.exhausted_paths
} == %(py5)szExpected None, got zExpected 0, got z&BB3 PASSED: Default values are correct)ASYNC_REDISTz%(py0)s is %(py3)sr,   r   py3z6redis.asyncio should be importable in this environment
>assert %(py5)sr   z&WB1 PASSED: ASYNC_REDIS=True confirmedzredis://localhost:6379)	redis_url)z,%(py2)s
{%(py2)s = %(py0)s._url
} == %(py4)sc
custom_urlr   r   r"   assert %(py6)sr#   )z.%(py2)s
{%(py2)s = %(py0)s._redis
} is %(py5)sz9WB2 PASSED: Client stores custom URL, lazy init confirmed)asdictwb3xhypp1blocker   r
   )z%(py1)s == %(py4)s)py1r"   r   r   r   z*WB3 PASSED: asdict + JSON round-trip worksc                  D  K           } d}	  |ddddgdd      }| j                  |d	
       d {   }|s{t        j                  d      dz   ddt        j                         v st        j
                  |      rt        j                  |      ndiz  }t        t        j                  |            t        d       | j                  |       d {   }d }||u}|st        j                  d|fd||f      dt        j                         v st        j
                  |      rt        j                  |      ndt        j                  |      dz  }t        j                  d      dz   d|iz  }	t        t        j                  |	            d x}}|j                  }||k(  }
|
st        j                  d|
fd||f      dt        j                         v st        j
                  |      rt        j                  |      ndt        j                  |      dt        j                         v st        j
                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            d x}}
|j                  }d}||k(  }
|
st        j                  d|
fd||f      dt        j                         v st        j
                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }	dd |	iz  }t        t        j                  |            d x}x}
}|j                  }ddg}||k(  }
|
st        j                  d|
fd!||f      dt        j                         v st        j
                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }	dd |	iz  }t        t        j                  |            d x}x}
}|j                  }d}||k(  }
|
st        j                  d|
fd"||f      dt        j                         v st        j
                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }	dd |	iz  }t        t        j                  |            d x}x}
}t        d#       | j                  d$       d {   }d }||u }|st        j                  d%|fd&||f      d't        j                         v st        j
                  |      rt        j                  |      nd't        j                  |      dz  }t        j                  d(      dz   d|iz  }	t        t        j                  |	            d x}}t        d)       | j!                          d {   }|j#                  | j%                  |       d*       d {    | j'                  |       d {   }| j'                  |       d {   }d}
||
z   }||k(  }|st        j                  d|fd+||f      d,t        j                         v st        j
                  |      rt        j                  |      nd,d-t        j                         v st        j
                  |      rt        j                  |      nd-t        j                  |
      dz  }	t        j                  d.| d/|       d0z   d |	iz  }t        t        j                  |            d x}x}
}t        d1| d/| d2       | j)                  |       d {   }|s{t        j                  d3      dz   dd4t        j                         v st        j
                  |      rt        j                  |      nd4iz  }t        t        j                  |            | j                  |       d {   }d }||u }|st        j                  d%|fd&||f      d5t        j                         v st        j
                  |      rt        j                  |      nd5t        j                  |      dz  }t        j                  d6      dz   d|iz  }	t        t        j                  |	            d x}}|j#                  | j%                  |       d*       d {    t        d7       t        d8       | j/                          d {    y 7 7 M7 &7 K7 #7 7 7 7 27 N# t*        $ r}t        d9| d:       Y d }~Sd }~wt,        $ r}t        d;|        Y d }~rd }~ww xY w7 f# | j/                          d {  7   w xY ww)<Nzintegration-test-2-01ztest-sessionztest-activer   postgresztesting redis L1   )r
   r   r   r   r   r   <   )ttl_secondszset_state should return Truez
>assert %(py0)sr   successz/INTEGRATION BB1 PASSED: set_state returned True)is not)z%(py0)s is not %(py3)s	retrievedr.   zget_state should return stater0   r   r   )z/%(py2)s
{%(py2)s = %(py0)s.task_id
} == %(py4)stest_idr4   r5   r#   r   r   r   r   r   r   z8INTEGRATION BB2 PASSED: get_state returned correct stateznonexistent-key-xyz-2-01r   r-   missingzMissing key should return Nonez/INTEGRATION BB3 PASSED: cache miss returns Nonez:version)z%(py0)s == (%(py2)s + %(py4)s)v2v1zVersion should increment: u    → r+   z+INTEGRATION WB1 PASSED: atomic INCR works ()zdelete_state should return Truedeletedafter_deletez!State should be gone after deletez3INTEGRATION WB2 PASSED: delete_state clears the keyz'ALL LIVE Redis integration tests PASSEDzredis.asyncio not available: u    — skipping live testsz>Redis connection failed (non-fatal for offline environments): )	set_state
@pytest_ar_format_assertmsg@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationprint	get_state_call_reprcomparer
   r   r   r   
_get_redisdelete_keybump_versiondelete_stateImportError	Exceptionclose)r!   rF   r   rC   @py_format1rE   @py_assert2@py_assert1@py_format4@py_format6@py_assert3@py_format5@py_format7@py_assert4@py_format8rG   rrI   rH   @py_assert5rK   rL   er   r   s                          6/mnt/e/genesis-system/tests/track_b/test_story_2_01.pyrun_integrationz&test_redis_l1.<locals>.run_integrationV   s#    )6	! ), '4#5E #,,U,CCG:::::::::7:::7:::::CD %..w77I$(I9D(III9DIIIIII9III9IIIDIII*IIIIIII$$/$////$//////9///9///$////////////////''9>9'>9999'>99999999999999'999>9999999++D/DD+/DDDDD+/DDDDDDD9DDD9DDD+DDD/DDDDDDDD//E3EE/3EEEEE/3EEEEEEE9EEE9EEE/EEE3EEEEEEEELM #,,-GHHG"D7d?DDD7dDDDDDD7DDD7DDDdDDD$DDDDDDDCD ''))A((fkk'238<===**733B**733BKaK2<KKK2KKKKKK2KKK2KKKKKKKKKKKKaKKK#=bTrd!KKKKKKKK?t5ANO #//88G=========7===7=====!'!1!1'!::L#'L<4'LLL<4LLLLLL<LLL<LLL4LLL)LLLLLLL((fkk'238<===GH;< ,,.  Y D
 8 I *=33
 9: >
  	O1!4LMNN 	XRSTRUVWW	X !&,,.  s"  
f &d< dB d< d"P)d< ?d% Cd< d(*d< d+	d< !d."d< :d1;D4d< /d40Bd< d7C%d< +d:,d< f f f d< "d< %d< (d< +d< .d< 1d< 4d< 7d< :d< <	e=ef e=%e83f 8e==f  f ffff zIntegration test skipped: u)   ALL TESTS PASSED — Story 2.01 (Track B))"core.memory.redis_l1_schemar   r   r   r
   rN   rX   rP   rQ   rR   rS   rT   rU   r   r   r   r   r   r   rV   r[   rO   r   r,   _url_redisjsondataclassesr6   dumpsloadsasynciorunr_   ) r   r   rc   ri   rf   re   rj   r!   rl   @py_assert8@py_assert7@py_format10@py_format12r*   r,   rb   rd   r3   r2   rg   rh   rs   r6   state3d@py_assert0
serialiseddeserialisedro   rm   r   r   s                                  @@rn   test_redis_l1r      s   RR
  !*$	E ==&J&=J&&&&=J&&&&&&5&&&5&&&=&&&J&&&&&&&,},},,,,},,,,,,5,,,5,,,,,,},,,,,,,-:-:----:------5---5------:-------6GX#66#66666#666666656665666666#66666666##0y0#y0000#y00000050005000#000y0000000==A=A=A55=A'4'4''''4''''''5'''5''''''4'''''''	
9: _F;;9u9;u9!99!99999!999999969996999;999u999999!99999999;;CzC;z"C&CC"&CCCCC"&CCCCCCC6CCC6CCC;CCCzCCC"CCC&CCCCCCCC;;3r3;r?333?33333?333333363336333;333r333?33333333333	
45 ##cJF  SBS B&SSS BSSSSSS6SSS6SSS SSSBSSS*;F<Q<Q;R(SSSSSSSS$$[[$*[[[$[[[[[[6[[[6[[[$[[[[[[.?@Y@Y?Z,[[[[[[[[!!URU!R'UUU!RUUUUUU6UUU6UUU!UUURUUU+<V=S=S<T)UUUUUUUU  WDW D(WWW DWWWWWW6WWW6WWW WWWDWWW,?@U@U?V*WWWWWWWW>>CQC>QCCC>QCCCCCC6CCC6CCC>CCCQCCC"26>>2B CCCCCCCC	
23 8X;$XXX;$XXXXXX;XXX;XXX$XXX XXXXXXX	
23 *J
+A666Z6Z116ZZ88t8t8t118t	
EF "u  	F 	vAY< 5 <5    <5   <   5       '3%'%''''%''''''%'''''''Y<1<1<1<1AJ::j)L	"+e+"e++++"e+++"+++e+++++++()6Y6)Y6666)Y666)666Y6666666	
67:!x0O%& 

56  0*1#.//0s    KAK4 K4	ALK=ALLAL__main__)__doc__builtinsrP   _pytest.assertion.rewrite	assertionrewriterN   rw   syspathinsertr   __name__     rn   <module>r      s@    <    
 * +O7d zO r   