mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-10-21 11:58:41 +00:00
cli: Add initial cli implementation.
- Add kata-runtime - Add unit test - Add Makefile to build cli Fixes: #33 Signed-off-by: Julio Montes <julio.montes@intel.com> Signed-off-by: James O. D. Hunt <james.o.hunt@intel.com> Signed-off-by: Jose Carlos Venegas Munoz <jose.carlos.venegas.munoz@intel.com>
This commit is contained in:
committed by
Jose Carlos Venegas Munoz
parent
65b9936798
commit
e84a9a70b0
23
.ci/go-no-os-exit.sh
Executable file
23
.ci/go-no-os-exit.sh
Executable file
@@ -0,0 +1,23 @@
|
||||
#!/bin/bash
|
||||
# Copyright (c) 2018 Intel Corporation
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
go_packages=.
|
||||
|
||||
candidates=`go list -f '{{.Dir}}/*.go' $go_packages`
|
||||
for f in $candidates; do
|
||||
filename=`basename $f`
|
||||
# skip exit.go where, the only file we should call os.Exit() from.
|
||||
[[ $filename == "exit.go" ]] && continue
|
||||
# skip exit_test.go
|
||||
[[ $filename == "exit_test.go" ]] && continue
|
||||
# skip main_test.go
|
||||
[[ $filename == "main_test.go" ]] && continue
|
||||
files="$f $files"
|
||||
done
|
||||
|
||||
if egrep -n '\<os\.Exit\>' $files; then
|
||||
echo "Direct calls to os.Exit() are forbidden, please use exit() so atexit() works"
|
||||
exit 1
|
||||
fi
|
99
.ci/go-static-checks.sh
Executable file
99
.ci/go-static-checks.sh
Executable file
@@ -0,0 +1,99 @@
|
||||
#!/bin/bash
|
||||
# Copyright (c) 2018 Intel Corporation
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
set -e
|
||||
|
||||
# Perform static go tests.
|
||||
|
||||
function usage {
|
||||
echo "Usage $0 [OPTIONS] [PACKAGES]"
|
||||
echo "Perform static go checks on PACKAGES (./... by default)."
|
||||
echo
|
||||
echo "List of options:"
|
||||
echo " -h, --help print this help"
|
||||
echo " -n, --no-network do not access the network"
|
||||
}
|
||||
|
||||
for i in "$@"; do
|
||||
case $i in
|
||||
-h|--help)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
-n|--no-network)
|
||||
NONETWORK=1
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
args="$args $i"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
go_packages=$args
|
||||
|
||||
[ -z "$go_packages" ] && {
|
||||
go_packages=$(go list ./... | grep -v vendor)
|
||||
}
|
||||
|
||||
function install_package {
|
||||
url="$1"
|
||||
name=${url##*/}
|
||||
|
||||
if [ -n "$NONETWORK" ]; then
|
||||
echo "Skipping updating package $name, no network access allowed"
|
||||
return
|
||||
fi
|
||||
|
||||
echo Updating $name...
|
||||
go get -u $url
|
||||
}
|
||||
|
||||
install_package github.com/fzipp/gocyclo
|
||||
install_package github.com/client9/misspell/cmd/misspell
|
||||
install_package github.com/golang/lint/golint
|
||||
install_package github.com/gordonklaus/ineffassign
|
||||
install_package github.com/opennota/check/cmd/structcheck
|
||||
install_package honnef.co/go/tools/cmd/unused
|
||||
install_package honnef.co/go/tools/cmd/staticcheck
|
||||
|
||||
echo Doing go static checks on packages: $go_packages
|
||||
|
||||
echo "Running misspell..."
|
||||
go list -f '{{.Dir}}/*.go' $go_packages |\
|
||||
xargs -I % bash -c "misspell -error %"
|
||||
|
||||
echo "Running go vet..."
|
||||
go vet $go_packages
|
||||
|
||||
cmd="gofmt -s -d -l"
|
||||
echo "Running gofmt..."
|
||||
|
||||
# Note: ignore git directory in case any refs end in ".go" too.
|
||||
diff=$(find . -not -wholename '*/vendor/*' -not -wholename '*/.git/*' -name '*.go' | \
|
||||
xargs $cmd)
|
||||
if [ -n "$diff" -a $(echo "$diff" | wc -l) -ne 0 ]
|
||||
then
|
||||
echo 2>&1 "ERROR: '$cmd' found problems:"
|
||||
echo 2>&1 "$diff"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Running cyclo..."
|
||||
gocyclo -over 15 `go list -f '{{.Dir}}/*.go' $go_packages`
|
||||
|
||||
echo "Running golint..."
|
||||
for p in $go_packages; do golint -set_exit_status $p; done
|
||||
|
||||
echo "Running ineffassign..."
|
||||
go list -f '{{.Dir}}' $go_packages | xargs -L 1 ineffassign
|
||||
|
||||
for tool in structcheck unused staticcheck
|
||||
do
|
||||
echo "Running ${tool}..."
|
||||
eval "$tool" "$go_packages"
|
||||
done
|
||||
|
||||
echo "All Good!"
|
96
.ci/go-test.sh
Executable file
96
.ci/go-test.sh
Executable file
@@ -0,0 +1,96 @@
|
||||
#!/bin/bash
|
||||
# Copyright (c) 2018 Intel Corporation
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
set -e
|
||||
|
||||
script_dir=$(cd `dirname $0`; pwd)
|
||||
root_dir=`dirname $script_dir`
|
||||
|
||||
test_packages="."
|
||||
|
||||
# Set default test run timeout value.
|
||||
#
|
||||
# CC_GO_TEST_TIMEOUT can be set to any value accepted by
|
||||
# "go test -timeout X"
|
||||
timeout_value=${CC_GO_TEST_TIMEOUT:-10s}
|
||||
|
||||
go_test_flags="-v -race -timeout $timeout_value"
|
||||
cov_file="profile.cov"
|
||||
tmp_cov_file="profile_tmp.cov"
|
||||
|
||||
# Run a command as either root or the current user (which might still be root).
|
||||
#
|
||||
# If the first argument is "root", run using sudo, else run as normal.
|
||||
# All arguments after the first will be treated as the command to run.
|
||||
function run_as_user
|
||||
{
|
||||
user="$1"
|
||||
shift
|
||||
cmd=$*
|
||||
|
||||
if [ "$user" = root ]
|
||||
then
|
||||
# use a shell to ensure PATH is correct.
|
||||
sudo -E PATH="$PATH" sh -c "$cmd"
|
||||
else
|
||||
$cmd
|
||||
fi
|
||||
}
|
||||
|
||||
function test_html_coverage
|
||||
{
|
||||
html_report="coverage.html"
|
||||
|
||||
test_coverage
|
||||
|
||||
go tool cover -html="${cov_file}" -o "${html_report}"
|
||||
rm -f "${cov_file}"
|
||||
|
||||
run_as_user "current" chmod 644 "${html_report}"
|
||||
}
|
||||
|
||||
function test_coverage
|
||||
{
|
||||
echo "mode: atomic" > "$cov_file"
|
||||
|
||||
if [ $(id -u) -eq 0 ]
|
||||
then
|
||||
echo >&2 "WARNING: Already running as root so will not re-run tests as non-root user."
|
||||
echo >&2 "WARNING: As a result, only a subset of tests will be run"
|
||||
echo >&2 "WARNING: (run this script as a non-privileged to ensure all tests are run)."
|
||||
users="current"
|
||||
else
|
||||
# Run the unit-tests *twice* (since some must run as root and
|
||||
# others must run as non-root), combining the resulting test
|
||||
# coverage files.
|
||||
users="current root"
|
||||
fi
|
||||
|
||||
for pkg in $test_packages; do
|
||||
for user in $users; do
|
||||
printf "INFO: Running 'go test' as %s user on packages '%s' with flags '%s'\n" "$user" "$test_packages" "$go_test_flags"
|
||||
|
||||
run_as_user "$user" go test $go_test_flags -covermode=atomic -coverprofile="$tmp_cov_file" $pkg
|
||||
if [ -f "${tmp_cov_file}" ]; then
|
||||
run_as_user "$user" chmod 644 "$tmp_cov_file"
|
||||
tail -n +2 "$tmp_cov_file" >> "$cov_file"
|
||||
run_as_user "$user" rm -f "$tmp_cov_file"
|
||||
fi
|
||||
done
|
||||
done
|
||||
}
|
||||
|
||||
function test_local
|
||||
{
|
||||
go test $go_test_flags $test_packages
|
||||
}
|
||||
|
||||
if [ "$1" = "html-coverage" ]; then
|
||||
test_html_coverage
|
||||
elif [ "$CI" = "true" ]; then
|
||||
test_coverage
|
||||
else
|
||||
test_local
|
||||
fi
|
Reference in New Issue
Block a user