04120a3965
After the 0.2.0 version, there are even more possible cases to consider. I found it too annoying to do all the testing manually. Add some tests to make it easy to test everything automatically. The test python3Packages.invisible-watermark.tests.withOnnx-rivaGan would fail in the nix sandbox on aarch64-linux: ``` Error in cpuinfo: failed to parse the list of possible processors in /sys/devices/system/cpu/possible Error in cpuinfo: failed to parse the list of present processors in /sys/devices/system/cpu/present Error in cpuinfo: failed to parse both lists of possible and present processors terminate called after throwing an instance of 'onnxruntime::OnnxRuntimeException' what(): /build/source/include/onnxruntime/core/common/logging/logging.h:294 static const onnxruntime::logging::Logger& onnxruntime::logging::LoggingManager::DefaultLogger() Attempt to use DefaultLogger but none has been registered. /build/.attr-0l2nkwhif96f51f4amnlf414lhl4rv9vh8iffyp431v6s28gsr90: line 9: 5 Aborted (core dumped) invisible-watermark --verbose --action encode --type bytes --method 'rivaGan' --watermark 'asdf' --output output.png '/nix/store/srl698a32n9d2pmyf5zqfk65gjzq3mhp-source/test_vectors/original.jpg' Exit code of invisible-watermark was 134 while 0 was expected. ``` so I have disabled that test. I believe https://github.com/microsoft/onnxruntime/issues/10038 describes the same issue.
65 lines
2.0 KiB
Nix
65 lines
2.0 KiB
Nix
{ image
|
|
, method
|
|
, python3Packages
|
|
, runCommand
|
|
, testName
|
|
, withOnnx
|
|
}:
|
|
|
|
# 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
|
|
message = if method == "rivaGan" then
|
|
"asdf" # rivaGan only supports 32 bits
|
|
else
|
|
"fnörd1";
|
|
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
|
|
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 \
|
|
)"
|
|
|
|
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"
|
|
''
|