mirror of https://github.com/minio/minio.git
				
				
				
			
		
			
	
	
		
			138 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
		
		
			
		
	
	
			138 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
|  | #!/bin/bash
 | ||
|  | 
 | ||
|  | if [ -n "$TEST_DEBUG" ]; then | ||
|  | 	set -x | ||
|  | fi | ||
|  | 
 | ||
|  | WORK_DIR="$PWD/.verify-$RANDOM" | ||
|  | MINIO_CONFIG_DIR="$WORK_DIR/.minio" | ||
|  | MINIO=("$PWD/minio" --config-dir "$MINIO_CONFIG_DIR" server) | ||
|  | 
 | ||
|  | if [ ! -x "$PWD/minio" ]; then | ||
|  | 	echo "minio executable binary not found in current directory" | ||
|  | 	exit 1 | ||
|  | fi | ||
|  | 
 | ||
|  | if [ ! -x "$PWD/minio" ]; then | ||
|  | 	echo "minio executable binary not found in current directory" | ||
|  | 	exit 1 | ||
|  | fi | ||
|  | 
 | ||
|  | trap 'catch $LINENO' ERR | ||
|  | 
 | ||
|  | function purge() { | ||
|  | 	rm -rf "$1" | ||
|  | } | ||
|  | 
 | ||
|  | # shellcheck disable=SC2120 | ||
|  | catch() { | ||
|  | 	if [ $# -ne 0 ]; then | ||
|  | 		echo "error on line $1" | ||
|  | 	fi | ||
|  | 
 | ||
|  | 	echo "Cleaning up instances of MinIO" | ||
|  | 	pkill minio || true | ||
|  | 	pkill -9 minio || true | ||
|  | 	purge "$WORK_DIR" | ||
|  | 	if [ $# -ne 0 ]; then | ||
|  | 		exit $# | ||
|  | 	fi | ||
|  | } | ||
|  | 
 | ||
|  | catch | ||
|  | 
 | ||
|  | function gen_put_request() { | ||
|  | 	hdr_sleep=$1 | ||
|  | 	body_sleep=$2 | ||
|  | 
 | ||
|  | 	echo "PUT /testbucket/testobject HTTP/1.1" | ||
|  | 	sleep $hdr_sleep | ||
|  | 	echo "Host: foo-header" | ||
|  | 	echo "User-Agent: curl/8.2.1" | ||
|  | 	echo "Accept: */*" | ||
|  | 	echo "Content-Length: 30" | ||
|  | 	echo "" | ||
|  | 
 | ||
|  | 	sleep $body_sleep | ||
|  | 	echo "random line 0" | ||
|  | 	echo "random line 1" | ||
|  | 	echo "" | ||
|  | 	echo "" | ||
|  | } | ||
|  | 
 | ||
|  | function send_put_object_request() { | ||
|  | 	hdr_timeout=$1 | ||
|  | 	body_timeout=$2 | ||
|  | 
 | ||
|  | 	start=$(date +%s) | ||
|  | 	timeout 5m bash -c "gen_put_request $hdr_timeout $body_timeout | netcat 127.0.0.1 $start_port | read" || return -1 | ||
|  | 	[ $(($(date +%s) - start)) -gt $((srv_hdr_timeout + srv_idle_timeout + 1)) ] && return -1 | ||
|  | 	return 0 | ||
|  | } | ||
|  | 
 | ||
|  | function test_minio_with_timeout() { | ||
|  | 	start_port=$1 | ||
|  | 
 | ||
|  | 	export MINIO_ROOT_USER=minio | ||
|  | 	export MINIO_ROOT_PASSWORD=minio123 | ||
|  | 	export MC_HOST_minio="http://minio:minio123@127.0.0.1:${start_port}/" | ||
|  | 	export MINIO_CI_CD=1 | ||
|  | 
 | ||
|  | 	mkdir ${WORK_DIR} | ||
|  | 	C_PWD=${PWD} | ||
|  | 	if [ ! -x "$PWD/mc" ]; then | ||
|  | 		MC_BUILD_DIR="mc-$RANDOM" | ||
|  | 		if ! git clone --quiet https://github.com/minio/mc "$MC_BUILD_DIR"; then | ||
|  | 			echo "failed to download https://github.com/minio/mc" | ||
|  | 			purge "${MC_BUILD_DIR}" | ||
|  | 			exit 1 | ||
|  | 		fi | ||
|  | 
 | ||
|  | 		(cd "${MC_BUILD_DIR}" && go build -o "$C_PWD/mc") | ||
|  | 
 | ||
|  | 		# remove mc source. | ||
|  | 		purge "${MC_BUILD_DIR}" | ||
|  | 	fi | ||
|  | 
 | ||
|  | 	"${MINIO[@]}" --address ":$start_port" --read-header-timeout ${srv_hdr_timeout}s --idle-timeout ${srv_idle_timeout}s "${WORK_DIR}/disk/" >"${WORK_DIR}/server1.log" 2>&1 & | ||
|  | 	pid=$! | ||
|  | 	disown $pid | ||
|  | 	sleep 1 | ||
|  | 
 | ||
|  | 	if ! ps -p ${pid} 1>&2 >/dev/null; then | ||
|  | 		echo "server1 log:" | ||
|  | 		cat "${WORK_DIR}/server1.log" | ||
|  | 		echo "FAILED" | ||
|  | 		purge "$WORK_DIR" | ||
|  | 		exit 1 | ||
|  | 	fi | ||
|  | 
 | ||
|  | 	set -e | ||
|  | 
 | ||
|  | 	"${PWD}/mc" mb minio/testbucket | ||
|  | 	"${PWD}/mc" anonymous set public minio/testbucket | ||
|  | 
 | ||
|  | 	# slow header writing | ||
|  | 	send_put_object_request 20 0 && exit -1 | ||
|  | 	"${PWD}/mc" stat minio/testbucket/testobject && exit -1 | ||
|  | 
 | ||
|  | 	# quick header write and slow bodywrite | ||
|  | 	send_put_object_request 0 40 && exit -1 | ||
|  | 	"${PWD}/mc" stat minio/testbucket/testobject && exit -1 | ||
|  | 
 | ||
|  | 	# quick header and body write | ||
|  | 	send_put_object_request 1 1 || exit -1 | ||
|  | 	"${PWD}/mc" stat minio/testbucket/testobject || exit -1 | ||
|  | } | ||
|  | 
 | ||
|  | function main() { | ||
|  | 	export start_port=$(shuf -i 10000-65000 -n 1) | ||
|  | 	export srv_hdr_timeout=5 | ||
|  | 	export srv_idle_timeout=5 | ||
|  | 	export -f gen_put_request | ||
|  | 
 | ||
|  | 	test_minio_with_timeout ${start_port} | ||
|  | } | ||
|  | 
 | ||
|  | main "$@" |