
     jD                       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mZ ddlmZ ddlZ ee      j%                         j&                  d   Z ee      ej,                  v r!ej,                  j/                   ee             ej,                  j1                  d ee             ddlmZmZmZ ddlmZmZm Z m!Z!m"Z"m#Z#  G d	 d
      Z$ddddddd	 	 	 	 	 d!dZ%d"d#dZ&d Z'd Z(d Z)d Z*d Z+d Z,d Z-d Z.d Z/d Z0ddl1Z1 ee1jd                  jg                  d eejh                  jh                                    dz  dz  Z5ejl                  jo                  dg d      d        Z8d  Z9y)$u6  tests/regression/test_post_merge_smoke_runner_2512.py — task-2512 회귀 12건.

회장 §1~12 매핑:
  1. PASS smoke
  2. FAIL smoke + Critical #7 packet
  3. TIMEOUT smoke + Critical #7 packet
  4. missing smoke + dry_run=True → SKIPPED
  5. missing smoke + dry_run=False → BLOCKED + escalation
  6. stdout head/tail capture
  7. stderr size cap
  8. JSON serialization round-trip
  9. Critical #7 enum 정확 매칭
 10. merge_commit propagation
 11. ★ replay fixtures (task-2506/2507/2509/2511)
 12. merge_queue continuation 신호 (allow_continuation)
    )annotationsN)Path)Optional   )CriticalEscalationTypeEscalationPacketSmokeResult)DEFAULT_OUTPUT_CAP_BYTESREPLAY_FIXTURESSMOKE_COMMAND_REGISTRYSmokeStatusbuild_smoke_failed_packetrun_post_merge_smokec                      e Zd ZdddZy)_FakeCompletedc                .    || _         || _        || _        y N
returncodestdoutstderr)selfr   r   r   s       I/home/jay/workspace/tests/regression/test_post_merge_smoke_runner_2512.py__init__z_FakeCompleted.__init__4   s    $    N) r   )r   intr   strr   r   )__name__
__module____qualname__r    r   r   r   r   3   s    r   r   r   F)r   r   r   raise_timeout
fetch_headfetch_returncodec                (     d fd	}|S )uM   Args 첫 토큰 기준으로 git fetch / git rev-parse / smoke 분기 처리.c                    ~| st        d      S | d d ddgk(  rt        dd      S | d d ddgk(  rt        xs dd      S r,t        j                  d	j                  |       |xs d
      t              S )Nr   r   gitfetchr   )r   r   z	rev-parse(0000000000000000000000000000000000000000 )cmdtimeoutoutputr   )r   
subprocessTimeoutExpiredjoin)	argscwdr-   r$   r%   r#   r   r   r   s	      r   _runzmake_fake_runner.<locals>._run>   s    !!$$8w''!"22bII8{++!"2J<R(\^__++ST4:6K KjGGr   )NNr"   )r   r   r   r#   r$   r%   r4   s   `````` r   make_fake_runnerr5   :   s    H H Kr   task_idc                    d}|,dj                  d |j                         D              }d| d}d| d| d}| | dz  }|j                  |d	
       |S )uR   task md 파일 생성. smoke_command 주어지면 yaml block에 list로 직렬화.r   
c              3  (   K   | ]
  }d | d  yw)z  - ""Nr"   ).0toks     r   	<genexpr>z!_write_task_md.<locals>.<genexpr>V   s     JSE#a.Js   z
smoke_command:
z# u    — fixture for tests

```yaml
expected_files:
  - "utils/post_merge_smoke_runner.py"

risk_area: "post_merge_smoke / fixture"
parallel_policy: "limited_parallel"
merge_queue_position: 9
stale_recheck_required: true
cherry_pick_allowed: falsez
```
.mdutf-8)encoding)r1   split
write_text)tmp_pathr6   smoke_command
yaml_smokeitemsmdps          r   _write_task_mdrI   R   s~    J 		JM4G4G4IJJ)%3
y 
 &, '
