mirror of
				https://github.com/openimsdk/open-im-server.git
				synced 2025-10-27 05:52:29 +08:00 
			
		
		
		
	feat: add lib and start scripts
Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com>
This commit is contained in:
		
							parent
							
								
									f556139b49
								
							
						
					
					
						commit
						44c537c295
					
				| @ -18,9 +18,8 @@ SCRIPTS_ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) | |||||||
| OPENIM_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. | OPENIM_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. | ||||||
| 
 | 
 | ||||||
| #Include shell font styles and some basic information | #Include shell font styles and some basic information | ||||||
| source $SCRIPTS_ROOT/style_info.sh | source $SCRIPTS_ROOT/lib/init.sh | ||||||
| source $SCRIPTS_ROOT/path_info.sh | source $SCRIPTS_ROOT/path_info.sh | ||||||
| source $SCRIPTS_ROOT/function.sh |  | ||||||
| 
 | 
 | ||||||
| cd $SCRIPTS_ROOT | cd $SCRIPTS_ROOT | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -5,7 +5,7 @@ | |||||||
| # license that can be found in the LICENSE file. | # license that can be found in the LICENSE file. | ||||||
| 
 | 
 | ||||||
| # 本脚本功能:根据 scripts/environment.sh 配置,生成 OPENIM 组件 YAML 配置文件。 | # 本脚本功能:根据 scripts/environment.sh 配置,生成 OPENIM 组件 YAML 配置文件。 | ||||||
| # 示例:genconfig.sh scripts/environment.sh configs/openim-apiserver.yaml | # 示例:genconfig.sh scripts/environment.sh configs/openim-api.yaml | ||||||
| 
 | 
 | ||||||
| # Path to the original script file | # Path to the original script file | ||||||
| env_file="$1" | env_file="$1" | ||||||
| @ -15,7 +15,7 @@ template_file="$2" | |||||||
| . $(dirname ${BASH_SOURCE})/lib/init.sh | . $(dirname ${BASH_SOURCE})/lib/init.sh | ||||||
| 
 | 
 | ||||||
| if [ $# -ne 2 ];then | if [ $# -ne 2 ];then | ||||||
|     openim::log::error "Usage: genconfig.sh scripts/environment.sh configs/openim-apiserver.yaml" |     openim::log::error "Usage: genconfig.sh scripts/environment.sh configs/openim-api.yaml" | ||||||
|     exit 1 |     exit 1 | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -19,9 +19,8 @@ SCRIPTS_ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) | |||||||
| OPENIM_ROOT=$(dirname "${SCRIPTS_ROOT}")/.. | OPENIM_ROOT=$(dirname "${SCRIPTS_ROOT}")/.. | ||||||
| 
 | 
 | ||||||
| #Include shell font styles and some basic information | #Include shell font styles and some basic information | ||||||
| source $SCRIPTS_ROOT/style_info.sh | source $SCRIPTS_ROOT/lib/init.sh | ||||||
| source $SCRIPTS_ROOT/path_info.sh | source $SCRIPTS_ROOT/path_info.sh | ||||||
| source $SCRIPTS_ROOT/function.sh |  | ||||||
| 
 | 
 | ||||||
