- Удалены поле maxChars, параметр конструктора и метод evictWhileOverLimit. - Хранилище теперь ограничено только TTL (ttl-minutes), без вытеснения по объёму. - Конструкторы переведены на (int ttlMinutes) и (int ttlMinutes, SharedIndex, PayloadCipher). - Обновлены тесты и PipelineWarmup на новые сигнатуры.
65 lines
2.7 KiB
Java
65 lines
2.7 KiB
Java
package ru.pdguard;
|
|
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
|
import static org.junit.jupiter.api.Assertions.assertNull;
|
|
|
|
import org.junit.jupiter.api.Test;
|
|
import ru.pdguard.core.PayloadStore;
|
|
|
|
/** Ограничения хранилища соответствий: срок жизни и разделение по системам. */
|
|
class PayloadStoreTest {
|
|
|
|
private static final String SYSTEM = "crm";
|
|
|
|
@Test
|
|
void returnsWhatWasStored() {
|
|
PayloadStore store = new PayloadStore(30);
|
|
store.put(SYSTEM, "id", "исходный текст", "маска");
|
|
|
|
PayloadStore.Entry entry = store.byId(SYSTEM, "id");
|
|
assertNotNull(entry);
|
|
assertEquals("исходный текст", entry.original());
|
|
assertEquals("маска", entry.masked());
|
|
assertEquals("исходный текст", store.originalForMask(SYSTEM, "маска"));
|
|
}
|
|
|
|
@Test
|
|
void forgetsEntriesAfterTheirLifetime() {
|
|
PayloadStore store = new PayloadStore(0);
|
|
store.put(SYSTEM, "id", "исходный текст", "маска");
|
|
|
|
assertNull(store.byId(SYSTEM, "id"), "запись с истёкшим сроком жизни не должна отдаваться");
|
|
assertNull(store.originalForMask(SYSTEM, "маска"));
|
|
}
|
|
|
|
@Test
|
|
void unknownKeysReturnNothing() {
|
|
PayloadStore store = new PayloadStore(30);
|
|
assertNull(store.byId(SYSTEM, "нет такого"));
|
|
assertNull(store.originalForMask(SYSTEM, "нет такой маски"));
|
|
}
|
|
|
|
/**
|
|
* Поиск по маске идёт только внутри своей системы. Маски детерминированы и низкоэнтропийны: без
|
|
* разделения чужую маску можно было бы подобрать и обменять на исходные данные другого
|
|
* потребителя.
|
|
*/
|
|
@Test
|
|
void oneSystemCannotReadAnotherSystemData() {
|
|
PayloadStore store = new PayloadStore(30);
|
|
store.put("crm", "общий-id", "Иванов Иван Иванович", "И. И. И.");
|
|
|
|
assertNull(
|
|
store.originalForMask("analytics", "И. И. И."),
|
|
"чужую маску нельзя обменять на исходный текст");
|
|
assertNull(
|
|
store.byId("analytics", "общий-id"),
|
|
"совпадение идентификатора у другой системы не даёт доступа");
|
|
assertEquals(
|
|
"Иванов Иван Иванович",
|
|
store.originalForMask("crm", "И. И. И."),
|
|
"своя система свои данные по-прежнему получает");
|
|
}
|
|
}
|