From f0b126d736629fa37ca520bb079dc48ce70759d0 Mon Sep 17 00:00:00 2001 From: Rinjae Date: Thu, 25 Sep 2025 17:33:26 +0900 Subject: [PATCH] =?UTF-8?q?safedb=20=EB=94=94=EB=B2=84=EA=B9=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 28 ++++++--- .../kjb/safedb/test/SafeDbWrapperTest.java | 62 +++++++++++++++---- 2 files changed, 70 insertions(+), 20 deletions(-) diff --git a/build.gradle b/build.gradle index 1dffd5a..0e60404 100644 --- a/build.gradle +++ b/build.gradle @@ -104,6 +104,13 @@ dependencies { testRuntimeOnly 'com.h2database:h2:2.1.214' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' + testImplementation 'ch.qos.logback:logback-classic:1.2.10' + testImplementation 'ch.qos.logback:logback-access:1.2.10' + testImplementation 'ch.qos.logback:logback-core:1.2.10' + testImplementation 'org.slf4j:jul-to-slf4j:1.7.35' + testImplementation 'org.slf4j:jcl-over-slf4j:1.7.35' + testImplementation 'org.slf4j:log4j-over-slf4j:1.7.35' + testImplementation 'org.slf4j:slf4j-api:1.7.35' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' testRuntimeOnly 'org.junit.platform:junit-platform-launcher:1.8.2' @@ -195,14 +202,17 @@ idea { } -tasks.register("safedbTest", Test) { - description = "SafeDB 설치된 환경에서 동작 테스트" - group = "verification" +tasks.test { + if (project.hasProperty("safedb")) { + println "======================== SafeDB Classpath applied to test task =====================" - testClassesDirs = sourceSets.test.output.classesDirs - classPath = sourceSets.test.runtimeClasspath - classPath += files( - "/safedb/JavaAPI/config/", - "/safedb/JavaAPI/lib/*" - ) + classpath += files( + "/safedb/JavaAPI/config/", + "/safedb/JavaAPI/lib/*" + ) + + println "classpath : ${classpath}" + + systemProperty "safedb", project.property("safedb") + } } \ No newline at end of file diff --git a/src/test/java/com/eactive/ext/kjb/safedb/test/SafeDbWrapperTest.java b/src/test/java/com/eactive/ext/kjb/safedb/test/SafeDbWrapperTest.java index f2f8655..c143eb7 100644 --- a/src/test/java/com/eactive/ext/kjb/safedb/test/SafeDbWrapperTest.java +++ b/src/test/java/com/eactive/ext/kjb/safedb/test/SafeDbWrapperTest.java @@ -1,15 +1,23 @@ package com.eactive.ext.kjb.safedb.test; import com.eactive.ext.kjb.safedb.SafeDBWrapper; +import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.*; +@Slf4j public class SafeDbWrapperTest { @Test - public void faceSafeDBTest() { - log("FakeSafeDBWrapper Length Validation Start"); + public void fakeSafeDBTest() { + log.info("FakeSafeDBWrapper Length Validation Start"); + + if ("true".equalsIgnoreCase(System.getenv("safedb"))) { + log.info("실제 Safedb 테스트를 위해 테스트 종료 처리"); + assertTrue("true".equalsIgnoreCase(System.getenv("safedb"))); + return; + } SafeDBWrapper wrapper; try { @@ -20,13 +28,13 @@ public class SafeDbWrapperTest { throw new RuntimeException("SafeDBWrapper classloader error: " + e.getMessage(), e); } else { // initialization 에러(로컬에서는 동작하지 않는다 = 정상 처리) - log("SafeDBWrapper initialization error (expected in local environment): " + e.getMessage()); + log.info("SafeDBWrapper initialization error (expected in local environment): " + e.getMessage()); return; } } if (wrapper.isRealSafeDB()) { - log("This test is for FakeSafeDBWrapper only. Skipping test."); + log.info("This test is for FakeSafeDBWrapper only. Skipping test."); return; } @@ -45,7 +53,7 @@ public class SafeDbWrapperTest { assertEquals(originalData, decryptedData, "Decrypted data does not match original at plain length=" + len); // 로그 출력 - log(String.format("Plain=%3d, Encrypted=%3d, Expected=%3d %s", + log.info(String.format("Plain=%3d, Encrypted=%3d, Expected=%3d %s", len, encryptedData.length(), expectedLen, (encryptedData.length() == expectedLen ? "✔" : "❌"))); @@ -55,7 +63,7 @@ public class SafeDbWrapperTest { // 암복호화 로그 출력 - log(String.format("Original: %s", originalData) + + log.info(String.format("Original: %s", originalData) + String.format("\nEncrypted: %s", encryptedData) + String.format("\nDecrypted: %s", decryptedData) + "\n"); @@ -66,6 +74,42 @@ public class SafeDbWrapperTest { } } + @Test + public void safeDBTest() { + // safedb 프러퍼티가 활성화 일때만 동작 + if (!"true".equalsIgnoreCase(System.getProperty("safedb"))) { + log.info("gradle : -Psafedb 일때만 동작"); + return; + } + + SafeDBWrapper wrapper; + try { + wrapper = SafeDBWrapper.getInstance(); + } catch (Exception e) { + log.error("SafeDBWrapper 활성화 실패"); + fail(); + return; + } + + if (!wrapper.isRealSafeDB()) { + log.error("실제 Safedb 로 동작하지 않음"); + fail(); + return; + } + + String value = "test"; + log.info("Original : {}", value); + + String encryptValue = wrapper.encryptNotRnnoString(value); + log.info("Encrypted : {}", encryptValue); + + String decryptedValue = wrapper.decryptNotRnno(encryptValue); + log.info("Decrypted : {}", decryptedValue); + + + assertEquals(value, decryptedValue); + assertTrue(true); + } /** * 암호문 예상 길이 계산 (AES/SEED/ARIA CBC 기준, PKCS5Padding) */ @@ -90,8 +134,4 @@ public class SafeDbWrapperTest { } return sb.toString(); } - - private void log(String message) { - System.out.println(message); - } }