
    (y#j4L                       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 ddlZ ee      j#                         j$                  d   Z ee      ej*                  vr"ej*                  j-                  d ee             ddlmZ edz  dz  Zej6                  j9                  d      Ze eedd	      xs d	 ee      k7  r eej6                        D  cg c]  } | dk(  s| jA                  d
      s|  c} D ]  Z!ej6                  e!=   ejD                  de eedz        g      Z#g Z$dZ%e#e%uZ&e&Z'e&re#jP                  Z)dZ*e)e*uZ+e+Z'e'sB ejX                  de&fde#e%f      d ejZ                         v s ej\                  e#      r ej^                  e#      nd ej^                  e%      dz  Z0dde0iz  Z1e$je                  e1       e&r ejX                  de+fde)e*f      d ejZ                         v s ej\                  e#      r ej^                  e#      nd ej^                  e)       ej^                  e*      dz  Z3dde3iz  Z4e$je                  e4        ejj                  e$d      i z  Z6dde6iz  Z7 e8 ejr                  e7            dxZ'xZ$xZ&xZ%xZ)xZ+Z* ejt                  e#      Z;e;ej6                  d<   e#jP                  jy                  e;       ddl=m>Z? ddl=m@ZA dZBddddeBgZCdEdZDdEd ZEdFdGd!ZFd"d#d"d$d%d&d'd(ZGdHd)ZHdId*ZIdJdKd+ZJddlKZLdLdMd,ZMd- ZNe?j                  fd.ZPdNd/ZQeAj                  fd0ZSd1 ZTd2 ZUd3 ZVd4 ZWej                  j                  d5ddeBgg d6g d7g      d8        ZZd9 Z[d: Z\d; Z]d< Z^d= Z_d> Z`d? Zaej                  j                  d@g dA      dB        ZbdC ZcdD Zdyc c} w )Ou  task-2729+8 P0-B real wake 결선 — regression (회귀 + mock).

대상 모듈:
  * dispatch.anu_pickup_wake_launcher (W1, launch_wake / LaunchRecord / DECISION_*)
  * dispatch.anu_pickup_driver        (W2, process_one/scan_once launcher_fn 결선)

회장 verbatim 12 검증 매핑 — 각 테스트 함수 docstring/주석에 검증번호(#N) 표기.

절대 제약:
- 실제 cokacdir/subprocess 실행 0 — subprocess_runner / launcher_fn 전부 mock 주입.
- raw ANU key 노출 0 — fake key "ANUKEY_FAKE" 가 직렬화/파일 내용에 절대 미포함 확인.
- canonical 경로 미사용 — 전부 tmp_path isolated root/ledger/audit.
- 구현 모듈(launcher/driver) 수정 0 — 본 파일은 read-only 회귀 검증.
    )annotationsN)Path   dispatchz__init__.py__file__ z	dispatch.)submodule_search_locations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py16zassert %(py19)spy19)anu_pickup_driver)anu_pickup_wake_launcherANUKEY_FAKEcokacdir--cronx--keyc                $    t        | dz  dz        S )Nledgerzwake_launch_ledger.jsonlstrtmp_paths    O/home/jay/workspace/tests/regression/test_anu_pickup_real_wake_wiring_2729p8.py_ledger_pathr#   =   s    x("%??@@    c                $    t        | dz  dz        S )Nauditzwake_launch_audit.jsonlr   r    s    r"   _audit_pathr'   A   s    x'!$==>>r$   c                     g  fd}|fS )u   subprocess_runner mock. 호출 인자(argv)를 calls 에 기록. 실제 실행 0.

    반환: (runner_fn, calls_list) 튜플. 호출부는 별도 calls_list 변수를 참조한다
    (함수 객체에 .calls 속성을 부착하지 않아 pyright reportFunctionMemberAccess 회피).
    c                *    j                  |        S N)append)argvcalls
