193 lines
5.4 KiB
TypeScript
193 lines
5.4 KiB
TypeScript
// 인증 시스템 테스트 파일
|
|
// Phase 2-1A 구현 내용 테스트
|
|
|
|
import { PasswordUtils } from "../utils/passwordUtils";
|
|
import { JwtUtils } from "../utils/jwtUtils";
|
|
import { PersonBean } from "../types/auth";
|
|
|
|
// 테스트용 사용자 정보
|
|
const testUserInfo: PersonBean = {
|
|
userId: "test_user",
|
|
userName: "테스트 사용자",
|
|
deptName: "개발팀",
|
|
companyCode: "ILSHIN",
|
|
email: "test@ilshin.com",
|
|
tel: "02-1234-5678",
|
|
cellPhone: "010-1234-5678",
|
|
};
|
|
|
|
/**
|
|
* 비밀번호 암호화 테스트
|
|
*/
|
|
function testPasswordUtils(): void {
|
|
console.log("\n=== 비밀번호 암호화 테스트 ===");
|
|
|
|
const testPassword = "test1234";
|
|
|
|
try {
|
|
// 암호화 테스트
|
|
const encrypted = PasswordUtils.encrypt(testPassword);
|
|
console.log("원본 비밀번호:", testPassword);
|
|
console.log("암호화 결과:", encrypted);
|
|
|
|
// 복호화 테스트
|
|
const decrypted = PasswordUtils.decrypt(encrypted);
|
|
console.log("복호화 결과:", decrypted);
|
|
console.log("복호화 성공:", testPassword === decrypted);
|
|
|
|
// 비밀번호 검증 테스트
|
|
const isMatch = PasswordUtils.matches(testPassword, encrypted);
|
|
console.log("비밀번호 검증:", isMatch);
|
|
|
|
// SHA256 해시 테스트
|
|
const sha256Hash = PasswordUtils.encryptSha256(testPassword);
|
|
console.log("SHA256 해시:", sha256Hash);
|
|
|
|
// 마스터 패스워드 테스트
|
|
const masterPasswordMatch = PasswordUtils.matches(
|
|
"qlalfqjsgh11",
|
|
"any_encrypted_password"
|
|
);
|
|
console.log("마스터 패스워드 검증:", masterPasswordMatch);
|
|
} catch (error) {
|
|
console.error("비밀번호 암호화 테스트 실패:", error);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* JWT 토큰 테스트
|
|
*/
|
|
function testJwtUtils(): void {
|
|
console.log("\n=== JWT 토큰 테스트 ===");
|
|
|
|
try {
|
|
// 토큰 생성 테스트
|
|
const token = JwtUtils.generateToken(testUserInfo);
|
|
console.log("생성된 토큰:", token);
|
|
|
|
// 토큰 디코드 테스트
|
|
const decoded = JwtUtils.decodeToken(token);
|
|
console.log("디코드된 페이로드:", decoded);
|
|
|
|
// 토큰 검증 테스트
|
|
const verified = JwtUtils.verifyToken(token);
|
|
console.log("검증된 사용자 정보:", verified);
|
|
console.log("검증 성공:", testUserInfo.userId === verified.userId);
|
|
|
|
// 토큰 만료 확인 테스트
|
|
const isExpired = JwtUtils.isTokenExpired(token);
|
|
console.log("토큰 만료 여부:", isExpired);
|
|
|
|
// 사용자 ID 추출 테스트
|
|
const userId = JwtUtils.getUserIdFromToken(token);
|
|
console.log("토큰에서 추출한 사용자 ID:", userId);
|
|
|
|
// 토큰 유효성 검사 테스트
|
|
const validation = JwtUtils.validateToken(token);
|
|
console.log("토큰 유효성 검사:", validation);
|
|
|
|
// 토큰 갱신 테스트
|
|
const refreshedToken = JwtUtils.refreshToken(token);
|
|
console.log("갱신된 토큰:", refreshedToken);
|
|
console.log("토큰 갱신 성공:", token !== refreshedToken);
|
|
} catch (error) {
|
|
console.error("JWT 토큰 테스트 실패:", error);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 잘못된 토큰 테스트
|
|
*/
|
|
function testInvalidToken(): void {
|
|
console.log("\n=== 잘못된 토큰 테스트 ===");
|
|
|
|
try {
|
|
// 잘못된 토큰으로 검증 시도
|
|
const invalidToken = "invalid.token.here";
|
|
JwtUtils.verifyToken(invalidToken);
|
|
} catch (error) {
|
|
console.log(
|
|
"예상된 오류 (잘못된 토큰):",
|
|
error instanceof Error ? error.message : error
|
|
);
|
|
}
|
|
|
|
try {
|
|
// 만료된 토큰 테스트 (1초 후 만료되는 토큰 생성)
|
|
const shortLivedToken = JwtUtils.generateToken(testUserInfo);
|
|
// 실제로는 시간을 기다려야 하지만, 여기서는 검증 로직만 테스트
|
|
console.log("단기 토큰 생성 성공");
|
|
} catch (error) {
|
|
console.error("단기 토큰 생성 실패:", error);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 통합 테스트
|
|
*/
|
|
function integrationTest(): void {
|
|
console.log("\n=== 통합 테스트 ===");
|
|
|
|
try {
|
|
// 1. 비밀번호 암호화
|
|
const password = "user1234";
|
|
const encryptedPassword = PasswordUtils.encrypt(password);
|
|
console.log("1. 비밀번호 암호화 완료");
|
|
|
|
// 2. 사용자 정보로 JWT 토큰 생성
|
|
const userInfo: PersonBean = {
|
|
...testUserInfo,
|
|
userId: "integration_test_user",
|
|
};
|
|
const token = JwtUtils.generateToken(userInfo);
|
|
console.log("2. JWT 토큰 생성 완료");
|
|
|
|
// 3. 토큰에서 사용자 정보 추출
|
|
const extractedUserInfo = JwtUtils.verifyToken(token);
|
|
console.log("3. 토큰 검증 완료");
|
|
|
|
// 4. 비밀번호 검증
|
|
const passwordMatch = PasswordUtils.matches(password, encryptedPassword);
|
|
console.log("4. 비밀번호 검증 완료");
|
|
|
|
// 5. 결과 확인
|
|
const allTestsPassed =
|
|
passwordMatch &&
|
|
extractedUserInfo.userId === userInfo.userId &&
|
|
extractedUserInfo.userName === userInfo.userName;
|
|
|
|
console.log("통합 테스트 결과:", allTestsPassed ? "성공" : "실패");
|
|
} catch (error) {
|
|
console.error("통합 테스트 실패:", error);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 메인 테스트 실행
|
|
*/
|
|
function runAllTests(): void {
|
|
console.log("🚀 인증 시스템 테스트 시작");
|
|
console.log("=".repeat(50));
|
|
|
|
testPasswordUtils();
|
|
testJwtUtils();
|
|
testInvalidToken();
|
|
integrationTest();
|
|
|
|
console.log("\n" + "=".repeat(50));
|
|
console.log("✅ 인증 시스템 테스트 완료");
|
|
}
|
|
|
|
// 테스트 실행
|
|
if (require.main === module) {
|
|
runAllTests();
|
|
}
|
|
|
|
export {
|
|
testPasswordUtils,
|
|
testJwtUtils,
|
|
testInvalidToken,
|
|
integrationTest,
|
|
runAllTests,
|
|
};
|