Skip to content

Commit

Permalink
ZTS: zfs_program_json
Browse files Browse the repository at this point in the history
As of Python 3.5 the default behavior of json.tool was changed to
preserve the input order rather than lexical order.  The test case
expects the output to be sorted so apply the --sort-keys option
to the json.tool command when using Python 3.5 and the option is
supported.

    https://docs.python.org/3/library/json.html#module-json.tool

Reviewed-by: Kjeld Schouten <[email protected]>
Signed-off-by: Brian Behlendorf <[email protected]>
Closes #9774
  • Loading branch information
behlendorf authored and tonyhutter committed Jan 22, 2020
1 parent 16777b7 commit 9aec347
Showing 1 changed file with 17 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -91,14 +91,28 @@ typeset -a pos_cmds_out=(
}
}
}")

#
# N.B. json.tool is needed to guarantee consistent ordering of fields,
# sed is needed to trim trailing space in CentOS 6's json.tool output
#
# As of Python 3.5 the behavior of json.tool changed to keep the order
# the same as the input and the --sort-keys option was added. Detect when
# --sort-keys is supported and apply the option to ensure the expected order.
#
if python -m json.tool --sort-keys <<< "{}"; then
JSON_TOOL_CMD="python -m json.tool --sort-keys"
else
JSON_TOOL_CMD="python -m json.tool"
fi

typeset -i cnt=0
typeset cmd
for cmd in ${pos_cmds[@]}; do
log_must zfs program $TESTPOOL $TESTZCP $TESTDS $cmd 2>&1
log_must zfs program -j $TESTPOOL $TESTZCP $TESTDS $cmd 2>&1
# json.tool is needed to guarantee consistent ordering of fields
# sed is needed to trim trailing space in CentOS 6's json.tool output
OUTPUT=$(zfs program -j $TESTPOOL $TESTZCP $TESTDS $cmd 2>&1 | python -m json.tool | sed 's/[[:space:]]*$//')
OUTPUT=$(zfs program -j $TESTPOOL $TESTZCP $TESTDS $cmd 2>&1 |
$JSON_TOOL_CMD | sed 's/[[:space:]]*$//')
if [ "$OUTPUT" != "${pos_cmds_out[$cnt]}" ]; then
log_note "Got :$OUTPUT"
log_note "Expected:${pos_cmds_out[$cnt]}"
Expand Down

0 comments on commit 9aec347

Please sign in to comment.