|
3 | 3 | import app.AppsMap; |
4 | 4 | import app.component.App; |
5 | 5 | import app.component.Operator; |
| 6 | +import com.fasterxml.jackson.core.JsonProcessingException; |
| 7 | +import com.fasterxml.jackson.databind.ObjectMapper; |
6 | 8 | import com.uid2.client.DecryptionStatus; |
7 | 9 | import org.junit.jupiter.params.provider.Arguments; |
8 | 10 |
|
9 | | -import java.util.HashSet; |
10 | | -import java.util.List; |
11 | | -import java.util.Optional; |
12 | | -import java.util.Set; |
| 11 | +import java.util.*; |
13 | 12 | import java.util.stream.Collectors; |
14 | 13 | import java.util.stream.Stream; |
15 | 14 |
|
16 | 15 | import static org.junit.jupiter.api.Named.named; |
17 | 16 |
|
18 | 17 | public final class TestData { |
19 | 18 | public static final int RAW_UID2_LENGTH = 44; |
| 19 | + private static final Random RANDOM = new Random(); |
20 | 20 |
|
21 | 21 | private TestData() { |
22 | 22 | } |
@@ -326,6 +326,57 @@ public static Set<Arguments> identityMapBatchEmailArgs() { |
326 | 326 | return args; |
327 | 327 | } |
328 | 328 |
|
| 329 | + public static Set<Arguments> identityMapBigBatchArgs() throws JsonProcessingException { |
| 330 | + ObjectMapper mapper = new ObjectMapper(); |
| 331 | + Set<Operator> operators = AppsMap.getApps(Operator.class); |
| 332 | + |
| 333 | + List<String> emails = new ArrayList<>(); |
| 334 | + List<String> phones = new ArrayList<>(); |
| 335 | + List<String> emailHashes = new ArrayList<>(); |
| 336 | + List<String> phoneHashes = new ArrayList<>(); |
| 337 | + for (int i = 0; i < 10_000; i++) { |
| 338 | + emails.add(randomEmail()); |
| 339 | + phones.add(randomPhoneNumber()); |
| 340 | + emailHashes.add(randomHash()); |
| 341 | + phoneHashes.add(randomHash()); |
| 342 | + } |
| 343 | + |
| 344 | + var emailsPayload = identityMapPayload(mapper, "email", emails); |
| 345 | + var phonesPayload = identityMapPayload(mapper, "phone", phones); |
| 346 | + var emailHashesPayload = identityMapPayload(mapper, "email_hash", emailHashes); |
| 347 | + var phoneHashesPayload = identityMapPayload(mapper, "phone_hash", phoneHashes); |
| 348 | + |
| 349 | + Set<Arguments> args = new HashSet<>(); |
| 350 | + for (Operator operator : operators) { |
| 351 | + args.add(Arguments.of("10k emails", operator, operator.getName(), emailsPayload, emails)); |
| 352 | + args.add(Arguments.of("10k phones", operator, operator.getName(), phonesPayload, phones)); |
| 353 | + args.add(Arguments.of("10k email hashes", operator, operator.getName(), emailHashesPayload, emailHashes)); |
| 354 | + args.add(Arguments.of("10k phone hashes", operator, operator.getName(), phoneHashesPayload, phoneHashes)); |
| 355 | + } |
| 356 | + return args; |
| 357 | + } |
| 358 | + |
| 359 | + private static String identityMapPayload(ObjectMapper mapper, String field, List<String> diis) throws JsonProcessingException { |
| 360 | + var json = mapper.createObjectNode().putPOJO(field, diis).put("policy", 1); |
| 361 | + return mapper.writeValueAsString(json); |
| 362 | + } |
| 363 | + |
| 364 | + private static String randomEmail() { |
| 365 | + return "email_" + Math.abs(RANDOM.nextLong()) + "@example.com"; |
| 366 | + } |
| 367 | + |
| 368 | + private static String randomPhoneNumber() { |
| 369 | + // Phone numbers with 15 digits are technically valid but are not used in any country |
| 370 | + return "+" + String.format("%015d", Math.abs(RANDOM.nextLong() % 1_000_000_000_000_000L)); |
| 371 | + } |
| 372 | + |
| 373 | + private static String randomHash() { |
| 374 | + // This isn't really a hashed DII but looks like one ot UID2 |
| 375 | + byte[] randomBytes = new byte[32]; |
| 376 | + RANDOM.nextBytes(randomBytes); |
| 377 | + return Base64.getEncoder().encodeToString(randomBytes); |
| 378 | + } |
| 379 | + |
329 | 380 | public static Set<Arguments> identityMapBatchEmailArgsBadPolicy() { |
330 | 381 | Set<Operator> operators = getPublicOperators(); |
331 | 382 | Set<List<String>> inputs = Set.of( |
|
0 commit comments