summaryrefslogtreecommitdiffstats
path: root/ci/tests/ci-tests.sh
diff options
context:
space:
mode:
Diffstat (limited to 'ci/tests/ci-tests.sh')
-rwxr-xr-xci/tests/ci-tests.sh144
1 files changed, 144 insertions, 0 deletions
diff --git a/ci/tests/ci-tests.sh b/ci/tests/ci-tests.sh
new file mode 100755
index 0000000..1aaba03
--- /dev/null
+++ b/ci/tests/ci-tests.sh
@@ -0,0 +1,144 @@
+#! /bin/bash
+#
+# Copyright (c) 2023 [Ribose Inc](https://www.ribose.com).
+# All rights reserved.
+# This file is a part of rnp
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+set -o errexit -o pipefail -o noclobber -o nounset
+
+DIR0="$( cd "$( dirname "$0" )" && pwd )"
+# shellcheck disable=SC2034
+SHUNIT_PARENT="$0"
+
+# Defaults applicable to 'normal' installation and not build environment
+: "${BOTAN_INSTALL:=/usr}"
+: "${JSONC_INSTALL:=/usr}"
+: "${RNP_INSTALL:=/usr}"
+
+: "${ENABLE_SM2:=}"
+: "${ENABLE_IDEA:=}"
+
+test_symbol_visibility() {
+ case "$OSTYPE" in
+ msys)
+ mkdir tmp
+ wget -O tmp/Dependencies_x64_Release.zip https://github.com/lucasg/Dependencies/releases/download/v1.10/Dependencies_x64_Release.zip
+ 7z x tmp/Dependencies_x64_Release.zip -otmp
+ tmp/Dependencies -exports "$RNP_INSTALL"/bin/librnp.dll > exports
+ rm -rf tmp
+ ;;
+ darwin*)
+ nm --defined-only -g "$RNP_INSTALL"/lib/librnp.dylib > exports
+ ;;
+ *)
+ nm --defined-only -g "$RNP_INSTALL"/lib64/librnp*.so > exports
+ esac
+
+ assertEquals "Unexpected: 'dst_close' is in exports" 0 "$(grep -c dst_close exports)"
+ assertEquals "Unexpected: 'Botan' is in exports" 0 "$(grep -c Botan exports)"
+ assertEquals "Unexpected: 'OpenSSL' is in exports" 0 "$(grep -c OpenSSL exports)"
+ assertEquals "Unexpected: 'rnp_version_string_full' is not in exports" 1 "$(grep -c rnp_version_string_full exports)"
+
+ rm -f exports
+}
+
+test_supported_features() {
+ # Make sure that we support all features which should be supported
+ supported=( RSA ELGAMAL DSA ECDH ECDSA EDDSA \
+ TRIPLEDES CAST5 BLOWFISH AES128 AES192 AES256 CAMELLIA128 CAMELLIA192 CAMELLIA256 \
+ MD5 SHA1 RIPEMD160 SHA256 SHA384 SHA512 SHA224 SHA3-256 SHA3-512 \
+ ZIP ZLIB BZip2 \
+ "NIST P-256" "NIST P-384" "NIST P-521" Ed25519 Curve25519 secp256k1 \
+ OCB)
+
+ # Old versions say ${unsupported[@]} is unbound if empty
+ unsupported=( NOOP )
+
+ botan_only=( TWOFISH EAX )
+ brainpool=( brainpoolP256r1 brainpoolP384r1 brainpoolP512r1 )
+ sm2=( SM2 SM4 SM3 "SM2 P-256" )
+
+ # SM2
+ if [[ "$ENABLE_SM2" == "Off" ]]; then
+ unsupported+=("${sm2[@]}")
+ elif [[ "${CRYPTO_BACKEND:-}" == "openssl" ]]; then
+ unsupported+=("${sm2[@]}")
+ else
+ supported+=("${sm2[@]}")
+ fi
+
+ # IDEA
+ if [[ "$ENABLE_IDEA" == "Off" ]] ;then
+ unsupported+=(IDEA)
+ else
+ supported+=(IDEA)
+ fi
+
+ case "$OSTYPE" in
+ msys)
+ so_folder="bin"
+ support+=("${brainpool[@]}")
+ ;;
+ darwin*)
+ so_folder="lib"
+ support+=("${brainpool[@]}")
+ ;;
+ *)
+ so_folder="lib64"
+ botan_only+=("${brainpool[@]}")
+ esac
+
+ if [[ "${CRYPTO_BACKEND:-}" == "openssl" ]]; then
+ unsupported+=("${botan_only[@]}")
+ library_path="${JSONC_INSTALL}/$so_folder:${RNP_INSTALL}/$so_folder"
+ else
+ supported+=("${botan_only[@]}")
+ library_path="${BOTAN_INSTALL}/$so_folder:${JSONC_INSTALL}/$so_folder:${RNP_INSTALL}/$so_folder"
+ fi
+
+ if [[ "$OSTYPE" == darwin* ]]; then
+ export DYLD_LIBRARY_PATH="$library_path"
+ else
+ export LD_LIBRARY_PATH="$library_path"
+ fi
+
+ "$RNP_INSTALL"/bin/rnp --version > rnp-version
+
+ for feature in "${supported[@]}"
+ do
+ fea="$(grep -ci "$feature" rnp-version)"
+ assertTrue "Unexpected unsupported feature: '$feature'" "[[ $fea -ge 1 ]]"
+ done
+ for feature in "${unsupported[@]}"
+ do
+ fea="$(grep -ci "$feature" rnp-version)"
+ assertTrue "Unexpected supported feature: '$feature'" "[[ $fea == 0 ]]"
+ done
+
+ rm -f rnp-version
+}
+
+# ......................................................................
+# shellcheck source=/dev/null
+. "$DIR0"/shunit2/shunit2