returncodes    r"   _runnerz!make_runner_mock.<locals>._runnerM   s    Tr$    )r.   r/   r-   s   ` @r"   make_runner_mockr1   E   s     E E>r$   task-999EXECUTOR_RESULT_WRITTENzsch-1)task_idschedule_idzr.mdabc)r4   completion_signalcollector_envelopereport_pathsha256c                j    | dz  dz  j                  dd       | dz  dz  j                  dd       | S )NmemoryeventsT)parentsexist_okstate)mkdirr    s    r"   
_make_dirsrB   ^   sA    8#**4$*G7"))$)FOr$   c                    | dz  dz  S )Nr<   r=   r0   )roots    r"   _events_dirrE   d   s    (?X%%r$   c                ~    t        |       |z  }|t        }|j                  t        j                  |      d       |S )Nutf-8encoding)rE   VALID_PAYLOAD
write_textjsondumps)rD   namepayloadps       r"   _write_resultrQ   h   s9    DD ALLG$wL7Hr$   c                t    t        j                         |z
  }t        j                  t	        |       ||f       y)uF   result 파일 mtime 을 과거로 → readiness aged 게이트 통과.N)_timetimeosutimer   )pathsecondspasts      r"   _agerZ   s   s(    ::<'!DHHSYt%r$   c                      y r*   r0   )aks     r"   <lambda>r^   y       r$   c                     g  fd}|fS )uD   verify_fn mock — AUTHORITATIVE 반환. 호출 인자 calls 기록.c                 \    j                  | |f       t        j                  ddg       S )NTr   )verdictokclassificationreasonsr+   typesSimpleNamespace)argskwargsr-   rb   s     r"   _verifyz!make_verify_mock.<locals>._verify   s+    dF^$$$WbZ\]]r$   r0   )rb   rk   r-   s   ` @r"   make_verify_mockrl   |   s    E^ E>r$   c                L     g |t        t              n| fd}|fS )u[   pickup_fn mock — verdict/argv/sha256 부여한 result 반환. 호출 인자 calls 기록.c                 f    j                  | |f       t        j                  dk(  dg       S )N
WAKE_BUILTr2   )rb   rc   r,   r:   r4   re   rf   )ri   rj   _argvr-   r:   rb   s     r"   _pickupz!make_pickup_mock.<locals>._pickup   s=    dF^$$$<'
 	
r$   )list
VALID_ARGV)rb   r,   r:   rq   rp   r-   s   ` ` @@r"   make_pickup_mockrt      s)    E $D$E	
 E>r$   c                     g  fd}|fS )uO   launcher_fn mock — 호출 인자 capture + LaunchRecord 유사 객체 반환.c                V    j                  | |f       t        j                        S )Ndecisionrf   )r,   rj   r-   rx   s     r"   	_launcherz%make_launcher_mock.<locals>._launcher   s$    dF^$$$h77r$   r0   )rx   ry   r-   s   ` @r"   make_launcher_mockrz      s    E8 er$   c                l   t        d      \  }}t        j                  t        t              ddt        |       |      }|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}}	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 )Nr   task-1sha-1)r4   r:   launch_ledger_pathsubprocess_runner==zV%(py2)s
{%(py2)s = %(py0)s.decision
} == %(py6)s
{%(py6)s = %(py4)s.DECISION_DRY_RUN
}reclchpy0r   py4py6assert %(py8)spy8Tis)z/%(py2)s
{%(py2)s = %(py0)s.dry_run
} is %(py5)sr   r   r   assert %(py7)sr   z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)slenrunner_callsr   py1py3r   )r1   r   launch_wakerr   rs   r#   rx   DECISION_DRY_RUN
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationdry_runr   )r!   runnerr   r   @py_assert1@py_assert5@py_assert3@py_format7@py_format9@py_assert4@py_format6@py_format8@py_assert2s                r"   .test_a1_dry_run_default_decision_only_no_spawnr      s   +A.FL
//Z'1 C <</3///</////<///////3///3///<//////3///3///////////;;$;$;$33;$|!!!!!!!!!!!!3!!!3!!!!!!|!!!|!!!!!!!!!!!!!r$   c           
        t        |       }t        j                  t        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}}t        j                   }|j"                  } ||      }| }	|	sddt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }t        t        j                  |            d x}x}x}}	t        j                   }|j"                  }t%        |       }
 ||
      }| }|sGddt        j                         v st        j                  t              rt        j                  t              nd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                  |      dz  }t        t        j                  |            d x}x}x}