B 	gYc?"ALLgL&Hr   c                   t        | dd      }t        dddd      }t        |dd	|d
d      }|j                  }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                  t              rt        j                  t              ndt        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|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                  |      t        j                  |	      dz  }
dd|
iz  }t        t        j                  |            d x}x}x}}	|j                  }|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}}	|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                  |      t        j                  |	      dz  }
dd|
iz  }t        t        j                  |            d x}x}x}}	|j$                  }d}||u }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }
t        t        j                  |
            d x}x}}|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(                  }d d!g}||k(  }|st        j                  d|fd"||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }
t        t        j                  |
            d x}x}}y )#Nz	task-9001	pytest -qrD   r   ok
r   (abc12345abc12345abc12345abc12345abc12345)r   r   r   r$   F*   T	task_filemerge_commitdry_runrunner	pr_numberskip_stale_check==zH%(py2)s
{%(py2)s = %(py0)s.status
} == %(py6)s
{%(py6)s = %(py4)s.PASS
}runr   py0py2py4py6assert %(py8)spy8iszP%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.smoke_result
}.passed
} is %(py7)sr\   r]   r^   py7assert %(py9)spy9zS%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.smoke_result
}.exit_code
} == %(py7)s)zX%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.smoke_result
}.failure_reason
} is %(py7)sz:%(py2)s
{%(py2)s = %(py0)s.allow_continuation
} is %(py5)sr\   r]   py5assert %(py7)srf   z2%(py2)s
{%(py2)s = %(py0)s.escalation
} is %(py5)spytest-q)z5%(py2)s
{%(py2)s = %(py0)s.smoke_command
} == %(py5)s)rI   r5   r   statusr   PASS
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationsmoke_resultpassed	exit_codefailure_reasonallow_continuation
escalationrD   )rC   task_mdrT   rZ   @py_assert1@py_assert5@py_assert3@py_format7@py_format9@py_assert6@py_format8@py_format10@py_assert4@py_format6s                 r   test_01_pass_smoker   n   s   X{+NG6")79F
dC ::)))):))))):)))))))3)))3))):))))))))))))))))))))*""*d*"d****"d******3***3******"***d********%%**%****%******3***3******%**********2**2d2*d2222*d22222232223222222*222d2222222!!)T)!T))))!T))))))3)))3)))!)))T)))))))>>!T!>T!!!!>T!!!!!!3!!!3!!!>!!!T!!!!!!!04 00 00000 000000030003000000 00000000r   c                   t        | dd      }t        ddd      }t        |dd	|d
d      }|j                  }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                  t              rt        j                  t              ndt        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|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                  |      t        j                  |	      dz  }
dd|
iz  }t        t        j                  |            d x}x}x}}	|j                  }|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}}	|j                  }|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}}	|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&                  }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&                  }|j(                  }t*        j,                  }||k(  }|s
t        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                  t*              rt        j                  t*              nd#t        j                  |      d$z  }d%d&|iz  }t        t        j                  |            d x}x}x}}y )'Nz	task-9002rK   rL      zfailed test
z
error log
r   (bad0000000000000000000000000000000000000Fc   TrP   rW   zH%(py2)s
{%(py2)s = %(py0)s.status
} == %(py6)s
{%(py6)s = %(py4)s.FAIL
}rZ   r   r[   r`   ra   rb   rd   re   rg   rh   ri   EXIT_1zX%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.smoke_result
}.failure_reason
} == %(py7)srj   rk   rm   rf   is notz6%(py2)s
{%(py2)s = %(py0)s.escalation
} is not %(py5)sz%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.escalation
}.escalation_type
} == %(py8)s
{%(py8)s = %(py6)s.POST_MERGE_SMOKE_FAILED
}r   r\   r]   r^   r_   ra   assert %(py10)spy10)rI   r5   r   rq   r   FAILrs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   escalation_typer   POST_MERGE_SMOKE_FAILEDrC   r   rT   rZ   r   r   r   r   r   r   r   r   r   r   @py_assert7@py_format11s                   r   ,test_02_fail_smoke_creates_critical_7_packetr      s   X{+NG?=YF
(8%dC ::)))):))))):)))))))3)))3))):))))))))))))))))))))+""+e+"e++++"e++++++3+++3++++++"+++e+++++++*%%**%****%******3***3******%**********6**6h6*h6666*h66666636663666666*666h6666666!!*U*!U****!U******3***3***!***U*******>>%%>%%%%>%%%%%%3%%%3%%%>%%%%%%%%%%>>[>))[-C-[-[[)-[[[[[)-[[[[[[[3[[[3[[[>[[[)[[[[[[-C[[[-C[[[-[[[[[[[[r   c                
   t        | dd      }t        ddd      }t        |dd	|d
d      }|j                  }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                  t              rt        j                  t              ndt        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }|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}}	|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                   }|j"                  }t$        j&                  }||k(  }|s
t        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                  t$              rt        j                  t$              ndt        j                  |      dz  }d d!|iz  }t        t        j                  |            d x}x}x}}|j(                  }d	}||u }|st        j                  d"|fd#||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }
t        t        j                  |
            d x}x}}y )$Nz	task-9003rK   rL   Tzpartial
r   )r#   r   r   (t100000000000000000000000000000000000000Fd   rP   rW   )zK%(py2)s
{%(py2)s = %(py0)s.status
} == %(py6)s
{%(py6)s = %(py4)s.TIMEOUT
}rZ   r   r[   r`   ra   TIMEOUTr   re   rg   rh   r   r   rk   rm   rf   r   r   r   r   r   rb   rj   )rI   r5   r   rq   r   r   rs   rt   ru   rv   rw   rx   ry   rz   r{   r~   r   r   r   r   r   r   s                   r   /test_03_timeout_smoke_creates_critical_7_packetr      s   X{+NGDRPF
tC ::,,,,:,,,,,:,,,,,,,3,,,3,,,:,,,,,,,,,,,,,,,,,,,,7**7i7*i7777*i77777737773777777*777i7777777>>%%>%%%%>%%%%%%3%%%3%%%>%%%%%%%%%%>>[>))[-C-[-[[)-[[[[[)-[[[[[[[3[[[3[[[>[[[)[[[[[[-C[[[-C[[[-[[[[[[[[!!*U*!U****!U******3***3***!***U*******r   c                @   t        | dd       }t        d      }t        |dd|d      }|j                  }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                  t              rt        j                  t              ndt        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d}	||	u }|st        j                  d|fd||	f      d
t        j                         v st        j                  |      rt        j                  |      nd
t        j                  |      t        j                  |	      dz  }
dd|
iz  }t        t        j                  |            d x}x}}	|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                   }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 )Nz	task-9004rL   r   r   (dry0000000000000000000000000000000000000TrQ   rR   rS   rT   rV   rW   )zK%(py2)s
{%(py2)s = %(py0)s.status
} == %(py6)s
{%(py6)s = %(py4)s.SKIPPED
}rZ   r   r[   r`   ra   rb   rj   rk   rm   rf   rn   z5%(py2)s
{%(py2)s = %(py0)s.smoke_command
} is %(py5)s)rI   r5   r   rq   r   SKIPPEDrs   rt   ru   rv   rw   rx   ry   rz   r   r   rD   )rC   r   rT   rZ   r   r   r   r   r   r   r   r   s               r   *test_04_missing_smoke_dry_run_true_skippedr      s   X{$GG+F
(8$C ::,,,,:,,,,,:,,,,,,,3,,,3,,,:,,,,,,,,,,,,,,,,,,,,!!)T)!T))))!T))))))3)))3)))!)))T)))))))>>!T!>T!!!!>T!!!!!!3!!!3!!!>!!!T!!!!!!!$$$$$$$$$$$$3$$$3$$$$$$$$$$$$$r   c                	   t        | dd       }t        d      }t        |dd|d      }|j                  }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                  t              rt        j                  t              ndt        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d}	||	u }|st        j                  d|fd||	f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |	      dz  }
dd|
iz  }t        t        j                  |            d x}x}}	|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                  }|j                   }t"        j$                  }||k(  }|s
t        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                  t"              rt        j                  t"              ndt        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}x}}|j&                  }d }	||	u }|st        j                  d|fd||	f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |	      dz  }
dd|
iz  }t        t        j                  |            d x}x}}	y )Nz	task-9005rL   r   r   (blk0000000000000000000000000000000000000FTr   rW   )zK%(py2)s
{%(py2)s = %(py0)s.status
} == %(py6)s
{%(py6)s = %(py4)s.BLOCKED
}rZ   r   r[   r`   ra   rb   rj   rk   rm   rf   r   r   r   r   r   r   r   r   )rI   r5   r   rq   r   BLOCKEDrs   rt   ru   rv   rw   rx   ry   rz   r   r   r   r   r   rD   )rC   r   rT   rZ   r   r   r   r   r   r   r   r   r   r   s                 r   +test_05_missing_smoke_dry_run_false_blockedr      s   X{$GG+F
(8%C ::,,,,:,,,,,:,,,,,,,3,,,3,,,:,,,,,,,,,,,,,,,,,,,,!!*U*!U****!U******3***3***!***U*******>>%%>%%%%>%%%%%%3%%%3%%%>%%%%%%%%%%>>[>))[-C-[-[[)-[[[[[)-[[[[[[[3[[[3[[[>[[[)[[[[[[-C[[[-C[[[-[[[[[[[[$$$$$$$$$$$$3$$$3$$$$$$$$$$$$$r   c                4
   t        | dd      }ddz  ddz  z   }t        d|d	      }t        |d
d|d      }|j                  }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                  t              rt        j                  t              ndt        j                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}}|j                  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}}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} ||      }t#        |      }d}t$        |z   }||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                  |      t        j                  |      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}x}x}x}}y )'Nz	task-9006rK   rL   z
HEAD_LINE
i  z
TAIL_LINE
r   r   r   (cap0000000000000000000000000000000000000FTr   rW   rY   rZ   r   r[   r`   ra   	HEAD_LINEinz%(py1)s in %(py3)soutpy1py3assert %(py5)srl   	TAIL_LINE	TRUNCATEDr?      <=zx%(py9)s
{%(py9)s = %(py0)s(%(py7)s
{%(py7)s = %(py3)s
{%(py3)s = %(py1)s.encode
}(%(py5)s)
})
} <= (%(py11)s + %(py13)s)lenr
   r\   r   r   rl   rf   rh   py11py13assert %(py16)spy16)rI   r5   r   rq   r   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   stdout_tailencoder   r
   )rC   r   bigrT   rZ   r   r   r   r   r   r   @py_assert0@py_assert2@py_format4r   r   r   @py_assert8@py_assert12@py_assert14@py_assert10@py_format15@py_format17s                          r    test_06_stdout_head_tail_capturer      s   X{+NG4MD$8
9C3rBF
(8%C ::)))):))))):)))))))3)))3))):))))))))))))))))))))



&
&C;#;#;##;#;#;##;#;#;##zzE'Ez'"E3"#E#E'?#'EE#'EEEEE#'EEEEEEE3EEE3EEEEEEsEEEsEEEzEEE'EEE"EEE#EEEEEE'?EEE'?EEE#EEEEEEEEr   c                   t        | dd      }ddz  }t        dd|      }t        |d	d
|d      }|j                  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                  }d}
 ||
      }t        |      }d}t        |z   }||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                  |      t        j                  |      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}x}x}x}}y )Nz	task-9007rK   rL   zERROR_LINE
i'  r   r   r   (err0000000000000000000000000000000000000FTr   
ERROR_LINEr   r   errr   r   rl   r   r?   r   r   r   r   r
   r   r   r   )rI   r5   r   r{   stderr_tailrs   rt   rx   ru   rv   rw   ry   rz   r   r   r
   )rC   r   hugerT   rZ   r   r   r   r   r   r   r   r   r   r   r   r   r   s                     r   test_07_stderr_size_capr      s    X{+NGE!D2dCF
(8%C 


&
&C<3<3<33;#;#;##zzE'Ez'"E3"#E#E'?#'EE#'EEEEE#'EEEEEEE3EEE3EEEEEEsEEEsEEEzEEE'EEE"EEE#EEEEEE'?EEE'?EEE#EEEEEEEEr   c                   t        | dd      }t        dd      }t        |dd|d	d
      }|j                         }t	        j
                  |      }dD ]  }||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dz  }t        j                  d|       dz   d|iz  }	t        t        j                  |	            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
}|
|u }|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}}y )!Nz	task-9008rK   rL   r   rM   r   r   (js00000000000000000000000000000000000000F   TrP   )
rR   r6   rq   r{   duration_msrD   r   r   stalerS   r   )z%(py0)s in %(py2)skeyparsedr\   r]   zmissing key: z
>assert %(py4)sr^   rq   rr   rW   z%(py1)s == %(py4)sr   r^   assert %(py6)sr_   r{   r|   rb   )z%(py1)s is %(py4)scommand)rI   r5   r   to_jsonjsonloadsrs   rt   ru   rv   rw   rx   _format_assertmsgry   rz   )rC   r   rT   rZ   jsr   r   r   @py_format3@py_format5r   r   r   r   s                 r   %test_08_json_serialization_round_tripr      s   X{+NG6:F
dC 
BZZ^F2 4 f}333sf333333s333s333333f333f3333cU33333334 (%v%v%%%%v%%%%%%v%%%%%%%.!(+3t3+t3333+t333+333t3333333.!),;;,;;;;,;;;,;;;;;;;;;;r   c            	     
   t        dddddd      } t        ddd	| t        j                  d
dg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 }|j                  }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                  t              rt        j                  t              ndt        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }|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}|j                  }|j"                  }||v }|st        j                   d|fd ||f      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}}|j$                  }|syd"dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      d#z  }t        t        j                  |            d }|j&                  }|syd$dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      d#z  }t        t        j                  |            d }y )%NrK   Fr   xyr   )r   r|   r}   r   r   r~   z	task-9009(ee00000000000000000000000000000000000000ro   rp   r   )r6   rU   rR   r{   rq   rD   r   z5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}
isinstancepacketr   )r\   r   r]   r^   rW   )zd%(py2)s
{%(py2)s = %(py0)s.escalation_type
} == %(py6)s
{%(py6)s = %(py4)s.POST_MERGE_SMOKE_FAILED
}r   r[   r`   ra   r   )zR%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.escalation_type
}.value
} == %(py7)sre   rg   rh   POST_MERGE_SMOKEr   )zR%(py1)s in %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py3)s.escalation_type
}.value
})r   r   rl   rf   z0assert %(py2)s
{%(py2)s = %(py0)s.safe_options
}r   z6assert %(py2)s
{%(py2)s = %(py0)s.recommended_option
})r	   r   r   r   r   r   ru   rv   rs   rw   rx   ry   rz   r   r   r   rt   valuesafe_optionsrecommended_option)srr   r   r   r   r   r   r   r   r   r   r   r   r   r   s                  r   #test_09_critical_7_enum_exact_matchr     s   	EQS
B
 'q$2$/?	F f.////////:///://////f///f//////.///.//////////!!S%;%S%SS!%SSSSS!%SSSSSSS6SSS6SSS!SSSSSS%;SSS%;SSS%SSSSSSSS!!D!''D+DD'+DDDDD'+DDDDDDD6DDD6DDD!DDD'DDD+DDDDDDDD=!7!7=!7!=!==!=====!================!7===!========66$$$$$$$$$6$$$6$$$$$$$$$$r   c                t   d}t        | dd      }t        ddd      }t        ||d	|d
d      }|j                  }||k(  }|st	        j
                  d|fd||f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      dt        j                         v st	        j                  |      rt	        j                  |      nddz  }dd|iz  }t        t	        j                  |            d x}}|j                  }d }	||	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                  j                  d   }||k(  }|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                  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}}y )!N(deadbeefdeadbeefdeadbeefdeadbeefdeadbeefz	task-9010rK   rL   r   r   boomr   FF   TrP   rW   z4%(py2)s
{%(py2)s = %(py0)s.merge_commit
} == %(py4)srZ   shar\   r]   r^   r   r_   r   r   rk   rm   rf   rR   z%(py1)s == %(py3)sr   r   rl   r6   r   r   )rI   r5   r   rR   rs   rt   ru   rv   rw   rx   ry   rz   r   evidence)rC   r  r   rT   rZ   r   r   r   r   r   r   r   r   r   r   s                  r    test_10_merge_commit_propagationr  !  s   
CX{+NG2fEF
UdC "s""""s""""""3"""3"""""""""s"""s""""""">>%%>%%%%>%%%%%%3%%%3%%%>%%%%%%%%%%>>"">292c99992c9992999999c999c9999999>>""9-<<-<<<<-<<<-<<<<<<<<<<r   WORKSPACE_ROOTmemorytasks)z	task-2506z	task-2507z	task-2509z	task-2511c                   t         |   }|s~t        j                  d|       dz   ddt        j                         v st        j
                  |      rt        j                  |      ndiz  }t        t        j                  |            t        |   }|s~t        j                  d|       dz   ddt        j                         v st        j
                  |      rt        j                  |      ndiz  }t        t        j                  |            |d   dd	t        |d         z
  z  z   }t        | d
z  }|j                         r|nt        | |d      }t        d| d      }t        ||d|d      }	|	j                   }
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
                  t"              rt        j                  t"              ndt        j                  |      dz  }dd|iz  }t        t        j                  |            dx}
x}}|	j(                  }
|
|k(  }|st        j&                  d|fd|
|f      dt        j                         v st        j
                  |	      rt        j                  |	      ndt        j                  |
      dt        j                         v st        j
                  |      rt        j                  |      nddz  }t        j                  d|       dz   d|iz  }t        t        j                  |            dx}
}|	j*                  }
|
|k(  }|st        j&                  d|fd|
|f      dt        j                         v st        j
                  |	      rt        j                  |	      ndt        j                  |
      d t        j                         v st        j
                  |      rt        j                  |      nd dz  }d!d|iz  }t        t        j                  |            dx}
}|	j,                  }
d}|
|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.                  }
|
|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}
}|	j0                  }
d}|
|u }|st        j&                  d"|fd)|
|f      dt        j                         v st        j
                  |	      rt        j                  |	      ndt        j                  |
      t        j                  |      d$z  }d%d&|iz  }t        t        j                  |            dx}
x}}t        d*d+,      }t        ||d|d      }|j                   }
t"        j2                  }|
|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
                  t"              rt        j                  t"              ndt        j                  |      dz  }dd|iz  }t        t        j                  |            dx}
