Skip to content

Commit 9ba5fa5

Browse files
committed
Added JsonNull handling in KeyParser
1 parent bd45979 commit 9ba5fa5

File tree

2 files changed

+86
-51
lines changed

2 files changed

+86
-51
lines changed

src/main/java/com/uid2/client/KeyParser.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ static KeyContainer parse(InputStream stream) {
4040
tokenExpirySeconds = defaultTokenExpiryDays * 24 * 60 * 60;
4141
}
4242

43-
JsonArray keysJson = body.get("keys").getAsJsonArray();
43+
JsonArray keysJson = isNull(body.get("keys")) ? new JsonArray() : body.get("keys").getAsJsonArray();
4444

4545
List<Key> keys = new ArrayList<>();
4646
for (JsonElement element : keysJson) {
@@ -62,10 +62,15 @@ static KeyContainer parse(InputStream stream) {
6262

6363
static private int getAsInt(JsonObject body, String memberName) {
6464
JsonElement element = body.get(memberName);
65-
return element == null ? 0 : element.getAsInt();
65+
return isNull(element) ? 0 : element.getAsInt();
6666
}
67+
6768
static private long getAsLong(JsonObject body, String memberName) {
6869
JsonElement element = body.get(memberName);
69-
return element == null ? 0 : element.getAsLong();
70+
return isNull(element) ? 0 : element.getAsLong();
71+
}
72+
73+
static private boolean isNull(JsonElement jo) {
74+
return jo == null || jo.isJsonNull();
7075
}
7176
}

src/test/java/com/uid2/client/KeyParserTests.java

Lines changed: 78 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -11,72 +11,102 @@
1111

1212
public class KeyParserTests {
1313
@Test
14-
public void parseKeyListSharingEndpoint() throws Exception
15-
{
14+
public void parseKeyListSharingEndpoint() {
1615
String s = "{ \"body\": { " +
1716
"\"caller_site_id\": 11, " +
1817
"\"master_keyset_id\": 1, " +
1918
"\"default_keyset_id\": 99999, " +
2019
"\"token_expiry_seconds\": 1728000, " +
2120
"\"keys\": [ " +
22-
"{ " +
23-
"\"id\": 3, " +
24-
"\"keyset_id\": 99999, " +
25-
"\"created\": 1609459200, " +
26-
"\"activates\": 1609459210, " +
27-
"\"expires\": 1893456000, " +
28-
"\"secret\": \"o8HsvkwJ5Ulnrd0uui3GpukpwDapj+JLqb7qfN/GJKo=\"" +
29-
"}, " +
30-
"{ " +
31-
"\"id\": 2, " +
32-
"\"keyset_id\": 1, " +
33-
"\"created\": 1609458200, " +
34-
"\"activates\": 1609459220, " +
35-
"\"expires\": 1893457000, " +
36-
"\"secret\": \"DD67xF8OFmbJ1/lMPQ6fGRDbJOT4kXErrYWcKdFfCUE=\"" +
37-
"} " +
21+
"{ " +
22+
"\"id\": 3, " +
23+
"\"keyset_id\": 99999, " +
24+
"\"created\": 1609459200, " +
25+
"\"activates\": 1609459210, " +
26+
"\"expires\": 1893456000, " +
27+
"\"secret\": \"o8HsvkwJ5Ulnrd0uui3GpukpwDapj+JLqb7qfN/GJKo=\"" +
28+
"}, " +
29+
"{ " +
30+
"\"id\": 2, " +
31+
"\"keyset_id\": 1, " +
32+
"\"created\": 1609458200, " +
33+
"\"activates\": 1609459220, " +
34+
"\"expires\": 1893457000, " +
35+
"\"secret\": \"DD67xF8OFmbJ1/lMPQ6fGRDbJOT4kXErrYWcKdFfCUE=\"" +
36+
"} " +
3837
"] " +
3938
"}, " +
4039
"\"status\": \"success\" }";
4140

4241
KeyContainer keyContainer = parse(s);
43-
44-
assertEquals(11, keyContainer.getCallerSiteId());
4542
Key masterKey = keyContainer.getMasterKey(Instant.now());
46-
assertNotNull(masterKey);
47-
assertEquals(2, masterKey.getId());
48-
4943
Key defaultKey = keyContainer.getDefaultKey(Instant.now());
50-
assertNotNull(defaultKey);
51-
assertEquals(3, defaultKey.getId());
52-
assertEquals(1728000, keyContainer.getTokenExpirySeconds());
53-
54-
Key key = keyContainer.getKey(3);
55-
assertNotNull(key);
56-
assertEquals(99999, key.getKeysetId());
57-
assertEquals(Instant.ofEpochSecond(1609459200), key.getCreated());
58-
assertEquals(Instant.ofEpochSecond(1609459210), key.getActivates());
59-
assertEquals(Instant.ofEpochSecond(1893456000), key.getExpires());
60-
assertEquals("o8HsvkwJ5Ulnrd0uui3GpukpwDapj+JLqb7qfN/GJKo=", InputUtil.byteArrayToBase64(key.getSecret()));
44+
Key key3 = keyContainer.getKey(3);
45+
Key key2 = keyContainer.getKey(2);
6146

62-
key = keyContainer.getKey(2);
63-
assertNotNull(key);
64-
assertEquals(1, key.getKeysetId());
65-
assertEquals(Instant.ofEpochSecond(1609458200), key.getCreated());
66-
assertEquals(Instant.ofEpochSecond(1609459220), key.getActivates());
67-
assertEquals(Instant.ofEpochSecond(1893457000), key.getExpires());
68-
assertEquals("DD67xF8OFmbJ1/lMPQ6fGRDbJOT4kXErrYWcKdFfCUE=", InputUtil.byteArrayToBase64(key.getSecret()));
47+
assertAll(
48+
"parseKeyListSharingEndpoint",
49+
() -> assertEquals(11, keyContainer.getCallerSiteId()),
50+
() -> assertEquals(1728000, keyContainer.getTokenExpirySeconds()),
51+
() -> assertAll(
52+
"parseKeyListSharingEndpoint - masterKey",
53+
() -> assertNotNull(masterKey),
54+
() -> assertEquals(2, masterKey.getId())
55+
),
56+
() -> assertAll(
57+
"parseKeyListSharingEndpoint - defaultKey",
58+
() -> assertNotNull(defaultKey),
59+
() -> assertEquals(3, defaultKey.getId())
60+
),
61+
() -> assertAll(
62+
"parseKeyListSharingEndpoint - key3",
63+
() -> assertNotNull(key3),
64+
() -> assertEquals(99999, key3.getKeysetId()),
65+
() -> assertEquals(Instant.ofEpochSecond(1609459200), key3.getCreated()),
66+
() -> assertEquals(Instant.ofEpochSecond(1609459210), key3.getActivates()),
67+
() -> assertEquals(Instant.ofEpochSecond(1893456000), key3.getExpires()),
68+
() -> assertEquals("o8HsvkwJ5Ulnrd0uui3GpukpwDapj+JLqb7qfN/GJKo=", InputUtil.byteArrayToBase64(key3.getSecret()))
69+
),
70+
() -> assertAll(
71+
"parseKeyListSharingEndpoint - key2",
72+
() -> assertNotNull(key2),
73+
() -> assertEquals(1, key2.getKeysetId()),
74+
() -> assertEquals(Instant.ofEpochSecond(1609458200), key2.getCreated()),
75+
() -> assertEquals(Instant.ofEpochSecond(1609459220), key2.getActivates()),
76+
() -> assertEquals(Instant.ofEpochSecond(1893457000), key2.getExpires()),
77+
() -> assertEquals("DD67xF8OFmbJ1/lMPQ6fGRDbJOT4kXErrYWcKdFfCUE=", InputUtil.byteArrayToBase64(key2.getSecret()))
78+
)
79+
);
6980
}
7081

71-
7282
@Test
7383
public void parseErrorKeyList() {
74-
assertThrows(Exception.class, () -> parse("{\"status\": \"error\"}"));
75-
assertThrows(Exception.class, () -> parse("{\"body\": \"error\"}"));
76-
assertThrows(Exception.class, () -> parse("{\"body\": [1, 2, 3]}"));
77-
assertThrows(Exception.class, () -> parse("{\"body\": [{}]}"));
78-
assertThrows(Exception.class, () -> parse("{\"body\": [{\"id\": \"test\"}]}"));
79-
assertThrows(Exception.class, () -> parse("{\"body\": [{\"id\": 5}]}"));
84+
assertAll(
85+
"parseErrorKeyList",
86+
() -> assertThrows(Exception.class, () -> parse("{\"status\": \"error\"}")),
87+
() -> assertThrows(Exception.class, () -> parse("{\"body\": \"error\"}")),
88+
() -> assertThrows(Exception.class, () -> parse("{\"body\": [1, 2, 3]}")),
89+
() -> assertThrows(Exception.class, () -> parse("{\"body\": [{}]}")),
90+
() -> assertThrows(Exception.class, () -> parse("{\"body\": [{\"id\": \"test\"}]}")),
91+
() -> assertThrows(Exception.class, () -> parse("{\"body\": [{\"id\": 5}]}"))
92+
);
93+
}
94+
95+
@Test
96+
public void parseWithNull() {
97+
String s = "{ \"body\": { " +
98+
"\"caller_site_id\": 11, " +
99+
"\"token_expiry_seconds\": null " +
100+
"}, " +
101+
"\"status\": \"success\" }";
102+
103+
KeyContainer keyContainer = parse(s);
104+
105+
assertAll(
106+
"parseWithNull",
107+
() -> assertEquals(11, keyContainer.getCallerSiteId()),
108+
() -> assertEquals(2592000, keyContainer.getTokenExpirySeconds())
109+
);
80110
}
81111

82112
private KeyContainer parse(String str) {

0 commit comments

Comments
 (0)