
    4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ZddlmZ  ee      j%                         j&                  j&                  j&                  Z ee      ej,                  vr"ej,                  j/                  d ee             d(dZ edd        edd	        ed
d        edd        edd        edd        edd      Z edd        edd        edd      Zej6                  Zej8                  Zej:                  ZdZdZefZ edz  dz  dz  Z!edz  dz  dz  Z"edz  dz  d z  Z#d)d!Z$d)d"Z% G d# d$ejL                        Z' G d% d&ejL                        Z(e)d'k(  r ejT                          yy)*u  task-2553+49 AUTHORITATIVE — authoritative verdict selector real-entrypoint
regression (§8 reg 13~18, 24, 27 + §5.D fixtures).

self-chain verdict 영구 비권위 · independent ANU verdict 만 authoritative ·
dead-man DUPLICATE_CALLBACK_IGNORED 는 authoritative verdict 존재 시에만
유효 · independent ANU 없이 self-chain 만으로 PASS 확정 = FAIL.

회장 §5 중요: 실 selector 를 ``dispatch.core.select_runtime_authoritative_
verdict`` (REAL dispatch entrypoint 재노출) 로 직접 호출. mock-only 금지.
    )annotationsN)Pathc                r   | t         j                  v rt         j                  |    S t        j                  j	                  | t
        |z        }g }d }||u}|}|r|j                  }d }||u}	|	}|slt        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  }dd|iz  }t        t        j                   |            d x}x}x}x}x}x}	}t        j                  j#                  |      }|t         j                  | <   |j                  j%                  |       |S )N)is not)z%(py2)s is not %(py5)sspec)py2py5z%(py7)spy7)z5%(py11)s
{%(py11)s = %(py9)s.loader
} is not %(py14)s)py9py11py14z%(py16)spy16r   zassert %(py19)spy19)sysmodules	importlibutilspec_from_file_location_ROOTloader
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprappend_format_boolopAssertionError_format_explanationmodule_from_specexec_module)modnamerelpathr   @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                    V/home/jay/workspace/tests/regression/test_authoritative_verdict_selector_2553plus49.py_loadr4      sI   #++{{7##>>11'57?KD7t74t77474 777774t77777747774777t77777774777777777777777477777777777777
..
)
)$
/CCKKKKC J    z%dispatch.executor_completion_contractz(dispatch/executor_completion_contract.pyz dispatch.spec_template_validatorz#dispatch/spec_template_validator.pyzanu_v3.callback_4tuple_registryz"anu_v3/callback_4tuple_registry.pyz dispatch.callback_owner_enforcerz#dispatch/callback_owner_enforcer.pyz(dispatch.normal_fallback_callback_helperz+dispatch/normal_fallback_callback_helper.pyzanu_v3.callback_owner_validatorz"anu_v3/callback_owner_validator.pyz%anu_v3.authoritative_verdict_selectorz(anu_v3/authoritative_verdict_selector.pyzanu_v3.self_collector_guardzanu_v3/self_collector_guard.pyz'anu_v3.writeback_binding_conflict_guardz*anu_v3/writeback_binding_conflict_guard.pyzdispatch.cron_dispatch_guardzdispatch/cron_dispatch_guard.pyc119085addb0f8b70b94683120a691cfmemoryfixturesz2task-2553plus47.self-chain-callback-violation.jsonz,task-2553plus47.independent-anu-verdict.jsonz,task-2553plus48.self-dispatch-violation.jsonc           	     6    t        | |dt        t        dd      S )Ntask-2553+47ANUTkindverdicttask_idexecutor_keycollector_keycollector_rolesession_is_executor_self)VerdictRecordEXEC_KEYr>   r?   s     r3   	_self_recrH   R   s     7NXt r5   c           	     6    t        | |dt        t        dd      S )Nr;   r<   Fr=   )rE   rF   ANU_KEYrG   s     r3   _anu_recrK   Z   s     7NWu r5   c                  B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)SelectorRegressionc                   t        t               gdt              }| j                  |j                  d       | j                  |j
                  d       | j                  |j                         | j                  |j                  d       y )Nr;   r@   anu_keysFAILAUTHORITATIVE_VERDICT_PENDINGr   )	$select_runtime_authoritative_verdictrH   KEYSassertEqualr?   classificationassertIsNoneauthoritative_verdictindependent_anu_countselfrs     r3   (test_13_self_chain_only_pending_not_passz;SelectorRegression.test_13_self_chain_only_pending_not_passd   sn    0[M>D
 	F+))+JK!11200!4r5   c                ,   t        t               t               gdt              }| j	                  |j
                  d       | j	                  |j                  d       | j	                  |j                  d       | j                  |j                  d       y )Nr;   rO   PASSAUTHORITATIVE_PASS   )
