From 729139f80fd40c736861b77349dd839402f8fb85 Mon Sep 17 00:00:00 2001 From: Fabio Utzig Date: Sat, 4 Jan 2020 17:44:11 -0300 Subject: [PATCH] ci: add tool to check for Cargo features When running tests from .travis.yml, the passed in features are first checked locally for support in the current simulator. The list of supported features was manually maintained, allowing newly implemented features to be skipped, also skipping the related test (without warnings). This adds a new tool that parses and prints the list of features directly from the given Cargo.toml. Signed-off-by: Fabio Utzig --- .travis.yml | 5 +++++ ci/get_features.py | 40 ++++++++++++++++++++++++++++++++++++++++ ci/requirements.txt | 1 + ci/sim_install.sh | 2 ++ ci/sim_run.sh | 8 ++++++-- 5 files changed, 54 insertions(+), 2 deletions(-) create mode 100755 ci/get_features.py create mode 100644 ci/requirements.txt diff --git a/.travis.yml b/.travis.yml index 5772328a..8d4530f6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,10 @@ # Travis configuration. Build the simulator and run its tests. +addons: + apt: + packages: + - "python3-pip" + language: rust cache: diff --git a/ci/get_features.py b/ci/get_features.py new file mode 100755 index 00000000..3220dc3b --- /dev/null +++ b/ci/get_features.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python3 + +# Copyright 2020 JUUL Labs +# +# 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. + +import argparse +import os.path +import toml + +parser = argparse.ArgumentParser(description='Print features from a Cargo.toml.') +parser.add_argument('infile', help='Input file to parse') + +args = parser.parse_args() +if not os.path.isfile(args.infile): + print("File not found") + exit(1) + +try: + cargo_toml = open(args.infile).read() +except Exception: + print("Error reading \"{}\"".format(args.infile)) + exit(1) + +config = toml.loads(cargo_toml) +if 'features' not in config: + print("Missing \"[features]\" section") + exit(1) + +print(" ".join([k for k in config['features'] if k != 'default'])) diff --git a/ci/requirements.txt b/ci/requirements.txt new file mode 100644 index 00000000..bd79a658 --- /dev/null +++ b/ci/requirements.txt @@ -0,0 +1 @@ +toml diff --git a/ci/sim_install.sh b/ci/sim_install.sh index b9a4caea..8ec96cf4 100755 --- a/ci/sim_install.sh +++ b/ci/sim_install.sh @@ -12,6 +12,8 @@ # See the License for the specific language governing permissions and # limitations under the License. +pip3 install --user -r ci/requirements.txt + pushd sim && cargo fetch [[ $? -ne 0 ]] && exit 1 popd diff --git a/ci/sim_run.sh b/ci/sim_run.sh index 3a9b0dff..6c0e3f27 100755 --- a/ci/sim_run.sh +++ b/ci/sim_run.sh @@ -12,13 +12,17 @@ # See the License for the specific language governing permissions and # limitations under the License. +GET_FEATURES="$(pwd)/ci/get_features.py" +CARGO_TOML="$(pwd)/sim/Cargo.toml" + pushd sim +all_features="$(${GET_FEATURES} ${CARGO_TOML})" +[ $? -ne 0 ] && exit 1 + EXIT_CODE=0 if [[ ! -z $SINGLE_FEATURES ]]; then - all_features="sig-rsa sig-ecdsa overwrite-only validate-primary-slot enc-rsa enc-kw bootstrap" - if [[ $SINGLE_FEATURES =~ "none" ]]; then echo "Running cargo with no features" cargo test