zold-io/zold

View on GitHub
fixtures/scripts/_head.sh

Summary

Maintainability
Test Coverage
#!/bin/bash
set -e
set -x
shopt -s expand_aliases

export RUBYOPT="-W0"

alias zold="$1 --ignore-this-stupid-option --halt-code=test --ignore-global-config --trace --network=test --no-colors --dump-errors"

function reserve_port {
  python -c 'import socket; s=socket.socket(); s.bind(("", 0)); print(s.getsockname()[1]); s.close()'
}

function wait_for_url {
  i=0
  while ! curl --silent --fail $1 > /dev/null; do
    ((i++)) || sleep 0
    if ((i==30)); then
      echo "URL $1 is not available after ${i} attempts"
      exit 12
    fi
    sleep 2
  done
}

function wait_for_port {
  i=0
  while ! nc -z localhost $1; do
    ((i++)) || sleep 0
    if ((i==30)); then
      echo "Port $1 is not available after ${i} attempts"
      exit 13
    fi
    sleep 2
  done
}

function wait_for_file {
  i=0
  while [ ! -f $1 ]; do
    ((i++)) || sleep 0
    if ((i==30)); then
      echo "File $1 not found, giving up after ${i} attempts"
      exit 14
    fi
    sleep 2
  done
}

function halt_nodes {
  for p in "$@"; do
    pid=$(curl --silent "http://127.0.0.1:$p/pid?halt=test" || echo 'absent')
    if [[ "${pid}" =~ ^[0-9]+$ ]]; then
      i=0
      while kill -0 ${pid}; do
        ((i++)) || sleep 0
        if ((i==30)); then
          echo "Process ${pid} didn't die, it's a bug"
          exit 15
        fi
        echo "Still waiting for process ${pid} to die, attempt no.${i}"
        sleep 2
      done
      echo "Process ${pid} is dead!"
    fi
    echo "Node at TCP port ${p} stopped!"
  done
}