rS   rH   rK   rT   rU   r?   rV   rY   assertGreaterEqualquarantined_countrZ   s     r3   .test_14_independent_anu_selected_authoritativezASelectorRegression.test_14_independent_anu_selected_authoritativem   su    0[(*%~
 	F+))+?@00!4 3 3Q7r5   c                   t        dddt        t        d      }t        t	               |gdt
              }| j                  |j                         | j                  |j                         | j                  |j                  d       t        t	               |t               gdt
              }| j                  |j                         | j                  |j                  d       y )	Ndeadman_duplicate_callbackDUPLICATE_CALLBACK_IGNOREDr;   r<   )r>   r?   r@   rA   rB   rC   rO   rQ   r`   )rE   rF   rJ   rS   rH   rT   assertFalsedeadman_valid
assertTruedeadman_duplicate_seenrU   r?   rK   rV   )r[   dmonlywithauths       r3   7test_15_deadman_duplicate_valid_only_with_authoritativezJSelectorRegression.test_15_deadman_duplicate_valid_only_with_authoritativev   s    -0"!%	
 4["~
 	++,334v.7["hj)>
 	../002FGr5   c                   t        j                  t        j                  d            }|d   }|d   D cg c]  }t	        di | }}t        ||d   t              }|d   }| j                  |j                  |d          | j                  |j                  |d	          | j                  |j                  |d
          | j                  |j                  |d          y c c}w )Nutf-8encodingselector_inputrecordsr@   rO   expectedr?   rV   rY   rc    )jsonloadsFX_SELF	read_textrE   select_authoritative_verdictrT   rU   r?   rV   rY   rc   r[   datasixrecsr\   exps          r3   -test_16_plus47_self_chain_fixture_quarantinedz@SelectorRegression.test_16_plus47_self_chain_fixture_quarantined   s    zz'++W+=>"#,.yM:q""::("Y-$
 :C	N3))3/?+@A00#6M2NO,,c2E.FG ;s   C!c                   t        j                  t        j                  d            }|d   }|d   D cg c]  }t	        di | }}t        ||d   t              }|d   }| j                  |j                  |d          | j                  |j                  |d	          | j                  |j                  |d
          | j                  |j                         y c c}w )Nrq   rr   rt   ru   r@   rO   rv   r?   rV   rX   rw   )rx   ry   FX_ANUr{   rE   r|   rT   rU   r?   rV   rX   rj   ri   r}   s          r3   9test_17_plus47_independent_anu_fixture_authoritative_passzLSelectorRegression.test_17_plus47_independent_anu_fixture_authoritative_pass   s    zz&**G*<="#,.yM:q""::("Y-$
 :C	N3))3/?+@A00#6M2NO( ;s   Cc                   ddl m}m} t        j                  t
        j                  d            }|d   } |di |d   d   }| j                  |j                  d       | j                  |j                  d	        |di |d
   d   }| j                  |j                  d        |di |d   d   }| j                  |j                  d       | j                  |j                  d       y )Nr   )guard_self_collector_sessionguard_self_dispatchrq   rr   cases#dev3_self_dispatch_plus48_forbiddeninputrQ    EXECUTOR_SELF_DISPATCH_FORBIDDENanu_session_dispatch_plus48_okr_   $dev3_self_collector_plus48_forbiddenSELF_COLLECTOR_FORBIDDENrw   )
anu_v3.self_collector_guardr   r   rx   ry   FX_SELF_DISPATCHr{   rU   r?   rV   )r[   r   r   r~   cforbidokscs           r3   $test_18_plus48_self_dispatch_fixturez7SelectorRegression.test_18_plus48_self_dispatch_fixture   s    	
 zz*44g4FGM$ 
56w?
 	0!!#E	
 ! 
01':
 	V,) 
67@
 	V,**,FGr5   c           
         t        dddt        t        ddd      }t        |gdt              }| j	                  |j
                  d	       | j	                  |j                  d
       y )Ncollector_resultr_   r;   r<   Tindependent_anu)r>   r?   r@   rA   rB   rC   rD   claimed_originrO   rR   r   )rE   rF   rS   rT   rU   rV   rY   )r[   liarr\   s      r3   @test_24_selector_excludes_self_chain_even_if_claimed_independentzSSelectorRegression.test_24_selector_excludes_self_chain_even_if_claimed_independent   sf     #V^! 4,	
 1FNT
 	))+JK00!4r5   c                    t        t        d      t        d      gdt              }| j	                  |j
                  d       | j	                  |j                  d       y )Nr_   )r?   rQ   r;   rO   )rS   rH   rK   rT   rU   rX   r?   rZ   s     r3   .test_independent_fail_outranks_self_chain_passzASelectorRegression.test_independent_fail_outranks_self_chain_pass   sO    0v&(@A"T
 	00&9F+r5   c                l    t        t               gddd      }| j                  |j                  d       y )Ntrw   F)r@   rP   anu_keys_resolvableHOLD_FOR_CHAIR)r|   rK   rU   r?   rZ   s     r3    test_anu_keys_unresolvable_holdsz3SelectorRegression.test_anu_keys_unresolvable_holds   s1    (ZL# %
 	$45r5   N)__name__
__module____qualname__r]   rd   ro   r   r   r   r   r   r   rw   r5   r3   rM   rM   b   s2    58H,H)H25,6r5   rM   c                      e Zd ZdZd Zy)CancelOnSuccessNoRegressionuF   §8 reg 27 — +45/+48 cancel-on-success 무회귀 (실 suite 실행).c                   dD ]|  }t        j                  t        j                  dddt	        t
        |z        gt	        t
              ddd      }| j                  |j                  dd	| d
|j                  dd          ~ y )N)zAtests/regression/test_cancel_on_success_live_wiring_2553plus45.pyz>tests/regression/test_cancel_on_success_live_e2e_2553plus48.pyz-mpytestz-qTiX  )cwdcapture_outputtexttimeoutr   zno-regression FAILED for 
i0)	
subprocessrunr   
executablestrr   rU   
returncodestdout)r[   suiteps      r3   #test_27_plus45_plus48_no_regressionz?CancelOnSuccessNoRegression.test_27_plus45_plus48_no_regression   s    
 	E xs55=7IJJt$A a+E7"QXXef5E4FG	r5   N)r   r   r   __doc__r   rw   r5   r3   r   r      s
    Pr5   r   __main__)r#   r   r$   r   )r   r_   )+r   
__future__r   builtinsr   _pytest.assertion.rewrite	assertionrewriter   importlib.utilr   rx   r   r   unittestpathlibr   __file__resolveparentr   r   pathinsertr4   _sel_grdrS   rE   r|   rJ   rF   rT   rz   r   r   rH   rK   TestCaserM   r   r   mainrw   r5   r3   <module>r      s  	 #       
  X ''..55u:SXXHHOOAs5z" -02 (+- '*, (+- 035 '*,479 #%E F /24+.0
 	-- % ""#@@ 
z 
Hz!:; 
 
Hz!45 
 
Hz!45 z6** z6z("3"3 ( zHMMO r5   