2
0
mirror of https://github.com/openvswitch/ovs synced 2025-10-25 15:07:05 +00:00
Files
openvswitch/tests/ovsdb-log.at
Ben Pfaff c640c04f64 json: Correct position tracking in JSON parser implementations.
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>
2012-04-26 09:48:28 -07:00

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