2016-05-13 00:04:01 -07:00
|
|
|
|
|
|
|
plugin_test_command() {
|
|
|
|
|
|
|
|
local plugin_name=$1
|
|
|
|
local plugin_url=$2
|
2017-09-04 10:04:56 -07:00
|
|
|
local plugin_command="${*:3}"
|
2016-05-13 00:04:01 -07:00
|
|
|
|
2018-08-29 23:16:01 -07:00
|
|
|
local exit_code
|
|
|
|
local TEST_DIR
|
2016-05-13 00:04:01 -07:00
|
|
|
|
2018-08-29 23:16:01 -07:00
|
|
|
TEST_DIR=$(mktemp -dt asdf.XXXX)
|
|
|
|
git clone "$ASDF_DIR/.git" "$TEST_DIR"
|
2016-05-13 00:04:01 -07:00
|
|
|
|
2018-08-29 23:16:01 -07:00
|
|
|
fail_test() {
|
|
|
|
echo "FAILED: $1"
|
|
|
|
rm -rf "$TEST_DIR"
|
|
|
|
exit 1
|
|
|
|
}
|
2016-05-13 00:04:01 -07:00
|
|
|
|
2018-08-29 23:16:01 -07:00
|
|
|
plugin_test() {
|
|
|
|
export ASDF_DIR=$TEST_DIR
|
2016-05-13 00:04:01 -07:00
|
|
|
|
2018-08-29 23:16:01 -07:00
|
|
|
# shellcheck disable=SC1090
|
|
|
|
source "$ASDF_DIR/asdf.sh"
|
2016-05-13 00:04:01 -07:00
|
|
|
|
2018-08-29 23:16:01 -07:00
|
|
|
if [ -z "$plugin_name" ] || [ -z "$plugin_url" ]; then
|
|
|
|
fail_test "please provide a plugin name and url"
|
|
|
|
fi
|
2016-06-15 22:06:00 -07:00
|
|
|
|
2018-08-29 23:16:01 -07:00
|
|
|
if ! (asdf plugin-add "$plugin_name" "$plugin_url"); then
|
|
|
|
fail_test "could not install $plugin_name from $plugin_url"
|
|
|
|
fi
|
2016-05-13 00:04:01 -07:00
|
|
|
|
2018-08-29 23:16:01 -07:00
|
|
|
if ! (asdf plugin-list | grep "^$plugin_name$" > /dev/null); then
|
|
|
|
fail_test "$plugin_name was not properly installed"
|
|
|
|
fi
|
2017-09-04 10:04:56 -07:00
|
|
|
|
2016-06-15 22:06:00 -07:00
|
|
|
|
2018-08-29 23:19:30 -07:00
|
|
|
local plugin_path
|
|
|
|
plugin_path=$(get_plugin_path "$plugin_name")
|
|
|
|
local list_all="$plugin_path/bin/list-all"
|
|
|
|
if grep api.github.com "$list_all" >/dev/null; then
|
|
|
|
if ! grep Authorization "$list_all" >/dev/null; then
|
|
|
|
echo
|
|
|
|
echo "Looks like ${plugin_name}/bin/list-all relies on GitHub releases"
|
|
|
|
echo "but it does not properly sets an Authorization header to prevent"
|
|
|
|
echo "GitHub API rate limiting."
|
|
|
|
echo
|
|
|
|
echo "See https://github.com/asdf-vm/asdf/blob/master/docs/creating-plugins.md#github-api-rate-limiting"
|
|
|
|
|
|
|
|
fail_test "$plugin_name/bin/list-all does not set GitHub Authorization token"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# test for most common token names we have on plugins
|
|
|
|
if [ -z "$OAUTH_TOKEN" ] || [ -z "$GITHUB_API_TOKEN" ] ; then
|
|
|
|
echo "$plugin_name/bin/list-all is using GitHub API, just be sure you provide an API Authorization token"
|
|
|
|
echo "via your travis settings. This is the current rate_limit:"
|
|
|
|
echo
|
|
|
|
curl -s https://api.github.com/rate_limit
|
|
|
|
echo
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2018-08-29 23:16:01 -07:00
|
|
|
local versions
|
|
|
|
# shellcheck disable=SC2046
|
|
|
|
if ! read -r -a versions <<< $(asdf list-all "$plugin_name"); then
|
|
|
|
fail_test "list-all exited with an error"
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ ${#versions} -eq 0 ]; then
|
|
|
|
fail_test "list-all did not return any version"
|
|
|
|
fi
|
|
|
|
|
|
|
|
local latest_version
|
|
|
|
latest_version=${versions[${#versions[@]} - 1]}
|
|
|
|
|
|
|
|
if ! (asdf install "$plugin_name" "$latest_version"); then
|
|
|
|
fail_test "install exited with an error"
|
|
|
|
fi
|
|
|
|
|
|
|
|
cd "$TEST_DIR" || fail_test "could not cd $TEST_DIR"
|
|
|
|
|
|
|
|
if ! (asdf local "$plugin_name" "$latest_version"); then
|
|
|
|
fail_test "install did not add the requested version"
|
|
|
|
fi
|
2016-06-15 22:06:00 -07:00
|
|
|
|
2018-08-29 23:16:01 -07:00
|
|
|
if ! (asdf reshim "$plugin_name"); then
|
|
|
|
fail_test "could not reshim plugin"
|
2016-06-15 22:06:00 -07:00
|
|
|
fi
|
|
|
|
|
2018-08-29 23:16:01 -07:00
|
|
|
if [ -n "$plugin_command" ]; then
|
|
|
|
$plugin_command
|
|
|
|
exit_code=$?
|
|
|
|
if [ $exit_code != 0 ]; then
|
|
|
|
fail_test "$plugin_command failed with exit code $?"
|
|
|
|
fi
|
2016-12-21 18:58:11 -07:00
|
|
|
fi
|
|
|
|
|
2018-08-29 23:16:01 -07:00
|
|
|
# Assert the scripts in bin are executable by asdf
|
|
|
|
for filename in "$ASDF_DIR/plugins/$plugin_name/bin"/*
|
|
|
|
do
|
|
|
|
if [ ! -x "$filename" ]; then
|
|
|
|
fail_test "Incorrect permissions on $filename. Must be executable by asdf"
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
# Assert that a license file exists in the plugin repo and is not empty
|
|
|
|
license_file="$ASDF_DIR/plugins/$plugin_name/LICENSE"
|
|
|
|
if [ -f "$license_file" ]; then
|
|
|
|
if [ ! -s "$license_file" ]; then
|
|
|
|
fail_test "LICENSE file in the plugin repository must not be empty"
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
fail_test "LICENSE file must be present in the plugin repository"
|
2017-03-07 15:33:41 -07:00
|
|
|
fi
|
2018-08-29 23:16:01 -07:00
|
|
|
}
|
2017-03-07 15:33:41 -07:00
|
|
|
|
2018-08-29 23:16:01 -07:00
|
|
|
# run test in a subshell
|
|
|
|
(plugin_test)
|
|
|
|
exit_code=$?
|
|
|
|
rm -rf "$TEST_DIR"
|
|
|
|
exit $exit_code
|
2016-05-13 00:04:01 -07:00
|
|
|
}
|