
    |iO                     |    d Z ddlZddlZddlZej                  j                  dd       d Zd Zd Zd Z	d Z
d	 Zy)
uz   
test_finish_task_gates.py — finish-task.sh 게이트 통합 테스트
모리건(개발3팀 테스터) 작성
task-2152
    Nz/home/jay/workspacec                      ddl m}  g d}|D ]4  } | |      }d|v sJ d|v sJ t        |d   t              sJ |d   dv r4J  y)uG   5개 게이트가 모두 gate-config.json에 존재하고 정상 반환r   load_gate_config)impact_scannerci_preflightl1_smoketestgoal_assertionsunresolved_gateenabledmode)warnfailN)utils.gate_config_loaderr   
isinstancebool)r   gatesgatecfgs       3/home/jay/workspace/tests/test_finish_task_gates.pytest_gate_config_all_gatesr      sd    9dE /t$C}}#i.$///6{..../    c                      h d} t        d      5 }|j                         }ddd       t        j                  d      }|sJ d       |j	                  d      }| D ]  }||v rJ d| d        y# 1 sw Y   PxY w)	uI   gate_results 딕셔너리가 5개 필드를 모두 포함하는 스키마>   r   r   r   r	   r
   */home/jay/workspace/scripts/finish-task.shNz'gate_results':\s*\{([^}]+)\}u9   gate_results 블록이 finish-task.sh에 존재해야 함   u   gate_results에 u    키가 없음)openreadresearchgroup)expected_keysfcontentmatchblockkeys         r   test_gate_results_schemar&      s    lM	:	; q&&( II6@EMMM5KKNE De|C/uNCC|D s   A00A9c                      t        d      5 } | j                         }ddd       dv sJ d       d|v sJ d       d|v sJ d       y# 1 sw Y   +xY w)	u5   task-timer.py에 gate_results 보존 로직이 존재z(/home/jay/workspace/memory/task-timer.pyNexisting_extrau)   existing_extra 변수가 존재해야 함gate_resultsu.   gate_results 보존 로직이 존재해야 함zevent.update(existing_extra)u*   existing_extra를 event에 merge해야 함)r   r   )r!   r"   s     r   &test_task_timer_preserves_gate_resultsr*   )   si    	8	9 Q&&(w&S(SS&W$V&VV$)W4b6bb4	 s   AAc                      ddl m}   | d      }|j                  dg       }t        |      dkD  sJ d       d|v sJ d|v sJ h d}|D ]  }||vrJ d	| d
        y)uN   goal_assertions의 allowed_commands가 gate-config.json에 정의되어 있음r   r   r	   allowed_commandsu+   allowed_commands가 비어있으면 안 됨greppython3>   ddrmmkfssudochmodchownu   위험 명령 u!   이 allowed_commands에 포함됨N)r   r   getlen)r   r   allowed	dangerouscmds        r   %test_goal_assertions_allowed_commandsr:   2   s    9
,
-Cgg("-Gw<!JJJW>I ['!Z^C58Y#ZZ![r   c                  ~    t        j                  g ddd      } | j                  dk(  sJ d| j                          y)u*   finish-task.sh의 bash 구문이 유효함)bashz-nr   T)capture_outputtextr   zbash syntax error: N)
subprocessrun
returncodestderr)results    r   test_finish_task_bash_syntaxrD   A   s@    ^^DF
 !H%8#HH!r   c                     t        d      5 } | j                         }ddd       d}d}t        j                  |t        j                        sJ d       t        j                  ||t        j                        sJ d       y# 1 sw Y   fxY w)u/   각 게이트에 set +e/set -e 격리가 있음r   Nz"# 2\.6\. Impact.*?set \+e.*?set -ez+# 2\.6\.5\. CI Preflight.*?set \+e.*?set -eu-   Impact Scanner에 set +e/set -e 격리 없음u+   CI Preflight에 set +e/set -e 격리 없음)r   r   r   r   DOTALL)r!   r"   pattern_impact
pattern_cis       r   test_set_e_isolationrI   K   sy    	:	; q&&( ;N?J99^Wbii8i:ii899Z"))4c6cc4 s   BB)__doc__r   r?   syspathinsertr   r&   r*   r:   rD   rI    r   r   <module>rO      sM    
  
 ( )
/
Dc[Idr   