From 6f8769ee8d7aaf54ed97e06dcb8903604555a4e6 Mon Sep 17 00:00:00 2001 From: Pol Henarejos Date: Mon, 30 Jan 2023 01:24:10 +0100 Subject: [PATCH] Added scripts for testing in a docker container. Signed-off-by: Pol Henarejos --- tests/docker/jammy/Dockerfile | 29 ++++++++++ tests/docker_env.sh | 106 ++++++++++++++++++++++++++++++++++ tests/run-test-in-docker.sh | 6 ++ tests/start-up-and-test.sh | 5 ++ 4 files changed, 146 insertions(+) create mode 100644 tests/docker/jammy/Dockerfile create mode 100644 tests/docker_env.sh create mode 100755 tests/run-test-in-docker.sh create mode 100755 tests/start-up-and-test.sh diff --git a/tests/docker/jammy/Dockerfile b/tests/docker/jammy/Dockerfile new file mode 100644 index 0000000..7de8b99 --- /dev/null +++ b/tests/docker/jammy/Dockerfile @@ -0,0 +1,29 @@ +FROM ubuntu:jammy + +ARG DEBIAN_FRONTEND=noninteractive + +RUN apt update && apt upgrade -y +RUN apt install -y libccid \ + libpcsclite-dev \ + git \ + autoconf \ + pkg-config \ + libtool \ + help2man \ + automake \ + gcc \ + make \ + build-essential \ + opensc \ + python3 \ + python3-pip \ + swig \ + cmake \ + && rm -rf /var/lib/apt/lists/* +RUN pip3 install pytest pycvc cryptography pyscard +RUN git clone https://github.com/frankmorgner/vsmartcard.git +WORKDIR /vsmartcard/virtualsmartcard +RUN autoreconf --verbose --install +RUN ./configure --sysconfdir=/etc +RUN make && make install +WORKDIR / diff --git a/tests/docker_env.sh b/tests/docker_env.sh new file mode 100644 index 0000000..4bdc912 --- /dev/null +++ b/tests/docker_env.sh @@ -0,0 +1,106 @@ +#!/bin/bash -eu + +# Taken from Mbed-TLS project +# https://github.com/Mbed-TLS/mbedtls/blob/master/tests/scripts/docker_env.sh +# +# docker_env.sh +# +# Purpose +# ------- +# +# This is a helper script to enable running tests under a Docker container, +# thus making it easier to get set up as well as isolating test dependencies +# (which include legacy/insecure configurations of openssl and gnutls). +# +# WARNING: the Dockerfile used by this script is no longer maintained! See +# https://github.com/Mbed-TLS/mbedtls-test/blob/master/README.md#quick-start +# for the set of Docker images we use on the CI. +# +# Notes for users +# --------------- +# This script expects a Linux x86_64 system with a recent version of Docker +# installed and available for use, as well as http/https access. If a proxy +# server must be used, invoke this script with the usual environment variables +# (http_proxy and https_proxy) set appropriately. If an alternate Docker +# registry is needed, specify MBEDTLS_DOCKER_REGISTRY to point at the +# host name. +# +# +# Running this script directly will check for Docker availability and set up +# the Docker image. + +# Copyright The Mbed TLS Contributors +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +# default values, can be overridden by the environment +: ${MBEDTLS_DOCKER_GUEST:=jammy} + + +DOCKER_IMAGE_TAG="pico-hsm-test:${MBEDTLS_DOCKER_GUEST}" + +# Make sure docker is available +if ! which docker > /dev/null; then + echo "Docker is required but doesn't seem to be installed. See https://www.docker.com/ to get started" + exit 1 +fi + +# Figure out if we need to 'sudo docker' +if groups | grep docker > /dev/null; then + DOCKER="docker" +else + echo "Using sudo to invoke docker since you're not a member of the docker group..." + DOCKER="docker" +fi + +# Figure out the number of processors available +if [ "$(uname)" == "Darwin" ]; then + NUM_PROC="$(sysctl -n hw.logicalcpu)" +else + NUM_PROC="$(nproc)" +fi + +# Build the Docker image +echo "Getting docker image up to date (this may take a few minutes)..." +${DOCKER} image build \ + -t ${DOCKER_IMAGE_TAG} \ + --cache-from=${DOCKER_IMAGE_TAG} \ + --network host \ + --build-arg MAKEFLAGS_PARALLEL="-j ${NUM_PROC}" \ + tests/docker/${MBEDTLS_DOCKER_GUEST} + +run_in_docker() +{ + ENV_ARGS="" + while [ "$1" == "-e" ]; do + ENV_ARGS="${ENV_ARGS} $1 $2" + shift 2 + done + + WORKDIR="${PWD}" + if [ "$1" == '-w' ]; then + WORKDIR="$2" + shift 2 + fi + + ${DOCKER} container run -it --rm \ + --cap-add SYS_PTRACE \ + --volume $PWD:$PWD \ + --workdir ${WORKDIR} \ + -e MAKEFLAGS \ + ${ENV_ARGS} \ + ${DOCKER_IMAGE_TAG} \ + $@ +} diff --git a/tests/run-test-in-docker.sh b/tests/run-test-in-docker.sh new file mode 100755 index 0000000..b8cbb3d --- /dev/null +++ b/tests/run-test-in-docker.sh @@ -0,0 +1,6 @@ +#!/bin/bash -eu + +source tests/docker_env.sh +run_in_docker rm -f memory.flash +run_in_docker ./tests/start-up-and-test.sh + diff --git a/tests/start-up-and-test.sh b/tests/start-up-and-test.sh new file mode 100755 index 0000000..d7aaa04 --- /dev/null +++ b/tests/start-up-and-test.sh @@ -0,0 +1,5 @@ +#!/bin/bash -eu + +/usr/sbin/pcscd & +./build_in_docker/pico_hsm > /dev/null & +pytest tests -W ignore::DeprecationWarning