
    (<i                     P    d dl Z d dlZd dlZd dlmZmZ dZd Zd Z G d d      Zy)    N)datetime	timedeltaz4/home/jay/workspace/scripts/secret-rotation-check.pyc                     ddd| d}t         j                  j                  |d      }t        |d      5 }t	        j
                  ||       ddd       |S # 1 sw Y   |S xY w)u)   헬퍼: 임시 인벤토리 파일 생성z1.0NZ   )versionlast_checkedrotation_policy_dayssecretszsecret-inventory.jsonw)ospathjoinopenjsondump)r
   tmpdirinvr   fs        Q/home/jay/workspace/.worktrees/task-2057-dev2/tests/test_secret_rotation_check.pymake_inventoryr   	   sY    T2Za
bC77<< 78D	dC A		#qKKs   AAc                 b    dt         d| gt        |      z   }t        j                  |dd      }|S )u   헬퍼: 스크립트 실행python3z--inventoryT)capture_outputtext)SCRIPT_PATHlist
subprocessrun)inventory_pathargscmdresults       r   
run_scriptr#      s0    k=.
ADJ
NC^^C4@FM    c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestSecretRotationCheckc           	          t        j                         t        d      z   j                  d      }ddddd|dddg}t	        |t        |            }t        |      }|j                  d	k(  sJ y
)u*   모든 시크릿 정상일 때 exit code 0   days%Y-%m-%dTEST_KEY.envtest
2026-03-01namesource_fileownercreated_datelast_rotatedexpires_datecategoryrotation_notesr   N)r   nowr   strftimer   strr#   
returncode)selftmp_pathfuturer
   inv_pathr"   s         r   test_all_okz#TestSecretRotationCheck.test_all_ok   sx    ,,.9"#55??
K #% , , &""(	
 "'3x=9H%  A%%%r$   c           	          t        j                         t        d      z
  j                  d      }ddddd|dddg}t	        |t        |            }t        |      }|j                  dk(  sJ d	|j                  v sJ y
)u*   만료된 시크릿 감지 → exit code 1   r)   r+   EXPIRED_KEYr-   r.   z
2026-01-01r0   EXPIREDN	r   r9   r   r:   r   r;   r#   r<   stdout)r=   r>   pastr
   r@   r"   s         r   test_expired_detectedz-TestSecretRotationCheck.test_expired_detected-   s    !22<<ZH &% , , $""(	
 "'3x=9H%  A%%%FMM)))r$   c           	          t        j                         t        d      z   j                  d      }ddddd|dddg}t	        |t        |            }t        |      }|j                  d	k(  sJ d
|j                  v sJ y)u*   14일 이내 만료 경고 → exit code 1   r)   r+   SOON_KEYr-   r.   r/   r0   rC   WARNINGNrF   )r=   r>   soonr
   r@   r"   s         r   test_warning_14daysz+TestSecretRotationCheck.test_warning_14daysA   s    !22<<ZH #% , , $""(	
 "'3x=9H%  A%%%FMM)))r$   c           	      J   t        j                         t        d      z   j                  d      }ddddd|dddg}t	        |t        |            }t        |d	      }|j                  d
k(  sJ t        j                  |j                        }d|v sJ |d   d
   d   dk(  sJ y)u   --json 출력 형식 검증r(   r)   r+   r,   r-   r.   r/   r0   z--jsonr   resultsstatusOKN)r   r9   r   r:   r   r;   r#   r<   r   loadsrG   )r=   r>   r?   r
   r@   r"   datas          r   test_json_outputz(TestSecretRotationCheck.test_json_outputU   s    ,,.9"#55??
K #% , , &""(	
 "'3x=9Hh/  A%%%zz&--(D   Iq!(+t333r$   c           	      X   t        j                         t        d      z   j                  d      }ddddd|dddg}t	        |t        |            }t        |d	      }|j                  d
k(  sJ t        |      5 }t        j                  |      }ddd       d   J y# 1 sw Y   xY w)u'   --update-checked로 last_checked 갱신r(   r)   r+   r,   r-   r.   r/   r0   z--update-checkedr   Nr   )r   r9   r   r:   r   r;   r#   r<   r   r   load)r=   r>   r?   r
   r@   r"   r   updateds           r   test_update_checkedz+TestSecretRotationCheck.test_update_checkedk   s    ,,.9"#55??
K #% , , &""(	
 "'3x=9H&89  A%%%(^ 	#qiilG	#~&222	# 	#s   :B  B)N)__name__
__module____qualname__rA   rI   rO   rV   rZ    r$   r   r&   r&      s    &&*(*(4,3r$   r&   )	r   r   r   r   r   r   r   r#   r&   r^   r$   r   <module>r_      s,     	  (Df3 f3r$   