
    Uj&                        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mZmZmZmZmZmZmZmZmZmZmZmZ ddlmZmZ dZdZd Zd	 Zd
 Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,y)uk  tests.regression.test_ci_watch_handoff_audit — task-2642.

회장 verbatim §9 (정책 spec) ANU 8 완료 보고 항목 박제 회귀:
  watcher 주체 / schedule_id / terminal state / 자동수렴 내역 / CI 상태 / merge-ready / callback 수신.

Layer A / NO-CRON: subprocess / cokacdir / merge / cron 호출 0.
audit 파일은 pytest tmp_path 로 격리.
    )annotationsN)
ALL_EVENTSALLOWED_AUDIT_KEYSAUDIT_REL_PATHAUDIT_SCHEMA
AuditErrorCiWatchHandoffAuditEVENT_AUTO_REMEDIATEEVENT_CALLBACK_FIREDEVENT_HANDOFF_RECEIVEDEVENT_OWNER_NUDGEEVENT_POLL_TICKEVENT_TERMINAL_REACHED)TERMINAL_CHAIR_REQUIREDTERMINAL_MERGE_READY(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbc                    d} t         | k(  }|st        j                  d|fdt         | f      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}} d} t        | k(  }|st        j                  d|fdt        | f      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}} y )
Nzutils.ci_watch_handoff_audit.v1==)z%(py0)s == %(py3)sr   )py0py3assert %(py5)spy5z1memory/events/ci-watch-handoff-runner-audit.jsonlr   )
r   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationr   )@py_assert2@py_assert1@py_format4@py_format6s       C/home/jay/workspace/tests/regression/test_ci_watch_handoff_audit.pytest_audit_schema_and_rel_pathr(   +   s    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<PP>PPPPP>PPPPPPP>PPP>PPPPPPPPPPP    c                    t         t        t        t        t        t
        h} t        |       }t        |k(  }|st        j                  d|fdt        |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} }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 )Nr   z0%(py0)s == %(py6)s
{%(py6)s = %(py2)s(%(py4)s)
}r   	frozensetr   py2py4py6assert %(py8)spy8   z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)slenr   py1r   r0   )r   r   r
   r   r   r   r,   r   r   r   r   r   r   r    r!   r"   r5   )@py_assert3@py_assert5r$   @py_format7@py_format9r#   @py_assert4s          r'   test_event_enum_exact_6r=   0   s    # " 	
		
	 	: 	 	 	 	 	: 	 	 	 	 	   	 	   	 	 	 	  # 	 	  # 	 	 	
	 	 	 	 	 	 	 	 	 z?a?a?a33zz?ar)   c           
     J	   t        |       }|j                  ddt        ddt        dd       |j                  j                  d      j                         j                         }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#        j$                  |d         }|d   }	|	t&        k(  }|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        k(  }|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   }	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 }	|	|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}	}y )$Nz	task-2642   zdev6-cron-watcherz	sched-abczPR #146 handoff received)task_id	pr_numberhead_shawatcher_ownerwatcher_schedule_ideventreasonutf-8encoding   r   r4   r5   linesr6   r1   r2   r   schemaz%(py1)s == %(py3)sr   r7   r   r   r   rE   r   rC   z%(py1)s == %(py4)sr7   r/   assert %(py6)sr0   rD   ts_utc)in)z%(py1)s in %(py3)srec)r	   appendHEAD_Ar   path	read_textstrip
splitlinesr5   r   r   r   r   r   r    r!   r"   jsonloadsr   )tmp_pathauditrK   r#   r9   r<   r:   r;   rT   @py_assert0r%   r&   r8   @py_format5s                 r'   *test_append_handoff_received_writes_recordra   >   s   )E	LL"0#.+0	

 JJ  ' 288:EEGEu::?:33uu:
