2024-06-05 15:53:02 +00:00
|
|
|
{
|
|
|
|
image,
|
|
|
|
method,
|
|
|
|
python3Packages,
|
|
|
|
runCommand,
|
|
|
|
testName,
|
|
|
|
withOnnx,
|
2023-11-16 04:20:00 +00:00
|
|
|
}:
|
|
|
|
|
|
|
|
# This file runs one test case.
|
|
|
|
# There are six test cases in total. method can have three possible values and
|
|
|
|
# withOnnx two possible values. 3 * 2 = 6.
|
|
|
|
#
|
|
|
|
# The case where the method is rivaGan and invisible-watermark is built
|
|
|
|
# without onnx is expected to fail and this case is handled accordingly.
|
|
|
|
#
|
|
|
|
# The test works by first encoding a message into a test image,
|
|
|
|
# then decoding the message from the image again and checking
|
|
|
|
# if the message was decoded correctly.
|
|
|
|
|
|
|
|
let
|
2024-06-05 15:53:02 +00:00
|
|
|
message =
|
|
|
|
if method == "rivaGan" then
|
|
|
|
"asdf" # rivaGan only supports 32 bits
|
|
|
|
else
|
|
|
|
"fnörd1";
|
2023-11-16 04:20:00 +00:00
|
|
|
length = (builtins.stringLength message) * 8;
|
|
|
|
invisible-watermark' = python3Packages.invisible-watermark.override { inherit withOnnx; };
|
|
|
|
expected-exit-code = if method == "rivaGan" && !withOnnx then "1" else "0";
|
|
|
|
in
|
2024-06-05 15:53:02 +00:00
|
|
|
runCommand "invisible-watermark-test-${testName}" { nativeBuildInputs = [ invisible-watermark' ]; }
|
|
|
|
''
|
|
|
|
set +e
|
|
|
|
invisible-watermark \
|
|
|
|
--verbose \
|
|
|
|
--action encode \
|
|
|
|
--type bytes \
|
|
|
|
--method '${method}' \
|
|
|
|
--watermark '${message}' \
|
|
|
|
--output output.png \
|
|
|
|
'${image}'
|
|
|
|
exit_code="$?"
|
|
|
|
set -euf -o pipefail
|
|
|
|
if [ "$exit_code" != '${expected-exit-code}' ]; then
|
|
|
|
echo "Exit code of invisible-watermark was $exit_code while ${expected-exit-code} was expected."
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
if [ '${expected-exit-code}' == '1' ]; then
|
|
|
|
echo 'invisible-watermark failed as expected.'
|
|
|
|
touch "$out"
|
|
|
|
exit 0
|
|
|
|
fi
|
|
|
|
decoded_message="$(invisible-watermark \
|
|
|
|
--action decode \
|
|
|
|
--type bytes \
|
|
|
|
--method '${method}' \
|
|
|
|
--length '${toString length}' \
|
|
|
|
output.png \
|
|
|
|
)"
|
2023-11-16 04:20:00 +00:00
|
|
|
|
2024-06-05 15:53:02 +00:00
|
|
|
if [ '${message}' != "$decoded_message" ]; then
|
|
|
|
echo "invisible-watermark did not decode the watermark correctly."
|
|
|
|
echo "The original message was ${message} but the decoded message was $decoded_message."
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
touch "$out"
|
|
|
|
''
|