Didn't closely review the test. Looks good assuming it passes. Ethan
On Mon, Mar 28, 2011 at 1:07 PM, Ben Pfaff <b...@nicira.com> wrote: > When ovsdb-server reads a database that is corrupted at the log level > (that is, when ovsdb_log detects the corruption by checking the SHA-1 hash > of the record or JSON parser error reporting), then writing to the database > should discard the corrupted data and thereby fix the problem for future > ovsdb-server runs. > > This already worked OK. This just adds an extra test. > --- > tests/ovsdb-server.at | 47 +++++++++++++++++++++++++++++++++++++++++++++++ > 1 files changed, 47 insertions(+), 0 deletions(-) > > diff --git a/tests/ovsdb-server.at b/tests/ovsdb-server.at > index dbaacd5..dff19ec 100644 > --- a/tests/ovsdb-server.at > +++ b/tests/ovsdb-server.at > @@ -38,6 +38,53 @@ cat stdout >> output > > EXECUTION_EXAMPLES > > +AT_SETUP([truncating corrupted database log]) > +AT_KEYWORDS([ovsdb server positive unix]) > +AT_DATA([schema], [ORDINAL_SCHEMA > +]) > +AT_CHECK([ovsdb-tool create db schema], [0], [stdout], [ignore]) > +dnl Do one transaction and save the output. > +AT_DATA([txnfile], [[ovsdb-client transact unix:socket \ > +'["ordinals", > + {"op": "insert", > + "table": "ordinals", > + "row": {"number": 0, "name": "zero"}}]' > +]]) > +AT_CHECK([ovsdb-server --remote=punix:socket --unixctl=$PWD/unixctl db > --run="sh txnfile"], [0], [stdout], []) > +cat stdout >> output > +dnl Add some crap to the database log and run another transaction, which > should > +dnl ignore the crap and truncate it out of the log. > +echo 'xxx' >> db > +AT_DATA([txnfile], [[ovsdb-client transact unix:socket \ > +'["ordinals", > + {"op": "insert", > + "table": "ordinals", > + "row": {"number": 1, "name": "one"}}]' > +]]) > +AT_CHECK([ovsdb-server --remote=punix:socket --unixctl=$PWD/unixctl db > --run="sh txnfile"], [0], [stdout], [stderr]) > +AT_CHECK([grep 'syntax error: db: parse error.* in header line "xxx"' > stderr], > + [0], [ignore]) > +cat stdout >> output > +dnl Run a final transaction to verify that both transactions succeeeded. > +dnl The crap that we added should have been truncated by the previous run, > +dnl so ovsdb-server shouldn't log a warning this time. > +AT_DATA([txnfile], [[ovsdb-client transact unix:socket \ > +'["ordinals", > + {"op": "select", > + "table": "ordinals", > + "where": [], > + "sort": ["number"]}]' > +]]) > +AT_CHECK([ovsdb-server --remote=punix:socket --unixctl=$PWD/unixctl db > --run="sh txnfile"], [0], [stdout], []) > +cat stdout >> output > +AT_CHECK([perl $srcdir/uuidfilt.pl output], [0], > + [[[{"uuid":["uuid","<0>"]}] > +[{"uuid":["uuid","<1>"]}] > +[{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<2>"],"name":"zero","number":0},{"_uuid":["uuid","<1>"],"_version":["uuid","<3>"],"name":"one","number":1}]}] > +]], [], > + [test ! -e pid || kill `cat pid`]) > +AT_CLEANUP > + > AT_SETUP([ovsdb-client get-schema-version]) > AT_KEYWORDS([ovsdb server positive]) > AT_DATA([schema], [ORDINAL_SCHEMA > -- > 1.7.1 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev > _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev