- Удалены поле maxChars, параметр конструктора и метод evictWhileOverLimit. - Хранилище теперь ограничено только TTL (ttl-minutes), без вытеснения по объёму. - Конструкторы переведены на (int ttlMinutes) и (int ttlMinutes, SharedIndex, PayloadCipher). - Обновлены тесты и PipelineWarmup на новые сигнатуры.
55 lines
2.4 KiB
Java
55 lines
2.4 KiB
Java
package ru.pdguard;
|
|
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
import static org.junit.jupiter.api.Assertions.assertNotEquals;
|
|
|
|
import org.junit.jupiter.api.Test;
|
|
import ru.pdguard.core.PayloadCipher;
|
|
import ru.pdguard.core.PayloadStore;
|
|
|
|
/** Шифрование персональных данных в хранилище. */
|
|
class PayloadCipherTest {
|
|
|
|
/** 32 байта в hex — валидный AES-256 ключ. */
|
|
private static final String KEY =
|
|
"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f";
|
|
|
|
@Test
|
|
void encryptDecryptRoundTrip() {
|
|
PayloadCipher cipher = new PayloadCipher(KEY);
|
|
String original = "Клиент Иванов Иван Иванович, паспорт 4509 123456";
|
|
String encrypted = cipher.encrypt(original);
|
|
assertNotEquals(original, encrypted, "шифротекст не должен совпадать с исходником");
|
|
assertEquals(original, cipher.decrypt(encrypted), "должно расшифроваться обратно");
|
|
}
|
|
|
|
@Test
|
|
void disabledCipherPassesThrough() {
|
|
PayloadCipher cipher = PayloadCipher.disabled();
|
|
String original = "Клиент Иванов";
|
|
assertEquals(original, cipher.encrypt(original), "без ключа шифрование выключено");
|
|
assertEquals(original, cipher.decrypt(original), "без ключа дешифрование выключено");
|
|
}
|
|
|
|
@Test
|
|
void storeStoresEncryptedButReturnsPlaintext() {
|
|
PayloadCipher cipher = new PayloadCipher(KEY);
|
|
PayloadStore store =
|
|
new PayloadStore(30, ru.pdguard.core.SharedIndex.disabled(), cipher);
|
|
|
|
String original = "Клиент Иванов Иван Иванович, паспорт 4509 123456";
|
|
String masked = "Клиент И. И. И., паспорт 45** ****56";
|
|
store.put("test", "id-1", original, masked);
|
|
|
|
// Чтение по id возвращает исходный текст.
|
|
PayloadStore.Entry entry = store.byId("test", "id-1");
|
|
assertEquals(original, entry.original(), "чтение по id должно вернуть исходный текст");
|
|
|
|
// Чтение по маске возвращает исходный текст.
|
|
assertEquals(
|
|
original,
|
|
store.originalForMask("test", masked),
|
|
"чтение по маске должно вернуть исходный текст");
|
|
}
|
|
}
|