PD Guard: модуль безопасности персональных данных
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
package ru.pdguard;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
import ru.pdguard.config.SystemPolicy;
|
||||
import ru.pdguard.core.PayloadStore;
|
||||
import ru.pdguard.core.Pipeline;
|
||||
import ru.pdguard.detect.NameCascade;
|
||||
import ru.pdguard.detect.RuleRegistry;
|
||||
import ru.pdguard.mask.Masker;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Optional;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
|
||||
/** Вторая ступень не должна вредить первой. */
|
||||
class NameCascadeTest {
|
||||
|
||||
private static final String TEXT = "Клиент Иванов Иван Иванович, паспорт 4509 123456";
|
||||
|
||||
private String mask(NameCascade cascade, String payloadId) {
|
||||
Pipeline pipeline = new Pipeline(new RuleRegistry(), new Masker(),
|
||||
new PayloadStore(1_000_000L, 30), cascade);
|
||||
return pipeline.process(TEXT, payloadId, SystemPolicy.DEFAULT);
|
||||
}
|
||||
|
||||
@Test
|
||||
void withoutModelTheStageIsOff() {
|
||||
NameCascade cascade = NameCascade.disabled();
|
||||
assertFalse(cascade.enabled());
|
||||
assertEquals("Клиент И. И. И., паспорт 45** ****56", mask(cascade, "off-1"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void missingModelFileDoesNotBreakMasking(@TempDir Path dir) {
|
||||
NameCascade cascade = new NameCascade("rubert", Optional.of(dir.resolve("нет-такого-каталога").toString()), 16, 4);
|
||||
assertFalse(cascade.enabled(), "отсутствующая модель должна выключать ступень");
|
||||
assertEquals("Клиент И. И. И., паспорт 45** ****56", mask(cascade, "missing-1"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void brokenModelFileDoesNotBreakMasking(@TempDir Path dir) throws IOException {
|
||||
Path broken = dir.resolve("испорченная-модель");
|
||||
Files.createDirectories(broken);
|
||||
for (String name : new String[]{"model_int8.onnx", "vocab.txt", "config.json"}) {
|
||||
Files.writeString(broken.resolve(name), "это не модель", StandardCharsets.UTF_8);
|
||||
}
|
||||
|
||||
NameCascade cascade = new NameCascade("rubert", Optional.of(broken.toString()), 16, 4);
|
||||
assertFalse(cascade.enabled(), "испорченная модель должна выключать ступень");
|
||||
assertEquals("Клиент И. И. И., паспорт 45** ****56", mask(cascade, "broken-1"),
|
||||
"маскирование по правилам обязано работать и без второй ступени");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user