summaryrefslogtreecommitdiff
path: root/evergreen/crypt_run_tests.sh
diff options
context:
space:
mode:
Diffstat (limited to 'evergreen/crypt_run_tests.sh')
-rwxr-xr-xevergreen/crypt_run_tests.sh83
1 files changed, 83 insertions, 0 deletions
diff --git a/evergreen/crypt_run_tests.sh b/evergreen/crypt_run_tests.sh
new file mode 100755
index 00000000000..6a20341c27e
--- /dev/null
+++ b/evergreen/crypt_run_tests.sh
@@ -0,0 +1,83 @@
+#!/bin/bash
+
+# This script verifies that specific symbols, and specific symbols only are
+# exported in mongo_crypt_v1.so
+
+DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" > /dev/null 2>&1 && pwd)"
+. "$DIR/prelude.sh"
+
+cd src
+
+set -o errexit
+set -o verbose
+
+if [ "$(uname)" != "Linux" ]; then
+ echo "Skipping test, this is for linux only"
+ exit 0
+fi
+
+EXTRACT_DIR="build/crypt-lib-${version}"
+SOPATH="${EXTRACT_DIR}/lib/mongo_crypt_v1.so"
+UNITTEST_PATH="${EXTRACT_DIR}/bin/mongo_crypt_shlib_test"
+GDB_PATH="/opt/mongodbtoolchain/v3/bin/gdb"
+
+# dump the contents of the extract dir to log
+find $EXTRACT_DIR
+
+if [ ! -f "$SOPATH" ]; then
+ echo "Error: can not find library at: $SOPATH"
+ exit 1
+fi
+
+#
+# Check the set of exported symbols match the expected set of symbols
+#
+echo "Running Mongo Crypt Shared Library exported symbols test"
+
+expect='A MONGO_CRYPT_1.0
+T mongo_crypt_v1_analyze_query
+T mongo_crypt_v1_bson_free
+T mongo_crypt_v1_get_version
+T mongo_crypt_v1_get_version_str
+T mongo_crypt_v1_lib_create
+T mongo_crypt_v1_lib_destroy
+T mongo_crypt_v1_query_analyzer_create
+T mongo_crypt_v1_query_analyzer_destroy
+T mongo_crypt_v1_status_create
+T mongo_crypt_v1_status_destroy
+T mongo_crypt_v1_status_get_code
+T mongo_crypt_v1_status_get_error
+T mongo_crypt_v1_status_get_explanation'
+
+actual="$(nm --extern-only --defined-only "$SOPATH" | awk '{ print $2, $3 }' | sort)"
+
+if [ "$actual" != "$expect" ]; then
+ echo "Error: symbols are not as expected in: $SOPATH"
+ echo "Diff:"
+ diff <(echo "$actual") <(echo "$expect")
+ exit 1
+fi
+
+echo "Mongo Crypt Shared Library exported symbols test succeeded!"
+
+#
+# If the shared library version of the unit tests exists, run it,
+# and the verify it can be debugged with gdb
+#
+if [ ! -f "$UNITTEST_PATH" ]; then
+ echo "Skipping Mongo Crypt Shared Library unit test. Test not found at $UNITTEST_PATH"
+ exit 0
+fi
+
+echo "Running Mongo Crypt Shared Library unit test"
+$UNITTEST_PATH
+echo "Mongo Crypt Shared Library unit test succeeded!"
+
+if [ ! -f "$GDB_PATH" ]; then
+ echo "Skipping Mongo Crypt Shared Library debuggability test. No gdb found at $GDB_PATH"
+ exit 0
+fi
+
+echo "Running Mongo Crypt Shared Library debuggability test"
+$GDB_PATH "$UNITTEST_PATH" --batch -ex "source ${EXTRACT_DIR}/crypt_debuggability_test.py"
+echo "Mongo Crypt Shared Library shared library debuggability test succeeded!"