1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
|
echo nix/shell.sh: Entering a devShell
export SRC_ROOT=$(pwd)
export PATH=$SRC_ROOT/build/bin:$PATH
banner()
{
echo "+---------------------------------------------------------+"
printf "| %-55s |\n" "$1"
echo "+---------------------------------------------------------+"
}
function clean {
banner "Cleanup ./build"
rm -rf ./build
}
function configure {
banner "Configuring with cmake"
cmake -S . -B./build \
-DBUILD_TESTING=ON \
-DS2N_INTEG_TESTS=ON \
-DS2N_INSTALL_S2NC_S2ND=ON \
-DS2N_INTEG_NIX=ON \
-DBUILD_SHARED_LIBS=ON \
$S2N_CMAKE_OPTIONS \
-DCMAKE_BUILD_TYPE=RelWithDebInfo
}
function build {
banner "Running Build"
javac tests/integrationv2/bin/SSLSocketClient.java
cmake --build ./build -j $(nproc)
}
function unit {
if [[ -z "$1" ]]; then
(cd $SRC_ROOT/build; ctest -L unit -j $(nproc) --verbose)
else
(cd $SRC_ROOT/build; ctest -L unit -R $1 -j $(nproc) --verbose)
fi
}
function integ {
if [ "$1" == "help" ]; then
echo "The following tests are not supported:"
echo " - cross_compatibility"
echo " This test depends on s2nc_head and s2nd_head. To run"
echo " the test build s2n-tls from the main branch on github."
echo " Change the names of s2n[cd] to s2n[cd]_head and add those"
echo " binaries to \$PATH."
echo "- renegotiate_apache"
echo " This test requires apache to be running. See codebuild/bin/s2n_apache.sh"
echo " for more info."
return
fi
if [[ -z "$1" ]]; then
banner "Running all integ tests except cross_compatibility, renegotiate_apache."
(cd $SRC_ROOT/build; ctest -L integrationv2 -E "(integrationv2_cross_compatibility|integrationv2_renegotiate_apache)" --verbose)
else
banner "Warning: cross_compatibility & renegotiate_apache are not supported in nix for various reasons integ help for more info."
for test in $@; do
ctest --test-dir ./build -L integrationv2 --no-tests=error --output-on-failure -R "$test" --verbose
if [ "$?" -ne 0 ]; then
echo "Test failed, stopping execution"
return 1
fi
done
fi
}
function check-clang-format {
banner "Dry run of clang-format"
(cd $SRC_ROOT;
include_regex=".*\.(c|h)$";
src_files=`find ./api -name .git -prune -o -regextype posix-egrep -regex "$include_regex" -print`;
src_files+=" ";
src_files+=`find ./bin -name .git -prune -o -regextype posix-egrep -regex "$include_regex" -print`;
src_files+=" ";
src_files+=`find ./crypto -name .git -prune -o -regextype posix-egrep -regex "$include_regex" -print`;
src_files+=" ";
src_files+=`find ./stuffer -name .git -prune -o -regextype posix-egrep -regex "$include_regex" -print`;
src_files+=" ";
src_files+=`find ./error -name .git -prune -o -regextype posix-egrep -regex "$include_regex" -print`;
src_files+=" ";
src_files+=`find ./tls -name .git -prune -o -regextype posix-egrep -regex "$include_regex" -print`;
src_files+=" ";
src_files+=`find ./utils -name .git -prune -o -regextype posix-egrep -regex "$include_regex" -print`;
src_files+=" ";
src_files+=`find ./tests/unit -name .git -prune -o -regextype posix-egrep -regex "$include_regex" -print`;
src_files+=" ";
src_files+=`find ./tests/testlib -name .git -prune -o -regextype posix-egrep -regex "$include_regex" -print`;
echo $src_files | xargs -n 1 -P $(nproc) clang-format --dry-run -style=file)
}
function do-clang-format {
banner "In place clang-format"
(cd $SRC_ROOT;
include_regex=".*\.(c|h)$";
src_files=`find ./api -name .git -prune -o -regextype posix-egrep -regex "$include_regex" -print`;
src_files+=" ";
src_files+=`find ./bin -name .git -prune -o -regextype posix-egrep -regex "$include_regex" -print`;
src_files+=" ";
src_files+=`find ./crypto -name .git -prune -o -regextype posix-egrep -regex "$include_regex" -print`;
src_files+=" ";
src_files+=`find ./stuffer -name .git -prune -o -regextype posix-egrep -regex "$include_regex" -print`;
src_files+=" ";
src_files+=`find ./error -name .git -prune -o -regextype posix-egrep -regex "$include_regex" -print`;
src_files+=" ";
src_files+=`find ./tls -name .git -prune -o -regextype posix-egrep -regex "$include_regex" -print`;
src_files+=" ";
src_files+=`find ./utils -name .git -prune -o -regextype posix-egrep -regex "$include_regex" -print`;
src_files+=" ";
src_files+=`find ./tests/unit -name .git -prune -o -regextype posix-egrep -regex "$include_regex" -print`;
src_files+=" ";
src_files+=`find ./tests/testlib -name .git -prune -o -regextype posix-egrep -regex "$include_regex" -print`;
echo $src_files | xargs -n 1 -P $(nproc) clang-format -style=file -i)
}
function test_toolchain_counts {
# This is a starting point for a unit test of the devShell.
# The choosen S2N_LIBCRYPTO should be 2, and the others should be zero.
banner "Checking the CMAKE_INCLUDE_PATH for libcrypto counts"
echo $CMAKE_INCLUDE_PATH|gawk 'BEGIN{RS=":"; o10=0; o11=0; o3=0;awslc=0;libre=0}
/openssl-3.0/{o3++}
/openssl-1.1/{o11++}
/openssl-1.0/{o10++}
/aws-lc/{awslc++}
/libressl/{libre++}
END{print "\nOpenssl3:\t",o3,"\nOpenssl1.1:\t",o11,"\nOpenssl1.0.2:\t",o10,"\nAwlc:\t\t",awslc,"\nLibreSSL:\t", libre}'
banner "Checking tooling counts (these should all be 1)"
echo -e "\nOpenssl integ:\t $(openssl version|grep -c '1.1.1')"
echo -e "Corretto 17:\t $(java -version 2>&1|grep -ce 'Runtime.*Corretto-17')"
echo -e "gnutls-cli:\t $(gnutls-cli --version |grep -c 'gnutls-cli 3.7')"
echo -e "gnutls-serv:\t $(gnutls-serv --version |grep -c 'gnutls-serv 3.7')"
echo -e "Nix Python:\t $(which python|grep -c '/nix/store')"
echo -e "Nix pytest:\t $(which pytest|grep -c '/nix/store')"
echo -e "Nix sslyze:\t $(which sslyze|grep -c '/nix/store')"
echo -e "python nassl:\t $(pip freeze|grep -c 'nassl')"
echo -e "valgrind:\t $(valgrind --version|grep -c 'valgrind-3.19.0')"
}
function test_nonstandard_compilation {
# Any script that needs to compile s2n in a non-standard way can run here
./codebuild/bin/test_dynamic_load.sh $(mktemp -d)
}
|