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

Reply via email to