**U1X
Cx=(=L((((=L(((=((((((L(((L(((((((w<1<111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6#66666#6666666#66666666$%44%4444%444%44444444448s?8s8ssr)   c           	     H   t        |       }|j                  dddt        ddd       t        j                  |j
                  j                  d      j                               }|d	   }d
}d}d}||z  }||z   }||k(  }	|	st        j                  d|	fd||f      t        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }
dd|
iz  }t        t        j                  |            d x}x}	x}x}x}x}}y )Nr?   (ABCDEF0000000000000000000000000000000000dev6PASSrJ   )rA   rB   rC   rE   	ci_statusloop_iterationsrG   rH   rB   abcdef0"   r   )z*%(py1)s == (%(py4)s + (%(py6)s * %(py8)s)))r7   r/   r0   r2   zassert %(py12)spy12)r	   rU   r   r[   r\   rW   rX   rY   r   r   r    r!   r"   )r]   r^   rT   r_   r8   r9   @py_assert7@py_assert9@py_assert10r#   @py_format11@py_format13s               r'   (test_append_normalizes_head_sha_to_lowerrq   U   s    )E	LL+#$ 	
	 **UZZ))7);AAC
DCz?1h11r1r1h11?11111?1111?111h111111r11111111r)   c           	         t        |       }t        j                  t        d      5  |j	                  dt
        dt        dd       d d d        y # 1 sw Y   y xY w)Nterminal_state must be one ofmatchr?   rd   should failrA   rB   rC   rE   rF   r	   pytestraisesr   rU   rV   r   r]   r^   s     r'   4test_append_terminal_reached_requires_terminal_stater|   h   sP    )E	z)H	I 

 "!'/'		


 

 

s    AAc           
         t        |       }t        j                  t        d      5  |j	                  dt
        dt        ddd       d d d        y # 1 sw Y   y xY w)Nrs   rt   r?   rd      rv   )rA   rB   rC   rE   callback_prompt_bytesrF   )r	   ry   rz   r   rU   rV   r   r{   s     r'   2test_append_callback_fired_requires_terminal_stater   w   sS    )E	z)H	I 

 "!'-),'		


 

 

   !AAc           	     N   t        |       }|j                  dt        dt        t        dd       t        j                  |j                  j                  d      j                               }|d   }|t        k(  }|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 )Nr?   rd   MERGE_READYrA   rB   rC   rE   terminal_staterF   rG   rH   r   r   rM   r   rN   r   r   )r	   rU   rV   r   r   r[   r\   rW   rX   rY   r   r   r    r   r   r   r!   r"   )r]   r^   rT   r_   r#   r%   r&   s          r'   0test_append_terminal_reached_with_valid_state_okr      s    )E	LL#+2#	
	 **UZZ))7);AAC
DC 8 $88888 $8888 888888$8888$88888888r)   c           
         t        |       }t        j                  t        d      5  |j	                  dt
        dt        ddd       d d d        y # 1 sw Y   y xY w)Nrs   rt   r?   rd   BOGUSrv   r   rx   r{   s     r'   8test_append_terminal_reached_with_invalid_state_rejectedr      sS    )E	z)H	I 

 "!'/")'		


 

 

r   c           
         t        |       }t        j                  t        d      5  |j	                  dt
        dt        ddd       d d d        y # 1 sw Y   y xY w)Nzdisallowed audit keysrt   r?   rd   re   value)rA   rB   rC   rE   rf   unexpected_extra_keyr	   ry   rz   r   rU   rV   r   r{   s     r'   #test_append_rejects_disallowed_keysr      sS    )E	z)@	A 

 "!'(#(/		


 

 

r   c           
         t        |       }t        j                  t              5  |j	                  dt
        dt        ddd       d d d        y # 1 sw Y   y xY w)Nr?   rd   re   (ghp_xghp_xghp_xghp_xghp_xghp_xghp_xghp_x)rA   rB   rC   rE   rf   tokenr   r{   s     r'   &test_append_rejects_token_key_sentinelr      sP    )E	z	" 
 "!'(#$
	

 
 
s   !AAc           
         t        |       }t        j                  t        d      5  |j	                  dt
        dt        ddd       d d d        y # 1 sw Y   y xY w)Nztoken sentinelrt   r?   rd   re   zBearer ghp_xxx)rA   rB   rC   rE   rf   rF   r   r{   s     r'   )test_append_rejects_bearer_token_in_valuer      sS    )E	z)9	: 

 "!'(#/		


 

 

