ERP-node/backend-node/src/test/auth-test.ts

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,
};