Skip to content

Commit

Permalink
Added JSON-powered BSON encoding and decoding tests of well-formed an…
Browse files Browse the repository at this point in the history
…d corrupted BSON

   JAVA-1864
  • Loading branch information
jyemin committed Jun 22, 2015
1 parent f6cc807 commit 8c5a20d
Show file tree
Hide file tree
Showing 15 changed files with 447 additions and 7 deletions.
37 changes: 37 additions & 0 deletions bson/src/test/resources/bson/array.json
@@ -0,0 +1,37 @@
{
"description": "Array type",
"documents": [
{
"decoded": {
"a": []
},
"encoded": "0D000000046100050000000000"
},
{
"decoded": {
"a": [
10
]
},
"encoded": "140000000461000C0000001030000A0000000000"
},
{
"decodeOnly": true,
"decoded": {
"a": [
10
]
},
"encoded": "130000000461000B00000010000A0000000000"
},
{
"decodeOnly": true,
"decoded": {
"a": [
10
]
},
"encoded": "150000000461000D000000106162000A0000000000"
}
]
}
17 changes: 17 additions & 0 deletions bson/src/test/resources/bson/boolean.json
@@ -0,0 +1,17 @@
{
"description": "Boolean type",
"documents": [
{
"decoded": {
"b": true
},
"encoded": "090000000862000100"
},
{
"decoded": {
"b": false
},
"encoded": "090000000862000000"
}
]
}
205 changes: 205 additions & 0 deletions bson/src/test/resources/bson/corrupted.json
@@ -0,0 +1,205 @@
{
"description": "Corrupted BSON",
"documents": [
{
"encoded": "09000000016600",
"error": "truncated double"
},
{
"encoded": "09000000026600",
"error": "truncated string"
},
{
"encoded": "09000000036600",
"error": "truncated document"
},
{
"encoded": "09000000046600",
"error": "truncated array"
},
{
"encoded": "09000000056600",
"error": "truncated binary"
},
{
"encoded": "09000000076600",
"error": "truncated objectid"
},
{
"encoded": "09000000086600",
"error": "truncated boolean"
},
{
"encoded": "09000000096600",
"error": "truncated date"
},
{
"encoded": "090000000b6600",
"error": "truncated regex"
},
{
"encoded": "090000000c6600",
"error": "truncated db pointer"
},
{
"encoded": "0C0000000d6600",
"error": "truncated javascript"
},
{
"encoded": "0C0000000e6600",
"error": "truncated symbol"
},
{
"encoded": "0C0000000f6600",
"error": "truncated javascript with scope"
},
{
"encoded": "0C000000106600",
"error": "truncated int32"
},
{
"encoded": "0C000000116600",
"error": "truncated timestamp"
},
{
"encoded": "0C000000126600",
"error": "truncated int64"
},
{
"encoded": "0400000000",
"error": "basic"
},
{
"encoded": "0500000001",
"error": "basic"
},
{
"encoded": "05000000",
"error": "basic"
},
{
"encoded": "0700000002610078563412",
"error": "basic"
},
{
"encoded": "090000001061000500",
"error": "basic"
},
{
"encoded": "00000000000000000000",
"error": "basic"
},
{
"encoded": "1300000002666f6f00040000006261720000",
"error": "basic"
},
{
"encoded": "1800000003666f6f000f0000001062617200ffffff7f0000",
"error": "basic"
},
{
"encoded": "1500000003666f6f000c0000000862617200010000",
"error": "basic"
},
{
"encoded": "1c00000003666f6f001200000002626172000500000062617a000000",
"error": "basic"
},
{
"encoded": "1000000002610004000000616263ff00",
"error": "string is not null-terminated"
},
{
"encoded": "0c0000000200000000000000",
"error": "bad_string_length"
},
{
"encoded": "120000000200ffffffff666f6f6261720000",
"error": "bad_string_length"
},
{
"encoded": "0c0000000e00000000000000",
"error": "bad_string_length"
},
{
"encoded": "120000000e00ffffffff666f6f6261720000",
"error": "bad_string_length"
},
{
"encoded": "180000000c00fa5bd841d6585d9900",
"error": ""
},
{
"encoded": "1e0000000c00ffffffff666f6f626172005259b56afa5bd841d6585d9900",
"error": "bad_string_length"
},
{
"encoded": "0c0000000d00000000000000",
"error": "bad_string_length"
},
{
"encoded": "0c0000000d00ffffffff0000",
"error": "bad_string_length"
},
{
"encoded": "1c0000000f001500000000000000000c000000020001000000000000",
"error": "bad_string_length"
},
{
"encoded": "1c0000000f0015000000ffffffff000c000000020001000000000000",
"error": "bad_string_length"
},
{
"encoded": "1c0000000f001500000001000000000c000000020000000000000000",
"error": "bad_string_length"
},
{
"encoded": "1c0000000f001500000001000000000c0000000200ffffffff000000",
"error": "bad_string_length"
},
{
"encoded": "0E00000008616263646566676869707172737475",
"error": "Run-on CString"
},
{
"encoded": "0100000000",
"error": "An object size that's too small to even include the object size, but is correctly encoded, along with a correct EOO (and no data)"
},
{
"encoded": "1a0000000e74657374000c00000068656c6c6f20776f726c6400000500000000",
"error": "One object, but with object size listed smaller than it is in the data"
},
{
"encoded": "05000000",
"error": "One object, missing the EOO at the end"
},
{
"encoded": "0500000001",
"error": "One object, sized correctly, with a spot for an EOO, but the EOO is 0x01"
},
{
"encoded": "05000000ff",
"error": "One object, sized correctly, with a spot for an EOO, but the EOO is 0xff"
},
{
"encoded": "0500000070",
"error": "One object, sized correctly, with a spot for an EOO, but the EOO is 0x70"
},
{
"encoded": "07000000000000",
"error": "Invalid BSON type low range"
},
{
"encoded": "07000000800000",
"error": "Invalid BSON type high range"
},
{
"encoded": "090000000862000200",
"error": "Invalid boolean value of 2"
},
{
"encoded": "09000000086200ff00",
"error": "Invalid boolean value of -1"
}
]
}
35 changes: 35 additions & 0 deletions bson/src/test/resources/bson/int32.json
@@ -0,0 +1,35 @@
{
"description": "Int32 type",
"documents": [
{
"decoded": {
"i": -2147483648
},
"encoded": "0C0000001069000000008000"
},
{
"decoded": {
"i": 2147483647
},
"encoded": "0C000000106900FFFFFF7F00"
},
{
"decoded": {
"i": -1
},
"encoded": "0C000000106900FFFFFFFF00"
},
{
"decoded": {
"i": 0
},
"encoded": "0C0000001069000000000000"
},
{
"decoded": {
"i": 1
},
"encoded": "0C0000001069000100000000"
}
]
}
29 changes: 29 additions & 0 deletions bson/src/test/resources/bson/string.json
@@ -0,0 +1,29 @@
{
"description": "String type",
"documents": [
{
"decoded": {
"s": ""
},
"encoded": "0D000000027300010000000000"
},
{
"decoded": {
"s": "a"
},
"encoded": "0E00000002730002000000610000"
},
{
"decoded": {
"s": "This is a string"
},
"encoded": "1D0000000273001100000054686973206973206120737472696E670000"
},
{
"decoded": {
"s": "\u03ba\u1f79\u03c3\u03bc\u03b5"
},
"encoded": "180000000273000C000000CEBAE1BDB9CF83CEBCCEB50000"
}
]
}

0 comments on commit 8c5a20d

Please sign in to comment.