x}}y )Nr|   r}   T)r4   r:   r   r~   r   r   r   r   r   r   r   fassert not %(py7)s
{%(py7)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.path
}.exists
}(%(py5)s)
}rU   r   r   r   r   r   r   zassert not %(py10)s
{%(py10)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.path
}.exists
}(%(py8)s
{%(py8)s = %(py5)s(%(py6)s)
})
}r'   r!   )r   r   r   r   r   r   py10)r#   r   r   rr   rs   rx   r   r   r   r   r   r   r   r   r   rU   rW   existsr'   )r!   r   r   r   r   r   r   r   @py_assert6@py_assert8@py_assert7@py_assert9@py_assert11@py_format12s                 r"   %test_a2_dry_run_production_write_zeror      s.   (#F
//Z!C <</3///</////<///////3///3///<//////3///3///////////ww%w~~%~f%%%%%%%%%%%r%%%r%%%w%%%~%%%%%%f%%%f%%%%%%%%%%ww4w~~4k(34~344444444444r444r444w444~444444k444k444444(444(444344444444444r$   c                   t        |       }t        |       }t        j                  t	        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}}t         j"                  }|j$                  } ||      }	|	sddt        j                         v st        j                  t               rt        j                  t               ndt        j                  |      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |	      dz  }
t        t        j                  |
            d x}x}}	t'        |      j)                  d      }|j+                         D cg c]  }|j-                         s| }}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}}t0        |v}|st        j                  d|fdt0        |f      dt        j                         v st        j                  t0              rt        j                  t0              nddt        j                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            d }t         j"                  }|j$                  } ||      }	|	 }|sddt        j                         v st        j                  t               rt        j                  t               ndt        j                  |      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |	      dz  }t        t        j                  |            d x}x}x}	}y c c}w ) Nr|   r}   T)r4   r:   r   r~   