x}}|j*                  }
|
|k(  }|st        j&                  d|fd|
|f      d.t        j                         v st        j
                  |      rt        j                  |      nd.t        j                  |
      d t        j                         v st        j
                  |      rt        j                  |      nd dz  }d!d|iz  }t        t        j                  |            dx}
}|j0                  }
d}|
|u}|st        j&                  d/|fd0|
|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}}|j0                  }
|
j4                  }t6        j8                  }||k(  }|s
t        j&                  d|fd1||f      d.t        j                         v st        j
                  |      rt        j                  |      nd.t        j                  |
      t        j                  |      d2t        j                         v st        j
                  t6              rt        j                  t6              nd2t        j                  |      d3z  }d4d5|iz  }t        t        j                  |            dx}
x}x}}|j0                  j:                  d    }||k(  }|st        j&                  d|fd6||f      t        j                  |      d t        j                         v st        j
                  |      rt        j                  |      nd d7z  }d8d9|iz  }t        t        j                  |            dx}}|j0                  j:                  d:   }||k(  }|st        j&                  d|fd6||f      t        j                  |      d(t        j                         v st        j
                  |      rt        j                  |      nd(d7z  }d8d9|iz  }t        t        j                  |            dx}}y);u-  4 replay fixture 모두 동일 결과 재현 — PASS + FAIL 흐름.

    회장 §9 — task-2506 / task-2507 / task-2509 / task-2511 4개 fixture를 회귀 입력으로 사용.
    실제 task md 파일이 있으면 그것을 우선 사용 (강한 검증), 없으면 임시 fixture로 fallback.
    zSMOKE_COMMAND_REGISTRY missing z
