mirror of
https://github.com/openvswitch/ovs
synced 2025-08-30 22:05:19 +00:00
It's easier to analyze failures when the lines that are different are shown next to each other. Acked-by: Mike Pattrick <mkp@redhat.com> Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
290 lines
8.6 KiB
Plaintext
290 lines
8.6 KiB
Plaintext
AT_BANNER([OVSDB -- ovsdb-client commands])
|
|
|
|
AT_SETUP([ovsdb-client get-schema-version and get-schema-cksum])
|
|
AT_KEYWORDS([ovsdb client positive])
|
|
ordinal_schema > schema
|
|
on_exit 'kill `cat *.pid`'
|
|
AT_CHECK([ovsdb-tool create db schema], [0], [ignore], [ignore])
|
|
AT_CHECK([ovsdb-server --detach --no-chdir --log-file --pidfile --remote=punix:socket db], [0], [ignore], [ignore])
|
|
AT_CHECK([ovsdb-client get-schema-version unix:socket ordinals], [0], [5.1.3
|
|
])
|
|
AT_CHECK([ovsdb-client get-schema-cksum unix:socket ordinals], [0], [12345678 9
|
|
])
|
|
OVSDB_SERVER_SHUTDOWN
|
|
AT_CLEANUP
|
|
|
|
AT_SETUP([ovsdb-client needs-conversion (no conversion needed)])
|
|
AT_KEYWORDS([ovsdb client file positive])
|
|
on_exit 'kill `cat *.pid`'
|
|
ordinal_schema > schema
|
|
touch .db.~lock~
|
|
AT_CHECK([ovsdb-tool create db schema], [0], [], [ignore])
|
|
AT_CHECK([ovsdb-server --detach --no-chdir --log-file --pidfile --remote=punix:socket db], [0], [ignore], [ignore])
|
|
AT_CHECK([ovsdb-client needs-conversion unix:socket schema], [0], [no
|
|
])
|
|
OVSDB_SERVER_SHUTDOWN
|
|
AT_CLEANUP
|
|
|
|
AT_SETUP([ovsdb-client needs-conversion (conversion needed)])
|
|
AT_KEYWORDS([ovsdb client file positive])
|
|
ordinal_schema > schema
|
|
touch .db.~lock~
|
|
on_exit 'kill `cat *.pid`'
|
|
AT_CHECK([ovsdb-tool create db schema], [0], [], [ignore])
|
|
AT_CHECK([ovsdb-server --detach --no-chdir --log-file --pidfile --remote=punix:socket db], [0], [ignore], [ignore])
|
|
sed 's/5\.1\.3/5.1.4/' < schema > schema2
|
|
AT_CHECK([diff schema schema2], [1], [ignore])
|
|
AT_CHECK([ovsdb-client needs-conversion unix:socket schema2], [0], [yes
|
|
])
|
|
OVSDB_SERVER_SHUTDOWN
|
|
AT_CLEANUP
|
|
|
|
AT_SETUP([ovsdb-client backup and restore])
|
|
AT_KEYWORDS([ovsdb client positive])
|
|
|
|
on_exit 'kill `cat *.pid`'
|
|
|
|
dnl Create a database.
|
|
ordinal_schema > schema
|
|
touch .db.~lock~
|
|
AT_CHECK([ovsdb-tool create db schema])
|
|
|
|
dnl Put some data in the database.
|
|
AT_CHECK(
|
|
[[for pair in 'zero 0' 'one 1' 'two 2' 'three 3' 'four 4' 'five 5'; do
|
|
set -- $pair
|
|
ovsdb-tool transact db '
|
|
["ordinals",
|
|
{"op": "insert",
|
|
"table": "ordinals",
|
|
"row": {"name": "'$1'", "number": '$2'}},
|
|
{"op": "comment",
|
|
"comment": "add row for '"$pair"'"}]'
|
|
done | uuidfilt]], [0],
|
|
[[[{"uuid":["uuid","<0>"]},{}]
|
|
[{"uuid":["uuid","<1>"]},{}]
|
|
[{"uuid":["uuid","<2>"]},{}]
|
|
[{"uuid":["uuid","<3>"]},{}]
|
|
[{"uuid":["uuid","<4>"]},{}]
|
|
[{"uuid":["uuid","<5>"]},{}]
|
|
]], [ignore])
|
|
|
|
dnl Start the database server.
|
|
AT_CHECK([ovsdb-server -vfile -vvlog:off --detach --no-chdir --pidfile --log-file --remote=punix:db.sock db], [0])
|
|
AT_CAPTURE_FILE([ovsdb-server.log])
|
|
|
|
dnl Dump a copy of the data and a backup of it.
|
|
AT_CHECK([ovsdb-client dump > dump1])
|
|
AT_CHECK([ovsdb-client backup > backup])
|
|
|
|
dnl Mess up the data a little, verify that it changed, then restore it
|
|
dnl and verify restoration.
|
|
AT_CHECK(
|
|
[[ovsdb-client transact '
|
|
["ordinals",
|
|
{"op": "update",
|
|
"table": "ordinals",
|
|
"where": [],
|
|
"row": {"name": ""}}]']],
|
|
[0],
|
|
[[[{"count":6}]
|
|
]])
|
|
AT_CHECK([ovsdb-client --no-headings dump ordinals | sort -k 3 | uuidfilt], [0], [dnl
|
|
ordinals table
|
|
<0> "" 0
|
|
<1> "" 1
|
|
<2> "" 2
|
|
<3> "" 3
|
|
<4> "" 4
|
|
<5> "" 5
|
|
])
|
|
AT_CHECK([ovsdb-client restore < backup])
|
|
AT_CHECK([ovsdb-client dump | tr -s ' ' | sort -k 3 | uuidfilt], [0], [dnl
|
|
ordinals table
|
|
------------------------------------ ----- ------
|
|
<0> zero 0
|
|
<1> one 1
|
|
<2> two 2
|
|
<3> three 3
|
|
<4> four 4
|
|
<5> five 5
|
|
_uuid name number
|
|
])
|
|
# Combining the original dump and the backup dump should reveal that the
|
|
# rows have different uuids:
|
|
AT_CHECK([(ovsdb-client dump; cat dump1) | tr -s ' ' | sort -k 3 | uuidfilt], [0], [dnl
|
|
ordinals table
|
|
ordinals table
|
|
------------------------------------ ----- ------
|
|
------------------------------------ ----- ------
|
|
<0> zero 0
|
|
<1> zero 0
|
|
<2> one 1
|
|
<3> one 1
|
|
<4> two 2
|
|
<5> two 2
|
|
<6> three 3
|
|
<7> three 3
|
|
<8> four 4
|
|
<9> four 4
|
|
<10> five 5
|
|
<11> five 5
|
|
_uuid name number
|
|
_uuid name number
|
|
])
|
|
|
|
dnl Stop the database server, then re-start it based on the backup.
|
|
OVSDB_SERVER_SHUTDOWN
|
|
AT_CHECK([ovsdb-server -vfile -vvlog:off --detach --no-chdir --pidfile --log-file --remote=punix:db.sock backup], [0])
|
|
|
|
dnl Dump a new copy of the data.
|
|
AT_CHECK([ovsdb-client dump > dump2])
|
|
sort dump2 > expout
|
|
|
|
dnl Verify that the two dumps are the same.
|
|
AT_CHECK([sort dump1], [0], [expout])
|
|
|
|
AT_CLEANUP
|
|
|
|
AT_SETUP([ovsdb-client query])
|
|
AT_KEYWORDS([ovsdb client positive])
|
|
|
|
on_exit 'kill `cat *.pid`'
|
|
|
|
dnl Create a database.
|
|
ordinal_schema > schema
|
|
touch .db.~lock~
|
|
AT_CHECK([ovsdb-tool create db schema])
|
|
|
|
dnl Start the database server.
|
|
AT_CHECK([ovsdb-server -vfile -vvlog:off --detach --no-chdir --pidfile --log-file --remote=punix:db.sock db], [0])
|
|
AT_CAPTURE_FILE([ovsdb-server.log])
|
|
|
|
dnl Put some data in the database.
|
|
dnl Use "query" for some of them, which won't have any effect.
|
|
AT_CHECK(
|
|
[[for txn in 'transact zero 0' \
|
|
'query one 1' \
|
|
'transact two 2' \
|
|
'query three 3' \
|
|
'transact four 4' \
|
|
'query five 5'
|
|
do
|
|
set -- $txn
|
|
ovsdb-client $1 '
|
|
["ordinals",
|
|
{"op": "insert",
|
|
"table": "ordinals",
|
|
"row": {"name": "'$2'", "number": '$3'}},
|
|
{"op": "comment",
|
|
"comment": "add row for '"$pair"'"}]'
|
|
done | uuidfilt]], [0],
|
|
[[[{"uuid":["uuid","<0>"]},{}]
|
|
[{"uuid":["uuid","<1>"]},{}]
|
|
[{"uuid":["uuid","<2>"]},{}]
|
|
[{"uuid":["uuid","<3>"]},{}]
|
|
[{"uuid":["uuid","<4>"]},{}]
|
|
[{"uuid":["uuid","<5>"]},{}]
|
|
]], [ignore])
|
|
|
|
AT_CHECK([ovsdb-client -f csv dump | sort -t, -k 3 | uuidfilt], [0], [dnl
|
|
ordinals table
|
|
<0>,zero,0
|
|
<1>,two,2
|
|
<2>,four,4
|
|
_uuid,name,number
|
|
])
|
|
|
|
OVSDB_SERVER_SHUTDOWN
|
|
|
|
AT_CLEANUP
|
|
|
|
AT_SETUP([ovsdb-client record/replay])
|
|
AT_KEYWORDS([ovsdb client record replay])
|
|
|
|
on_exit 'kill `cat *.pid`'
|
|
|
|
dnl Create a database.
|
|
ordinal_schema > schema
|
|
touch .db.~lock~
|
|
AT_CHECK([ovsdb-tool create db schema])
|
|
|
|
dnl Start the database server.
|
|
AT_CHECK([ovsdb-server -vfile -vvlog:off --detach --no-chdir --pidfile dnl
|
|
--log-file --remote=punix:db.sock db], [0])
|
|
AT_CAPTURE_FILE([ovsdb-server.log])
|
|
|
|
dnl Start a monitor on the 'ordinals' db with recording enabled.
|
|
AT_CHECK([mkdir replay_dir])
|
|
AT_CHECK([ovsdb-client --record=./replay_dir dnl
|
|
-vfile -vvlog:off --detach --no-chdir dnl
|
|
--pidfile --log-file=monitor.log dnl
|
|
--db-change-aware --no-headings dnl
|
|
monitor unix:db.sock dnl
|
|
ordinals ordinals number name dnl
|
|
> monitor.stdout 2> monitor.stderr])
|
|
AT_CAPTURE_FILE([monitor.log])
|
|
|
|
dnl Put some data in the database.
|
|
AT_CHECK(
|
|
[[for txn in 'transact zero 0' \
|
|
'transact two 2' \
|
|
'transact four 4'
|
|
do
|
|
set -- $txn
|
|
ovsdb-client $1 '
|
|
["ordinals",
|
|
{"op": "insert",
|
|
"table": "ordinals",
|
|
"row": {"name": "'$2'", "number": '$3'}},
|
|
{"op": "comment",
|
|
"comment": "add row for '"$pair"'"}]'
|
|
done | uuidfilt]], [0],
|
|
[[[{"uuid":["uuid","<0>"]},{}]
|
|
[{"uuid":["uuid","<1>"]},{}]
|
|
[{"uuid":["uuid","<2>"]},{}]
|
|
]], [ignore])
|
|
|
|
AT_CHECK([ovsdb-client -f csv dump | sort -t, -k 3 | uuidfilt], [0], [dnl
|
|
ordinals table
|
|
<0>,zero,0
|
|
<1>,two,2
|
|
<2>,four,4
|
|
_uuid,name,number
|
|
])
|
|
|
|
dnl Stopping the server.
|
|
OVSDB_SERVER_SHUTDOWN
|
|
dnl ovsdb-client should exit by itself after disconnection form the server.
|
|
OVS_WAIT_WHILE([test -e ovsdb-client.pid])
|
|
|
|
dnl Starting replay.
|
|
AT_CHECK([ovsdb-client --replay=./replay_dir dnl
|
|
-vfile -vvlog:off --detach --no-chdir dnl
|
|
--pidfile --log-file=monitor-replay.log dnl
|
|
--db-change-aware --no-headings dnl
|
|
monitor unix:db.sock dnl
|
|
ordinals ordinals number name dnl
|
|
> monitor-replay.stdout 2> monitor-replay.stderr])
|
|
|
|
dnl Waiting for client to exit the same way as it exited during recording.
|
|
OVS_WAIT_WHILE([test -e ovsdb-client.pid])
|
|
|
|
AT_CHECK([diff -u monitor.stdout monitor-replay.stdout])
|
|
AT_CHECK([diff -u monitor.stderr monitor-replay.stderr])
|
|
|
|
dnl Stripping out timestamps, PIDs and poll_loop warnings from the log.
|
|
dnl Also stripping socket_util errors as sockets are not used in replay.
|
|
m4_define([CLEAN_LOG_FILE],
|
|
[sed 's/[[0-9\-]]*T[[0-9:\.]]*Z|[[0-9]]*\(|.*$\)/\1/g' $1 | dnl
|
|
sed '/|poll_loop|/d' | dnl
|
|
sed '/|socket_util|/d' | dnl
|
|
sed 's/[[0-9]]*\.ctl/<cleared>\.ctl/g'> $2])
|
|
|
|
CLEAN_LOG_FILE([monitor.log], [monitor.log.clear])
|
|
CLEAN_LOG_FILE([monitor-replay.log], [monitor-replay.log.clear])
|
|
|
|
AT_CHECK([diff -u monitor.log.clear monitor-replay.log.clear])
|
|
|
|
AT_CLEANUP
|