audit_pathr   r   r   r   r   r   r   bassert %(py7)s
{%(py7)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.path
}.exists
}(%(py5)s)
}rU   r&   r   rG   rH      r   r   linesr   not inz%(py0)s not in %(py2)sFAKE_KEYcontentr   r   assert %(py4)sr   r   r   )r#   r'   r   r   rr   rs   rx   r   r   r   r   r   r   r   r   r   rU   rW   r   r   	read_text
splitlinesstripr   r   )r!   r   r&   r   r   r   r   r   r   r   r   r   lnr   r   r   @py_format3@py_format5r   s                      r"   .test_a3_dry_run_audit_path_isolated_no_raw_keyr      s,   (#F!E
//Z!C <</3///</////<///////3///3///<//////3///3///////////77 7>> >%        2   2   7   >      %   %          5k##W#5G!,,.=B"((*R=E=u::?:33uu:7""""87""""""8"""8""""""7"""7"""""""ww%w~~%~f%%%%%%%%%%%r%%%r%%%w%%%~%%%%%%f%%%f%%%%%%%%%% >s   !W7Wc           	        t        d      \  }}t        j                  d dddt        |       |      }|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}}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 )Nr   r|   r}   Fr4   r:   r   r~   r   r   )zb%(py2)s
{%(py2)s = %(py0)s.decision
} == %(py6)s
{%(py6)s = %(py4)s.DECISION_FAIL_CLOSED_NO_ARGV
}r   r   r   r   r   r   r   r   r   )r1   r   r   r#   rx   DECISION_FAIL_CLOSED_NO_ARGVr   r   r   r   r   r   r   r   r   )r!   r   r   r   r   r   r   r   r   r   r   s              r"   test_a4_argv_none_fail_closedr      s]   +A.FL
//'1 C <<;3;;;<;;;;;<;;;;;;;3;;;3;;;<;;;;;;3;;;3;;;;;;;;;;;|!!!!!!!!!!!!3!!!3!!!!!!|!!!|!!!!!!!!!!!!!r$   bad_argv)r   r   r   )r   r   r   r   r   c           	        t        d      \  }}t        j                  |dddt        |       |      }|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}}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 )Nr   r|   r}   Fr   r   )zd%(py2)s
{%(py2)s = %(py0)s.decision
} == %(py6)s
{%(py6)s = %(py4)s.DECISION_FAIL_CLOSED_MALFORMED
}r   r   r   r   r   r   r   r   r   )r1   r   r   r#   rx   DECISION_FAIL_CLOSED_MALFORMEDr   r   r   r   r   r   r   r   r   )r!   r   r   r   r   r   r   r   r   r   r   r   s               r"   "test_a5_argv_malformed_fail_closedr      s_    ,A.FL
//'1 C <<=3===<=====<=======3===3===<======3===3===========|!!!!!!!!!!!!3!!!3!!!!!!|!!!|!!!!!!!!!!!!!r$   c           	     	   t        d      \  }}t        j                  t        t              dddt        |       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}}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 }t        j                  t        t              dddt        |       ||      }|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}}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 )Nr   r|   r}   Fc                     y)NFr0   r]   s    r"   r^   z1test_a6_non_anu_key_fail_closed.<locals>.<lambda>  r_   r$   )r4   r:   r   r~   anu_key_verifierr   r   )zf%(py2)s
{%(py2)s = %(py0)s.decision
} == %(py6)s
{%(py6)s = %(py4)s.DECISION_FAIL_CLOSED_NON_ANU_KEY
}r   r   r   r   r   r   r   r   r   c                    t        d      )Nzverifier boomRuntimeErrorr   s    r"   _boomz.test_a6_non_anu_key_fail_closed.<locals>._boom      ?++r$   rec2)r1   r   r   rr   rs   r#   rx    DECISION_FAIL_CLOSED_NON_ANU_KEYr   r   r   r   r   r   r   r   r   )r!   r   r   r   r   r   r   r   r   r   r   r   r   s                r"   test_a6_non_anu_key_fail_closedr     s   +A.FL
//Z'1( C <<?3???<?????<???????3???3???<??????3???3???????????|!!!!!!!!!!!!3!!!3!!!!!!|!!!|!!!!!!!!!!!!!, ??Z'1 D ==@C@@@=@@@@@=@@@@@@@4@@@4@@@=@@@@@@C@@@C@@@@@@@@@@@|!!!!!!!!!!!!3!!!3!!!!!!|!!!|!!!!!!!!!!!!!r$   c           	     ^   t        |       }t        d      \  }}t        j                  t	        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}
||
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}}
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   }|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}}t$        j&                  }|j(                  } ||      }|sddt        j                         v st        j                  t$              rt        j                  t$              ndt        j                  |      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }t        t        j                  |            d x}x}}t+        |      j-                  d       }|j/                         D cg c](  }|j1                         st3        j4                  |      * }}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   }|j6                  }d"} ||      }t        j8                  }||k(  }|st        j                  d|fd#||f      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                  t              rt        j                  t              nd	t        j                  |      d%z  }d&d'|iz  }t        t        j                  |            d x}x}x}x}}|j6                  }d(} ||      }d}||k(  }|st        j                  d|fd)||f      d$t        j                         v st        j                  |      rt        j                  |      nd$t        j                  |      t        j                  |      t        j                  |      t        j                  |      d*z  }d+d,|iz  }t        t        j                  |            d x}x}x}x}}|j6                  }d-} ||      }d}||k(  }|st        j                  d|fd)||f      d$t        j                         v st        j                  |      rt        j                  |      nd$t        j                  |      t        j                  |      t        j                  |      t        j                  |      d*z  }d+d,|iz  }t        t        j                  |            d x}x}x}x}}t:        |v}|st        j                  d.|fd/t:        |f      d0t        j                         v st        j                  t:              rt        j                  t:              nd0d1t        j                         v st        j                  |      rt        j                  |      nd1d2z  }d3d4|iz  }t        t        j                  |            d }y c c}w )5Nr   ztask-7zsha-7Fr   r   zW%(py2)s
{%(py2)s = %(py0)s.decision
} == %(py6)s
{%(py6)s = %(py4)s.DECISION_LAUNCHED
}r   r   r   r   r   )z2%(py2)s
{%(py2)s = %(py0)s.returncode
} == %(py5)sr   r   r   r   r   r   r   r   )z%(py1)s == %(py3)srs   r   r   assert %(py5)sr   r   rU   r   r   rG   rH   r   event)zt%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get
}(%(py4)s)
} == %(py10)s
{%(py10)s = %(py8)s.EVENT_WAKE_LAUNCHED
}entry)r   r   r   r   r   r   zassert %(py12)spy12r4   zI%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get
}(%(py4)s)
} == %(py9)sr   r   r   r   r   assert %(py11)sr   r:   r   r   r   r   r   r   r   )r#   r1   r   r   rr   rs   rx   DECISION_LAUNCHEDr   r   r   r   r   r   r   r   r.   r   rU   rW   r   r   r   r   r   rL   loadsgetEVENT_WAKE_LAUNCHEDr   )r!   r   r   r   r   r   r   r   r   r   r   r   r   r   @py_assert0@py_format4r   r   r   r   r   r   r   @py_format11@py_format13r   @py_format10r   r   r   s                                 r"   test_a7_real_launch_mock_runnerr   (  s   (#F+A.FL
//Z! C <<030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03000300000000000>>Q>Q>Q33>Q|!!!!!!!!!!!!3!!!3!!!!!!|!!!|!!!!!!!!!!!!!?(?j((((?j(((?((((((j(((j(((((((77!7>>!>&!!!!!!!!2!!!2!!!7!!!>!!!!!!&!!!&!!!!!!!!!!6l$$g$6G&-&8&8&:IbhhjTZZ^IEIu::?:33uu:!HE998W89W8!8!88!88888!8888888588858889888W888888888888888!8888888899+Y+9Y+8+8++++8++++++5+++5+++9+++Y++++++8+++++++99)X)9X)')'))))'))))))5)))5)))9)))X))))))')))))))7""""87""""""8"""8""""""7"""7""""""" Js   5j*j*c                	   t        |       }t        d      \  }}t        j                  t	        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}}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                  t	        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}}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 )Nr   ztask-dupzsha-dupFr   r   r   rec1r   r   r   r   r   r   r   r   r   )zZ%(py2)s
{%(py2)s = %(py0)s.decision
} == %(py6)s
{%(py6)s = %(py4)s.DECISION_SKIP_DEDUPE
}r   )r#   r1   r   r   rr   rs   rx   r   r   r   r   r   r   r   r   r   r   DECISION_SKIP_DEDUPE)r!   r   r   r   r   r   r   r   r   r   r   r   r   s                r"    test_a8_dedupe_no_duplicate_waker   F  s   (#F+A.FL??Z! D ==1C111=11111=111111141114111=111111C111C11111111111|!!!!!!!!!!!!3!!!3!!!!!!|!!!|!!!!!!!!!!!!! ??Z! D ==4C444=44444=444444444444444=444444C444C44444444444|!!!!!!!!!!!!3!!!3!!!!!!|!!!|!!!!!!!!!!!!!r$   c                   t        |       }t        j                  t        j                  j	                  |      d       t        |      j                  dd       t        d      \  }}t        j                  t        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}}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 )NT)r?   z{not valid json
rG   rH   r   r|   r}   Fr   r   )zg%(py2)s
{%(py2)s = %(py0)s.decision
} == %(py6)s
{%(py6)s = %(py4)s.DECISION_FAIL_CLOSED_LEDGER_ERROR
}r   r   r   r   r   r   r   r   r   )r#   rU   makedirsrW   dirnamer   rK   r1   r   r   rr   rs   rx   !DECISION_FAIL_CLOSED_LEDGER_ERRORr   r   r   r   r   r   r   r   r   )r!   r   r   r   r   r   r   r   r   r   r   r   s               r"    test_a9_ledger_error_fail_closedr   d  s   (#FKK'$7L/'B+A.FL
//Z! C <<@3@@@<@@@@@<@@@@@@@3@@@3@@@<@@@@@@3@@@3@@@@@@@@@@@|!!!!!!!!!!!!3!!!3!!!!!!|!!!|!!!!!!!!!!!!!r$   c                     t        j                  dddt         j                  ddt        t                    } | 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        |t               }|sGd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                  t               rt        j                  t               ndt        j                  |      dz  }	t        t        j                  |	            d x}x}x}}t#        j$                  |d      }
t&        |
v}|st        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                  |
      rt        j                  |
      nddz  }dd|iz  }t        t        j                  |            d }y )Nz2026-06-06T00:00:00Zr|   r}   Fr   )tsr4   r:   rx   r   r.   argv_lenr,   r   )z%(py1)s not in %(py3)sdr   r   r   keyr   znassert %(py10)s
{%(py10)s = %(py0)s(%(py7)s
{%(py7)s = %(py3)s
{%(py3)s = %(py1)s.get
}(%(py5)s)
}, %(py8)s)
}
isinstanceint)r   r   r   r   r   r   r   ensure_asciir   r   dumpedr   r   r   )r   LaunchRecordr   r   rs   to_jsonr   r   r   r   r   r   r   r   r   r   r  rL   rM   r   )r   r   r   r   r   r   r   r   r   r   r  r   r   r   s                 r"   )test_a10_launch_record_to_json_no_raw_keyr  y  s)   


