Make wrapper work for simple usecase
This commit is contained in:
parent
c7e09adba2
commit
bb695de69f
15
examples
15
examples
@ -52,4 +52,19 @@ _verify-prerequisites() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
kubectlw() {
|
||||||
|
_wrapper \
|
||||||
|
-n kubectl \
|
||||||
|
-v v1.19.4 \
|
||||||
|
-l https://dl.k8s.io/release/VERSION/bin/linux/amd64/kubectl \
|
||||||
|
-d https://dl.k8s.io/release/VERSION/bin/darwin/amd64/kubectl \
|
||||||
|
-- \
|
||||||
|
"$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
⚡kubectl-version() {
|
||||||
|
_help-line "Show version of kubectl wrapper" "$@"
|
||||||
|
kubectlw version
|
||||||
|
}
|
||||||
|
|
||||||
source ⚡
|
source ⚡
|
||||||
|
@ -140,11 +140,12 @@ $ echo '
|
|||||||
|
|
||||||
kubectlw() {
|
kubectlw() {
|
||||||
_wrapper \
|
_wrapper \
|
||||||
-a "$@" \
|
|
||||||
-n kubectl \
|
-n kubectl \
|
||||||
-v v1.19.4 \
|
-v v1.19.4 \
|
||||||
-l https://dl.k8s.io/release/VERSION/bin/linux/amd64/kubectl \
|
-l https://dl.k8s.io/release/VERSION/bin/linux/amd64/kubectl \
|
||||||
-d https://dl.k8s.io/release/VERSION/bin/darwin/amd64/kubectl
|
-d https://dl.k8s.io/release/VERSION/bin/darwin/amd64/kubectl \
|
||||||
|
-- \
|
||||||
|
"$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
⚡kubectl-version() {
|
⚡kubectl-version() {
|
||||||
|
46
test/runner
46
test/runner
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
try() {
|
try() {
|
||||||
output=$(mktemp -d)
|
output=$(mktemp -d)
|
||||||
"$@" > "$output/stdout" 2> "$output/stderr"
|
PATH="$fake_path:$PATH" "$@" > "$output/stdout" 2> "$output/stderr"
|
||||||
EXIT_CODE=$?
|
EXIT_CODE=$?
|
||||||
STDOUT=$(<"$output/stdout")
|
STDOUT=$(<"$output/stdout")
|
||||||
STDERR=$(<"$output/stderr")
|
STDERR=$(<"$output/stderr")
|
||||||
@ -14,12 +14,14 @@ setUp() {
|
|||||||
export TMPDIR="$PWD/.generated"
|
export TMPDIR="$PWD/.generated"
|
||||||
export-repo-root
|
export-repo-root
|
||||||
move-to-working-directory
|
move-to-working-directory
|
||||||
|
create-fake-path
|
||||||
}
|
}
|
||||||
|
|
||||||
tearDown() {
|
tearDown() {
|
||||||
[ "${_shunit_test_:=}" = '' ] && return 0
|
[ "${_shunit_test_:=}" = '' ] && return 0
|
||||||
|
|
||||||
clean-up-working-directory
|
clean-up-working-directory
|
||||||
|
clean-up-fake-path
|
||||||
|
|
||||||
if [ "${__shunit_testSuccess:?}" != 0 ]; then
|
if [ "${__shunit_testSuccess:?}" != 0 ]; then
|
||||||
output-outputs
|
output-outputs
|
||||||
@ -39,11 +41,20 @@ move-to-working-directory() {
|
|||||||
cd $working_dir
|
cd $working_dir
|
||||||
}
|
}
|
||||||
|
|
||||||
|
create-fake-path() {
|
||||||
|
fake_path=$(mktemp -d)
|
||||||
|
invokations=$(mktemp -d)
|
||||||
|
}
|
||||||
|
|
||||||
clean-up-working-directory() {
|
clean-up-working-directory() {
|
||||||
cd $original_dir
|
cd $original_dir
|
||||||
rm -rf $working_dir
|
rm -rf $working_dir
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clean-up-fake-path() {
|
||||||
|
rm -rf $fake_path $invokations
|
||||||
|
}
|
||||||
|
|
||||||
output-outputs() {
|
output-outputs() {
|
||||||
(
|
(
|
||||||
bold '*******Test failed********'
|
bold '*******Test failed********'
|
||||||
@ -61,6 +72,39 @@ bold() {
|
|||||||
echo -e "\033[0m"
|
echo -e "\033[0m"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mock() {
|
||||||
|
command="$1"; shift
|
||||||
|
[[ -n "$1" ]] && output="$1"; shift
|
||||||
|
|
||||||
|
if ! [[ -f $fake_path/$command ]]; then
|
||||||
|
echo 'echo "$@" >> '$invokations/$command > $fake_path/$command
|
||||||
|
chmod +x $fake_path/$command
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n "$output" ]]; then
|
||||||
|
echo "echo '$output'" >> $fake_path/$command
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
assertCalledWithArguments() {
|
||||||
|
if ! [[ -f $invokations/$1 ]]; then
|
||||||
|
fail "$1 never invoked"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
if ! assertContains "$1 not invoked with expected arguments:" "$(<$invokations/$1)" "$2"; then
|
||||||
|
bold Actual invokations:
|
||||||
|
cat "$invokations/$1"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
assertNotCalled() {
|
||||||
|
if [[ -f $invokations/$1 ]]; then
|
||||||
|
fail "$1 has been invoked"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
SHUNIT_PATH=./.generated/shunit2-2.1.8/shunit2
|
SHUNIT_PATH=./.generated/shunit2-2.1.8/shunit2
|
||||||
if [ ! -f $SHUNIT_PATH ]; then (
|
if [ ! -f $SHUNIT_PATH ]; then (
|
||||||
mkdir -p .generated
|
mkdir -p .generated
|
||||||
|
202
test/test-wrapper
Normal file
202
test/test-wrapper
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
testWrapperDownloadsFromLinuxUrlOnLinux() {
|
||||||
|
mock curl
|
||||||
|
mock uname Linux
|
||||||
|
|
||||||
|
echo '
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
somethingw() {
|
||||||
|
_wrapper \
|
||||||
|
-l http://something/linux
|
||||||
|
}
|
||||||
|
|
||||||
|
⚡hello() { somethingw ; }
|
||||||
|
' > go
|
||||||
|
|
||||||
|
echo "source $REPO_ROOT/⚡" >> go
|
||||||
|
chmod +x go
|
||||||
|
|
||||||
|
try ./go hello
|
||||||
|
|
||||||
|
assertCalledWithArguments curl http://something/linux
|
||||||
|
}
|
||||||
|
|
||||||
|
testWrapperHasCurlFollowLocationHeader() {
|
||||||
|
mock curl
|
||||||
|
mock uname Linux
|
||||||
|
|
||||||
|
echo '
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
somethingw() {
|
||||||
|
_wrapper \
|
||||||
|
-l http://something/linux
|
||||||
|
}
|
||||||
|
|
||||||
|
⚡hello() { somethingw ; }
|
||||||
|
' > go
|
||||||
|
|
||||||
|
echo "source $REPO_ROOT/⚡" >> go
|
||||||
|
chmod +x go
|
||||||
|
|
||||||
|
try ./go hello
|
||||||
|
|
||||||
|
assertCalledWithArguments curl --location
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
testWrapperDownloadsFromDarwinUrlOnDarwin() {
|
||||||
|
mock curl
|
||||||
|
mock uname Darwin
|
||||||
|
|
||||||
|
echo '
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
somethingw() {
|
||||||
|
_wrapper \
|
||||||
|
-d http://something/darwin
|
||||||
|
}
|
||||||
|
|
||||||
|
⚡hello() { somethingw ; }
|
||||||
|
' > go
|
||||||
|
|
||||||
|
echo "source $REPO_ROOT/⚡" >> go
|
||||||
|
chmod +x go
|
||||||
|
|
||||||
|
try ./go hello
|
||||||
|
assertCalledWithArguments curl http://something/darwin
|
||||||
|
}
|
||||||
|
|
||||||
|
testWrapperSubstitutesVERSIONInUrl() {
|
||||||
|
mock curl
|
||||||
|
mock uname Darwin
|
||||||
|
|
||||||
|
echo '
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
somethingw() {
|
||||||
|
_wrapper \
|
||||||
|
-v 1337 \
|
||||||
|
-d http://something/VERSION/darwin
|
||||||
|
}
|
||||||
|
|
||||||
|
⚡hello() { somethingw ; }
|
||||||
|
' > go
|
||||||
|
|
||||||
|
echo "source $REPO_ROOT/⚡" >> go
|
||||||
|
chmod +x go
|
||||||
|
|
||||||
|
try ./go hello
|
||||||
|
assertCalledWithArguments curl http://something/1337/darwin
|
||||||
|
}
|
||||||
|
|
||||||
|
testWrapperRunsDownloadedBinary() {
|
||||||
|
mock curl '#!/usr/bin/env bash
|
||||||
|
printf "Hello "
|
||||||
|
printf "friend"
|
||||||
|
'
|
||||||
|
mock uname Darwin
|
||||||
|
|
||||||
|
echo '
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
somethingw() {
|
||||||
|
_wrapper \
|
||||||
|
-d http://something/darwin
|
||||||
|
}
|
||||||
|
|
||||||
|
⚡hello() { somethingw ; }
|
||||||
|
' > go
|
||||||
|
|
||||||
|
echo "source $REPO_ROOT/⚡" >> go
|
||||||
|
chmod +x go
|
||||||
|
|
||||||
|
|
||||||
|
try ./go hello
|
||||||
|
assertContains "$STDOUT" "Hello friend"
|
||||||
|
}
|
||||||
|
|
||||||
|
testWrapperPersistsBinaryInLocationBasedOnNameAndVersion() {
|
||||||
|
mock curl '#!/usr/bin/env true
|
||||||
|
potato
|
||||||
|
'
|
||||||
|
mock uname Darwin
|
||||||
|
|
||||||
|
echo '
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
somethingw() {
|
||||||
|
_wrapper \
|
||||||
|
-n something \
|
||||||
|
-v 1337 \
|
||||||
|
-d http://something/darwin
|
||||||
|
}
|
||||||
|
|
||||||
|
⚡hello() { somethingw ; }
|
||||||
|
' > go
|
||||||
|
|
||||||
|
echo "source $REPO_ROOT/⚡" >> go
|
||||||
|
chmod +x go
|
||||||
|
|
||||||
|
try ./go hello
|
||||||
|
assertContains "$(<.generated/wrapper/something/1337/bin)" potato
|
||||||
|
}
|
||||||
|
|
||||||
|
testWrapperDoesNotRedownloadBinaryIfPresent() {
|
||||||
|
mock curl 'whatever'
|
||||||
|
mock uname Darwin
|
||||||
|
|
||||||
|
echo '
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
somethingw() {
|
||||||
|
_wrapper \
|
||||||
|
-n something \
|
||||||
|
-v 1337 \
|
||||||
|
-d http://something/darwin
|
||||||
|
}
|
||||||
|
|
||||||
|
⚡hello() { somethingw ; }
|
||||||
|
' > go
|
||||||
|
|
||||||
|
echo "source $REPO_ROOT/⚡" >> go
|
||||||
|
chmod +x go
|
||||||
|
|
||||||
|
mkdir -p .generated/wrapper/something/1337/
|
||||||
|
touch .generated/wrapper/something/1337/bin
|
||||||
|
try ./go hello
|
||||||
|
assertNotCalled curl
|
||||||
|
assertNotContains "$(<.generated/wrapper/something/1337/bin)" potato
|
||||||
|
}
|
||||||
|
|
||||||
|
testWrapperPassesArgumentsToExecutedBinary() {
|
||||||
|
mock curl '#!/usr/bin/env bash
|
||||||
|
echo "$@"
|
||||||
|
'
|
||||||
|
mock uname Darwin
|
||||||
|
|
||||||
|
echo '
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
somethingw() {
|
||||||
|
_wrapper \
|
||||||
|
-n something \
|
||||||
|
-v 1337 \
|
||||||
|
-d http://something/darwin \
|
||||||
|
-- \
|
||||||
|
"$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
⚡hello() { somethingw Hello friend ; }
|
||||||
|
' > go
|
||||||
|
|
||||||
|
echo "source $REPO_ROOT/⚡" >> go
|
||||||
|
chmod +x go
|
||||||
|
|
||||||
|
try ./go hello
|
||||||
|
assertContains "$STDOUT" "Hello friend"
|
||||||
|
}
|
||||||
|
|
||||||
|
source $(dirname $0)/runner
|
29
⚡
29
⚡
@ -49,6 +49,35 @@ _bad-message() {
|
|||||||
echo -e "\e[31m$@\e[0m"
|
echo -e "\e[31m$@\e[0m"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_wrapper() {
|
||||||
|
unset OPTIND
|
||||||
|
while getopts "l:d:n:v:" opt; do
|
||||||
|
case $opt in
|
||||||
|
l) linux_url=$OPTARG ;;
|
||||||
|
d) darwin_url=$OPTARG ;;
|
||||||
|
n) name=$OPTARG ;;
|
||||||
|
v) version=$OPTARG ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
while [[ -n "$1" && "$1" != "--" ]]; do
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
shift
|
||||||
|
|
||||||
|
if [[ $(uname -s) == Linux ]]; then
|
||||||
|
url=$linux_url
|
||||||
|
else
|
||||||
|
url=$darwin_url
|
||||||
|
fi
|
||||||
|
|
||||||
|
wrapper_root=".generated/wrapper/$name/$version/"
|
||||||
|
mkdir -p $wrapper_root
|
||||||
|
[[ -f $wrapper_root/bin ]] || curl --location ${url//VERSION/$version} > $wrapper_root/bin
|
||||||
|
chmod +x $wrapper_root/bin
|
||||||
|
./$wrapper_root/bin "$@"
|
||||||
|
}
|
||||||
|
|
||||||
[[ $(type -t _verify-prerequisites) == "function" ]] && ! _verify-prerequisites && exit 1
|
[[ $(type -t _verify-prerequisites) == "function" ]] && ! _verify-prerequisites && exit 1
|
||||||
|
|
||||||
main "$@"
|
main "$@"
|
||||||
|
Loading…
Reference in New Issue
Block a user