Skip to content

Commit 66c8bc9

Browse files
authored
Fixes "Bad JSON: expected object value" (#395)
* Fixes "Bad JSON: expected object value" * Added Unit Tests * Removed unused line
1 parent 5d56ba0 commit 66c8bc9

File tree

6 files changed

+334
-0
lines changed

6 files changed

+334
-0
lines changed

src/main/java/com/dropbox/core/stone/StoneSerializer.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ protected static void skipFields(JsonParser p) throws IOException, JsonParseExce
129129
while (p.getCurrentToken() != null && !p.getCurrentToken().isStructEnd()) {
130130
if (p.getCurrentToken().isStructStart()) {
131131
p.skipChildren();
132+
p.nextToken();
132133
} else if (p.getCurrentToken() == JsonToken.FIELD_NAME) {
133134
p.nextToken();
134135
} else if (p.getCurrentToken().isScalarValue()) {
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package com.dropbox.core.v2.teamlog;
2+
3+
import org.testng.annotations.Test;
4+
5+
import java.io.File;
6+
import java.io.IOException;
7+
import java.nio.charset.StandardCharsets;
8+
import java.nio.file.Files;
9+
import java.nio.file.Path;
10+
11+
import static org.testng.AssertJUnit.assertEquals;
12+
import static org.testng.AssertJUnit.assertTrue;
13+
14+
public class GetTeamEventsResultTest {
15+
16+
17+
/**
18+
* Tests a known type that has extra fields
19+
*
20+
* Happy path for known objects
21+
*/
22+
@Test
23+
public void known_with_body() throws IOException {
24+
GetTeamEventsResult result = readGetTeamEventsResultFromFile("known_with_body.json");
25+
TeamEvent event = result.events.get(0);
26+
assertEquals(EventDetails.Tag.FILE_LOCKING_LOCK_STATUS_CHANGED_DETAILS, event.details.tag());
27+
}
28+
29+
/**
30+
* Tests a known type that should have extra fields, but does not, so should throw exception
31+
*
32+
* Sad path for known objects without required fields
33+
*/
34+
@Test
35+
public void known_without_body() {
36+
try {
37+
GetTeamEventsResult result = readGetTeamEventsResultFromFile("known_without_body.json");
38+
} catch (Exception e) {
39+
assertTrue(e.getMessage().startsWith("Required field \"previous_value\" missing."));
40+
}
41+
}
42+
43+
/**
44+
* Tests backwards compatibility when receiving unknown types that do have extra fields
45+
*
46+
* Basic test for a new tag with no fields.
47+
*/
48+
@Test
49+
public void unknown_with_body() throws IOException {
50+
GetTeamEventsResult result = readGetTeamEventsResultFromFile("unknown_with_body.json");
51+
assertEquals(EventDetails.Tag.OTHER, result.events.get(0).details.tag());
52+
}
53+
54+
/**
55+
* Tests backwards compatibility when receiving unknown types that don't have extra fields
56+
*/
57+
@Test
58+
public void unknown_without_body() throws IOException {
59+
GetTeamEventsResult result = readGetTeamEventsResultFromFile("unknown_without_body.json");
60+
assertEquals(EventDetails.Tag.OTHER, result.events.get(0).details.tag());
61+
}
62+
63+
private GetTeamEventsResult readGetTeamEventsResultFromFile(String filename) throws IOException {
64+
String json = readJsonFromFile(filename);
65+
return GetTeamEventsResult.Serializer.INSTANCE.deserialize(json);
66+
}
67+
68+
private String readJsonFromFile(String filename) throws IOException {
69+
File file = new File("src/test/java/com/dropbox/core/v2/teamlog/" + filename);
70+
System.out.println(file.getCanonicalPath());
71+
return Files.readString(Path.of(file.toURI()), StandardCharsets.US_ASCII);
72+
}
73+
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
{
2+
"events": [
3+
{
4+
"timestamp": "2020-05-14T15:58:15Z",
5+
"event_category": {
6+
".tag": "file_operations"
7+
},
8+
"actor": {
9+
".tag": "admin",
10+
"admin": {
11+
".tag": "team_member",
12+
"account_id": "dbid:AAAZ86YODCBh5Jen6VnAdG85KJrv1KNkkFQ",
13+
"display_name": "db test",
14+
"email": "testing@example.com",
15+
"team_member_id": "dbmid:AADKrgMss5NUAOy0dFNSF3TZjxjn_rGACdM"
16+
}
17+
},
18+
"origin": {
19+
"access_method": {
20+
".tag": "end_user",
21+
"end_user": {
22+
".tag": "web",
23+
"session_id": ""
24+
}
25+
}
26+
},
27+
"involve_non_team_member": false,
28+
"context": {
29+
".tag": "team_member",
30+
"account_id": "dbid:AAAZ86YODCBh5Jen6VnAdG85KJrv1KNkkFQ",
31+
"display_name": "db test",
32+
"email": "testing@example.com",
33+
"team_member_id": "dbmid:AADKrgMss5NUAOy0dFNSF3TZjxjn_rGACdM"
34+
},
35+
"participants": [],
36+
"assets": [
37+
{
38+
".tag": "file",
39+
"path": {
40+
"contextual": "/some shared folder/test.txt",
41+
"namespace_relative": {
42+
"ns_id": "7662767952",
43+
"relative_path": "/test.txt",
44+
"is_shared_namespace": true
45+
}
46+
},
47+
"display_name": "test.txt",
48+
"file_id": "id:l1eKEQ3VrqAAAAAAAAAAHw"
49+
}
50+
],
51+
"event_type": {
52+
".tag": "file_locking_lock_status_changed",
53+
"description": "Locked/unlocked editing for a file"
54+
},
55+
"details": {
56+
".tag": "file_locking_lock_status_changed_details",
57+
"previous_value": {
58+
".tag": "locked"
59+
},
60+
"new_value": {
61+
".tag": "unlocked"
62+
}
63+
}
64+
}
65+
],
66+
"cursor": "AABnfF2cvbaP2c1zmbwY8KITrkCjf7V94-BrRsRk3cg3wU6zJP-h0Sh7T8ORvxupn6uvS7Rl_B9uJJ3tp0DbTPCi2aBTw_-z9OnGkGLoEvuMhO1mdRGXGOayxbOEaKM2_m9N4M4lSGZMawU1jJA9z6e7kQ60tHHz8wZoz_Nhu7Wk339vZSIUEIvIeeTch3lEfkODfUs4fWZzPELX9n-qc4qnL14fl59_sVS9_jCceufRl3ichwLnEPOiIT6HHZ3EirPQrg4J7FybSluiHZR7o01BkB3ENK-zlXu7R8ObPLSrYLcGi5tkBa2XVGp4lDXM4rt7CTNDQqZG9Hb36SH0QkJQ7KCZ1zV0_9r5BtpCBHiETw",
67+
"has_more": false
68+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
{
2+
"events": [
3+
{
4+
"timestamp": "2020-05-14T15:58:15Z",
5+
"event_category": {
6+
".tag": "file_operations"
7+
},
8+
"actor": {
9+
".tag": "admin",
10+
"admin": {
11+
".tag": "team_member",
12+
"account_id": "dbid:AAAZ86YODCBh5Jen6VnAdG85KJrv1KNkkFQ",
13+
"display_name": "db test",
14+
"email": "testing@example.com",
15+
"team_member_id": "dbmid:AADKrgMss5NUAOy0dFNSF3TZjxjn_rGACdM"
16+
}
17+
},
18+
"origin": {
19+
"access_method": {
20+
".tag": "end_user",
21+
"end_user": {
22+
".tag": "web",
23+
"session_id": ""
24+
}
25+
}
26+
},
27+
"involve_non_team_member": false,
28+
"context": {
29+
".tag": "team_member",
30+
"account_id": "dbid:AAAZ86YODCBh5Jen6VnAdG85KJrv1KNkkFQ",
31+
"display_name": "db test",
32+
"email": "testing@example.com",
33+
"team_member_id": "dbmid:AADKrgMss5NUAOy0dFNSF3TZjxjn_rGACdM"
34+
},
35+
"participants": [],
36+
"assets": [
37+
{
38+
".tag": "file",
39+
"path": {
40+
"contextual": "/some shared folder/test.txt",
41+
"namespace_relative": {
42+
"ns_id": "7662767952",
43+
"relative_path": "/test.txt",
44+
"is_shared_namespace": true
45+
}
46+
},
47+
"display_name": "test.txt",
48+
"file_id": "id:l1eKEQ3VrqAAAAAAAAAAHw"
49+
}
50+
],
51+
"event_type": {
52+
".tag": "file_locking_lock_status_changed",
53+
"description": "Locked/unlocked editing for a file"
54+
},
55+
"details": {
56+
".tag": "file_locking_lock_status_changed_details"
57+
}
58+
}
59+
],
60+
"cursor": "AABnfF2cvbaP2c1zmbwY8KITrkCjf7V94-BrRsRk3cg3wU6zJP-h0Sh7T8ORvxupn6uvS7Rl_B9uJJ3tp0DbTPCi2aBTw_-z9OnGkGLoEvuMhO1mdRGXGOayxbOEaKM2_m9N4M4lSGZMawU1jJA9z6e7kQ60tHHz8wZoz_Nhu7Wk339vZSIUEIvIeeTch3lEfkODfUs4fWZzPELX9n-qc4qnL14fl59_sVS9_jCceufRl3ichwLnEPOiIT6HHZ3EirPQrg4J7FybSluiHZR7o01BkB3ENK-zlXu7R8ObPLSrYLcGi5tkBa2XVGp4lDXM4rt7CTNDQqZG9Hb36SH0QkJQ7KCZ1zV0_9r5BtpCBHiETw",
61+
"has_more": false
62+
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
{
2+
"events": [
3+
{
4+
"timestamp": "2020-05-14T15:58:15Z",
5+
"event_category": {
6+
".tag": "file_operations"
7+
},
8+
"actor": {
9+
".tag": "admin",
10+
"admin": {
11+
".tag": "team_member",
12+
"account_id": "dbid:AAAZ86YODCBh5Jen6VnAdG85KJrv1KNkkFQ",
13+
"display_name": "db test",
14+
"email": "testing@example.com",
15+
"team_member_id": "dbmid:AADKrgMss5NUAOy0dFNSF3TZjxjn_rGACdM"
16+
}
17+
},
18+
"origin": {
19+
"access_method": {
20+
".tag": "end_user",
21+
"end_user": {
22+
".tag": "web",
23+
"session_id": ""
24+
}
25+
}
26+
},
27+
"involve_non_team_member": false,
28+
"context": {
29+
".tag": "team_member",
30+
"account_id": "dbid:AAAZ86YODCBh5Jen6VnAdG85KJrv1KNkkFQ",
31+
"display_name": "db test",
32+
"email": "testing@example.com",
33+
"team_member_id": "dbmid:AADKrgMss5NUAOy0dFNSF3TZjxjn_rGACdM"
34+
},
35+
"participants": [],
36+
"assets": [
37+
{
38+
".tag": "file",
39+
"path": {
40+
"contextual": "/some shared folder/test.txt",
41+
"namespace_relative": {
42+
"ns_id": "7662767952",
43+
"relative_path": "/test.txt",
44+
"is_shared_namespace": true
45+
}
46+
},
47+
"display_name": "test.txt",
48+
"file_id": "id:l1eKEQ3VrqAAAAAAAAAAHw"
49+
}
50+
],
51+
"event_type": {
52+
".tag": "file_locking_lock_status_changed",
53+
"description": "Locked/unlocked editing for a file"
54+
},
55+
"details": {
56+
".tag": "abcdefg",
57+
"previous_value": {
58+
".tag": "locked"
59+
},
60+
"new_value": {
61+
".tag": "unlocked"
62+
}
63+
}
64+
}
65+
],
66+
"cursor": "AABnfF2cvbaP2c1zmbwY8KITrkCjf7V94-BrRsRk3cg3wU6zJP-h0Sh7T8ORvxupn6uvS7Rl_B9uJJ3tp0DbTPCi2aBTw_-z9OnGkGLoEvuMhO1mdRGXGOayxbOEaKM2_m9N4M4lSGZMawU1jJA9z6e7kQ60tHHz8wZoz_Nhu7Wk339vZSIUEIvIeeTch3lEfkODfUs4fWZzPELX9n-qc4qnL14fl59_sVS9_jCceufRl3ichwLnEPOiIT6HHZ3EirPQrg4J7FybSluiHZR7o01BkB3ENK-zlXu7R8ObPLSrYLcGi5tkBa2XVGp4lDXM4rt7CTNDQqZG9Hb36SH0QkJQ7KCZ1zV0_9r5BtpCBHiETw",
67+
"has_more": false
68+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
{
2+
"events": [
3+
{
4+
"timestamp": "2020-05-14T15:58:15Z",
5+
"event_category": {
6+
".tag": "file_operations"
7+
},
8+
"actor": {
9+
".tag": "admin",
10+
"admin": {
11+
".tag": "team_member",
12+
"account_id": "dbid:AAAZ86YODCBh5Jen6VnAdG85KJrv1KNkkFQ",
13+
"display_name": "db test",
14+
"email": "testing@example.com",
15+
"team_member_id": "dbmid:AADKrgMss5NUAOy0dFNSF3TZjxjn_rGACdM"
16+
}
17+
},
18+
"origin": {
19+
"access_method": {
20+
".tag": "end_user",
21+
"end_user": {
22+
".tag": "web",
23+
"session_id": ""
24+
}
25+
}
26+
},
27+
"involve_non_team_member": false,
28+
"context": {
29+
".tag": "team_member",
30+
"account_id": "dbid:AAAZ86YODCBh5Jen6VnAdG85KJrv1KNkkFQ",
31+
"display_name": "db test",
32+
"email": "testing@example.com",
33+
"team_member_id": "dbmid:AADKrgMss5NUAOy0dFNSF3TZjxjn_rGACdM"
34+
},
35+
"participants": [],
36+
"assets": [
37+
{
38+
".tag": "file",
39+
"path": {
40+
"contextual": "/some shared folder/test.txt",
41+
"namespace_relative": {
42+
"ns_id": "7662767952",
43+
"relative_path": "/test.txt",
44+
"is_shared_namespace": true
45+
}
46+
},
47+
"display_name": "test.txt",
48+
"file_id": "id:l1eKEQ3VrqAAAAAAAAAAHw"
49+
}
50+
],
51+
"event_type": {
52+
".tag": "file_locking_lock_status_changed",
53+
"description": "Locked/unlocked editing for a file"
54+
},
55+
"details": {
56+
".tag": "abcdefg"
57+
}
58+
}
59+
],
60+
"cursor": "AABnfF2cvbaP2c1zmbwY8KITrkCjf7V94-BrRsRk3cg3wU6zJP-h0Sh7T8ORvxupn6uvS7Rl_B9uJJ3tp0DbTPCi2aBTw_-z9OnGkGLoEvuMhO1mdRGXGOayxbOEaKM2_m9N4M4lSGZMawU1jJA9z6e7kQ60tHHz8wZoz_Nhu7Wk339vZSIUEIvIeeTch3lEfkODfUs4fWZzPELX9n-qc4qnL14fl59_sVS9_jCceufRl3ichwLnEPOiIT6HHZ3EirPQrg4J7FybSluiHZR7o01BkB3ENK-zlXu7R8ObPLSrYLcGi5tkBa2XVGp4lDXM4rt7CTNDQqZG9Hb36SH0QkJQ7KCZ1zV0_9r5BtpCBHiETw",
61+
"has_more": false
62+
}

0 commit comments

Comments
 (0)