!&&ZC 	A6?665>55ee-J-eJ'-:'--------:---:------a---a---e---J---'-------------------ZZ.F6!!!!86!!!!!!8!!!8!!!!!!6!!!6!!!!!!!r$   c                   t        |       }t        d      \  }}t               \  }}t        |      }t	        |       t        j                  t        |      |||t              }|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}
}y )Nro   rb   )rD   	pickup_fn	verify_fnsleep_fnr   zW%(py2)s
{%(py2)s = %(py0)s.verdict
} == %(py6)s
{%(py6)s = %(py4)s.VERDICT_WAKE_BUILT
}r   drvr   r   r   r   z4%(py2)s
{%(py2)s = %(py0)s.fire_cron_id
} is %(py5)sr   r   r   )rB   rt   rl   rQ   rZ   r  process_oner   	_NO_SLEEPrb   VERDICT_WAKE_BUILTr   r   r   r   r   r   r   r   fire_cron_id)r!   rD   pickup_pickup_callsverify_verify_callsrP   r   r   r   r   r   r   r   r   r   s                   r"   'test_b11_launcher_none_preserves_legacyr    s`   hD,\BFM,.FMdAG
//ATVvC ;;0#0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0000000000#t#t####t######3###3######t#######r$   c                   t        |       }t        dt        t              d      \  }}t	               \  }}t        t        j                        \  }}t        |      }t        |       t        j                  t        |      ||||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   \  }}|t        k(  }|st        j                   d|fd|t        f      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dz  }dd|iz  }t+        t        j,                  |            d }|j.                  }d} ||      }d}||k(  }|st        j                   d|fd||f      dt#        j$                         v st        j&                  |      rt        j(                  |      ndt        j(                  |      t        j(                  |      t        j(                  |      t        j(                  |      dz  }dd|iz  }t+        t        j,                  |            d x}x}x}x}}|j.                  }d} ||      }d}||k(  }|st        j                   d|fd||f      dt#        j$                         v st        j&                  |      rt        j(                  |      ndt        j(                  |      t        j(                  |      t        j(                  |      t        j(                  |      dz  }dd|iz  }t+        t        j,                  |            d x}x}x}x}}|	j0                  }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}}|	j4                  }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}}t6        j8                  }|	j:                  } |       }d#} |||$      }t<        |v}|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&                  t6              rt        j(                  t6              nd(t        j(                  |      dt#        j$                         v st        j&                  |	      rt        j(                  |	      ndt        j(                  |      t        j(                  |      t        j(                  |      t        j(                  |      d)z  }d*d+|iz  }t+        t        j,                  |            d x}x}x}x}x}}y ),Nro   zsha-zz)rb   r,   r:   rw   rD   r
  r  launcher_fnr  r   r   r   r   launcher_callsr   r   r   r   )z%(py0)s == %(py2)s	call_argvrs   r   r   r   r4   r2   r   call_kwargsr   r   r   r:   r  r   r  r   )zZ%(py2)s
{%(py2)s = %(py0)s.fire_cron_id
} == %(py6)s
{%(py6)s = %(py4)s.DECISION_DRY_RUN
}r   Fr  r   )z%(py0)s not in %(py13)s
{%(py13)s = %(py4)s
{%(py4)s = %(py2)s.dumps
}(%(py9)s
{%(py9)s = %(py7)s
{%(py7)s = %(py5)s.to_json
}()
}, ensure_ascii=%(py11)s)
}r   rL   )r   r   r   r   r   r   r   py13zassert %(py15)spy15)rB   rt   rr   rs   rl   rz   r   r   rQ   rZ   r  r  r   r  r   r   r   r   r   r   r   r   r   r   rb   r  r  rL   rM   r  r   )r!   rD   r  r  r  r  launcherr  rP   r   r   r   r   r   r   r  r  r   r   r   r   r   r   r   r   r   @py_assert10@py_assert12@py_format14@py_format16s                                 r"   $test_b12_mock_launcher_decision_onlyr&    s   hD,\ZHXaijFM,.FM13;O;OPHndAG
//ATVvyC
 ~#!#!####!######3###3######~###~######!#######+A.I{
