GOST external tests
authorDmitry Belyavskiy <beldmit@gmail.com>
Mon, 11 May 2020 14:08:48 +0000 (17:08 +0300)
committerDmitry Belyavskiy <beldmit@gmail.com>
Sat, 23 May 2020 19:04:21 +0000 (22:04 +0300)
[extended tests]

Reviewed-by: Nicola Tuveri <nic.tuv@gmail.com>
Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/11792)

.gitmodules
.travis.yml
gost-engine [new submodule]
test/README.external
test/recipes/95-test_external_gost_engine.t [new file with mode: 0644]
test/recipes/95-test_external_gost_engine_data/gost_engine.sh [new file with mode: 0755]

index af32ea6..637e7ad 100644 (file)
@@ -9,3 +9,8 @@
 [submodule "krb5"]
        path = krb5
        url = https://github.com/krb5/krb5
+
+[submodule "gost-engine"]
+       path = gost-engine
+       url = https://github.com/gost-engine/engine
+       update = rebase
index 413d874..65cf6b1 100644 (file)
@@ -93,9 +93,11 @@ jobs:
               apt:
                   packages:
                       - golang-1.10
+                      - cmake
+                      - libtest2-suite-perl
           compiler: gcc
           # External test pyca-cryptography temporarily disabled due to long term travis failures
-          env:  EXTENDED_TEST="yes" CONFIG_OPTS="--debug enable-ssl3 enable-ssl3-method enable-weak-ssl-ciphers enable-external-tests enable-buildtest-c++" BORINGSSL_TESTS="yes" CXX="g++" TESTS="test_external_boringssl test_external_krb5"
+          env:  EXTENDED_TEST="yes" CONFIG_OPTS="--debug enable-ssl3 enable-ssl3-method enable-weak-ssl-ciphers enable-external-tests enable-buildtest-c++" BORINGSSL_TESTS="yes" CXX="g++" TESTS="test_external_boringssl test_external_krb5 test_external_gost_engine"
         - os: linux
           compiler: clang
           env: EXTENDED_TEST="yes" CONFIG_OPTS="enable-msan disable-afalgeng -Wno-unused-command-line-argument"
diff --git a/gost-engine b/gost-engine
new file mode 160000 (submodule)
index 0000000..7f055ba
--- /dev/null
@@ -0,0 +1 @@
+Subproject commit 7f055baddc3aa79fc1c2cf22bf5d5750843f5920
index 2f5423c..8069ce8 100644 (file)
@@ -134,6 +134,28 @@ of your system.  Certain tests may require more installed packages to run.  No
 tests are expected to fail.
 
 
+GOST engine test suite
+===============
+
+Much like the PYCA/Cryptography test suite, this builds and runs the GOST engine
+tests against the local OpenSSL build.
+
+You will need a git checkout of gost-engine at the top level:
+
+$ git submodule update --init
+
+Then configure/build OpenSSL enabling external tests:
+
+$ ./config shared enable-external-tests
+$ make
+
+GOST engine requires CMake for the build process.
+
+GOST engine tests will then be run as part of the rest of the suite, or can be
+explicitly run (with more debugging):
+
+$ make test VERBOSE=1 TESTS=test_external_gost_engine
+
 Updating test suites
 ====================
 
diff --git a/test/recipes/95-test_external_gost_engine.t b/test/recipes/95-test_external_gost_engine.t
new file mode 100644 (file)
index 0000000..e7522e7
--- /dev/null
@@ -0,0 +1,26 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License").  You may not use
+# this file except in compliance with the License.  You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use OpenSSL::Test;
+use OpenSSL::Test::Utils;
+use OpenSSL::Test qw/:DEFAULT bldtop_file data_file srctop_file cmdstr/;
+
+setup("test_external");
+
+plan skip_all => "No external tests in this configuration"
+    if disabled("external-tests");
+plan skip_all => "GOST engine tests not available on Windows or VMS"
+    if $^O =~ /^(VMS|MSWin32)$/;
+plan skip_all => "GOST engine tests only available in a shared build"
+    if disabled("shared");
+
+plan tests => 1;
+
+ok(run(cmd(["sh", data_file("gost_engine.sh")])),
+   "running GOST engine tests");
diff --git a/test/recipes/95-test_external_gost_engine_data/gost_engine.sh b/test/recipes/95-test_external_gost_engine_data/gost_engine.sh
new file mode 100755 (executable)
index 0000000..498825b
--- /dev/null
@@ -0,0 +1,45 @@
+#!/bin/sh
+#
+# Copyright 2020 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License").  You may not use
+# this file except in compliance with the License.  You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+#
+# OpenSSL external testing using the GOST engine
+#
+set -e
+
+O_EXE=`pwd`/$BLDTOP/apps
+O_BINC=`pwd`/$BLDTOP/include
+O_SINC=`pwd`/$SRCTOP/include
+O_LIB=`pwd`/$BLDTOP
+
+export PATH=$O_EXE:$PATH
+export LD_LIBRARY_PATH=$O_LIB:$LD_LIBRARY_PATH
+export OPENSSL_ROOT_DIR=$O_LIB
+
+# Check/Set openssl version
+OPENSSL_VERSION=`openssl version | cut -f 2 -d ' '`
+
+echo "------------------------------------------------------------------"
+echo "Testing OpenSSL using GOST engine:"
+echo "   CWD:                $PWD"
+echo "   SRCTOP:             $SRCTOP"
+echo "   BLDTOP:             $BLDTOP"
+echo "   OPENSSL_ROOT_DIR:   $OPENSSL_ROOT_DIR"
+echo "   OpenSSL version:    $OPENSSL_VERSION"
+echo "------------------------------------------------------------------"
+
+cd $SRCTOP/gost-engine
+rm -rf build
+mkdir -p build
+cd build
+cmake ..
+make
+CTEST_OUTPUT_ON_FAILURE=1 HARNESS_OSSL_PREFIX='' OPENSSL_ENGINES=$OPENSSL_ROOT_DIR/gost-engine/build/bin make test
+
+exit 0
+