r   c           	         t        |       }t        j                  t        d      5  |j	                  dt
        dddd       d d d        y # 1 sw Y   y xY w)Nzevent must be one ofrt   r?   rd   NOT_AN_EVENTrv   rw   )r	   ry   rz   r   rU   rV   r{   s     r'   !test_append_rejects_unknown_eventr      sP    )E	z)?	@ 	
 "!'''	
	
 	
 	
s   AAc                   t        |       }t        t        fD ]6  }dt        d|d}|t        k(  r
d|d<   d|d<   d|d	<   |j	                  |       8 |j	                  d
t
        dt        dd       |j                  d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                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}}|D 
ch c]  }
|
d   	 }}
t        t        h}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  d
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                  |      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 )Nr?   rd   )rA   rB   rC   rE   PENDINGrf   rJ   rg   xrF   i  othernoiserw   )rA   head   r   r4   r5   rowsr6   r1   r2   rE   rO   rP   rQ   r0   
rows_other)r	   r   r   rV   rU   HEAD_Brecords_for_pr_headr5   r   r   r   r   r   r    r!   r"   )r]   r^   evrT   r   r#   r9   r<   r:   r;   rr_   r8   r`   r   s                  r'   ,test_records_for_pr_head_filters_pr_and_headr      s9   )E%7 #	
  (C%&C!"HS 
LL$+	
 $$s$@Dt99>933tt9 $%1AgJ%R%*@/)RR%)RRRRR%)RRRR%RRR)RRRRRRRR**Sv*FJz?a?a?a33zz?a &s   Mc                   | dz  dz  }t        |      }|j                  dt        dt        dd       |j                  }|j
                  } |       }|sddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      d	z  }t        t        j                  |            d x}x}}|j                  }|j                  }|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}}y )NnesteddeeprJ   rd   r   rw   z[assert %(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.path
}.exists
}()
}r^   r-   zwassert %(py8)s
{%(py8)s = %(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.path
}.parent
}.is_dir
}()
})r   r.   r/   r0   r2   )r	   rU   rV   r   rW   existsr   r   r   r   r    r!   r"   parentis_dir)	r]   r   r^   r$   r8   r9   r:   rl   r;   s	            r'   #test_audit_creates_parent_directoryr     s9    6)F'E	LL#+	
 :::55:::%:%##%#%%%%%%%%5%%%5%%%:%%%%%%#%%%%%%%%%%r)   c                 J   h d} t        |       }t        |k(  }|st        j                  d|fdt        |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 )	N>   rE   rF   rL   rR   r@   rB   rf   rA   rC   r   rg   router_final_staterD   r   auto_remediation_attemptsr   r+   r   r,   r-   r1   r2   )
r,   r   r   r   r   r   r   r    r!   r"   )r8   r9   r$   r:   r;   s        r'   &test_allowed_keys_match_documented_setr     s    	
	
"  "   $ % "  $ % $ %   $ %   $ % $ % "+  $ % "+  $ #	
 $ %"    $ %  r)   c           
     P   t        |       }|j                  dt        dt        t        ddd       t        j                  |j                  j                  d      j                               }|d   }|t        k(  }|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   }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?   rd   r~   zchair callback)rA   rB   rC   rE   r   r   rF   rG   rH   r   r   rM   r   rN   r   r   r   rO   rP   rQ   r0   )r	   rU   rV   r   r   r[   r\   rW   rX   rY   r   r   r    r   r   r   r!   r"   )
r]   r^   rT   r_   r#   r%   r&   r8   r`   r:   s
             r'   #test_append_chair_required_terminalr   3  s   )E	LL#)5%(&	

 **UZZ))7);AAC
DC ; $;;;;; $;;;; ;;;;;;$;;;;$;;;;;;;;&'.3.'3....'3...'...3.......r)   )-__doc__
__future__r   builtinsr   _pytest.assertion.rewrite	assertionrewriter   r[   ry   utils.ci_watch_handoff_auditr   r   r   r   r   r	   r
   r   r   r   r   r   utils.ci_watch_handoff_schemar   r   rV   r   r(   r=   ra   rq   r|   r   r   r   r   r   r   r   r   r   r   r    r)   r'   <module>r      s    #        
	Q
 .2&

9 
$

 
&
" D& ,/r)   