최초커밋
This commit is contained in:
192
backend-node/src/test/auth-test.ts
Normal file
192
backend-node/src/test/auth-test.ts
Normal file
@@ -0,0 +1,192 @@
|
||||
// 인증 시스템 테스트 파일
|
||||
// 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,
|
||||
};
|
||||
Reference in New Issue
Block a user