
    ǂjo-                    j   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 dlmZ d dlmZ d dlmZ d dlZ ee      j*                  Zej*                  dz  Zd*dZ eded	z        Z ed
ed	z        Zd+dZd,dZd,dZej<                  j?                  dg d      	 	 	 	 	 	 	 	 d-d       Z d,dZ!	 	 	 	 	 	 d,dZ"	 	 	 	 	 	 d,dZ#d.dZ$d/dZ%d/dZ&ddddd0dZ'dddd1dZ(d2dZ)d2dZ*d2d Z+d2d!Z,d2d"Z-d2d#Z.d,d$Z/ej<                  j?                  d%d&d'g      	 	 	 	 	 	 	 	 	 	 d3d(       Z0d2d)Z1y)4    )annotationsN)Path)SimpleNamespace)Mockz5task26-post-lifecycle-cleanup-v3-4a6c7ee5-st_01a00e50c                   t         j                  j                  | |      }g }|}|r|j                  }|}|sdddt	        j
                         v st        j                  |      rt        j                  |      ndiz  }|j                  |       |rlddt	        j
                         v st        j                  |      rt        j                  |      ndt        j                        dz  }|j                  |       t        j                  |d      i z  }dd|iz  }	t        t        j                  |	            d x}x}}t         j                  j                  |      }
|j                  j                  |
       |
S )	Nz%(py2)spy2specz#%(py6)s
{%(py6)s = %(py4)s.loader
})py4py6r   assert %(py9)spy9)	importlibutilspec_from_file_locationloader@py_builtinslocals
@pytest_ar_should_repr_global_name	_safereprappend_format_boolopAssertionError_format_explanationmodule_from_specexec_module)namepathr	   @py_assert1@py_assert0@py_assert5@py_format3@py_format7@py_format8@py_format10modules              /home/cube/projects/richard/traning coach/.omo/evidence/task26/task26-post-lifecycle-cleanup-v5-4a6c7ee5-st_01a00ed7/test_cleanup_controller.pyloadr(      s    >>11$=D44DKKK444DDK^^,,T2FKKF#M    
cleanup_v5cleanup_controller.pycleanup_v3_regressionc                6    t        | j                  d            S )Nz.task26-cleanup-*)listglob)r   s    r'   temp_entriesr0      s    		-.//r)   c                   t         j                  g dfd}|j                  t        j                   d|       | dz  }d}t        j	                  ||       |j
                  } |       }||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      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}x}}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                        rt        j                        ndt        j                  |
      t        j                  |      dz  }d
d|iz  }	t        t        j                  |	            d x}
x}}t        |       }
g }|
|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z  }d
d|iz  }	t        t        j                  |	            d x}
x}}y )Nc                h    t        dt        |            }j                  |        | |d |       S )N   )minlenr   )fdrawsizecalls
real_writes      r'   partialzHtest_atomic_repeated_partial_writes_publish_exact_bytes.<locals>.partial%   s2    1c#hT"c%4j))r)   writepayloads   0123456789abcdef==)zI%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.read_bytes
}()
} == %(py6)stargetexpected)py0r   r
   r   assert %(py8)spy8   z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr5   r9   rB   py1py3r   r0   tmp_pathr6   intr7   bytes | memoryviewreturnrL   )osr<   setattrMODULEatomic
read_bytesr   _call_reprcomparer   r   r   r   r   r   r5   r0   )rJ   monkeypatchr;   r@   rA   r   @py_assert3r!   r#   @py_format9@py_assert2@py_assert4r9   r:   s               @@r'   7test_atomic_repeated_partial_writes_publish_exact_bytesrZ   !   s   JE*
 		7G4	!F"H
