package jnpf.limsService.support; import jnpf.audit.sdk.aspect.AuditLogAspect; import jnpf.limsEntity.LimsQingyandanEntity; import java.lang.reflect.Method; import java.util.Map; /** Verifies that layer-2 entity snapshots use physical database column names. */ public final class AuditLogEntityColumnProbe { private AuditLogEntityColumnProbe() { } @SuppressWarnings("unchecked") public static void main(String[] args) throws Exception { LimsQingyandanEntity entity = new LimsQingyandanEntity(); entity.setId("row-1"); entity.setBizStatus("confirmed"); entity.setBizSign("sign-reference"); Method mapper = AuditLogAspect.class.getDeclaredMethod("entityToColumnMap", Object.class); mapper.setAccessible(true); Map columns = (Map) mapper.invoke(null, entity); check("row-1".equals(columns.get("f_id")), "@TableId f_id"); check("confirmed".equals(columns.get("biz_status")), "@TableField biz_status"); check("sign-reference".equals(columns.get("biz_sign")), "diff value is not masked"); check(!columns.containsKey("bizStatus") && !columns.containsKey("bizSign"), "Java property names must not leak into field_diffs"); System.out.println("AuditLogEntityColumnProbe: all checks passed"); } private static void check(boolean condition, String name) { if (!condition) { throw new AssertionError(name); } } }