""""9
""""""9"""9""""""
"""
"""""""??393?9%33%3333%333333;333;333?3339333%3333333333??080?8$00$0000$000000;000;000?0008000$0000000000;;0#0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00000000003s33333333333333333333333333333s333s33333333333::HckkHkmH%H:m%HH8HHHHH8HHHHHHH8HHH8HHHHHH4HHH4HHH:HHHHHHcHHHcHHHkHHHmHHH%HHHHHHHHHHHHr$   pv)SKIP_TERMINALSKIP_DEDUPE
QUARANTINEc                   t        |       }t        |      \  }}t               \  }}t               \  }}t	        |      }	t        |	       t        j                  t        |	      ||||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 )Nr	  r  r   r   r   r   r  r   r   r   )rB   rt   rl   rz   rQ   rZ   r  r  r   r  r   r   r   r   r   r   r   r   r   )r!   r'  rD   r  r  r  r  r!  r  rP   r   r   r   r   r   s                  r"   $test_b13_launcher_only_on_wake_builtr,    s    hD,R8FM,.FM13HndAGOOATVvy
 ~#!#!####!######3###3######~###~######!#######r$   c                   t        |       }t        d      \  }}t               \  }}t               \  }}t	        |      }t        |       t        |      dz  }	|	j                  dd       t        j                  t        |      ||||t              }
|
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}}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-        |      }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 )Nro   r	  ztask-999.pickup.donedonerG   rH   r  r   )zX%(py2)s
{%(py2)s = %(py0)s.verdict
} == %(py6)s
{%(py6)s = %(py4)s.VERDICT_PICKUP_SKIP
}r   r  r   r   r   r   r   r   pickup_callsr   r  )rB   rt   rl   rz   rQ   rZ   rE   rK   r  r  r   r  rb   VERDICT_PICKUP_SKIPr   r   r   r   r   r   r   r   r   )r!   rD   r  r/  r  r  r!  r  rP   markerr   r   r   r   r   r   r   r   s                     r"   test_b14_terminal_marker_noopr2    s@   hD+LAFL,.FM13HndAG!77F
fw/
//ATVvyC
 ;;1#111;11111;111111131113111;111111#111#11111111111|!!!!!!!!!!!!3!!!3!!!!!!|!!!|!!!!!!!!!!!!!~#!#!####!######3###3######~###~######!#######r$   c                   t        |       }t        d      \  }}t               \  }}d }t        |      }t	        |       t        j                  t        |      ||||t              }|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}}
g }	|j&                  }d }||u}
|
}|
rd}|j&                  }||v }|}|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  }|	j)                  |       |
rt        j                  dfdf      t        j                   |      dt        j                         v st        j                  |      rt        j                   |      nd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}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 )Nro   r	  c                    t        d      )Nzlauncher boomr   )r,   rj   s     r"   r   z3test_b15_launcher_exception_failsafe.<locals>._boom  r   r$   r  r   r  r   r  r   r   r   u   launcher 예외r
   )z1%(py4)s
{%(py4)s = %(py2)s.error
} is not %(py7)s)r   r   r   z%(py9)sr   )in)z1%(py12)s in %(py16)s
{%(py16)s = %(py14)s.error
})r   r   r   z%(py18)spy18r   zassert %(py21)spy21r   r  r   r   r   )rB   rt   rl   rQ   rZ   r  r  r   r  rb   r  r   r   r   r   r   r   r   r   errorr+   _format_boolopr  )r!   rD   r  r  r  r  r   rP   r   r   r   r   r   r   r   r   r   @py_assert15@py_assert13r   r   @py_format17@py_format19@py_format20@py_format22r   r   s                              r"   $test_b15_launcher_exception_failsafer@    sZ   hD,\BFM,.FM, 	dAG
//ATVvIC
 ;;0#0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0000000000C399CDC9D C%6C#))C%6)%CCCCC9DCCCCCC3CCC3CCC9CCCDCCCCCCC%6)CCC%6CCCCCC#CCC#CCC)CCCCCCCCCCCCCC#t#t####t######3###3######t#######r$   )r!   r   returnr   )r   )r.   r  )r!   r   rA  r   )rD   r   rA  r   )ztask-999.result.jsonN)rD   r   rN   r   rA  r   )g      $@)rX   floatrA  None)ro   Nr}   )e__doc__
__future__r   builtinsr   _pytest.assertion.rewrite	assertionrewriter   rL   rU   sysrg   pathlibr   pytestr   resolver>   _ROOTr   rW   insertimportlib.utilutil_ilu
_real_initmodulesr   _cachedgetattrrr   
startswith_kspec_from_file_locationr   r   r   r   r   loaderr"  r;  r#  r   r   r   r   r   r   r+   @py_format15r<  r9  @py_format18r>  r   r   module_from_spec_pkgexec_moduler   r   r  r   r   r   rs   r#   r'   r1   rJ   rB   rE   rQ   rT   rS   rZ   r  VERDICT_AUTHORITATIVErl   rt   r   rz   r   r   r   r   markparametrizer   r   r   r   r   r  r  r&  r,  r2  r@  r   s   0r"   <module>rc     sK   #    	 
    	X ((+u:SXXHHOOAs5z" Z-/

++//*
%
?ww
B7=2#j/Qs{{+\QqJ!,,{B[q\ KKO(D((JC
@R<S;TE :9599T9T!9999599999599959999999999T9999999999999T9999999999999 4  'D"CKK
	LLT" - 4 (C(;
A?" 2&0I& & !	 !66 & !$ 4 4  ""5$&." (#,& 
"
""B#<"<"*"2$&I: MN$ O$$$.$K ]s    O<O