#!/bin/bash

set -e -x

export GOROOT=/usr/local/go
export PATH=${GOROOT}/bin:${PATH}

cd diego-release/

export GOPATH_ROOT=$PWD

export GOPATH=${GOPATH_ROOT}
export PATH=${GOPATH_ROOT}/bin:${PATH}

export AUCTIONEER_GOPATH=${GOPATH_ROOT}
export CONVERGER_GOPATH=${GOPATH_ROOT}
export EXECUTOR_GOPATH=${GOPATH_ROOT}
export FILE_SERVER_GOPATH=${GOPATH_ROOT}
export BUILDPACK_APP_LIFECYCLE_GOPATH=${GOPATH_ROOT}
export DOCKER_APP_LIFECYCLE_GOPATH=${GOPATH_ROOT}
export NSYNC_GOPATH=${GOPATH_ROOT}
export RECEPTOR_GOPATH=${GOPATH_ROOT}
export REP_GOPATH=${GOPATH_ROOT}
export ROUTE_EMITTER_GOPATH=${GOPATH_ROOT}
export STAGER_GOPATH=${GOPATH_ROOT}
export TPS_GOPATH=${GOPATH_ROOT}

# These components vendor their own dependencies
export ROUTER_GOPATH=${GOPATH_ROOT}/src/github.com/cloudfoundry/gorouter/Godeps/_workspace:${GOPATH_ROOT}
export GARDEN_LINUX_GOPATH=${GOPATH_ROOT}/src/github.com/cloudfoundry-incubator/garden-linux/Godeps/_workspace:${GOPATH_ROOT}

# install application dependencies
for package in github.com/coreos/etcd github.com/apcera/gnatsd; do
  go install $package
done

cd $GOPATH_ROOT/src/github.com/cloudfoundry-incubator/inigo

pushd $GOPATH_ROOT/src/github.com/cloudfoundry-incubator/garden-linux/old
  make # compile wshd/etc.
  export GARDEN_BINPATH=$PWD/linux_backend/bin
popd

go install github.com/onsi/ginkgo/ginkgo

export GARDEN_ROOTFS=/tmp/opt/inigo/rootfs
mkdir -p $GARDEN_ROOTFS
mount -t tmpfs tmpfs $GARDEN_ROOTFS
cp -rp /opt/inigo/rootfs/* $GARDEN_ROOTFS

# used for routing to apps; same logic that Garden uses.
export EXTERNAL_ADDRESS=$(ip route get 8.8.8.8 | sed 's/.*src\s\(.*\)\s/\1/;tx;d;:x')

# GARDEN_GRAPH_PATH is the root of the docker image filesystem
export GARDEN_GRAPH_PATH=/tmp/garden-tmp
mkdir -p $GARDEN_GRAPH_PATH
mount -t tmpfs tmpfs $GARDEN_GRAPH_PATH

color_flag=""
if [ -n "$GO_PIPELINE_COUNTER" ]; then
  color_flag="-noColor"
fi

nodes_flag=""
if [ "$GINKGO_PARALLEL" = "true" ]; then
  nodes_flag="-nodes=4"
fi

pushd $GOPATH_ROOT/src/github.com/cloudfoundry-incubator/inigo
  if [ "$GINKGO_PARALLEL" = "true" ]; then
    ginkgo $color_flag $nodes_flag -r -failOnPending -randomizeAllSpecs -trace -race -slowSpecThreshold=10 -keepGoing "$@"
  else
    # always attempt to run executor in parallel
    ginkgo $color_flag -nodes=4 -r -failOnPending -randomizeAllSpecs -trace -race -slowSpecThreshold=10 "$@" executor/

    # run everything but executor with normal rules
    ginkgo $color_flag $nodes_flag -r -skipPackage=executor -failOnPending -randomizeAllSpecs -trace -race -slowSpecThreshold=10 -keepGoing "$@"
  fi
popd