>assert %(py0)sr\   r,   zREPLAY_FIXTURES missing fixture_metamerge_commit_hint0(   r>   NrL   r   z
 smoke ok
r   FTr   rW   rY   run_passr   r[   r`   ra   )z5%(py2)s
{%(py2)s = %(py0)s.smoke_command
} == %(py4)sr  zregistry fallback mismatch for z
>assert %(py6)sr_   )z/%(py2)s
{%(py2)s = %(py0)s.task_id
} == %(py4)sr6   r   rb   rj   rk   rm   rf   r  r  rn   r   r   )r   r   r   run_failr   r   r   r   r   r   r   r  r   r   rl   rR   )r   rs   r   ru   rv   rw   rx   ry   rz   r   r   _REAL_FIXTURE_DIRexistsrI   r5   r   rq   r   rr   rt   rD   r6   r   rR   r   r   r   r   r   r  )rC   r6   r,   @py_format1r  r  real_mdr   pass_runnerr  r   r   r   r   r   r   r   r   r   fail_runnerr  r   r   r   r   r   s                             r   test_11_replay_fixtures_passr  :  sd    !
)C;;1';;;;;;;3;;;3;;;;;"7+L==3G9=======<===<=====
*
+cR#lK^>_:`5`.a
aC  WIS/1G )g~h_c/dG #a7);8OPK#UTH ??.k...?.....?.......8...8...?......k...k...........!!U!S(UUU!SUUUUUU8UUU8UUU!UUUUUUSUUUSUUUU,KG9*UUUUUUU&w&&&&w&&&&&&8&&&8&&&&&&&&&w&&&w&&&&&&&&&.$.&$....&$......8...8...&...$.......  ' C'''' C''''''8'''8''' ''''''C'''C'''''''&$&$&&&&$&&&&&&8&&&8&&&&&&$&&&&&&& #a?K#UTH ??.k...?.....?.......8...8...?......k...k...........&w&&&&w&&&&&&8&&&8&&&&&&&&&w&&&w&&&&&&&*d*d****d******8***8******d*******`..`2H2`2``.2`````.2```````8```8``````.``````2H```2H```2````````''	2=2g====2g===2======g===g=======''7>73>>>>73>>>7>>>>>>3>>>3>>>>>>>r   c                   d}t        | dd      }t        ||dt        d      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}}t        ||dt        d      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}}t        ||dt        d      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}}t        | dd       }t        ||dt        d      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}}t        ||dt        d      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}}t        dd      }t        ||d|d	      }|j                  }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                  t              rt	        j                  t              ndt	        j                  |      dz  }dd|iz  }t        t	        j                  |            d x}x}}|j                  }d}||u }|st	        j
                  d
|fd ||f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      dz  }dd|iz  }t        t	        j                  |            d x}x}}|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 )!N(ccc0000000000000000000000000000000000000z
task-9012arK   rL   Fr   r   Tr   rb   rj   pass_runrk   rm   rf   r   fail_run)r#   to_runz
task-9012bskip_runblk_runr*   )r   r$   rW   rY   	stale_runr   r[   r`   ra   )z-%(py2)s
{%(py2)s = %(py0)s.stale
} is %(py5)s)rI   r   r5   r   rs   rt   ru   rv   rw   rx   ry   rz   rq   r   rr   r   )rC   r  task_md_passr  r   r   r   r   r   r  r  task_md_skipr  r  stale_runnerr   r   r   r   s                      r   +test_12_continuation_signals_for_all_statesr$  k  s   
C!(LTL#S%1-H &&.$.&$....&$......8...8...&...$....... $S%1-H &&/%/&%////&%//////8///8///&///%/////// "S%d3dF $$--$----$------6---6---$---------- "(LML#S$1-H &&.$.&$....&$......8...8...&...$....... #S%1-G %%..%....%......7...7...%.......... $qXFL$S%eI /{///////////////9///9/////////{///{///////////??"d"?d""""?d""""""9"""9"""?"""d"""""""''050'50000'500000090009000'00050000000r   )r   r   r   r   r   r   r#   boolr$   Optional[str]r%   r   r   )rC   r   r6   r   rD   r&  returnr   ):__doc__
__future__r   builtinsru   _pytest.assertion.rewrite	assertionrewriters   r   r/   syspathlibr   typingr   ro   __file__resolveparentsWORKTREEr   pathremoveinsertutils.automation_contractsr   r   r	   utils.post_merge_smoke_runnerr
   r   r   r   r   r   r   r5   rI   r   r   r   r   r   r   r   r   r   r  osenvirongetparentr  markparametrizer  r$  r"   r   r   <module>r@     sq    #     
   >!!#++A.x=CHHHHOOCM" 3x= ! 
   +,2R*/T,-#'=J&)081*\(+$
%"%$F(F$<,%2=$ 
JJNN#S)?)?%@A 
 $XY)? Z)?`01r   