
    !i+                    .   d Z ddlmZ ddlZddlmc mZ ddl	Z	ddl
Z
ddlZddlZdZeej                  vrej                  j                  de       ddlmZmZmZmZmZ dddZd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 Z&y)u  
tests/track_b/test_story_8_01.py

Story 8.01: ImmutableKernel — File Permission Locker

Black Box Tests (BB1–BB5):
    BB1  lock_kernel() → files become read-only (write attempt raises OSError)
    BB2  verify_kernel() on intact kernel → intact=True, modified_files=[]
    BB3  is_kernel_file("core/interceptors/base_interceptor.py") → True
    BB4  is_kernel_file("some/random/file.py") → False
    BB5  verify_kernel() after chmod +w on one file → intact=False, file in modified_files

White Box Tests (WB1–WB4):
    WB1  Lock uses stat.S_IREAD | stat.S_IRGRP | stat.S_IROTH (readable, not writable)
    WB2  lock_kernel() on non-existent file → failure reported, no exception raised
    WB3  LockResult and VerifyResult are proper dataclasses with correct fields
    WB4  base_path is injectable (all tests use tmp_path)

Package Test:
    PKG  core.evolution __init__.py exports ImmutableKernel, LockResult, VerifyResult,
         KERNEL_FILES, KERNEL_DIRS
    )annotationsN/mnt/e/genesis-systemImmutableKernel
LockResultVerifyResultKERNEL_FILESKERNEL_DIRSc                    i }t         D ]:  }| |z  }|j                  j                  dd       |j                  |       |||<   < |S )u   Create all KERNEL_FILES inside tmp_path with default content.

    Returns a dict mapping relative kernel path → absolute Path object.
    Tparentsexist_ok)r	   parentmkdirwrite_bytes)tmp_pathcontentcreatedrelfulls        6/mnt/e/genesis-system/tests/track_b/test_story_8_01.py_make_kernel_filesr   9   sV    
 "$G #~$6!	
 N    c                ,    t        t        |             S )z.Return an ImmutableKernel pointed at tmp_path.)	base_path)r   str)r   s    r   _make_kernelr   G   s    S]33r   c           
     6
   t        |        t        |       }|j                         }t        |t              }|sddt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }t        t        j                  |            d}|j                  }t        |      }t        t              }||k(  }|st        j                  d|fd||f      d	t        j                         v st        j                  t              rt        j                  t              nd	dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      d	t        j                         v st        j                  t              rt        j                  t              nd	d
t        j                         v st        j                  t              rt        j                  t              nd
t        j                  |      dz  }	dd|	iz  }
t        t        j                  |
            dx}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  }dd|iz  }t        t        j                  |            dx}x}}t        D ]/  }| |z  }t#        j$                  t'        |            j(                  }t$        j*                  t$        j,                  z  t$        j.                  z  }||z  }| }|st        j0                  d|       dz   dt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  |      rt        j                  |      nddz  }t        t        j                  |            dx}}2 y)zNBB1: lock_kernel() sets files to read-only; write attempt then raises OSError.5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}
