-
Notifications
You must be signed in to change notification settings - Fork 12
/
BenchmarkUtils.java
72 lines (64 loc) · 3.01 KB
/
BenchmarkUtils.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package dev.blaauwendraad.masker.json;
import dev.blaauwendraad.masker.randomgen.RandomJsonGenerator;
import dev.blaauwendraad.masker.randomgen.RandomJsonGeneratorConfig;
import java.util.HashSet;
import java.util.Set;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import static dev.blaauwendraad.masker.json.util.JsonStringCharacters.getPrintableAsciiCharacters;
import static dev.blaauwendraad.masker.json.util.JsonStringCharacters.getRandomPrintableUnicodeCharacters;
import static dev.blaauwendraad.masker.json.util.JsonStringCharacters.getUnicodeControlCharacters;
import static dev.blaauwendraad.masker.json.util.JsonStringCharacters.mergeCharSets;
public class BenchmarkUtils {
public static int parseSize(String size) {
// use regex to parse the jsonSize param
Pattern pattern = Pattern.compile("^(\\d+)(\\w+)$");
var matcher = pattern.matcher(size);
if (!matcher.find()) {
throw new IllegalArgumentException("Invalid size param: " + size);
}
int sizeBytes = Integer.parseInt(matcher.group(1));
String unit = matcher.group(2).toLowerCase();
switch (unit) {
case "kb":
sizeBytes *= 1024;
break;
case "mb":
sizeBytes *= 1024 * 1024;
break;
default:
throw new IllegalArgumentException("Invalid size param: " + size);
}
return sizeBytes;
}
public static Set<String> getTargetKeys(int count) {
Set<String> targetKeys = new HashSet<>();
for (int i = 0; i < count; i++) {
targetKeys.add("someSecret" + i);
}
return targetKeys;
}
public static String randomJson(Set<String> targetKeys, String jsonSize, String characters, double targetKeyPercentage) {
Set<Character> allowedCharacters = switch (characters) {
case "ascii (no quote)" -> getPrintableAsciiCharacters()
.stream()
.filter(c -> c != '"')
.collect(Collectors.toSet());
case "ascii" -> getPrintableAsciiCharacters();
case "unicode" -> mergeCharSets(
getPrintableAsciiCharacters(),
getUnicodeControlCharacters(),
getRandomPrintableUnicodeCharacters()
);
default -> throw new IllegalArgumentException("Invalid characters param: " + characters + ", must be one of: 'ascii (no quote)', 'ascii', 'unicode'");
};
RandomJsonGeneratorConfig config = RandomJsonGeneratorConfig.builder()
.setAllowedCharacters(allowedCharacters)
.setTargetKeys(targetKeys)
.setTargetKeyPercentage(targetKeyPercentage)
.setTargetJsonSizeBytes(BenchmarkUtils.parseSize(jsonSize))
.setRandomSeed(RandomJsonGenerator.STATIC_RANDOM_SEED)
.createConfig();
return new RandomJsonGenerator(config).createRandomJsonNode().toString();
}
}