85 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			85 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								#!/bin/sh
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								TIMEOUT=15
							 | 
						||
| 
								 | 
							
								QUIET=0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								echoerr() {
							 | 
						||
| 
								 | 
							
								  if [ "$QUIET" -ne 1 ]; then printf "%s\n" "$*" 1>&2; fi
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								usage() {
							 | 
						||
| 
								 | 
							
								  exitcode="$1"
							 | 
						||
| 
								 | 
							
								  cat << USAGE >&2
							 | 
						||
| 
								 | 
							
								Usage:
							 | 
						||
| 
								 | 
							
								  $cmdname host:port [-t timeout] [-- command args]
							 | 
						||
| 
								 | 
							
								  -q | --quiet                        Do not output any status messages
							 | 
						||
| 
								 | 
							
								  -t TIMEOUT | --timeout=timeout      Timeout in seconds, zero for no timeout
							 | 
						||
| 
								 | 
							
								  -- COMMAND ARGS                     Execute command with args after the test finishes
							 | 
						||
| 
								 | 
							
								USAGE
							 | 
						||
| 
								 | 
							
								  exit "$exitcode"
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								wait_for() {
							 | 
						||
| 
								 | 
							
								 if ! command -v nc >/dev/null; then
							 | 
						||
| 
								 | 
							
								    echoerr 'nc command is missing!'
							 | 
						||
| 
								 | 
							
								    exit 1
							 | 
						||
| 
								 | 
							
								  fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  for i in `seq $TIMEOUT` ; do
							 | 
						||
| 
								 | 
							
								    nc -z "$HOST" "$PORT" > /dev/null 2>&1
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    result=$?
							 | 
						||
| 
								 | 
							
								    if [ $result -eq 0 ] ; then
							 | 
						||
| 
								 | 
							
								      if [ $# -gt 0 ] ; then
							 | 
						||
| 
								 | 
							
								        exec "$@"
							 | 
						||
| 
								 | 
							
								      fi
							 | 
						||
| 
								 | 
							
								      exit 0
							 | 
						||
| 
								 | 
							
								    fi
							 | 
						||
| 
								 | 
							
								    sleep 1
							 | 
						||
| 
								 | 
							
								  done
							 | 
						||
| 
								 | 
							
								  echo "Operation timed out" >&2
							 | 
						||
| 
								 | 
							
								  exit 1
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								while [ $# -gt 0 ]
							 | 
						||
| 
								 | 
							
								do
							 | 
						||
| 
								 | 
							
								  case "$1" in
							 | 
						||
| 
								 | 
							
								    *:* )
							 | 
						||
| 
								 | 
							
								    HOST=$(printf "%s\n" "$1"| cut -d : -f 1)
							 | 
						||
| 
								 | 
							
								    PORT=$(printf "%s\n" "$1"| cut -d : -f 2)
							 | 
						||
| 
								 | 
							
								    shift 1
							 | 
						||
| 
								 | 
							
								    ;;
							 | 
						||
| 
								 | 
							
								    -q | --quiet)
							 | 
						||
| 
								 | 
							
								    QUIET=1
							 | 
						||
| 
								 | 
							
								    shift 1
							 | 
						||
| 
								 | 
							
								    ;;
							 | 
						||
| 
								 | 
							
								    -t)
							 | 
						||
| 
								 | 
							
								    TIMEOUT="$2"
							 | 
						||
| 
								 | 
							
								    if [ "$TIMEOUT" = "" ]; then break; fi
							 | 
						||
| 
								 | 
							
								    shift 2
							 | 
						||
| 
								 | 
							
								    ;;
							 | 
						||
| 
								 | 
							
								    --timeout=*)
							 | 
						||
| 
								 | 
							
								    TIMEOUT="${1#*=}"
							 | 
						||
| 
								 | 
							
								    shift 1
							 | 
						||
| 
								 | 
							
								    ;;
							 | 
						||
| 
								 | 
							
								    --)
							 | 
						||
| 
								 | 
							
								    shift
							 | 
						||
| 
								 | 
							
								    break
							 | 
						||
| 
								 | 
							
								    ;;
							 | 
						||
| 
								 | 
							
								    --help)
							 | 
						||
| 
								 | 
							
								    usage 0
							 | 
						||
| 
								 | 
							
								    ;;
							 | 
						||
| 
								 | 
							
								    *)
							 | 
						||
| 
								 | 
							
								    echoerr "Unknown argument: $1"
							 | 
						||
| 
								 | 
							
								    usage 1
							 | 
						||
| 
								 | 
							
								    ;;
							 | 
						||
| 
								 | 
							
								  esac
							 | 
						||
| 
								 | 
							
								done
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if [ "$HOST" = "" -o "$PORT" = "" ]; then
							 | 
						||
| 
								 | 
							
								  echoerr "Error: you need to provide a host and port to test."
							 | 
						||
| 
								 | 
							
								  usage 2
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								wait_for "$@"
							 |