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:{"x":0}']], [0], [[file: open successful file: write:{"x":0} successful ]], [ignore]) AT_CHECK( [test-ovsdb log-io file read-only read read], [0], [[file: open successful file: read: {"x":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:{"x":1}']], [0], [[file: open successful file: write:{"x":1} successful ]], [ignore]) AT_CHECK( [test-ovsdb log-io file read-only read], [0], [[file: open successful file: read: {"x":1} ]], [ignore]) AT_CHECK( [test-ovsdb log-io file create-excl read], [1], [], [test-ovsdb: I/O error: file: create failed (File exists) ]) AT_CHECK( [test-ovsdb log-io file create read], [0], [file: open successful file: read: {"x":1} ]) 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:{"x":0}' 'write:{"x":1}' 'write:{"x":2}']], [0], [[file: open successful file: write:{"x":0} successful file: write:{"x":1} successful file: write:{"x":2} successful ]], [ignore]) AT_CHECK( [test-ovsdb log-io file read-only read read read read], [0], [[file: open successful file: read: {"x":0} file: read: {"x":1} file: read: {"x":2} file: read: end of log ]], [ignore]) AT_CHECK([test -f .file.~lock~]) AT_CLEANUP AT_SETUP([write one, replace, commit]) AT_KEYWORDS([ovsdb log]) AT_CAPTURE_FILE([file]) for option in '' --no-rename-open-files; do rm -f file AT_CHECK( [[test-ovsdb $option log-io file create \ 'write:{"x":0}' \ 'replace_start' \ 'new-write:{"x":1}' \ 'new-write:{"x":2}' \ 'old-write:{"x":4}' \ 'replace_commit' \ 'read' \ 'write:{"x":3}']], [0], [[file: open successful file: write:{"x":0} successful file: replace_start successful (temp): write:{"x":1} successful (temp): write:{"x":2} successful file: write:{"x":4} successful file: replace_commit successful file: read: end of log file: write:{"x":3} successful ]]) AT_CHECK( [test-ovsdb log-io file read-only read read read read], [0], [[file: open successful file: read: {"x":1} file: read: {"x":2} file: read: {"x":3} file: read: end of log ]], [ignore]) done AT_CHECK([test -f .file.~lock~]) AT_CLEANUP AT_SETUP([write one, replace, abort]) AT_KEYWORDS([ovsdb log]) AT_CAPTURE_FILE([file]) for option in '' --no-rename-open-files; do rm -f file AT_CHECK( [[test-ovsdb $option log-io file create \ 'write:{"x":0}' \ 'replace_start' \ 'new-write:{"x":1}' \ 'new-write:{"x":2}' \ 'old-write:{"x":4}' \ 'replace_abort' \ 'read' \ 'write:{"x":3}']], [0], [[file: open successful file: write:{"x":0} successful file: replace_start successful (temp): write:{"x":1} successful (temp): write:{"x":2} successful file: write:{"x":4} successful file: replace_abort successful file: read: end of log file: write:{"x":3} successful ]]) AT_CHECK( [test-ovsdb log-io file read-only read read read read], [0], [[file: open successful file: read: {"x":0} file: read: {"x":4} file: read: {"x":3} file: read: end of log ]], [ignore]) done AT_CHECK([test -f .file.~lock~]) AT_CLEANUP AT_SETUP([write one, reread - alternative magic]) AT_KEYWORDS([ovsdb log]) AT_CAPTURE_FILE([file]) # Sometimes you just need more magic: # http://www.catb.org/jargon/html/magic-story.html AT_CHECK( [[test-ovsdb --magic="MORE_MAGIC" log-io file create 'write:{"x":0}' 'write:{"x":1}' 'write:{"x":2}']], [0], [[file: open successful file: write:{"x":0} successful file: write:{"x":1} successful file: write:{"x":2} successful ]], [ignore]) AT_CHECK( [test-ovsdb --magic="MORE_MAGIC" log-io file read-only read read read read], [0], [[file: open successful file: read: {"x":0} file: read: {"x":1} file: read: {"x":2} file: read: end of log ]], [ignore]) AT_CHECK( [test-ovsdb log-io file read-only], [1], [], [test-ovsdb: ovsdb error: file: cannot identify file type ]) 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:{"x":0}' 'write:{"x":1}' 'write:{"x":2}']], [0], [[file: open successful file: write:{"x":0} successful file: write:{"x":1} successful file: write:{"x":2} successful ]], [ignore]) AT_CHECK( [[test-ovsdb log-io file read/write read read read 'write:{"append":0}']], [0], [[file: open successful file: read: {"x":0} file: read: {"x":1} file: read: {"x":2} file: write:{"append":0} successful ]], [ignore]) AT_CHECK( [test-ovsdb log-io file read-only read read read read read], [0], [[file: open successful file: read: {"x":0} file: read: {"x":1} file: read: {"x":2} file: read: {"append":0} 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:{"x":0}' 'write:{"x":1}' 'write:{"x":2}']], [0], [[file: open successful file: write:{"x":0} successful file: write:{"x":1} successful file: write:{"x":2} successful ]], [ignore]) AT_CHECK( [[test-ovsdb log-io file read/write read 'write:{"more data":0}']], [0], [[file: open successful file: read: {"x":0} file: write:{"more data":0} successful ]], [ignore]) AT_CHECK( [test-ovsdb log-io file read-only read read read], [0], [[file: open successful file: read: {"x":0} file: read: {"more data":0} 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:{"x":0}' 'write:{"x":1}' 'write:{"x":2}']], [0], [[file: open successful file: write:{"x":0} successful file: write:{"x":1} successful file: write:{"x":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: {"x":0} file: read: {"x":1} file: read: {"x":2} file: read failed: syntax error: file: parse error at offset 186 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:{"x":0}' 'write:{"x":1}' 'write:{"x":2}']], [0], [[file: open successful file: write:{"x":0} successful file: write:{"x":1} successful file: write:{"x":2} successful ]], [ignore]) AT_CHECK([echo 'xxx' >> file]) AT_CHECK( [[test-ovsdb log-io file read/write read read read read 'write:{"x":3}']], [0], [[file: open successful file: read: {"x":0} file: read: {"x":1} file: read: {"x":2} file: read failed: syntax error: file: parse error at offset 186 in header line "xxx" file: write:{"x":3} successful ]], [ignore]) AT_CHECK( [test-ovsdb log-io file read-only read read read read read], [0], [[file: open successful file: read: {"x":0} file: read: {"x":1} file: read: {"x":2} file: read: {"x":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:{"x":0}' 'write:{"x":1}' 'write:{"x":2}']], [0], [[file: open successful file: write:{"x":0} successful file: write:{"x":1} successful file: write:{"x":2} successful ]], [ignore]) AT_CHECK([[sed 's/{"x":2}/{"x":3}/' < file > file.tmp]]) AT_CHECK([mv file.tmp file]) AT_CHECK([[grep -c '{"x":3}' file]], [0], [1 ]) AT_CHECK( [[test-ovsdb log-io file read/write read read read 'write:{"longer data":0}']], [0], [[file: open successful file: read: {"x":0} file: read: {"x":1} file: read failed: syntax error: file: 8 bytes starting at offset 178 have SHA-1 hash 2683fd63b5b9fd49df4f2aa25bf7db5cbbebbe6f but should have hash 3d8ed30f471ad1b7b4b571cb0c7d5ed3e81350aa file: write:{"longer data":0} successful ]], [ignore]) AT_CHECK( [test-ovsdb log-io file read-only read read read read], [0], [[file: open successful file: read: {"x":0} file: read: {"x":1} file: read: {"longer data":0} 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:{"x":0}' 'write:{"x":1}' 'write:{"x":2}']], [0], [[file: open successful file: write:{"x":0} successful file: write:{"x":1} successful file: write:{"x":2} successful ]], [ignore]) AT_CHECK([[sed 's/{"x":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}']], [0], [[file: open successful file: read: {"x":0} file: read: {"x":1} file: read failed: I/O error: file: error reading 8 bytes starting at offset 178 (End of file) file: write:{"longer data":0} successful ]], [ignore]) AT_CHECK( [test-ovsdb log-io file read-only read read read read], [0], [[file: open successful file: read: {"x":0} file: read: {"x":1} file: read: {"longer data":0} 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:{"x":0}' 'write:{"x":1}' 'write:{"x":2}']], [0], [[file: open successful file: write:{"x":0} successful file: write:{"x":1} successful file: write:{"x":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}']], [0], [[file: open successful file: read: {"x":0} file: read: {"x":1} file: read: {"x":2} file: read failed: syntax error: file: 5 bytes starting at offset 240 are not valid JSON (line 0, column 4, byte 4: syntax error at beginning of input) file: write:{"replacement data":0} successful ]], [ignore]) AT_CHECK( [test-ovsdb log-io file read-only read read read read read], [0], [[file: open successful file: read: {"x":0} file: read: {"x":1} file: read: {"x":2} file: read: {"replacement data":0} file: read: end of log ]], [ignore]) AT_CHECK([test -f .file.~lock~]) AT_CLEANUP