
    i                     j    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	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        7/home/jay/workspace/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           	      L   t        j                         t        d      z   j                  d      }ddddd|dddg}t	        |t        |            }t        |      }|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}}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   ==z2%(py2)s
{%(py2)s = %(py0)s.returncode
} == %(py5)sr"   py0py2py5assert %(py7)spy7N)r   nowr   strftimer   strr#   
returncode
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation)selftmp_pathfuturer
   inv_pathr"   @py_assert1@py_assert4@py_assert3@py_format6@py_format8s              r   test_all_okz#TestSecretRotationCheck.test_all_ok   s    ,,.9"#55??
K #% , , &""(	
 "'3x=9H%  %A% A%%%% A%%%%%%v%%%v%%% %%%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(  }|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}}d}|j                   }||v }|st        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  }
t        t        j                  |
            dx}x}}y)u*   만료된 시크릿 감지 → exit code 1   r)   r+   EXPIRED_KEYr-   r.   z
2026-01-01r0   r9   r;   r"   r<   r@   rA   NEXPIREDinz.%(py1)s in %(py5)s
{%(py5)s = %(py3)s.stdout
}py1py3r?   r   rB   r   rC   r   rD   r#   rE   rF   rG   rH   rI   rJ   rK   rL   rM   stdout)rN   rO   pastr
   rQ   r"   rR   rS   rT   rU   rV   @py_assert0@py_assert2s                r   test_expired_detectedz-TestSecretRotationCheck.test_expired_detected-   sC   !22<<ZH &% , , $""(	
 "'3x=9H%  %A% A%%%% A%%%%%%v%%%v%%% %%%A%%%%%%%)FMM)yM))))yM)))y))))))F)))F)))M)))))))r$   c           	         t        j                         t        d      z   j                  d      }ddddd|dddg}t	        |t        |            }t        |      }|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}}d}|j                   }||v }|st        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  }
t        t        j                  |
            dx}x}}y)u*   14일 이내 만료 경고 → exit code 1   r)   r+   SOON_KEYr-   r.   r/   r0   rY   r9   r;   r"   r<   r@   rA   NWARNINGr\   r^   r_   rb   )rN   rO   soonr
   rQ   r"   rR   rS   rT   rU   rV   re   rf   s                r   test_warning_14daysz+TestSecretRotationCheck.test_warning_14daysA   sC   !22<<ZH #% , , $""(	
 "'3x=9H%  %A% A%%%% A%%%%%%v%%%v%%% %%%A%%%%%%%)FMM)yM))))yM)))y))))))F)))F)))M)))))))r$   c           	         t        j                         t        d      z   j                  d      }ddddd|dddg}t	        |t        |            }t        |d	      }|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!        j"                  |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   d
   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)u   --json 출력 형식 검증r(   r)   r+   r,   r-   r.   r/   r0   z--jsonr   r9   r;   r"   r<   r@   rA   Nresultsr\   )z%(py1)s in %(py3)sdata)r`   ra   zassert %(py5)sr?   statusOK)z%(py1)s == %(py4)sr`   py4assert %(py6)spy6)r   rB   r   rC   r   rD   r#   rE   rF   rG   rH   rI   rJ   rK   rL   rM   r   loadsrc   )rN   rO   rP   r
   rQ   r"   rR   rS   rT   rU   rV   rp   re   rf   @py_format4@py_format5@py_format7s                    r   test_json_outputz(TestSecretRotationCheck.test_json_outputU   s   ,,.9"#55??
K #% , , &""(	
 "'3x=9Hh/  %A% A%%%% A%%%%%%v%%%v%%% %%%A%%%%%%%zz&--( yD    yD   y      D   D       Iq!(+3t3+t3333+t333+333t3333333r$   c           	         t        j                         t        d      z   j                  d      }ddddd|dddg}t	        |t        |            }t        |d	      }|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!        |      5 }t#        j$                  |      }ddd       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# 1 sw Y   xY w)u'   --update-checked로 last_checked 갱신r(   r)   r+   r,   r-   r.   r/   r0   z--update-checkedr   r9   r;   r"   r<   r@   rA   Nr   )is not)z%(py1)s is not %(py4)srs   ru   rv   )r   rB   r   rC   r   rD   r#   rE   rF   rG   rH   rI   rJ   rK   rL   rM   r   r   load)rN   rO   rP   r
   rQ   r"   rR   rS   rT   rU   rV   r   updatedre   rf   ry   rz   s                    r   test_update_checkedz+TestSecretRotationCheck.test_update_checkedk   sV   ,,.9"#55??
K #% , , &""(	
 "'3x=9H&89  %A% A%%%% A%%%%%%v%%%v%%% %%%A%%%%%%%(^ 	#qiilG	#~&2d2&d2222&d222&222d2222222	# 	#s   1GGN)__name__
__module____qualname__rW   rg   rm   r{   r    r$   r   r&   r&      s    &&*(*(4,3r$   r&   )builtinsrH   _pytest.assertion.rewrite	assertionrewriterF   r   r   r   r   r   r   r   r#   r&   r   r$   r   <module>r      s0       	  (Df3 f3r$   