mirror of
https://github.com/openvswitch/ovs
synced 2025-10-23 14:57:06 +00:00
When json_lex_input() returns false, the parser does not consume the byte passed in. That byte will get processed again in the next iteration of the json_parser_feed() loop. Therefore, until now, this code has double-counted bytes that cause a false return from json_lex_input(). This fixes the problem. Every input byte is now counted only once. Signed-off-by: Ben Pfaff <blp@nicira.com>
283 lines
7.7 KiB
Plaintext
283 lines
7.7 KiB
Plaintext
AT_BANNER([OVSDB -- logging])
|
|
|
|
AT_SETUP([create empty, reread])
|
|
AT_KEYWORDS([ovsdb log])
|
|
AT_CAPTURE_FILE([log])
|
|
AT_CHECK(
|
|
[test-ovsdb log-io file create], [0],
|
|
[file: open successful
|
|
], [ignore])
|
|
AT_CHECK(
|
|
[test-ovsdb log-io file read-only read], [0],
|
|
[file: open successful
|
|
file: read: end of log
|
|
], [ignore])
|
|
AT_CHECK([test -f .file.~lock~])
|
|
AT_CLEANUP
|
|
|
|
AT_SETUP([write one, reread])
|
|
AT_KEYWORDS([ovsdb log])
|
|
AT_CAPTURE_FILE([file])
|
|
AT_CHECK(
|
|
[[test-ovsdb log-io file create 'write:[0]']], [0],
|
|
[[file: open successful
|
|
file: write:[0] successful
|
|
]], [ignore])
|
|
AT_CHECK(
|
|
[test-ovsdb log-io file read-only read read], [0],
|
|
[[file: open successful
|
|
file: read: [0]
|
|
file: read: end of log
|
|
]], [ignore])
|
|
AT_CHECK([test -f .file.~lock~])
|
|
AT_CLEANUP
|
|
|
|
AT_SETUP([check that create fails if file exists])
|
|
AT_KEYWORDS([ovsdb log])
|
|
AT_CAPTURE_FILE([file])
|
|
AT_CHECK(
|
|
[[test-ovsdb log-io file create 'write:[1]']], [0],
|
|
[[file: open successful
|
|
file: write:[1] successful
|
|
]], [ignore])
|
|
AT_CHECK(
|
|
[test-ovsdb log-io file read-only read], [0],
|
|
[[file: open successful
|
|
file: read: [1]
|
|
]], [ignore])
|
|
AT_CHECK(
|
|
[test-ovsdb log-io file create read], [1],
|
|
[], [test-ovsdb: I/O error: create: file failed (File exists)
|
|
])
|
|
AT_CHECK([test -f .file.~lock~])
|
|
AT_CLEANUP
|
|
|
|
AT_SETUP([write one, reread])
|
|
AT_KEYWORDS([ovsdb log])
|
|
AT_CAPTURE_FILE([file])
|
|
AT_CHECK(
|
|
[[test-ovsdb log-io file create 'write:[0]' 'write:[1]' 'write:[2]']], [0],
|
|
[[file: open successful
|
|
file: write:[0] successful
|
|
file: write:[1] successful
|
|
file: write:[2] successful
|
|
]], [ignore])
|
|
AT_CHECK(
|
|
[test-ovsdb log-io file read-only read read read read], [0],
|
|
[[file: open successful
|
|
file: read: [0]
|
|
file: read: [1]
|
|
file: read: [2]
|
|
file: read: end of log
|
|
]], [ignore])
|
|
AT_CHECK([test -f .file.~lock~])
|
|
AT_CLEANUP
|
|
|
|
AT_SETUP([write one, reread, append])
|
|
AT_KEYWORDS([ovsdb log])
|
|
AT_CAPTURE_FILE([file])
|
|
AT_CHECK(
|
|
[[test-ovsdb log-io file create 'write:[0]' 'write:[1]' 'write:[2]']], [0],
|
|
[[file: open successful
|
|
file: write:[0] successful
|
|
file: write:[1] successful
|
|
file: write:[2] successful
|
|
]], [ignore])
|
|
AT_CHECK(
|
|
[[test-ovsdb log-io file read/write read read read 'write:["append"]']], [0],
|
|
[[file: open successful
|
|
file: read: [0]
|
|
file: read: [1]
|
|
file: read: [2]
|
|
file: write:["append"] successful
|
|
]], [ignore])
|
|
AT_CHECK(
|
|
[test-ovsdb log-io file read-only read read read read read], [0],
|
|
[[file: open successful
|
|
file: read: [0]
|
|
file: read: [1]
|
|
file: read: [2]
|
|
file: read: ["append"]
|
|
file: read: end of log
|
|
]], [ignore])
|
|
AT_CHECK([test -f .file.~lock~])
|
|
AT_CLEANUP
|
|
|
|
AT_SETUP([write, reread one, overwrite])
|
|
AT_KEYWORDS([ovsdb log])
|
|
AT_CAPTURE_FILE([file])
|
|
AT_CHECK(
|
|
[[test-ovsdb log-io file create 'write:[0]' 'write:[1]' 'write:[2]']], [0],
|
|
[[file: open successful
|
|
file: write:[0] successful
|
|
file: write:[1] successful
|
|
file: write:[2] successful
|
|
]], [ignore])
|
|
AT_CHECK(
|
|
[[test-ovsdb log-io file read/write read 'write:["more data"]']], [0],
|
|
[[file: open successful
|
|
file: read: [0]
|
|
file: write:["more data"] successful
|
|
]], [ignore])
|
|
AT_CHECK(
|
|
[test-ovsdb log-io file read-only read read read], [0],
|
|
[[file: open successful
|
|
file: read: [0]
|
|
file: read: ["more data"]
|
|
file: read: end of log
|
|
]], [ignore])
|
|
AT_CHECK([test -f .file.~lock~])
|
|
AT_CLEANUP
|
|
|
|
AT_SETUP([write, add corrupted data, read])
|
|
AT_KEYWORDS([ovsdb log])
|
|
AT_CAPTURE_FILE([file])
|
|
AT_CHECK(
|
|
[[test-ovsdb log-io file create 'write:[0]' 'write:[1]' 'write:[2]']], [0],
|
|
[[file: open successful
|
|
file: write:[0] successful
|
|
file: write:[1] successful
|
|
file: write:[2] successful
|
|
]], [ignore])
|
|
AT_CHECK([echo 'xxx' >> file])
|
|
AT_CHECK(
|
|
[test-ovsdb log-io file read-only read read read read], [0],
|
|
[[file: open successful
|
|
file: read: [0]
|
|
file: read: [1]
|
|
file: read: [2]
|
|
file: read failed: syntax error: file: parse error at offset 174 in header line "xxx"
|
|
]], [ignore])
|
|
AT_CHECK([test -f .file.~lock~])
|
|
AT_CLEANUP
|
|
|
|
AT_SETUP([write, add corrupted data, read, overwrite])
|
|
AT_KEYWORDS([ovsdb log])
|
|
AT_CAPTURE_FILE([file])
|
|
AT_CHECK(
|
|
[[test-ovsdb log-io file create 'write:[0]' 'write:[1]' 'write:[2]']], [0],
|
|
[[file: open successful
|
|
file: write:[0] successful
|
|
file: write:[1] successful
|
|
file: write:[2] successful
|
|
]], [ignore])
|
|
AT_CHECK([echo 'xxx' >> file])
|
|
AT_CHECK(
|
|
[[test-ovsdb log-io file read/write read read read read 'write:[3]']], [0],
|
|
[[file: open successful
|
|
file: read: [0]
|
|
file: read: [1]
|
|
file: read: [2]
|
|
file: read failed: syntax error: file: parse error at offset 174 in header line "xxx"
|
|
file: write:[3] successful
|
|
]], [ignore])
|
|
AT_CHECK(
|
|
[test-ovsdb log-io file read-only read read read read read], [0],
|
|
[[file: open successful
|
|
file: read: [0]
|
|
file: read: [1]
|
|
file: read: [2]
|
|
file: read: [3]
|
|
file: read: end of log
|
|
]], [ignore])
|
|
AT_CHECK([test -f .file.~lock~])
|
|
AT_CLEANUP
|
|
|
|
AT_SETUP([write, corrupt some data, read, overwrite])
|
|
AT_KEYWORDS([ovsdb log])
|
|
AT_CAPTURE_FILE([file])
|
|
AT_CHECK(
|
|
[[test-ovsdb log-io file create 'write:[0]' 'write:[1]' 'write:[2]']], [0],
|
|
[[file: open successful
|
|
file: write:[0] successful
|
|
file: write:[1] successful
|
|
file: write:[2] successful
|
|
]], [ignore])
|
|
AT_CHECK([[sed 's/\[2]/[3]/' < file > file.tmp]])
|
|
AT_CHECK([mv file.tmp file])
|
|
AT_CHECK([[grep -c '\[3]' file]], [0], [1
|
|
])
|
|
AT_CHECK(
|
|
[[test-ovsdb log-io file read/write read read read 'write:["longer data"]']], [0],
|
|
[[file: open successful
|
|
file: read: [0]
|
|
file: read: [1]
|
|
file: read failed: syntax error: file: 4 bytes starting at offset 170 have SHA-1 hash 5c031e5c0d3a9338cc127ebe40bb2748b6a67e78 but should have hash 98f55556e7ffd432381b56a19bd485b3e6446442
|
|
file: write:["longer data"] successful
|
|
]], [ignore])
|
|
AT_CHECK(
|
|
[test-ovsdb log-io file read-only read read read read], [0],
|
|
[[file: open successful
|
|
file: read: [0]
|
|
file: read: [1]
|
|
file: read: ["longer data"]
|
|
file: read: end of log
|
|
]], [ignore])
|
|
AT_CHECK([test -f .file.~lock~])
|
|
AT_CLEANUP
|
|
|
|
AT_SETUP([write, truncate file, read, overwrite])
|
|
AT_KEYWORDS([ovsdb log])
|
|
AT_CAPTURE_FILE([file])
|
|
AT_CHECK(
|
|
[[test-ovsdb log-io file create 'write:[0]' 'write:[1]' 'write:[2]']], [0],
|
|
[[file: open successful
|
|
file: write:[0] successful
|
|
file: write:[1] successful
|
|
file: write:[2] successful
|
|
]], [ignore])
|
|
AT_CHECK([[sed 's/\[2]/2/' < file > file.tmp]])
|
|
AT_CHECK([mv file.tmp file])
|
|
AT_CHECK([[grep -c '^2$' file]], [0], [1
|
|
])
|
|
AT_CHECK(
|
|
[[test-ovsdb log-io file read/write read read read 'write:["longer data"]']], [0],
|
|
[[file: open successful
|
|
file: read: [0]
|
|
file: read: [1]
|
|
file: read failed: I/O error: file: error reading 4 bytes starting at offset 170 (End of file)
|
|
file: write:["longer data"] successful
|
|
]], [ignore])
|
|
AT_CHECK(
|
|
[test-ovsdb log-io file read-only read read read read], [0],
|
|
[[file: open successful
|
|
file: read: [0]
|
|
file: read: [1]
|
|
file: read: ["longer data"]
|
|
file: read: end of log
|
|
]], [ignore])
|
|
AT_CHECK([test -f .file.~lock~])
|
|
AT_CLEANUP
|
|
|
|
AT_SETUP([write bad JSON, read, overwrite])
|
|
AT_KEYWORDS([ovsdb log])
|
|
AT_CAPTURE_FILE([file])
|
|
AT_CHECK(
|
|
[[test-ovsdb log-io file create 'write:[0]' 'write:[1]' 'write:[2]']], [0],
|
|
[[file: open successful
|
|
file: write:[0] successful
|
|
file: write:[1] successful
|
|
file: write:[2] successful
|
|
]], [ignore])
|
|
AT_CHECK([[printf '%s\n%s\n' 'OVSDB JSON 5 d910b02871075d3156ec8675dfc95b7d5d640aa6' 'null' >> file]])
|
|
AT_CHECK(
|
|
[[test-ovsdb log-io file read/write read read read read 'write:["replacement data"]']], [0],
|
|
[[file: open successful
|
|
file: read: [0]
|
|
file: read: [1]
|
|
file: read: [2]
|
|
file: read failed: syntax error: file: 5 bytes starting at offset 228 are not valid JSON (line 0, column 4, byte 4: syntax error at beginning of input)
|
|
file: write:["replacement data"] successful
|
|
]], [ignore])
|
|
AT_CHECK(
|
|
[test-ovsdb log-io file read-only read read read read read], [0],
|
|
[[file: open successful
|
|
file: read: [0]
|
|
file: read: [1]
|
|
file: read: [2]
|
|
file: read: ["replacement data"]
|
|
file: read: end of log
|
|
]], [ignore])
|
|
AT_CHECK([test -f .file.~lock~])
|
|
AT_CLEANUP
|