MM&(#**(****(******6***6************(***(*******u::?:33uu:!'R'!R''''!R''''''<'''<''''''''''''!'''R'''''''r)   c                   t         j                  ddfd}|j                  t        j                   d|       | dz  }t        j	                  |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                  |      t        j                  |      d	z  }d
d|iz  }	t        t        j                  |	            d x}x}x}}d}
|
k(  }|st        j                  d|fd|
f      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        |       }
g }|
|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z  }dd|iz  }t        t        j                  |            d x}
x}}y )Nr   c                6    dz  dk(  rt          | |      S )N   )InterruptedError)r6   r7   attemptsr:   s     r'   interrupted_oncezMtest_atomic_retries_interrupted_write_then_succeeds.<locals>.interrupted_once7   s&    Aq="""c""r)   r<   receipt.jsons   {"status":"PASS"}
r>   zI%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.read_bytes
}()
} == %(py7)sr@   rB   r   r
   py7r   r   r3   )z%(py0)s == %(py3)sr_   )rB   rI   assert %(py5)spy5rF   r0   rJ   rG   rC   rD   rK   )rO   r<   rP   rQ   rR   rS   r   rT   r   r   r   r   r   r   r0   )rJ   rU   r`   r@   r   rV   @py_assert6r!   r$   r%   rX   @py_format4@py_format6rY   r#   rW   r_   r:   s                   @@r'   3test_atomic_retries_interrupted_write_then_succeedsrj   3   s   JH# 		7,<=&F
MM&0188"88"88888"888888868886888888888"888888888q=8q88q!'R'!R''''!R''''''<'''<''''''''''''!'''R'''''''r)   	bad_count)r   c   Tc                   | dz  }|j                  d       |j                  t        j                  dfd       t	        j
                  t        j                  d      5  t        j                  |d       d 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                  |      t        j                  |      dz  }dd|iz  }	t        t        j                   |	            d x}x}x}}t#        |       }
g }|
|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z  }dd|iz  }t        t        j                   |            d x}
x}}y # 1 sw Y    xY w)Narchives
   sealed-oldr<   c                    S N )_fd_rawrk   s     r'   <lambda>zItest_atomic_rejects_invalid_write_counts_without_rename.<locals>.<lambda>L   s    ir)   zinvalid write countmatchs   new-archiver>   rb   r@   rc   r   r   rF   r0   rJ   rG   rC   rD   )write_bytesrP   rQ   rO   pytestraisesCleanupErrorrR   rS   r   rT   r   r   r   r   r   r   r0   )rJ   rU   rk   r@   r   rV   rg   r!   r$   r%   rX   rY   r#   rW   s     `           r'   7test_atomic_rejects_invalid_write_counts_without_renamer|   F   s~    	!F
}%		7,GH	v**2G	Hfn- 
I//-/-////-//////6///6/////////-///////!'R'!R''''!R''''''<'''<''''''''''''!'''R''''''' 
I	Hs   !I66J c                \   | dz  }dd}|j                  t        j                  d|       t        j                  t
        d      5  t        j                  |d       d d d        |j                  } |       }| }|sddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      d	z  }t        t        j                  |            d x}x}}t        |       }g }||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z  }
dd|
iz  }t        t        j                  |            d x}x}	}y # 1 sw Y   xY w)Nra   c                    t        d      )Nzsimulated media failure)OSError)rs   rt   s     r'   failz>test_atomic_oserror_never_renames_or_leaves_temp.<locals>.failV   s    /00r)   r<   zmedia failurerv   s   must-not-publishzEassert not %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}r@   )rB   r   r
   r>   rF   r0   rJ   rG   rC   rD   )rs   rL   rt   rM   rN   rL   )rP   rQ   rO   ry   rz   r   rR   existsr   r   r   r   r   r   r   r0   rT   )rJ   rU   r@   r   r   rV   r!   ri   rX   rY   r#   rW   s               r'   0test_atomic_oserror_never_renames_or_leaves_tempr   S   sD   &F1 		7D1	wo	6f12 
