
    c: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ZddlZddlmZ  ee      j#                         j$                  d   Z eedz        Zej,                  D  cg c]
  } | ek7  s	|  c} ej,                  dd  ee      ej,                  vr"ej,                  j/                  d ee              eej2                        D cg c]  }|dk(  s|j5                  d      s| c}D ]B  Zej2                  j9                  e      Z eed	d
      xs d
Zdev sed
k(  s6ej2                  e= D ddZ  e dd        e dd        e dd      Z!d Z"d Z#d Z$d Z%d Z&d Z'yc c} w c c}w )uq  
test_gate_shadow_finish_task_2766.py — v2.14 S3 §31 gate shadow finish-task report-only 결선 회귀.

검증: source="finish_task" 기록 / dispatch source 무변경(default) / fail-open / no-block /
      finish-task.sh shadow 결선 fail-open(|| true) 구조 정합.
회장 승인: A(S3 report-only) — finish-task path 1곳 report-only 결선. fail-closed 0.
    )annotationsN)Path   testsdispatchz	dispatch.__file__ z/tests/dispatchc                   t         j                  j                  |       }|3t        |dd      r&t	        |j
                        j                  |      r|S t        j                  j                  | t        |z        }g }d }||u}|}|r|j                  }d }	||	u}
|
}|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  }|j%                  |       |rt        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  }|j%                  |       t        j&                  |d      i z  }t        j(                  d|       dz   d|iz  }t+        t        j,                  |            d x}x}x}x}x}x}
}	t        j                  j/                  |      }|t         j                  | <   |j                  j1                  |       |S )Nr   r	   is not)z%(py2)s is not %(py5)sspec)py2py5%(py7)spy7)z5%(py11)s
{%(py11)s = %(py9)s.loader
} is not %(py14)s)py9py11py14z%(py16)spy16r   zspec not found: z
>assert %(py19)spy19)sysmodulesgetgetattrstrr   endswith	importlibutilspec_from_file_location_ROOTloader
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprappend_format_boolop_format_assertmsgAssertionError_format_explanationmodule_from_specexec_module)modnamerelpathexistingr   @py_assert1@py_assert4@py_assert3@py_assert0@py_assert10@py_assert13@py_assert12@py_format6@py_format8@py_format15@py_format17@py_format18@py_format20mods                     I/home/jay/workspace/tests/regression/test_gate_shadow_finish_task_2766.py
_load_realrA      s   {{w'H*b Ac(J[J[F\FeFefmFn>>11'57?KDUtU4tUU4U4 7UUUU4tUUUUUU4UUU4UUUtUUUUUUU4UUUUUUUUUUUUUUU4UUUUUUUUUU;KG99UUUUUUUUU
..
)
)$
/CCKKKKC J    zdispatch/__init__.pyzdispatch.v2_13_gatezdispatch/v2_13_gate.pyzdispatch.gate_shadow_runnerzdispatch/gate_shadow_runner.pyc                    t        t        |       j                  d            d   }t        j                  |j                  d      j                         j                         d         S )Nzgate_shadow_*.jsonlr   utf-8encoding)listr   globjsonloads	read_textstrip
splitlines)tmp_pathfs     r@   	_last_recrQ   .   sR    T(^  !678;A::akk7k399;FFHLMMrB   c                   t         j                  }d}d}t        |       } ||||      }d }||u }|st        j                  d|fd||f      dt        j                         v st        j                  t               rt        j                  t               ndt        j                  |      t        j                  |      t        j                  |      dt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      t        j                  |      t        j                  |      d		z  }d
d|iz  }	t        t        j                  |	            d x}x}x}x}x}x}}t        |       }
|
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}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nft1finish_tasktask_idsourcelog_dirisz%(py12)s
{%(py12)s = %(py2)s
{%(py2)s = %(py0)s.shadow_evaluate
}(task_id=%(py4)s, source=%(py6)s, log_dir=%(py10)s
{%(py10)s = %(py7)s(%(py8)s)
})
} is %(py15)sgsrr   rO   	py0r   py4py6r   py8py10py12py15assert %(py17)spy17rW   ==z%(py1)s == %(py4)spy1r_   assert %(py6)sr`   modereport_only_shadowactiveF)z%(py1)s is %(py4)s)r\   shadow_evaluater   r"   r#   r$   r%   r&   r'   r+   r,   rQ   )rO   r2   r4   @py_assert5@py_assert9@py_assert11@py_assert14r7   @py_format16r=   recr5   @py_assert2@py_format5@py_format7s                  r@   test_finish_task_source_loggedrz   3   s   bub]bCPXMbu]MZb^bbZ^bbbbbZ^bbbbbbb3bbb3bbbbbbubbb]bbbbbbCbbbCbbbbbbPXbbbPXbbbMbbbZbbb^bbbbbbbbb
H
Cx=)M)=M))))=M)))=)))M)))))))v;...;.....;....;...........x=!E!=E!!!!=E!!!=!!!E!!!!!!!rB   c                ^   t         j                  dddt        |              t        |       }|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d1normalcoding)rV   level	task_typerX   rW   r   rg   ri   rj   rl   r`   )	r\   rp   r   rQ   r"   r#   r'   r+   r,   )rO   rv   r5   r4   rw   rx   ry   s          r@   &test_dispatch_source_unchanged_defaultr   <   sx    HRUV^R_`
H
Cx=&J&=J&&&&=J&&&=&&&J&&&&&&&rB   c                   dd l m} d }|j                  |d|       t        j                  }d}d}t        |       } ||||      }d }	||	u }
|
st        j                  d|
fd||	f      d	t        j                         v st        j                  t              rt        j                  t              nd	t        j                  |      t        j                  |      t        j                  |      d
t        j                         v st        j                  t
              rt        j                  t
              nd