| cd $SCRIPTS_ROOT | cd $SCRIPTS_ROOT | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -97,7 +97,6 @@ openim::chat::scrape() { | |||||||
|     curl -s -S "${OPENIM_INTEGRATION_CHAT_URL}/metrics" > "${CHAT_SCRAPE_DIR}/next" && mv "${CHAT_SCRAPE_DIR}/next" "${CHAT_SCRAPE_DIR}/$(date +%s).scrape" |     curl -s -S "${OPENIM_INTEGRATION_CHAT_URL}/metrics" > "${CHAT_SCRAPE_DIR}/next" && mv "${CHAT_SCRAPE_DIR}/next" "${CHAT_SCRAPE_DIR}/$(date +%s).scrape" | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| openim::chat::stop() { | openim::chat::stop() { | ||||||
|   if [[ -n "${CHAT_SCRAPE_PID:-}" ]] && [[ -n "${CHAT_SCRAPE_DIR:-}" ]] ; then |   if [[ -n "${CHAT_SCRAPE_PID:-}" ]] && [[ -n "${CHAT_SCRAPE_DIR:-}" ]] ; then | ||||||
|     kill "${CHAT_SCRAPE_PID}" &>/dev/null || : |     kill "${CHAT_SCRAPE_PID}" &>/dev/null || : | ||||||
|  | |||||||
| @ -53,6 +53,9 @@ CYAN_PREFIX="\033[0;36m"     # Cyan prefix | |||||||
| 
 | 
 | ||||||
| # --- make demo (run demo) --- | # --- make demo (run demo) --- | ||||||
| reset=$(tput sgr0) | reset=$(tput sgr0) | ||||||
|  | bold=$(tput bold) | ||||||
|  | black=$(tput setaf 0) | ||||||
|  | red=$(tput setaf 1) | ||||||
| green=$(tput bold; tput setaf 2) | green=$(tput bold; tput setaf 2) | ||||||
| yellow=$(tput bold; tput setaf 3) | yellow=$(tput bold; tput setaf 3) | ||||||
| blue=$(tput bold; tput setaf 6) | blue=$(tput bold; tput setaf 6) | ||||||
|  | |||||||
| @ -13,25 +13,188 @@ | |||||||
| # See the License for the specific language governing permissions and | # See the License for the specific language governing permissions and | ||||||
| # limitations under the License. | # limitations under the License. | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| set -o errexit | set -o errexit | ||||||
| set +o nounset | set +o nounset | ||||||
| set -o pipefail | set -o pipefail | ||||||
| 
 | 
 | ||||||
|  | # Short-circuit if init.sh has already been sourced | ||||||
|  | [[ $(type -t openim::init::loaded) == function ]] && return 0 | ||||||
|  | 
 | ||||||
| # Unset CDPATH so that path interpolation can work correctly | # Unset CDPATH so that path interpolation can work correctly | ||||||
| unset CDPATH | unset CDPATH | ||||||
| 
 | 
 | ||||||
| # Default use go modules | # Until all GOPATH references are removed from all build scripts as well, | ||||||
|  | # explicitly disable module mode to avoid picking up user-set GO111MODULE preferences. | ||||||
|  | # As individual scripts (like hack/update-vendor.sh) make use of go modules, | ||||||
|  | # they can explicitly set GO111MODULE=on | ||||||
| export GO111MODULE=on | export GO111MODULE=on | ||||||
| 
 | 
 | ||||||
| # The root of the build/dist directory | # The root of the build/dist directory | ||||||
| OPENIM_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd -P)" | OPENIM_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd -P)" | ||||||
| 
 | 
 | ||||||
| source "${OPENIM_ROOT}/scripts/lib/util.sh" | OPENIM_OUTPUT_SUBPATH="${OPENIM_OUTPUT_SUBPATH:-_output}" | ||||||
| source "${OPENIM_ROOT}/scripts/lib/logging.sh" | OPENIM_OUTPUT="${OPENIM_ROOT}/${OPENIM_OUTPUT_SUBPATH}" | ||||||
| source "${OPENIM_ROOT}/scripts/lib/color.sh" | OPENIM_OUTPUT_BINPATH="${OPENIM_OUTPUT}/bin/platforms" | ||||||
|  | OPENIM_OUTPUT_BINTOOLPATH="${OPENIM_OUTPUT}/bin-tools" | ||||||
|  | OPENIM_OUTPUT_TOOLS="${OPENIM_OUTPUT}/tools" | ||||||
|  | 
 | ||||||
|  | # This controls rsync compression. Set to a value > 0 to enable rsync | ||||||
|  | # compression for build container | ||||||
|  | OPENIM_RSYNC_COMPRESS="${KUBE_RSYNC_COMPRESS:-0}" | ||||||
|  | 
 | ||||||
|  | # Set no_proxy for localhost if behind a proxy, otherwise, | ||||||
|  | # the connections to localhost in scripts will time out | ||||||
|  | export no_proxy="127.0.0.1,localhost${no_proxy:+,${no_proxy}}" | ||||||
|  | 
 | ||||||
|  | # This is a symlink to binaries for "this platform", e.g. build tools. | ||||||
|  | export THIS_PLATFORM_BIN="${OPENIM_ROOT}/_output/bin/platforms" | ||||||
|  | 
 | ||||||
|  | . $(dirname ${BASH_SOURCE})/color.sh | ||||||
|  | . $(dirname ${BASH_SOURCE})/util.sh | ||||||
|  | . $(dirname ${BASH_SOURCE})/logging.sh | ||||||
| 
 | 
 | ||||||
| openim::log::install_errexit | openim::log::install_errexit | ||||||
|  | openim::util::ensure-bash-version | ||||||
| 
 | 
 | ||||||
| source "${OPENIM_ROOT}/scripts/lib/version.sh" | . $(dirname ${BASH_SOURCE})/version.sh | ||||||
| source "${OPENIM_ROOT}/scripts/lib/golang.sh" | . $(dirname ${BASH_SOURCE})/golang.sh | ||||||
|  | . $(dirname ${BASH_SOURCE})/test.sh | ||||||
|  | . $(dirname ${BASH_SOURCE})/release.sh | ||||||
|  | . $(dirname ${BASH_SOURCE})/chat.sh | ||||||
|  | 
 | ||||||
|  | OPENIM_OUTPUT_HOSTBIN="${OPENIM_OUTPUT_BINPATH}/$(openim::util::host_platform)" | ||||||
|  | export OPENIM_OUTPUT_HOSTBIN | ||||||
|  | 
 | ||||||
|  | export OPENIM_NONSERVER_GROUP_VERSIONS | ||||||
|  | 
 | ||||||
|  | # This emulates "readlink -f" which is not available on MacOS X. | ||||||
|  | # Test: | ||||||
|  | # T=/tmp/$$.$RANDOM | ||||||
|  | # mkdir $T | ||||||
|  | # touch $T/file | ||||||
|  | # mkdir $T/dir | ||||||
|  | # ln -s $T/file $T/linkfile | ||||||
|  | # ln -s $T/dir $T/linkdir | ||||||
|  | # function testone() { | ||||||
|  | #   X=$(readlink -f $1 2>&1) | ||||||
|  | #   Y=$(kube::readlinkdashf $1 2>&1) | ||||||
|  | #   if [ "$X" != "$Y" ]; then | ||||||
|  | #     echo readlinkdashf $1: expected "$X", got "$Y" | ||||||
|  | #   fi | ||||||
|  | # } | ||||||
|  | # testone / | ||||||
|  | # testone /tmp | ||||||
|  | # testone $T | ||||||
|  | # testone $T/file | ||||||
|  | # testone $T/dir | ||||||
|  | # testone $T/linkfile | ||||||
|  | # testone $T/linkdir | ||||||
|  | # testone $T/nonexistant | ||||||
|  | # testone $T/linkdir/file | ||||||
|  | # testone $T/linkdir/dir | ||||||
|  | # testone $T/linkdir/linkfile | ||||||
|  | # testone $T/linkdir/linkdir | ||||||
|  | function openim::readlinkdashf { | ||||||
|  |   # run in a subshell for simpler 'cd' | ||||||
|  |   ( | ||||||
|  |     if [[ -d "${1}" ]]; then # This also catch symlinks to dirs. | ||||||
|  |       cd "${1}" | ||||||
|  |       pwd -P | ||||||
|  |     else | ||||||
|  |       cd "$(dirname "${1}")" | ||||||
|  |       local f | ||||||
|  |       f=$(basename "${1}") | ||||||
|  |       if [[ -L "${f}" ]]; then | ||||||
|  |         readlink "${f}" | ||||||
|  |       else | ||||||
|  |         echo "$(pwd -P)/${f}" | ||||||
|  |       fi | ||||||
|  |     fi | ||||||
|  |   ) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # This emulates "readlink -f" which is not available on MacOS X. | ||||||
|  | # Test: | ||||||
|  | # T=/tmp/$$.$RANDOM | ||||||
|  | # mkdir $T | ||||||
|  | # touch $T/file | ||||||
|  | # mkdir $T/dir | ||||||
|  | # ln -s $T/file $T/linkfile | ||||||
|  | # ln -s $T/dir $T/linkdir | ||||||
|  | # function testone() { | ||||||
|  | #   X=$(readlink -f $1 2>&1) | ||||||
|  | #   Y=$(kube::readlinkdashf $1 2>&1) | ||||||
|  | #   if [ "$X" != "$Y" ]; then | ||||||
|  | #     echo readlinkdashf $1: expected "$X", got "$Y" | ||||||
|  | #   fi | ||||||
|  | # } | ||||||
|  | # testone / | ||||||
|  | # testone /tmp | ||||||
|  | # testone $T | ||||||
|  | # testone $T/file | ||||||
|  | # testone $T/dir | ||||||
|  | # testone $T/linkfile | ||||||
|  | # testone $T/linkdir | ||||||
|  | # testone $T/nonexistant | ||||||
|  | # testone $T/linkdir/file | ||||||
|  | # testone $T/linkdir/dir | ||||||
|  | # testone $T/linkdir/linkfile | ||||||
|  | # testone $T/linkdir/linkdir | ||||||
|  | function openim::readlinkdashf { | ||||||
|  |   # run in a subshell for simpler 'cd' | ||||||
|  |   ( | ||||||
|  |     if [[ -d "${1}" ]]; then # This also catch symlinks to dirs. | ||||||
|  |       cd "${1}" | ||||||
|  |       pwd -P | ||||||
|  |     else | ||||||
|  |       cd "$(dirname "${1}")" | ||||||
|  |       local f | ||||||
|  |       f=$(basename "${1}") | ||||||
|  |       if [[ -L "${f}" ]]; then | ||||||
|  |         readlink "${f}" | ||||||
|  |       else | ||||||
|  |         echo "$(pwd -P)/${f}" | ||||||
|  |       fi | ||||||
|  |     fi | ||||||
|  |   ) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # This emulates "realpath" which is not available on MacOS X | ||||||
|  | # Test: | ||||||
|  | # T=/tmp/$$.$RANDOM | ||||||
|  | # mkdir $T | ||||||
|  | # touch $T/file | ||||||
|  | # mkdir $T/dir | ||||||
|  | # ln -s $T/file $T/linkfile | ||||||
|  | # ln -s $T/dir $T/linkdir | ||||||
|  | # function testone() { | ||||||
|  | #   X=$(realpath $1 2>&1) | ||||||
|  | #   Y=$(kube::realpath $1 2>&1) | ||||||
|  | #   if [ "$X" != "$Y" ]; then | ||||||
|  | #     echo realpath $1: expected "$X", got "$Y" | ||||||
|  | #   fi | ||||||
|  | # } | ||||||
|  | # testone / | ||||||
|  | # testone /tmp | ||||||
|  | # testone $T | ||||||
|  | # testone $T/file | ||||||
|  | # testone $T/dir | ||||||
|  | # testone $T/linkfile | ||||||
|  | # testone $T/linkdir | ||||||
|  | # testone $T/nonexistant | ||||||
|  | # testone $T/linkdir/file | ||||||
|  | # testone $T/linkdir/dir | ||||||
|  | # testone $T/linkdir/linkfile | ||||||
|  | # testone $T/linkdir/linkdir | ||||||
|  | openim::realpath() { | ||||||
|  |   if [[ ! -e "${1}" ]]; then | ||||||
|  |     echo "${1}: No such file or directory" >&2 | ||||||
|  |     return 1 | ||||||
|  |   fi | ||||||
|  |   openim::readlinkdashf "${1}" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # Marker function to indicate init.sh has been fully sourced | ||||||
|  | openim::init::loaded() { | ||||||
|  |   return 0 | ||||||
|  | } | ||||||
| @ -17,8 +17,6 @@ | |||||||
| # Controls verbosity of the script output and logging. | # Controls verbosity of the script output and logging. | ||||||
| OPENIM_VERBOSE="${OPENIM_VERBOSE:-5}" | OPENIM_VERBOSE="${OPENIM_VERBOSE:-5}" | ||||||
| 
 | 
 | ||||||
| souorce $(dirname ${BASH_SOURCE})/color.sh |  | ||||||
| 
 |  | ||||||
| # Handler for when we exit automatically on an error. | # Handler for when we exit automatically on an error. | ||||||
| # Borrowed from https://gist.github.com/ahendrix/7030300 | # Borrowed from https://gist.github.com/ahendrix/7030300 | ||||||
| openim::log::errexit() { | openim::log::errexit() { | ||||||
|  | |||||||
| @ -38,6 +38,7 @@ readonly RELEASE_IMAGES="${LOCAL_OUTPUT_ROOT}/release-images" | |||||||
| # OpenIM github account info | # OpenIM github account info | ||||||
| readonly OPENIM_GITHUB_ORG=OpenIMSDK | readonly OPENIM_GITHUB_ORG=OpenIMSDK | ||||||
| readonly OPENIM_GITHUB_REPO=Open-IM-Server | readonly OPENIM_GITHUB_REPO=Open-IM-Server | ||||||
|  | readonly CHAT_GITHUB_REPO=chat | ||||||
| 
 | 
 | ||||||
| readonly ARTIFACT=openim.tar.gz | readonly ARTIFACT=openim.tar.gz | ||||||
| readonly CHECKSUM=${ARTIFACT}.sha1sum | readonly CHECKSUM=${ARTIFACT}.sha1sum | ||||||
|  | |||||||
							
								
								
									
										548
									
								
								scripts/lib/test.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										548
									
								
								scripts/lib/test.sh
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,548 @@ | |||||||
|  | #!/usr/bin/env bash | ||||||
|  | 
 | ||||||
|  | # A set of helpers for tests | ||||||
|  | 
 | ||||||
|  | openim::test::clear_all() { | ||||||
|  |   if openim::test::if_supports_resource "rc" ; then | ||||||
|  |     # shellcheck disable=SC2154 | ||||||
|  |     # Disabling because "kube_flags" is set in a parent script | ||||||
|  |     kubectl delete "${kube_flags[@]}" rc --all --grace-period=0 --force | ||||||
|  |   fi | ||||||
|  |   if openim::test::if_supports_resource "pods" ; then | ||||||
|  |     kubectl delete "${kube_flags[@]}" pods --all --grace-period=0 --force | ||||||
|  |   fi | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # Prints the calling file and line number $1 levels deep | ||||||
|  | # Defaults to 2 levels so you can call this to find your own caller | ||||||
|  | openim::test::get_caller() { | ||||||
|  |   local levels=${1:-2} | ||||||
|  |   local caller_file="${BASH_SOURCE[${levels}]}" | ||||||
|  |   local caller_line="${BASH_LINENO[${levels}-1]}" | ||||||
|  |   echo "$(basename "${caller_file}"):${caller_line}" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # Force exact match of a returned result for a object query.  Wrap this with || to support multiple | ||||||
|  | # valid return types. | ||||||
|  | # This runs `kubectl get` once and asserts that the result is as expected. | ||||||
|  | # $1: Object on which get should be run | ||||||
|  | # $2: The go-template to run on the result | ||||||
|  | # $3: The expected output | ||||||
|  | # $4: Additional args to be passed to kubectl | ||||||
|  | openim::test::get_object_assert() { | ||||||
|  |   openim::test::object_assert 1 "$@" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # Asserts that the output of a given get query is as expected. | ||||||
|  | # Runs the query multiple times before failing it. | ||||||
|  | # $1: Object on which get should be run | ||||||
|  | # $2: The go-template to run on the result | ||||||
|  | # $3: The expected output | ||||||
|  | # $4: Additional args to be passed to kubectl | ||||||
|  | openim::test::wait_object_assert() { | ||||||
|  |   openim::test::object_assert 10 "$@" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # Asserts that the output of a given get query is as expected. | ||||||
|  | # Can run the query multiple times before failing it. | ||||||
|  | # $1: Number of times the query should be run before failing it. | ||||||
|  | # $2: Object on which get should be run | ||||||
|  | # $3: The go-template to run on the result | ||||||
|  | # $4: The expected output | ||||||
|  | # $5: Additional args to be passed to kubectl | ||||||
|  | openim::test::object_assert() { | ||||||
|  |   local tries=$1 | ||||||
|  |   local object=$2 | ||||||
|  |   local request=$3 | ||||||
|  |   local expected=$4 | ||||||
|  |   local args=${5:-} | ||||||
|  | 
 | ||||||
|  |   for j in $(seq 1 "${tries}"); do | ||||||
|  |     # shellcheck disable=SC2086 | ||||||
|  |     # Disabling because to allow for expansion here | ||||||
|  |     res=$(kubectl get "${kube_flags[@]}" ${args} ${object} -o go-template="${request}") | ||||||
|  |     if [[ "${res}" =~ ^$expected$ ]]; then | ||||||
|  |         echo -n "${green}" | ||||||
|  |         echo "$(openim::test::get_caller 3): Successful get ${object} ${request}: ${res}" | ||||||
|  |         echo -n "${reset}" | ||||||
|  |         return 0 | ||||||
|  |     fi | ||||||
|  |     echo "Waiting for Get ${object} ${request} ${args}: expected: ${expected}, got: ${res}" | ||||||
|  |     sleep $((j-1)) | ||||||
|  |   done | ||||||
|  | 
 | ||||||
|  |   echo "${bold}${red}" | ||||||
|  |   echo "$(openim::test::get_caller 3): FAIL!" | ||||||
|  |   echo "Get ${object} ${request}" | ||||||
|  |   echo "  Expected: ${expected}" | ||||||
|  |   echo "  Got:      ${res}" | ||||||
|  |   echo "${reset}${red}" | ||||||
|  |   caller | ||||||
|  |   echo "${reset}" | ||||||
|  |   return 1 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | openim::test::get_object_jsonpath_assert() { | ||||||
|  |   local object=$1 | ||||||
|  |   local request=$2 | ||||||
|  |   local expected=$3 | ||||||
|  | 
 | ||||||
|  |   # shellcheck disable=SC2086 | ||||||
|  |   # Disabling to allow for expansion here | ||||||
|  |   res=$(kubectl get "${kube_flags[@]}" ${object} -o jsonpath=${request}) | ||||||
|  | 
 | ||||||
|  |   if [[ "${res}" =~ ^$expected$ ]]; then | ||||||
|  |       echo -n "${green}" | ||||||
|  |       echo "$(openim::test::get_caller): Successful get ${object} ${request}: ${res}" | ||||||
|  |       echo -n "${reset}" | ||||||
|  |       return 0 | ||||||
|  |   else | ||||||
|  |       echo "${bold}${red}" | ||||||
|  |       echo "$(openim::test::get_caller): FAIL!" | ||||||
|  |       echo "Get ${object} ${request}" | ||||||
|  |       echo "  Expected: ${expected}" | ||||||
|  |       echo "  Got:      ${res}" | ||||||
|  |       echo "${reset}${red}" | ||||||
|  |       caller | ||||||
|  |       echo "${reset}" | ||||||
|  |       return 1 | ||||||
|  |   fi | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | openim::test::describe_object_assert() { | ||||||
|  |   local resource=$1 | ||||||
|  |   local object=$2 | ||||||
|  |   local matches=( "${@:3}" ) | ||||||
|  | 
 | ||||||
|  |   # shellcheck disable=SC2086 | ||||||
|  |   # Disabling to allow for expansion here | ||||||
|  |   result=$(kubectl describe "${kube_flags[@]}" ${resource} ${object}) | ||||||
|  | 
 | ||||||
|  |   for match in "${matches[@]}"; do | ||||||
|  |     if grep -q "${match}" <<< "${result}"; then | ||||||
|  |       echo "matched ${match}" | ||||||
|  |     else | ||||||
|  |       echo "${bold}${red}" | ||||||
|  |       echo "$(openim::test::get_caller): FAIL!" | ||||||
|  |       echo "Describe ${resource} ${object}" | ||||||
|  |       echo "  Expected Match: ${match}" | ||||||
|  |       echo "  Not found in:" | ||||||
|  |       echo "${result}" | ||||||
|  |       echo "${reset}${red}" | ||||||
|  |       caller | ||||||
|  |       echo "${reset}" | ||||||
|  |       return 1 | ||||||
|  |     fi | ||||||
|  |   done | ||||||
|  | 
 | ||||||
|  |   echo -n "${green}" | ||||||
|  |   echo "$(openim::test::get_caller): Successful describe ${resource} ${object}:" | ||||||
|  |   echo "${result}" | ||||||
|  |   echo -n "${reset}" | ||||||
|  |   return 0 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | openim::test::describe_object_events_assert() { | ||||||
|  |     local resource=$1 | ||||||
|  |     local object=$2 | ||||||
|  |     local showevents=${3:-"true"} | ||||||
|  | 
 | ||||||
|  |   # shellcheck disable=SC2086 | ||||||
|  |   # Disabling to allow for expansion here | ||||||
|  |     if [[ -z "${3:-}" ]]; then | ||||||
|  |         result=$(kubectl describe "${kube_flags[@]}" ${resource} ${object}) | ||||||
|  |     else | ||||||
|  |         result=$(kubectl describe "${kube_flags[@]}" "--show-events=${showevents}" ${resource} ${object}) | ||||||
|  |     fi | ||||||
|  | 
 | ||||||
|  |     if grep -q "No events.\|Events:" <<< "${result}"; then | ||||||
|  |         local has_events="true" | ||||||
|  |     else | ||||||
|  |         local has_events="false" | ||||||
|  |     fi | ||||||
|  |     if [[ "${showevents}" == "${has_events}" ]]; then | ||||||
|  |         echo -n "${green}" | ||||||
|  |         echo "$(openim::test::get_caller): Successful describe" | ||||||
|  |         echo "${result}" | ||||||
|  |         echo "${reset}" | ||||||
|  |         return 0 | ||||||
|  |     else | ||||||
|  |         echo "${bold}${red}" | ||||||
|  |         echo "$(openim::test::get_caller): FAIL" | ||||||
|  |         if [[ "${showevents}" == "false" ]]; then | ||||||
|  |             echo "  Events information should not be described in:" | ||||||
|  |         else | ||||||
|  |             echo "  Events information not found in:" | ||||||
|  |         fi | ||||||
|  |         echo "${result}" | ||||||
|  |         echo "${reset}${red}" | ||||||
|  |         caller | ||||||
|  |         echo "${reset}" | ||||||
|  |         return 1 | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | openim::test::describe_resource_assert() { | ||||||
|  |   local resource=$1 | ||||||
|  |   local matches=( "${@:2}" ) | ||||||
|  | 
 | ||||||
|  |   # shellcheck disable=SC2086 | ||||||
|  |   # Disabling to allow for expansion here | ||||||
|  |   result=$(kubectl describe "${kube_flags[@]}" ${resource}) | ||||||
|  | 
 | ||||||
|  |   for match in "${matches[@]}"; do | ||||||
|  |     if grep -q "${match}" <<< "${result}"; then | ||||||
|  |       echo "matched ${match}" | ||||||
|  |     else | ||||||
|  |       echo "${bold}${red}" | ||||||
|  |       echo "FAIL!" | ||||||
|  |       echo "Describe ${resource}" | ||||||
|  |       echo "  Expected Match: ${match}" | ||||||
|  |       echo "  Not found in:" | ||||||
|  |       echo "${result}" | ||||||
|  |       echo "${reset}${red}" | ||||||
|  |       caller | ||||||
|  |       echo "${reset}" | ||||||
|  |       return 1 | ||||||
|  |     fi | ||||||
|  |   done | ||||||
|  | 
 | ||||||
|  |   echo -n "${green}" | ||||||
|  |   echo "Successful describe ${resource}:" | ||||||
|  |   echo "${result}" | ||||||
|  |   echo -n "${reset}" | ||||||
|  |   return 0 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | openim::test::describe_resource_events_assert() { | ||||||
|  |     local resource=$1 | ||||||
|  |     local showevents=${2:-"true"} | ||||||
|  | 
 | ||||||
|  |     # shellcheck disable=SC2086 | ||||||
|  |     # Disabling to allow for expansion here | ||||||
|  |     result=$(kubectl describe "${kube_flags[@]}" "--show-events=${showevents}" ${resource}) | ||||||
|  | 
 | ||||||
|  |     if grep -q "No events.\|Events:" <<< "${result}"; then | ||||||
|  |         local has_events="true" | ||||||
|  |     else | ||||||
|  |         local has_events="false" | ||||||
|  |     fi | ||||||
|  |     if [[ "${showevents}" == "${has_events}" ]]; then | ||||||
|  |         echo -n "${green}" | ||||||
|  |         echo "Successful describe" | ||||||
|  |         echo "${result}" | ||||||
|  |         echo -n "${reset}" | ||||||
|  |         return 0 | ||||||
|  |     else | ||||||
|  |         echo "${bold}${red}" | ||||||
|  |         echo "FAIL" | ||||||
|  |         if [[ "${showevents}" == "false" ]]; then | ||||||
|  |             echo "  Events information should not be described in:" | ||||||
|  |         else | ||||||
|  |             echo "  Events information not found in:" | ||||||
|  |         fi | ||||||
|  |         echo "${result}" | ||||||
|  |         caller | ||||||
|  |         echo "${reset}" | ||||||
|  |         return 1 | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | openim::test::describe_resource_chunk_size_assert() { | ||||||
|  |   # $1: the target resource | ||||||
|  |   local resource=$1 | ||||||
|  |   # $2: comma-separated list of additional resources that will be listed | ||||||
|  |   local additionalResources=${2:-} | ||||||
|  |   # Remaining args are flags to pass to kubectl | ||||||
|  |   local args=${3:-} | ||||||
|  | 
 | ||||||
|  |   # Expect list requests for the target resource and the additional resources | ||||||
|  |   local expectLists | ||||||
|  |   IFS="," read -r -a expectLists <<< "${resource},${additionalResources}" | ||||||
|  | 
 | ||||||
|  |   # shellcheck disable=SC2086 | ||||||
|  |   # Disabling to allow for expansion here | ||||||
|  |   defaultResult=$(kubectl describe ${resource} --show-events=true -v=6 ${args} "${kube_flags[@]}" 2>&1 >/dev/null) | ||||||
|  |   for r in "${expectLists[@]}"; do | ||||||
|  |     if grep -q "${r}?.*limit=500" <<< "${defaultResult}"; then | ||||||
|  |       echo "query for ${r} had limit param" | ||||||
|  |     else | ||||||
|  |       echo "${bold}${red}" | ||||||
|  |       echo "FAIL!" | ||||||
|  |       echo "Describe ${resource}" | ||||||
|  |       echo "  Expected limit param on request for: ${r}" | ||||||
|  |       echo "  Not found in:" | ||||||
|  |       echo "${defaultResult}" | ||||||
|  |       echo "${reset}${red}" | ||||||
|  |       caller | ||||||
|  |       echo "${reset}" | ||||||
|  |       return 1 | ||||||
|  |     fi | ||||||
|  |   done | ||||||
|  | 
 | ||||||
|  |   # shellcheck disable=SC2086 | ||||||
|  |   # Disabling to allow for expansion here | ||||||
|  |   # Try a non-default chunk size | ||||||
|  |   customResult=$(kubectl describe ${resource} --show-events=false --chunk-size=10 -v=6 ${args} "${kube_flags[@]}" 2>&1 >/dev/null) | ||||||
|  |   if grep -q "${resource}?limit=10" <<< "${customResult}"; then | ||||||
|  |     echo "query for ${resource} had user-specified limit param" | ||||||
|  |   else | ||||||
|  |     echo "${bold}${red}" | ||||||
|  |     echo "FAIL!" | ||||||
|  |     echo "Describe ${resource}" | ||||||
|  |     echo "  Expected limit param on request for: ${r}" | ||||||
|  |     echo "  Not found in:" | ||||||
|  |     echo "${customResult}" | ||||||
|  |     echo "${reset}${red}" | ||||||
|  |     caller | ||||||
|  |     echo "${reset}" | ||||||
|  |     return 1 | ||||||
|  |   fi | ||||||
|  | 
 | ||||||
|  |   echo -n "${green}" | ||||||
|  |   echo "Successful describe ${resource} verbose logs:" | ||||||
|  |   echo "${defaultResult}" | ||||||
|  |   echo -n "${reset}" | ||||||
|  | 
 | ||||||
|  |   return 0 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # Compare sort-by resource name output (first column, skipping first line) with expected order specify in the last parameter | ||||||
|  | openim::test::if_sort_by_has_correct_order() { | ||||||
|  |   local var | ||||||
|  |   var="$(echo "$1" | awk '{if(NR!=1) print $1}' | tr '\n' ':')" | ||||||
|  |   openim::test::if_has_string "${var}" "${@:$#}" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | openim::test::if_has_string() { | ||||||
|  |   local message=$1 | ||||||
|  |   local match=$2 | ||||||
|  | 
 | ||||||
|  |   if grep -q "${match}" <<< "${message}"; then | ||||||
|  |     echo -n "${green}" | ||||||
|  |     echo "Successful" | ||||||
|  |     echo -n "${reset}" | ||||||
|  |     echo "message:${message}" | ||||||
|  |     echo "has:${match}" | ||||||
|  |     return 0 | ||||||
|  |   else | ||||||
|  |     echo -n "${bold}${red}" | ||||||
|  |     echo "FAIL!" | ||||||
|  |     echo -n "${reset}" | ||||||
|  |     echo "message:${message}" | ||||||
|  |     echo "has not:${match}" | ||||||
|  |     caller | ||||||
|  |     return 1 | ||||||
|  |   fi | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | openim::test::if_has_not_string() { | ||||||
|  |   local message=$1 | ||||||
|  |   local match=$2 | ||||||
|  | 
 | ||||||
|  |   if grep -q "${match}" <<< "${message}"; then | ||||||
|  |     echo -n "${bold}${red}" | ||||||
|  |     echo "FAIL!" | ||||||
|  |     echo -n "${reset}" | ||||||
|  |     echo "message:${message}" | ||||||
|  |     echo "has:${match}" | ||||||
|  |     caller | ||||||
|  |     return 1 | ||||||
|  |   else | ||||||
|  |     echo -n "${green}" | ||||||
|  |     echo "Successful" | ||||||
|  |     echo -n "${reset}" | ||||||
|  |     echo "message:${message}" | ||||||
|  |     echo "has not:${match}" | ||||||
|  |     return 0 | ||||||
|  |   fi | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | openim::test::if_empty_string() { | ||||||
|  |   local match=$1 | ||||||
|  |   if [ -n "${match}" ]; then | ||||||
|  |     echo -n "${bold}${red}" | ||||||
|  |     echo "FAIL!" | ||||||
|  |     echo "${match} is not empty" | ||||||
|  |     echo -n "${reset}" | ||||||
|  |     caller | ||||||
|  |     return 1 | ||||||
|  |   else | ||||||
|  |     echo -n "${green}" | ||||||
|  |     echo "Successful" | ||||||
|  |     echo -n "${reset}" | ||||||
|  |     return 0 | ||||||
|  |   fi | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # Returns true if the required resource is part of supported resources. | ||||||
|  | # Expects env vars: | ||||||
|  | #   SUPPORTED_RESOURCES: Array of all resources supported by the apiserver. "*" | ||||||
|  | #   means it supports all resources. For ex: ("*") or ("rc" "*") both mean that | ||||||
|  | #   all resources are supported. | ||||||
|  | #   $1: Name of the resource to be tested. | ||||||
|  | openim::test::if_supports_resource() { | ||||||
|  |   SUPPORTED_RESOURCES=${SUPPORTED_RESOURCES:-""} | ||||||
|  |   REQUIRED_RESOURCE=${1:-""} | ||||||
|  | 
 | ||||||
|  |   for r in "${SUPPORTED_RESOURCES[@]}"; do | ||||||
|  |     if [[ "${r}" == "*" || "${r}" == "${REQUIRED_RESOURCE}" ]]; then | ||||||
|  |       return 0 | ||||||
|  |     fi | ||||||
|  |   done | ||||||
|  |   return 1 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | openim::test::version::object_to_file() { | ||||||
|  |   name=$1 | ||||||
|  |   flags=${2:-""} | ||||||
|  |   file=$3 | ||||||
|  |   # shellcheck disable=SC2086 | ||||||
|  |   # Disabling because "flags" needs to allow for expansion here | ||||||
|  |   kubectl version ${flags} | grep "${name} Version:" | sed -e s/"${name} Version: "/""/g > "${file}" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | openim::test::version::json_object_to_file() { | ||||||
|  |   flags=$1 | ||||||
|  |   file=$2 | ||||||
|  |   # shellcheck disable=SC2086 | ||||||
|  |   # Disabling because "flags" needs to allow for expansion here | ||||||
|  |   kubectl version ${flags} --output json | sed -e s/' '/''/g -e s/'\"'/''/g -e s/'}'/''/g -e s/'{'/''/g -e s/'clientVersion:'/'clientVersion:,'/ -e s/'serverVersion:'/'serverVersion:,'/ | tr , '\n' > "${file}" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | openim::test::version::json_client_server_object_to_file() { | ||||||
|  |   flags=$1 | ||||||
|  |   name=$2 | ||||||
|  |   file=$3 | ||||||
|  |   # shellcheck disable=SC2086 | ||||||
|  |   # Disabling because "flags" needs to allow for expansion here | ||||||
|  |   kubectl version ${flags} --output json | jq -r ".${name}" | sed -e s/'\"'/''/g -e s/'}'/''/g -e s/'{'/''/g -e /^$/d -e s/','/''/g  -e s/':'/'='/g > "${file}" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | openim::test::version::yaml_object_to_file() { | ||||||
|  |   flags=$1 | ||||||
|  |   file=$2 | ||||||
|  |   # shellcheck disable=SC2086 | ||||||
|  |   # Disabling because "flags" needs to allow for expansion here | ||||||
|  |   kubectl version ${flags} --output yaml | sed -e s/' '/''/g -e s/'\"'/''/g -e /^$/d > "${file}" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | openim::test::version::diff_assert() { | ||||||
|  |   local original=$1 | ||||||
|  |   local comparator=${2:-"eq"} | ||||||
|  |   local latest=$3 | ||||||
|  |   local diff_msg=${4:-""} | ||||||
|  |   local res="" | ||||||
|  | 
 | ||||||
|  |   if [ ! -f "${original}" ]; then | ||||||
|  |         echo "${bold}${red}" | ||||||
|  |         echo "FAIL! ${diff_msg}" | ||||||
|  |         echo "the file '${original}' does not exit" | ||||||
|  |         echo "${reset}${red}" | ||||||
|  |         caller | ||||||
|  |         echo "${reset}" | ||||||
|  |         return 1 | ||||||
|  |   fi | ||||||
|  | 
 | ||||||
|  |   if [ ! -f "${latest}" ]; then | ||||||
|  |         echo "${bold}${red}" | ||||||
|  |         echo "FAIL! ${diff_msg}" | ||||||
|  |         echo "the file '${latest}' does not exit" | ||||||
|  |         echo "${reset}${red}" | ||||||
|  |         caller | ||||||
|  |         echo "${reset}" | ||||||
|  |         return 1 | ||||||
|  |   fi | ||||||
|  | 
 | ||||||
|  |   if [ "${comparator}" == "exact" ]; then | ||||||
|  |       # Skip sorting of file content for exact comparison. | ||||||
|  |       cp "${original}" "${original}.sorted" | ||||||
|  |       cp "${latest}" "${latest}.sorted" | ||||||
|  |   else | ||||||
|  |       sort "${original}" > "${original}.sorted" | ||||||
|  |       sort "${latest}" > "${latest}.sorted" | ||||||
|  |   fi | ||||||
|  | 
 | ||||||
|  |   if [ "${comparator}" == "eq" ] || [ "${comparator}" == "exact" ]; then | ||||||
|  |     if [ "$(diff -iwB "${original}".sorted "${latest}".sorted)" == "" ] ; then | ||||||
|  |         echo -n "${green}" | ||||||
|  |         echo "Successful: ${diff_msg}" | ||||||
|  |         echo -n "${reset}" | ||||||
|  |         return 0 | ||||||
|  |     else | ||||||
|  |         echo "${bold}${red}" | ||||||
|  |         echo "FAIL! ${diff_msg}" | ||||||
|  |         echo "  Expected: " | ||||||
|  |         cat "${original}" | ||||||
|  |         echo "  Got: " | ||||||
|  |         cat "${latest}" | ||||||
|  |         echo "${reset}${red}" | ||||||
|  |         caller | ||||||
|  |         echo "${reset}" | ||||||
|  |         return 1 | ||||||
|  |     fi | ||||||
|  |   else | ||||||
|  |     if [ -n "$(diff -iwB "${original}".sorted "${latest}".sorted)" ] ; then | ||||||
|  |         echo -n "${green}" | ||||||
|  |         echo "Successful: ${diff_msg}" | ||||||
|  |         echo -n "${reset}" | ||||||
|  |         return 0 | ||||||
|  |     else | ||||||
|  |         echo "${bold}${red}" | ||||||
|  |         echo "FAIL! ${diff_msg}" | ||||||
|  |         echo "  Expected: " | ||||||
|  |         cat "${original}" | ||||||
|  |         echo "  Got: " | ||||||
|  |         cat "${latest}" | ||||||
|  |         echo "${reset}${red}" | ||||||
|  |         caller | ||||||
|  |         echo "${reset}" | ||||||
|  |         return 1 | ||||||
|  |       fi | ||||||
|  |   fi | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # Force exact match of kubectl stdout, stderr, and return code. | ||||||
|  | # $1: file with actual stdout | ||||||
|  | # $2: file with actual stderr | ||||||
|  | # $3: the actual return code | ||||||
|  | # $4: file with expected stdout | ||||||
|  | # $5: file with expected stderr | ||||||
|  | # $6: expected return code | ||||||
|  | # $7: additional message describing the invocation | ||||||
|  | openim::test::results::diff() { | ||||||
|  |   local actualstdout=$1 | ||||||
|  |   local actualstderr=$2 | ||||||
|  |   local actualcode=$3 | ||||||
|  |   local expectedstdout=$4 | ||||||
|  |   local expectedstderr=$5 | ||||||
|  |   local expectedcode=$6 | ||||||
|  |   local message=$7 | ||||||
|  |   local result=0 | ||||||
|  | 
 | ||||||
|  |   if ! openim::test::version::diff_assert "${expectedstdout}" "exact" "${actualstdout}" "stdout for ${message}"; then | ||||||
|  |       result=1 | ||||||
|  |   fi | ||||||
|  |   if ! openim::test::version::diff_assert "${expectedstderr}" "exact" "${actualstderr}" "stderr for ${message}"; then | ||||||
|  |       result=1 | ||||||
|  |   fi | ||||||
|  |   if [ "${actualcode}" -ne "${expectedcode}" ]; then | ||||||
|  |       echo "${bold}${red}" | ||||||
|  |       echo "$(openim::test::get_caller): FAIL!" | ||||||
|  |       echo "Return code for ${message}" | ||||||
|  |       echo "  Expected: ${expectedcode}" | ||||||
|  |       echo "  Got:      ${actualcode}" | ||||||
|  |       echo "${reset}${red}" | ||||||
|  |       caller | ||||||
|  |       echo "${reset}" | ||||||
|  |       result=1 | ||||||
|  |   fi | ||||||
|  | 
 | ||||||
|  |   if [ "${result}" -eq 0 ]; then | ||||||
|  |      echo -n "${green}" | ||||||
|  |      echo "$(openim::test::get_caller): Successful: ${message}" | ||||||
|  |      echo -n "${reset}" | ||||||
|  |   fi | ||||||
|  | 
 | ||||||
|  |   return "$result" | ||||||
|  | } | ||||||
| @ -680,6 +680,33 @@ function openim::util::ensure-cfssl { | |||||||
|   popd > /dev/null || return 1 |   popd > /dev/null || return 1 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | # openim::util::ensure-docker-buildx | ||||||
|  | # Check if we have "docker buildx" commands available | ||||||
|  | # | ||||||
|  | function openim::util::ensure-docker-buildx { | ||||||
|  |   # podman returns 0 on `docker buildx version`, docker on `docker buildx`. One of them must succeed. | ||||||
|  |   if docker buildx version >/dev/null 2>&1 || docker buildx >/dev/null 2>&1; then | ||||||
|  |     return 0 | ||||||
|  |   else | ||||||
|  |     echo "ERROR: docker buildx not available. Docker 19.03 or higher is required with experimental features enabled" | ||||||
|  |     exit 1 | ||||||
|  |   fi | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # openim::util::ensure-bash-version | ||||||
|  | # Check if we are using a supported bash version | ||||||
|  | # | ||||||
|  | function openim::util::ensure-bash-version { | ||||||
|  |   # shellcheck disable=SC2004 | ||||||
|  |   if ((${BASH_VERSINFO[0]}<4)) || ( ((${BASH_VERSINFO[0]}==4)) && ((${BASH_VERSINFO[1]}<2)) ); then | ||||||
|  |     echo "ERROR: This script requires a minimum bash version of 4.2, but got version of ${BASH_VERSINFO[0]}.${BASH_VERSINFO[1]}" | ||||||
|  |     if [ "$(uname)" = 'Darwin' ]; then | ||||||
|  |       echo "On macOS with homebrew 'brew install bash' is sufficient." | ||||||
|  |     fi | ||||||
|  |     exit 1 | ||||||
|  |   fi | ||||||
|  | } | ||||||
|  | 
 | ||||||
| # openim::util::ensure-gnu-sed | # openim::util::ensure-gnu-sed | ||||||
| # Determines which sed binary is gnu-sed on linux/darwin | # Determines which sed binary is gnu-sed on linux/darwin | ||||||
| # | # | ||||||
| @ -701,6 +728,26 @@ function openim::util::ensure-gnu-sed { | |||||||
|   openim::util::sourced_variable "${SED}" |   openim::util::sourced_variable "${SED}" | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | # openim::util::ensure-gnu-date | ||||||
|  | # Determines which date binary is gnu-date on linux/darwin | ||||||
|  | # | ||||||
|  | # Sets: | ||||||
|  | #  DATE: The name of the gnu-date binary | ||||||
|  | # | ||||||
|  | function openim::util::ensure-gnu-date { | ||||||
|  |   # NOTE: the echo below is a workaround to ensure date is executed before the grep. | ||||||
|  |   date_help="$(LANG=C date --help 2>&1 || true)" | ||||||
|  |   if echo "${date_help}" | grep -q "GNU\|BusyBox"; then | ||||||
|  |     DATE="date" | ||||||
|  |   elif command -v gdate &>/dev/null; then | ||||||
|  |     DATE="gdate" | ||||||
|  |   else | ||||||
|  |     openim::log::error "Failed to find GNU date as date or gdate. If you are on Mac: brew install coreutils." >&2 | ||||||
|  |     return 1 | ||||||
|  |   fi | ||||||
|  |   openim::util::sourced_variable "${DATE}" | ||||||
|  | } | ||||||
|  | 
 | ||||||
| # openim::util::check-file-in-alphabetical-order <file> | # openim::util::check-file-in-alphabetical-order <file> | ||||||
| # Check that the file is in alphabetical order | # Check that the file is in alphabetical order | ||||||
| # | # | ||||||
|  | |||||||
| @ -18,9 +18,8 @@ SCRIPTS_ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) | |||||||
| OPENIM_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. | OPENIM_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. | ||||||
| 
 | 
 | ||||||
| #Include shell font styles and some basic information | #Include shell font styles and some basic information | ||||||
| source $SCRIPTS_ROOT/style_info.sh | source $SCRIPTS_ROOT/lib/init.sh | ||||||
| source $SCRIPTS_ROOT/path_info.sh | source $SCRIPTS_ROOT/path_info.sh | ||||||
| source $SCRIPTS_ROOT/function.sh |  | ||||||
| 
 | 
 | ||||||
| cd $SCRIPTS_ROOT | cd $SCRIPTS_ROOT | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -18,9 +18,8 @@ SCRIPTS_ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) | |||||||
| OPENIM_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. | OPENIM_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. | ||||||
| 
 | 
 | ||||||
| #Include shell font styles and some basic information | #Include shell font styles and some basic information | ||||||
| source $SCRIPTS_ROOT/style_info.sh | source $SCRIPTS_ROOT/lib/init.sh | ||||||
| source $SCRIPTS_ROOT/path_info.sh | source $SCRIPTS_ROOT/path_info.sh | ||||||
| source $SCRIPTS_ROOT/function.sh |  | ||||||
| 
 | 
 | ||||||
| echo -e "${YELLOW_PREFIX}=======>SCRIPTS_ROOT=$SCRIPTS_ROOT${COLOR_SUFFIX}" | echo -e "${YELLOW_PREFIX}=======>SCRIPTS_ROOT=$SCRIPTS_ROOT${COLOR_SUFFIX}" | ||||||
| echo -e "${YELLOW_PREFIX}=======>OPENIM_ROOT=$OPENIM_ROOT${COLOR_SUFFIX}" | echo -e "${YELLOW_PREFIX}=======>OPENIM_ROOT=$OPENIM_ROOT${COLOR_SUFFIX}" | ||||||
|  | |||||||
| @ -20,9 +20,8 @@ SCRIPTS_ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) | |||||||
| OPENIM_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. | OPENIM_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. | ||||||
| 
 | 
 | ||||||
| #Include shell font styles and some basic information | #Include shell font styles and some basic information | ||||||
| source $SCRIPTS_ROOT/style_info.sh | source $SCRIPTS_ROOT/lib/init.sh | ||||||
| source $SCRIPTS_ROOT/path_info.sh | source $SCRIPTS_ROOT/path_info.sh | ||||||
| source $SCRIPTS_ROOT/function.sh |  | ||||||
| 
 | 
 | ||||||
| cd $SCRIPTS_ROOT | cd $SCRIPTS_ROOT | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -21,9 +21,8 @@ SCRIPTS_ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) | |||||||
| OPENIM_ROOT=$(dirname "${SCRIPTS_ROOT}")/.. | OPENIM_ROOT=$(dirname "${SCRIPTS_ROOT}")/.. | ||||||
| 
 | 
 | ||||||
| #Include shell font styles and some basic information | #Include shell font styles and some basic information | ||||||
| source $SCRIPTS_ROOT/style_info.sh | source $SCRIPTS_ROOT/lib/init.sh | ||||||
| source $SCRIPTS_ROOT/path_info.sh | source $SCRIPTS_ROOT/path_info.sh | ||||||
| source $SCRIPTS_ROOT/function.sh |  | ||||||
| 
 | 
 | ||||||
| cd $SCRIPTS_ROOT | cd $SCRIPTS_ROOT | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -19,9 +19,8 @@ SCRIPTS_ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) | |||||||
| OPENIM_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. | OPENIM_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. | ||||||
| 
 | 
 | ||||||
| #Include shell font styles and some basic information | #Include shell font styles and some basic information | ||||||
| source $SCRIPTS_ROOT/style_info.sh | source $SCRIPTS_ROOT/lib/init.sh | ||||||
| source $SCRIPTS_ROOT/path_info.sh | source $SCRIPTS_ROOT/path_info.sh | ||||||
| source $SCRIPTS_ROOT/function.sh |  | ||||||
| 
 | 
 | ||||||
| cd $SCRIPTS_ROOT | cd $SCRIPTS_ROOT | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -8,18 +8,14 @@ | |||||||
| The API performance test script automatically executes wrk commands, collects data, analyzes it, and calls gnuplot to plot it | The API performance test script automatically executes wrk commands, collects data, analyzes it, and calls gnuplot to plot it | ||||||
| 
 | 
 | ||||||
| Usage (to test API performance) : | Usage (to test API performance) : | ||||||
| 
 | 1. Start the openim-api(port 10002) | ||||||
| Start the openim-api(port 10002) | 2. Execute the test script: ./wrktest.sh | ||||||
| 
 |  | ||||||
| Execute the test script: ./wrktest.sh |  | ||||||
| 
 | 
 | ||||||
| The script will generate the data file.dat, each column meaning: concurrency QPS average response time success rate | The script will generate the data file.dat, each column meaning: concurrency QPS average response time success rate | ||||||
| 
 | 
 | ||||||
| Usage (Compare the results of 2 tests) | Usage (Compare the results of 2 tests) | ||||||
| 
 |  | ||||||
| 1. The performance test:. / wrktest. Sh openim apiserver - http://127.0.0.1:10002/healthz | 1. The performance test:. / wrktest. Sh openim apiserver - http://127.0.0.1:10002/healthz | ||||||
| 
 | 2. Execute the command:./wrktest.sh diff apiserver.dat http.dat | ||||||
| Execute the command:./wrktest.sh diff apiserver.dat http.dat |  | ||||||
| 
 | 
 | ||||||
| >  Note: Make sure you have wrk and gnuplot installed on your system | >  Note: Make sure you have wrk and gnuplot installed on your system | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user