isinstanceresultr   py0py1py2py4N==zl%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.locked
})
} == %(py10)s
{%(py10)s = %(py7)s(%(py8)s)
}lenr	   r#   r$   py3py5py7py8py10assert %(py12)spy12z.%(py2)s
{%(py2)s = %(py0)s.failed
} == %(py5)sr#   r%   r-   assert %(py7)sr.   z File still writable after lock: z 
>assert not (%(py0)s & %(py1)s)mode
write_bits)r#   r$   )r   r   lock_kernelr    r   @py_builtinslocals
@pytest_ar_should_repr_global_name	_safereprAssertionError_format_explanationlockedr*   r	   _call_reprcomparefailedosstatr   st_modeS_IWUSRS_IWGRPS_IWOTH_format_assertmsg)r   kernelr!   @py_assert3@py_format5@py_assert2@py_assert4@py_assert9@py_assert6@py_format11@py_format13@py_assert1@py_format6@py_format8r   r   r6   r7   @py_format4s                      r   *test_bb1_lock_kernel_makes_files_read_onlyrW   Q   s   x (#F!Ffj)))))))):))):))))))f)))f))))))j)))j))))))))))}}23}2\!22!22222!222222232223222222v222v222}222222222222222222\222\222!22222222==B=B=B66=B  Q#~wws4y!))\\DLL04<<?
:%P%&P&PP*J3%(PPPPPPPDPPPDPPPPPP:PPP:PPPPPPQr   c                   t        |        t        |       }|j                          |j                         }t	        |t
              }|sddt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  t
              rt        j                  t
              ndt        j                  |      dz  }t        t        j                  |            d}|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}}|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  }dd|iz  }t        t        j                  |            dx}x}}y)uL   BB2: verify_kernel() on an intact kernel → intact=True, modified_files=[].r   r    verifyr   r"   NTisz.%(py2)s
{%(py2)s = %(py0)s.intact
} is %(py5)sr4   r5   r.   r'   z6%(py2)s
{%(py2)s = %(py0)s.modified_files
} == %(py5)s)r   r   r8   verify_kernelr    r   r9   r:   r;   r<   r=   r>   r?   intactrA   modified_files)	r   rJ   rY   rK   rL   rS   rN   rT   rU   s	            r   test_bb2_verify_kernel_intactra   e   s   x (#F !!#Ffl++++++++:+++:++++++f+++f++++++l+++l++++++++++== D =D    =D      6   6   =   D         &B& B&&&& B&&&&&&6&&&6&&& &&&B&&&&&&&r   c           	        t        |       }t        D ]C  }|j                  } ||      }d}||u }|st        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t        j                  |      t        j                  |      dz  }t        j                  d|       dz   d	|iz  }t        t        j                  |            d
x}x}x}}F y
)z?BB3: is_kernel_file returns True for each path in KERNEL_FILES.TrZ   zT%(py5)s
{%(py5)s = %(py2)s
{%(py2)s = %(py0)s.is_kernel_file
}(%(py3)s)
} is %(py8)srJ   r   r#   r%   r,   r-   r/   zExpected True for z
>assert %(py10)sr0   N)r   r	   is_kernel_filer;   rA   r9   r:   r<   r=   rI   r>   r?   )	r   rJ   r   rS   rN   @py_assert7rP   @py_format9rQ   s	            r   ,test_bb3_is_kernel_file_true_for_kernel_pathrh   s   s    (#F N$$M$S)MTM)T1MMM)TMMMMMMvMMMvMMM$MMMMMMSMMMSMMM)MMMTMMM5Gu3MMMMMMMMNr   c                   t        |       }|j                  }d} ||      }d}||u }|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}||u }|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}||u }|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}}y	)z8BB4: is_kernel_file returns False for an unrelated path.zsome/random/file.pyFrZ   )zT%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.is_kernel_file
}(%(py4)s)
} is %(py9)srJ   )r#   r%   r&   py6py9zassert %(py11)spy11Nzcore/genesis_execution_layer.py )
r   re   r;   rA   r9   r:   r<   r=   r>   r?   )	r   rJ   rS   rK   @py_assert5@py_assert8rf   @py_format10@py_format12s	            r   -test_bb4_is_kernel_file_false_for_random_pathrr   z   s   (#F  @!6@ !67@5@75@@@@75@@@@@@6@@@6@@@ @@@!6@@@7@@@5@@@@@@@  L!BL !BCLuLCuLLLLCuLLLLLL6LLL6LLL LLL!BLLLCLLLuLLLLLLL  -- $--$----$------6---6--- ------$-----------r   c                   t        |       }t        |       }|j                          t        d   }||   }t	        j
                  t        |      t        j                  t        j                  z  t        j                  z  t        j                  z         |j                         }|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}}|j,                  }||v }|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  }dd|iz  }t)        t        j*                  |            d	x}}t        dd	 D ]  }|j,                  }||v}|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  }dd|iz  }t)        t        j*                  |            d	x}} y	)uX   BB5: After chmod +w on one file, verify_kernel → intact=False, file in modified_files.r   FrZ   r\   rY   r4   r5   r.   Nin)z6%(py0)s in %(py4)s
{%(py4)s = %(py2)s.modified_files
}	first_relr#   r%   r&   assert %(py6)srj      not inz:%(py0)s not in %(py4)s
{%(py4)s = %(py2)s.modified_files
}r   )r   r   r8   r	   rC   chmodr   rD   S_IREADS_IRGRPS_IROTHrF   r^   r_   r;   rA   r9   r:   r<   r=   r>   r?   r`   )r   r   rJ   rv   
first_fullrY   rS   rN   rK   rT   rU   rL   @py_format7r   s                 r   %test_bb5_verify_detects_modified_filer      s    *G(#F  QI#JHHS_dllT\\9DLLH4<<WX!!#F==!E!=E!!!!=E!!!!!!6!!!6!!!=!!!E!!!!!!!---9-----9-------9---9--------------------AB 0 ///s/////s///////s///s//////&///&///////////0r   c           
     L   t        |        t        |       }|j                          t        j                  t        j
                  z  t        j                  z  }t        D ]B  }| |z  }t        j                  t        j                  t        |            j                        }||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dz  }t        j$                  | dt'        |       dt'        |             dz   d	|iz  }t)        t        j*                  |            d
}E y
)zRWB1: Locked files use S_IREAD|S_IRGRP|S_IROTH (readable, not hidden/inaccessible).r'   )z%(py0)s == %(py2)sactualexpected_moder#   r%   z: expected mode z, got z
>assert %(py4)sr&   N)r   r   r8   rD   r~   r   r   r	   S_IMODErC   r   rE   r;   rA   r9   r:   r<   r=   rI   octr>   r?   )	r   rJ   r   r   r   r   rS   @py_format3rL   s	            r   /test_wb1_lock_uses_read_only_mode_not_chmod_000r      sF   x (#F
LL4<</$,,>M 
#~bggc$i0889& 	
 	
v 	
 	
	6	
 	
   	
 	
 		  	
 	
	6	
 	
  ' 	
 	
 		 ' 	
 	
  e#C$6#7vc&k]K	
 	
 	
 	
 	

r   c           
     z   t        |       }|j                         }t        |t              }|sddt	        j
                         v st        j                  t              rt        j                  t              nddt	        j
                         v st        j                  |      rt        j                  |      nddt	        j
                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }t        t        j                  |            d}|j                  }t        |      }t        t              }||k(  }|st        j                  d|fd||f      d	t	        j
                         v st        j                  t              rt        j                  t              nd	dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      d	t	        j
                         v st        j                  t              rt        j                  t              nd	d
t	        j
                         v st        j                  t              rt        j                  t              nd
t        j                  |      dz  }	dd|	iz  }
t        t        j                  |
            dx}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  }dd|iz  }t        t        j                  |            dx}x}}|j                  D ]V  \  }}t        |t               }|sddt	        j
                         v st        j                  t              rt        j                  t              nddt	        j
                         v st        j                  |      rt        j                  |      nddt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |      dz  }t        t        j                  |            d}t        |t               }|sddt	        j
                         v st        j                  t              rt        j                  t              nddt	        j
                         v st        j                  |      rt        j                  |      nddt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |      dz  }t        t        j                  |            d}t        |      }d}||kD  }|st        j                  d|fd||f      d	t	        j
                         v st        j                  t              rt        j                  t              nd	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}}Y y)zOWB2: lock_kernel() on non-existent files records failures, raises no exception.r   r    r!   r   r"   Nr'   )zl%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.failed
})
} == %(py10)s
{%(py10)s = %(py7)s(%(py8)s)
}r*   r	   r+   r1   r2   z.%(py2)s
{%(py2)s = %(py0)s.locked
} == %(py5)sr4   r5   r.   filepathr   	error_msgr   )>)z/%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} > %(py6)sr#   r$   r,   rj   assert %(py8)sr/   )r   r8   r    r   r9   r:   r;   r<   r=   r>   r?   rB   r*   r	   rA   r@   r   )r   rJ   r!   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   r   r   rn   r   rg   s                      r   2test_wb2_lock_nonexistent_file_reported_not_raisedr      s    (#F !Ffj)))))))):))):))))))f)))f))))))j)))j))))))))))}}23}2\!22!22222!222222232223222222v222v222}222222222222222222\222\222!22222222==B=B=B66=B%}} ")(C((((((((z(((z(((((((((((((((((C(((C(((((((((()S))))))))z)))z)))))))))))))))))S)))S))))))))))9~!!~!!!!~!!!!!!s!!!s!!!!!!9!!!9!!!~!!!!!!!!!!"r   c                .   ddl }|j                  } |t              }|sddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }t        t        j                  |            dx}}|j                  t              D ch c]  }|j                   }}d}||v }|st        j                  d|fd	||f      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}}d}||v }|st        j                  d|fd	||f      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                  } |t              }|sddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }t        t        j                  |            dx}}|j                  t              D ch c]  }|j                   }
}d}||
v }|st        j                  d|fd	||
f      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}}d}||
v }|st        j                  d|fd	||
f      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}}t               }|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  }d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  }dd|iz  }t        t        j                  |            dx}x}}t               }|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}}|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  }dd|iz  }t        t        j                  |            dx}x}}yc c}w c c}w )zQWB3: LockResult and VerifyResult are proper dataclasses with correct field names.r   NzNassert %(py5)s
{%(py5)s = %(py2)s
{%(py2)s = %(py0)s.is_dataclass
}(%(py3)s)
}dataclassesr   )r#   r%   r,   r-   r@   rt   z%(py1)s in %(py3)sfield_names_lrr$   r,   assert %(py5)sr-   rB   r   r_   field_names_vrr`   r'   r   lrr4   r5   r.   r3   TrZ   r\   vrr]   )r   is_dataclassr   r9   r:   r;   r<   r=   r>   r?   fieldsnamerA   r   r@   rB   r_   r`   )r   r   rS   rN   rT   fr   @py_assert0rM   rV   r   r   rK   rU   r   s                  r   4test_wb3_lockresult_and_verifyresult_are_dataclassesr      s    ##/#J////////;///;///#//////J///J//////////&1&8&8&DEaffENE%8~%%%%8~%%%8%%%%%%~%%%~%%%%%%%%8~%%%%8~%%%8%%%%%%~%%%~%%%%%%% ##1#L11111111;111;111#111111L111L1111111111&1&8&8&FGaffGNG%8~%%%%8~%%%8%%%%%%~%%%~%%%%%%%-~----~---------~---~------- 
B999?9229999?9229	B9999229""""""""""""2"""2"""""""""""""# F Hs   `:`c           
     P   t        |       }|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}}t        |        |j                         }|j                  }t        |      }t        t              }	||	k(  }
|
st        j                  d|
fd	||	f      d
t	        j
                         v st        j                  t              rt        j                  t              nd
dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      d
t	        j
                         v st        j                  t              rt        j                  t              nd
dt	        j
                         v st        j                  t              rt        j                  t              ndt        j                  |	      dz  }dd|iz  }t        t        j                  |            dx}x}x}
}	t               }|j                  }t!        |      }d}||k(  }
|
s
t        j                  d|
fd||f      dt	        j
                         v st        j                  t               rt        j                  t               nddt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}x}
}y)zPWB4: ImmutableKernel accepts an injected base_path and never touches real files.r'   )z1%(py2)s
{%(py2)s = %(py0)s.base_path
} == %(py4)srJ   r   rw   rx   rj   Nr)   r*   r!   r	   r+   r1   r2   r   )zO%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.base_path
})
} == %(py8)sr   real_kernel)r#   r$   r,   r-   r/   assert %(py10)sr0   )r   r   r;   rA   r9   r:   r<   r=   r>   r?   r   r8   r@   r*   r	   r   r   )r   rJ   rS   rK   rL   r   r!   rM   rN   rO   rP   rQ   rR   r   rf   rg   s                   r    test_wb4_base_path_is_injectabler      sE   (#F'x''''x''''''6'''6'''''''''x'''x''''''' x !F}}23}2\!22!22222!222222232223222222v222v222}222222222222222222\222\222!22222222 "#K$$@3$%@)@@%)@@@@@%)@@@@@@@3@@@3@@@@@@{@@@{@@@$@@@%@@@)@@@@@@@@r   c                @   t         d   }| |z  }|j                  j                  dd       |j                  d       t	        |       }|j                          |j                         }|j                  }||v}|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  }d
d|iz  }t        t        j                  |            d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}}	y)uI   verify_kernel() skips files that do not exist — they're not 'modified'.r   Tr      # kernelrz   r|   rv   rY   rw   rx   rj   NrZ   r\   r4   r5   r.   )r	   r   r   r   r   r8   r^   r`   r;   rA   r9   r:   r<   r=   r>   r?   r_   )r   rv   r   rJ   rY   rK   rS   rL   r   rN   rT   rU   s               r   #test_verify_skips_nonexistent_filesr      sP    QII%JD48;'(#F
!!#F"1119111119111111191119111111F111F11111111111== D =D    =D      6   6   =   D       r   c                   t        |       }dt        d    }|j                  } ||      }d}||u }|st        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t        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            dx}x}x}}y)zPis_kernel_file works for absolute paths that contain a kernel path as substring.z/mnt/e/genesis-system/r   TrZ   rc   rJ   abs_pathrd   r   r0   N)r   r	   re   r;   rA   r9   r:   r<   r=   r>   r?   )	r   rJ   r   rS   rN   rf   rP   rg   rQ   s	            r   &test_is_kernel_file_with_absolute_pathr      s    (#F'Q'89H  2 *2d2*d2222*d22222262226222 222222222222*222d2222222r   c                t   t         d   }| |z  }|j                  j                  dd       |j                  d       t	        |       }|j                         }|j                  }||v }|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  }d
d|iz  }t        t        j                  |            dx}}|j                  }	t!        |	      }
t!        t               }d}||z
  }|
|k(  }|st        j                  d|fd|
|f      dt        j                         v st        j                  t               rt        j                  t               nddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |	      t        j                  |
      dt        j                         v st        j                  t               rt        j                  t               nddt        j                         v st        j                  t               rt        j                  t               ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}	x}
x}x}x}}y)z>LockResult records partial success when only some files exist.r   Tr   r   rt   )z.%(py0)s in %(py4)s
{%(py4)s = %(py2)s.locked
}rv   r!   rw   rx   rj   Nry   r'   )zy%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.failed
})
} == (%(py10)s
{%(py10)s = %(py7)s(%(py8)s)
} - %(py12)s)r*   r	   )r#   r$   r,   r-   r.   r/   r0   r2   zassert %(py15)spy15)r	   r   r   r   r   r8   r@   r;   rA   r9   r:   r<   r=   r>   r?   rB   r*   )r   rv   r   rJ   r!   rK   rS   rL   r   rM   rN   rO   @py_assert11@py_assert13rP   @py_format14@py_format16s                    r    test_lock_result_partial_successr     s    QIiDKKdT2[!(#F!F%9%%%%9%%%%%%9%%%9%%%%%%%%%%%%%%%%%%%}}63}6\!26Q6!2Q!66!66666!666666636663666666v666v666}666666666666666666\666\666!2666Q66666666r   c                 z   d} | t         v }|st        j                  d|fd| t         f      t        j                  |       dt	        j
                         v st        j                  t               rt        j                  t               nddz  }dd|iz  }t        t        j                  |            dx} }d	} | t         v }|st        j                  d|fd| t         f      t        j                  |       dt	        j
                         v st        j                  t               rt        j                  t               nddz  }dd|iz  }t        t        j                  |            dx} }d
} | t         v }|st        j                  d|fd| t         f      t        j                  |       dt	        j
                         v st        j                  t               rt        j                  t               nddz  }dd|iz  }t        t        j                  |            dx} }t        t               }d}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  t              rt        j                  t              nddt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}y)z4KERNEL_FILES constant contains the 3 expected paths.z%core/interceptors/base_interceptor.pyrt   r   r	   r   r   r-   Nztests/axiomatic/test_axioms.pyzcore/storage/shadow_router.py   r'   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr*   r   r   r/   )
r	   r;   rA   r=   r9   r:   r<   r>   r?   r*   )r   rM   rV   rT   rn   rN   r   rg   s           r   /test_kernel_files_constant_has_expected_entriesr     s   2B2lBBBB2lBBB2BBBBBBlBBBlBBBBBBB+;+|;;;;+|;;;+;;;;;;|;;;|;;;;;;;*:*l::::*l:::*::::::l:::l:::::::|!!!!!!!!!!!!3!!!3!!!!!!|!!!|!!!!!!!!!!!!!r   c                 n   d} | t         v }|st        j                  d|fd| t         f      t        j                  |       dt	        j
                         v st        j                  t               rt        j                  t               nddz  }dd|iz  }t        t        j                  |            dx} }y)	z+KERNEL_DIRS constant contains credentials/.zcredentials/rt   r   r
   r   r   r-   N)	r
   r;   rA   r=   r9   r:   r<   r>   r?   )r   rM   rV   rT   s       r   test_kernel_dirs_constantr     s[    (>[((((>[(((>(((((([((([(((((((r   c                    ddl m} m}m}m}m} | t        u }|st        j                  d|fd| t        f      dt        j                         v st        j                  |       rt        j                  |       nddt        j                         v st        j                  t              rt        j                  t              nddz  }dd	|iz  }t        t        j                  |            d
}|t        u }|st        j                  d|fd|t        f      dt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  t              rt        j                  t              nddz  }dd	|iz  }t        t        j                  |            d
}|t        u }|st        j                  d|fd|t        f      dt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  t              rt        j                  t              nddz  }dd	|iz  }t        t        j                  |            d
}|t        u }|st        j                  d|fd|t        f      dt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  t              rt        j                  t              nddz  }dd	|iz  }t        t        j                  |            d
}|t
        u }|st        j                  d|fd|t
        f      dt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  t
              rt        j                  t
              nddz  }dd	|iz  }t        t        j                  |            d
}y
)zqPKG: core.evolution __init__.py exports ImmutableKernel, LockResult, VerifyResult,
    KERNEL_FILES, KERNEL_DIRS.r   r   rZ   )z%(py0)s is %(py2)sIKr   r   zassert %(py4)sr&   NLRr   VRr   KFr	   KDr
   )core.evolutionr   r   r   r	   r
   r;   rA   r9   r:   r<   r=   r>   r?   )r   r   r   r   r   rS   r   rL   s           r   test_pkg_init_exportsr   (  s         2      2   2                222222222222r   )s   # kernel file
)r   bytesreturnzdict[str, object])r   r   )'__doc__
__future__r   builtinsr9   _pytest.assertion.rewrite	assertionrewriter;   rC   rD   syspytestGENESIS_ROOTpathinsertcore.evolution.immutable_kernelr   r   r   r	   r
   r   r   rW   ra   rh   rr   r   r   r   r   r   r   r   r   r   r   r    r   r   <module>r      s   . #   	  
  'sxxHHOOA|$ 4Q('N.06
 "&#4A(!$37")r   