7}}}vv}!'R'!R''''!R''''''<'''<''''''''''''!'''R''''''' 
7	6s   H!!H+c           	     d   | dz  }|j                          |dz  j                  d       t        || dz  d      }t        t	        d            }|j                  t        j                  d|       |j                  t        j                  d	t        t        d
                   ddt        j                  d      ddg}t        j                  t        d
      5  t        j                  |i ddiddg|i i        d d d        |j                  }d}||z  }|j                  }	 |	       }
|
 }|sddt!        j"                         v st%        j&                  |      rt%        j(                  |      ndt%        j(                  |      t%        j(                  |      t%        j(                  |	      t%        j(                  |
      dz  }t	        t%        j*                  |            d x}x}x}x}	x}
}|j                  }d}||z  }|j                  }	 |	       }
|
 }|sddt!        j"                         v st%        j&                  |      rt%        j(                  |      ndt%        j(                  |      t%        j(                  |      t%        j(                  |	      t%        j(                  |
      dz  }t	        t%        j*                  |            d x}x}x}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}}y # 1 sw Y   xY w)Nprofilezauthority.jsons	   authorityarchivesrun)r   archive_rootrun_idmutation command must not runside_effectr<   zarchive write failed	   0600)r   r8   sha256moderv   r   unused)bindingsservicezsassert not %(py9)s
{%(py9)s = %(py7)s
{%(py7)s = (%(py2)s
{%(py2)s = %(py0)s.archive_root
} / %(py4)s).exists
}()
}args)rB   r   r
   rd   r   z.pending-runr   r>   z2%(py2)s
{%(py2)s = %(py0)s.call_count
} == %(py5)smutation_runnerrB   r   rf   assert %(py7)srd   )mkdirrx   r   r   r   rP   rQ   
subprocessrO   r   digestry   rz   archive_prestater   r   r   r   r   r   r   r   
call_countrT   )rJ   rU   r   r   r   rowsr   rV   r!   rg   @py_assert8@py_assert10@py_format11rY   ri   r$   s                   r'   Gtest_archive_write_failure_removes_pending_and_runs_no_mutation_commandr   `   s    "GMMO,,\:7J9NW\]D~6U'VWO))5/B		7DWE[=\,]^%qFMM,<WaghiD	w&<	=268BT&UXhWikoqsuwx 
>!!3E3!E)3)113133333333333333333!333E333133333333333!!<N<!N2<2::<:<<<<<<<<<<<<<<<<<!<<<N<<<:<<<<<<<<<<<%%**%****%******?***?***%**********	 
>	=s   !N%%N/c                t   t         j                  dfd}| dz  }|j                  t        j                   d|       t        j	                  |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                  |      t        j                  |      d	z  }d
d|iz  }	t        t        j                  |	            d x}x}x}}| dz  }
t        j	                  |
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                  |      t        j                  |      d	z  }d
d|iz  }	t        t        j                  |	            d x}x}x}}y )Nc                     | |d d       S )N   rr   )r6   r7   r:   s     r'   r;   zOtest_regression_v3_truncates_partial_write_while_v4_writes_all.<locals>.partialw   s    "c"1g&&r)   v3r<   s   abcdefghs   abcr>   rb   
old_targetrc   r   r   v4
new_targetrK   )rO   r<   rP   	V3_MODULErR   rS   r   rT   r   r   r   r   r   r   rQ   )rJ   rU   r;   r   r   rV   rg   r!   r$   r%   r   r:   s              @r'   >test_regression_v3_truncates_partial_write_while_v4_writes_allr   r   si    J' DJ	gw7Z-  , ",f,"f,,,,"f,,,,,,:,,,:,,, ,,,",,,f,,,,,,,DJ
MM*k*  1 "1k1"k1111"k111111:111:111 111"111k1111111r)   c                   t        t        d            }| j                  t        j                  d|       t        j                  t        j                  d      5  t        j                  t               dddii       d 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}}y # 1 sw Y   xY w)Nr   r   r   zforbids mutation replayrv   completed_cleanupstatus%PASS_VERIFIED_DISABLED_ARCHIVED_CLEANr   r>   r   r   r   r   rd   )r   r   rP   rQ   r   ry   rz   r{   executer   r   r   rT   r   r   r   r   r   )rU   r   r   rY   rV   ri   r$   s          r'   9test_completed_cleanup_blocks_execute_before_any_mutationr      s    ~6U'VWO))5/B	v**2K	L(+>Kr@s*tu 
M%%**%****%******?***?***%********** 
M	Ls   #EEc                    t        j                  t        dz  j                               } | d   }| d   d   }d}||k(  }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }d	d
|iz  }t        t	        j                  |            d x}x}}| d   d   }d}||k(  }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }d	d
|iz  }t        t	        j                  |            d x}x}}|d   }d}||k(  }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }d	d
|iz  }t        t	        j                  |            d x}x}}t        j                  }d}t        |z  }	|	j                  }
 |
       } ||      }|j                  } |       }|d   }||k(  }|svt	        j
                  d|fd||f      dt        j                         v st	        j                   t              rt	        j                  t              ndt	        j                  |      dt        j                         v st	        j                   t              rt	        j                  t              ndt	        j                  |      t	        j                  |
      t	        j                  |      t	        j                  |      t	        j                  |      t	        j                  |      t	        j                  |      d
z  }dd|iz  }t        t	        j                  |            d x}x}x}	x}
x}x}x}x}x}}t        j                  }d}t        |z  }	|	j                  }
 |
       } ||      }|j                  } |       }|d   }||k(  }|svt	        j
                  d|fd||f      dt        j                         v st	        j                   t              rt	        j                  t              ndt	        j                  |      dt        j                         v st	        j                   t              rt	        j                  t              ndt	        j                  |      t	        j                  |
      t	        j                  |      t	        j                  |      t	        j                  |      t	        j                  |      t	        j                  |      d
z  }dd|iz  }t        t	        j                  |            d x}x}x}	x}
x}x}x}x}x}}t        j                  }d}t        |z  }	|	j                  }
 |
       } ||      }|j                  } |       }|d   }||k(  }|svt	        j
                  d|fd||f      dt        j                         v st	        j                   t              rt	        j                  t              ndt	        j                  |      dt        j                         v st	        j                   t              rt	        j                  t              ndt	        j                  |      t	        j                  |
      t	        j                  |      t	        j                  |      t	        j                  |      t	        j                  |      t	        j                  |      d
z  }dd|iz  }t        t	        j                  |            d x}x}x}	x}
x}x}x}x}x}}y )Nzschema-contract-v5.jsonr   r   candidate_digest@4a6c7ee54cf9526a30de8bb576c1d71b411938beba33a04914738f6e1b6ed1cbr>   z%(py1)s == %(py4)srH   r
   assert %(py6)sr   lifecycle_seal_sha256@50e7556e58a876d8136fbfb2023ede8bcb46ac816d97d4b85e1d0559f463d008archive_root_sha256@9f5d72840b4cc1fcb57720a61ebc53529fa00202d9201615e4ebdbb3e047a635z	SEAL.jsonv3_seal_sha256)z%(py16)s
{%(py16)s = %(py14)s
{%(py14)s = %(py12)s
{%(py12)s = %(py2)s
{%(py2)s = %(py0)s.sha256
}(%(py10)s
{%(py10)s = %(py8)s
{%(py8)s = (%(py3)s / %(py5)s).read_bytes
}()
})
}.hexdigest
}()
} == %(py19)shashlibV3)
rB   r   rI   rf   rD   py10py12py14py16py19zassert %(py21)spy21zinventory.jsonv3_inventory_sha256r+   v3_controller_sha256)jsonloadsHERE	read_textr   rT   r   r   r   r   r   r   rS   	hexdigestr   r   r   )contract	completedr    rV   rX   @py_format5r#   r   rY   rg   @py_assert7@py_assert9@py_assert11@py_assert13@py_assert15@py_assert18@py_assert17@py_format20@py_format22s                      r'   @test_successor_bindings_are_exact_and_predecessors_are_immutabler      s   zz4";;FFHIH,-IJ 23y7yy37yyyyy37yyyy3yyy7yyyyyyyyJ 78~<~~8<~~~~~8<~~~~8~~~<~~~~~~~~*+q/qq+/qqqqq+/qqqq+qqq/qqqqqqqq>>ee2+e+77e79e>9:e:DDeDFe)TdJeeFJeeeeeFJeeeeeee7eee7eee>eeeeee2eee2eeeeee7eee9eee:eeeDeeeFeeeJeeeeeeeeee>>o 0o2 00o0<<o<>o>>?o?IIoIKoyYnOooKOoooooKOooooooo7ooo7ooo>oooooo2ooo2ooo 0ooo<ooo>ooo?oooIoooKoooOoooooooooo>>w 7w2 77w7CCwCEw>EFwFPPwPRwV_`vVwwRVwwwwwRVwwwwwww7www7www>wwwwww2www2www 7wwwCwwwEwwwFwwwPwwwRwwwVwwwwwwwwwwr)   c                    t         dz  j                         } | | j                  d      d  }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                  }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}
}	y )Nr+   zdef atomic(z	os.write()not in)z%(py1)s not in %(py3)soutside_helper)rH   rI   re   rf   zwrite_all(fd, raw)in)z%(py1)s in %(py3)sr]   r>   )zK%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.count
}(%(py4)s)
} == %(py9)ssource)rB   r   r
   r   r   zassert %(py11)spy11)r   r   indexr   rT   r   r   r   r   r   r   count)r   r   r    rX   rh   ri   r   rV   r!   r   r   r%   @py_format12s                r'   :test_every_atomic_payload_and_receipt_write_uses_write_allr      sy   ,,779FFLL79:N,;n,,,,;n,,,;,,,,,,n,,,n,,,,,,,1>1111>111111111>111>1111111<<++<&+!+&!++++&!++++++6+++6+++<++++++&+++!++++++++r)   r]   
   d   )ppidsessionstartc                   dt        |      dt        |      gdgdz  z   t        |      gz   }|  ddj                  |       dj                         S )NS100   z (test process)  
)strjoinencode)pidr   r   r   fieldss        r'   	proc_statr      sU    3t9dCL1SEBJ>#e*MFU"388F#3"4B7>>@@r)   r   r   c                   | t        |      z  }|j                          |dz  j                  t        |||             |dz  j                  dj	                  d |D              dz          y )Nstatr   cmdline    c              3  F   K   | ]  }t        j                  |        y wrq   )rO   fsencode).0args     r'   	<genexpr>zadd_process.<locals>.<genexpr>   s     0RTcS1ATs   !)r   r   rx   r   r   )rootr   argvr   r   processs         r'   add_processr     s\    SXoGMMOv""9SD#IJy%%ejj0RT0R&RUZ&Z[r)   c                   t        | dddt        j                  gd       t        j                  t	        d      t        j                  | d      }|d	   d
   }|d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|d   }ddt        j                  g}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}d}|d   }||v }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Ne   
journalctl-fui	  )r   /target/profile  	proc_rootself_pid
violationsr   r   r>   r   r   r   r   start_time_ticksr   target_journal_followerreasonsr   )z%(py1)s in %(py4)s
r  rQ   SERVICE_NAMEenumerate_processesr   r   rT   r   r   r   )rJ   result	violationr    rV   rX   r   r#   s           r'   >test_journalctl_fu_follower_is_rejected_with_identity_evidencer     s   #eV5H5HIQTU''->(?ATAT`hsv'wF|$Q'IU"s"s""""s""""""s"""""""'(/C/(C////(C///(///C///////YML%9L9L#MM#MMMMM#MMMMMMM#MMMMMMMM$<	)(<<$(<<<<<$(<<<<$<<<(<<<<<<<<r)   c           
        t        d      }t        | dddt        |dz        g       t        j	                  |t        j
                  | d      }|d   d	   d
   }g d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nr  f   inotifywaitz-mzlive-v64-events.jsonlr  r	  r  r   r  )exact_profile_path_referenceobserver_script_or_eventtarget_inotify_watcherr>   r   r   r   r   r   r  r   rQ   r  r  r   rT   r   r   r   rJ   r   r  r    rV   rX   r   r#   s           r'   (test_target_inotify_observer_is_rejectedr     s    $%G#tSCZ9Z5[\]''1D1DPXcf'gF,"9-  2 - 2   	- 2   	 .   	2     	  r)   c                   t        d      }t        | ddddt        |dz        g       t        j	                  |t        j
                  | d      }|d	   d
   d   }dg}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nr  g   pythonz
gateway.pyz--statezstate.dbr  r	  r  r   r  r  r>   r   r   r   r   r  r  s           r'   4test_profile_process_without_hermes_home_is_rejectedr"     s    $%G#,	3wQ[G[C\]^''1D1DPXcf'gF,"9-Q2P1QQ-1QQQQQ-1QQQQ-QQQ1QQQQQQQQr)   c                   t        | dg d       t        j                  t        d      t        j                  | d      }|d   }g }||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}|d   d   d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}y )Nh   )r  z--userr  zother.servicer  r  r	  r  r>   r   r   r   r   same_uid_processesr   classification	unrelated)
r  rQ   r  r   r  r   rT   r   r   r   rJ   r  r    rV   rX   r   r#   s          r'   *test_unrelated_service_follower_is_allowedr)     s    #OP''->(?ATAT`hsv'wF,%2%2%%%%2%%%%%%2%%%%%%%&'*+;<KK<KKKK<KKK<KKKKKKKKKKr)   c                   t        | dddt        j                  dg       t        j                  t	        d      t        j                  | d      }|d   }g }||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}|d   d   d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}y )Ni   r  r  r  r	  r  r>   r   r   r   r   r%  r   r&  self_excludedr  r(  s          r'   ?test_self_is_excluded_even_when_command_references_every_targetr-     s    #eV5H5HJ[\]''->(?ATAT`hsv'wF,%2%2%%%%2%%%%%%2%%%%%%%&'*+;<OO<OOOO<OOO<OOOOOOOOOOr)   c                   t        d      }t        | dddd| g       t        | dddd	d
t        |      gd       t        j	                  |t        j
                  | d      }|d   }g }||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|d   D cg c]  }|d   	 }}ddg}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y c c}w )Nr  m   bashz-cz.python cleanup_controller.py verify --profile n   r!  r+   verifyz	--profile)r   r	  r  r>   r   r   r   r   r%  r&  verifier_command_excludedr,  r  )	rJ   r   r  r    rV   rX   r   r#   rows	            r'   6test_parent_shell_running_verifier_command_is_excludedr5     sl   $%G#0^_f^g.hij#*A8[Z]^eZfgnqr''1D1DPXcf'gF,%2%2%%%%2%%%%%%2%%%%%%%-34H-IJ-IcC !-I J#O J O   J O    K   O       Js   *E6c                  	
 t        | dddg       t        j                  
d	d	
fd}|j                  t        d|       t        j	                  t        d      t        j                  | d	      }|d
   }g }||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|d   }dddg}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nj   sleep1r   c                6    dz  dk(  rt          | |      S )Nr]   r3   )FileNotFoundError)proc_fdr   r9   	real_reads     r'   	disappearz;test_disappeared_pid_is_captured_as_race.<locals>.disappear   s&    
A:##$''r)   _read_proc_filer  r  r	  r%  r>   r   r   r   r   process_racesdisappeared_during_read)r   race)r<  rL   r   r   rN   bytes)r  rQ   r?  rP   r  r   r  r   rT   r   r   r   )rJ   rU   r>  r  r    rV   rX   r   r#   r9   r=  s            @@r'   (test_disappeared_pid_is_captured_as_racerD     s   #~.&&IE(  19=''->(?ATAT`hsv'wF&'-2-'2----'2---'---2-------/"Ws<U'V&WW"&WWWWW"&WWWW"WWW&WWWWWWWWr)   )filenamer7   message)r   s   not a proc stat
zmalformed /proc/107/stat)r   s   unterminatedzmalformed /proc/107/cmdlinec                $   t        | dddg       | dz  |z  j                  |       t        j                  t        j
                  |      5  t        j                  t        d      t        j                  | d       d d d        y # 1 sw Y   y xY w)	Nk   r8  r9  107rv   r  r  r	  )	r  rx   ry   rz   rQ   r{   r  r   r  )rJ   rE  r7   rF  s       r'   0test_malformed_same_uid_proc_entries_fail_closedrJ     sq     #~. --c2	v**'	:""4(9#:F<O<O[cnq"r 
;	:	:s   1BBc                   t        | dg d       t        j                  t        d      t        j                  |       }|d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}|d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}|d   }g }||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}y )Nl   )r  r  zunrelated.servicer  )r
  r   PASSr>   r   r   r   r   passesr3   target_processes)
r  rQ   process_poststater   r  r   rT   r   r   r   )rJ   proofr    rV   rX   r   r#   s          r'   6test_two_pass_poststate_reports_no_background_sessionsrR    s"   #IJ$$T*;%<f>Q>Q]e$fE?$f$?f$$$$?f$$$?$$$f$$$$$$$?a?a?a?a#$**$****$***$**********r)   )r   r   r   r   )r   r   rN   z
list[Path])rJ   r   rU   pytest.MonkeyPatchrN   None)rJ   r   rU   rS  rk   rL   rN   rT  )rU   rS  rN   rT  )rN   rT  )
r   rL   r   rL   r   rL   r   rL   rN   rC  )r   r   r   rL   r   z	list[str]r   rL   r   rL   rN   rT  )rJ   r   rN   rT  )
rJ   r   rE  r   r7   rC  rF  r   rN   rT  )2
__future__r   builtinsr   _pytest.assertion.rewrite	assertionrewriter   r   importlib.utilr   r   rO   pathlibr   typesr   unittest.mockr   ry   __file__parentr   r   r(   rQ   r   r0   rZ   rj   markparametrizer|   r   r   r   r   r   r   r   r  r  r  r"  r)  r-  r5  rD  rJ  rR  rr   r)   r'   <module>rb     s   "      	  !  H~	[[JJ 
lD#::	;("/F*FG	0($(& &78	(	(!3	(@C	(		( 9	(
(++!3+	+$22!32	2"+x, ()# A HKXY \=RLP	X$ "BCss!s(-s8;s	ss+r)   