From 6fae14e51c7e1f9d97289727bf51960e01acdb58 Mon Sep 17 00:00:00 2001 From: "William A. Kennington III" Date: Tue, 20 Apr 2021 00:08:40 -0700 Subject: meta-google: test-sh: Add package Provides a basic facility for unit testing shell scripts. Change-Id: I8b8baa1595ed80e5b8d13654ebdc3ba1d044b0cf Signed-off-by: William A. Kennington III --- meta-google/recipes-google/test/test-sh.bb | 21 ++++ meta-google/recipes-google/test/test-sh/lib.sh | 57 ++++++++++ meta-google/recipes-google/test/test-sh/test.sh | 145 ++++++++++++++++++++++++ 3 files changed, 223 insertions(+) create mode 100644 meta-google/recipes-google/test/test-sh.bb create mode 100755 meta-google/recipes-google/test/test-sh/lib.sh create mode 100755 meta-google/recipes-google/test/test-sh/test.sh (limited to 'meta-google') diff --git a/meta-google/recipes-google/test/test-sh.bb b/meta-google/recipes-google/test/test-sh.bb new file mode 100644 index 0000000000..7edbb91890 --- /dev/null +++ b/meta-google/recipes-google/test/test-sh.bb @@ -0,0 +1,21 @@ +SUMMARY = "Shell functions for testing shell scripts" +PR = "r1" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" + +FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" +SRC_URI += "file://lib.sh" +SRC_URI += "file://test.sh" +S = "${WORKDIR}" + +DATA = "${datadir}/test" +FILES_${PN} += "${DATA}" + +do_compile() { + SYSROOT="$PKG_CONFIG_SYSROOT_DIR" bash test.sh || exit +} + +do_install_append() { + install -d -m0755 ${D}${DATA} + install -m0644 lib.sh ${D}${DATA}/ +} diff --git a/meta-google/recipes-google/test/test-sh/lib.sh b/meta-google/recipes-google/test/test-sh/lib.sh new file mode 100755 index 0000000000..cc04c5dbf6 --- /dev/null +++ b/meta-google/recipes-google/test/test-sh/lib.sh @@ -0,0 +1,57 @@ +#!/bin/bash +# Copyright 2021 Google LLC +# +# 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. + +expect_streq() { + local r="${2-$(cat)}" + [ "$1" = "$r" ] && return + echo " Line ${BASH_LINENO[0]} '$1' != '$r'" >&2 + test_err=1 +} + +expect_numeq() { + (( "$1" == "$2" )) && return + echo " Line ${BASH_LINENO[0]} '$1' != '$2'" >&2 + test_err=1 +} + +expect_err() { + local expected=$1 + shift + local rc=0 + "$@" || rc="$?" + (( rc == expected )) && return + echo " Line ${BASH_LINENO[0]} Status '$rc' != '$expected'" >&2 + test_err=1 +} + +fail() { + echo " Line ${BASH_LINENO[0]} Fail" >&2 + test_err=1 +} + +main() { + local agg_err=0 + for f in $(declare -F | grep 'declare -f test[A-Z_]' | awk '{print $3}'); do + echo "[$f] Running..." >&2 + local test_err=0 + if "$f" && (( test_err == 0 )); then + echo "[$f] Success" >&2 + else + echo "[$f] Failed ($?)" >&2 + agg_err=1 + fi + done + return $agg_err +} diff --git a/meta-google/recipes-google/test/test-sh/test.sh b/meta-google/recipes-google/test/test-sh/test.sh new file mode 100755 index 0000000000..c74029d171 --- /dev/null +++ b/meta-google/recipes-google/test/test-sh/test.sh @@ -0,0 +1,145 @@ +#!/bin/bash +# Copyright 2021 Google LLC +# +# 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. + +source "$(dirname "$0")/lib.sh" || exit + +( + echo '## Test Pass' >&2 + test_pass() { + return 0 + } + main || exit +) || exit + +( + echo '## Test Fail' >&2 + i=0 + test_pass1() { + (( i++ )) + return 0 + } + test_fail() { + return 1 + (( i++ )) + return 0 + } + test_pass2() { + (( i++ )) + return 0 + } + ! main || exit + (( i == 2 )) || exit +) || exit + +( + echo '## Test Deferred Fail' >&2 + i=0 + test_expect_fail() { + test_err=1 || return + (( i++ )) + return 0 + } + test_pass() { + (( i++ )) + return 0 + } + ! main || exit + (( i == 2 )) || exit +) || exit + +( + echo '## Test Fail' >&2 + i=0 + test_fail() { + fail 'Failed' || return + (( i++ )) + return 0 + } + ! main || exit + (( i == 1 )) || exit +) || exit + +( + echo '## Test Expect Err' >&2 + i=0 + test_expect_err() { + expect_err 1 false || return + (( i++ )) + return 0 + } + main || exit + (( i == 1 )) || exit +) || exit + +( + echo '## Test Expect Err Error' >&2 + i=0 + test_expect_err() { + expect_err 0 false || return + (( i++ )) + return 0 + } + ! main || exit + (( i == 1 )) || exit +) || exit + +( + echo '## Test Num EQ' >&2 + i=0 + test_num_eq() { + expect_numeq 15 0xf || return + expect_numeq 1 1 || return + (( i++ )) + return 0 + } + main || exit + (( i == 1 )) || exit +) || exit + +( + echo '## Test Num EQ Error' >&2 + i=0 + test_num_eq() { + expect_numeq 15 10 || return + (( i++ )) + return 0 + } + ! main || exit + (( i == 1 )) || exit +) || exit + +( + echo '## Test Str EQ' >&2 + i=0 + test_str_eq() { + expect_streq abz abz || return + (( i++ )) + return 0 + } + main || exit + (( i == 1 )) || exit +) || exit + +( + echo '## Test Str EQ Error' >&2 + i=0 + test_str_eq() { + expect_streq 15 0xf || return + (( i++ )) + return 0 + } + ! main || exit + (( i == 1 )) || exit +) || exit -- cgit v1.2.3