dt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      t        j                  |      t        j                  |	      d	z  }dd|iz  }t        t        j                  |            d x}x}x}x}x}x}
}	y )Nr   c                     t        d      )Nintentional)RuntimeError)aks     r@   boomz(test_finish_task_fail_open.<locals>.boomF   s    =))rB   classify_gateft2rT   rU   rY   r[   r\   r   rO   r]   re   rf   )dispatch.v2_13_gate
v2_13_gatesetattrr\   rp   r   r"   r#   r$   r%   r&   r'   r+   r,   )rO   monkeypatchgr   r2   r4   rq   rr   rs   rt   r7   ru   r=   s                r@   test_finish_task_fail_openr   C   s'   #* ?D1bub]bCPXMbu]MZb^bbZ^bbbbbZ^bbbbbbb3bbb3bbbbbbubbb]bbbbbbCbbbCbbbbbbPXbbbPXbbbMbbbZbbb^bbbbbbbbbrB   c           	        t         j                  dddddt        |              t        |       }h d}|j                  } |       }t        |      }||k  }|sKt        j                  d|fd	||f      d
t        j                         v st        j                  t
              rt        j                  t
              nd
dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            d x}x}x}}t        j                  |d      }	g }
d}||	v}|}|rd}||	v}|}|sXt        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  }|
j!                  |       |rt        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  }|
j!                  |       t        j"                  |
d      i z  }dd|iz  }t        t        j                  |            d x}x}
x}x}x}}y )Nft3rT   	RAWPROMPTghp_X)prompt
credential)rV   rW   runtime_staterX   >   tsrm   r   ro   reasonrW   goal_idrV   verdictr   touched_axesrollback_costcontract_source)<=)za%(py7)s
{%(py7)s = %(py0)s(%(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py1)s.keys
}()
})
} <= %(py9)ssetrv   allowed)r^   rk   py3r   r   r   zassert %(py11)sr   F)ensure_ascii)not in)z%(py3)s not in %(py5)sblob)r   r   r   r   )z%(py10)s not in %(py12)s)rb   rc   z%(py14)sr   r   re   rf   )r\   rp   r   rQ   keysr   r"   r#   r$   r%   r&   r'   r+   r,   rJ   dumpsr(   r)   )rO   rv   r   rw   r3   @py_assert6@py_assert8@py_format10@py_format12r   r2   r5   rr   rs   r9   r:   @py_format13r;   ru   r=   s                       r@   $test_no_sensitive_fields_finish_taskr   M   s   m!,GDH  
 H
CjGxx%xz%3z?%?g%%%%?g%%%%%%3%%%3%%%%%%s%%%s%%%x%%%z%%%?%%%%%%g%%%g%%%%%%%::c.D:;:;d":w:wd':::::;d:::;::::::d:::d:::::::wd:::w::::::d:::d::::::::::::::rB   c                    t         dz  dz  j                  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  }t        j                  d
      dz   d|iz  }t        t        j                  |            d x}}d}|| v }|st        j                  d|fd|| f      t        j                  |      dt        j                         v st        j                  |       rt        j                  |       ndd	z  }dd|iz  }t        t        j                  |            d x}}t        j                  d|       }d }||u}|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }t        j                  d      dz   d|iz  }t        t        j                  |            d x}}y )Nscriptszfinish-task.shrD   rE   gate_shadow_runner)in)z%(py1)s in %(py3)ssh)rk   r   u'   finish-task.sh 에 shadow 결선 부재z
>assert %(py5)sr   zsource="finish_task"zassert %(py5)szpshadow_evaluate\(task_id=sys\.argv\[1\], source=\"finish_task\"\)'[^\n]*\n\"\$TASK_ID\" 2>/dev/null \) \|\| truer   )z%(py0)s is not %(py3)sm)r^   r   uU   finish-task.sh shadow 결선이 argv-safe + 2>/dev/null + || true 패턴이어야 함)r    rL   r"   r#   r'   r$   r%   r&   r*   r+   r,   research)r   r5   rw   @py_format4r9   r   r2   s          r@   'test_finish_task_sh_wiring_is_fail_openr   [   sa   
)
.
.	9	97	9	KBP2%PPP2PPPPPPPPP2PPP2PPPP'PPPPPPP!'!R''''!R'''!''''''R'''R'''''''
		  F  HJ  	KAq1D=qqq1Dqqqqqq1qqq1qqqDqqqqqqqqqqrB   )r/   r   r0   r   )(__doc__
__future__r   builtinsr$   _pytest.assertion.rewrite	assertionrewriter"   importlib.utilr   rJ   r   r   pathlibr   r   resolveparentsr    r   
_TESTS_DIRpathinsertrH   r   
startswith_mr   _cachedr   _frA   r\   rQ   rz   r   r   r   r   )pr   s   00r@   <module>r      sc   #      	 
  	X ((+!
((6Qa:oq6u:SXXHHOOAs5z"3;;'
X1
?all;>W1
X Bkkoob!G	*b	)	/RBB"(KKO		 :- . 
 ": ;.0PQN
"'c;rQ 7 Ys   (
E+3E+E0-E0