Browse Source

tools/functional-tester: clean up Docker scripts

Signed-off-by: Gyuho Lee <gyuhox@gmail.com>
Gyuho Lee 7 years ago
parent
commit
6ae9a7658a

+ 20 - 10
tools/functional-tester/README.md

@@ -4,7 +4,7 @@ etcd functional test suite tests the functionality of an etcd cluster with a foc
 
 
 etcd functional test suite has two components: etcd-agent and etcd-tester. etcd-agent runs on every test machines and etcd-tester is a single controller of the test. etcd-tester controls all the etcd-agent to start etcd clusters and simulate various failure cases.
 etcd functional test suite has two components: etcd-agent and etcd-tester. etcd-agent runs on every test machines and etcd-tester is a single controller of the test. etcd-tester controls all the etcd-agent to start etcd clusters and simulate various failure cases.
 
 
-## requirements
+## Requirements
 
 
 The environment of the cluster must be stable enough, so etcd test suite can assume that most of the failures are generated by itself.
 The environment of the cluster must be stable enough, so etcd test suite can assume that most of the failures are generated by itself.
 
 
@@ -18,8 +18,8 @@ etcd functional tester control the progress of the functional tests. It calls th
 
 
 ### Run locally
 ### Run locally
 
 
-```
-$ PASSES=functional ./test
+```bash
+PASSES=functional ./test
 ```
 ```
 
 
 ### Run with Docker
 ### Run with Docker
@@ -29,8 +29,7 @@ To run locally, first build tester image:
 ```bash
 ```bash
 pushd ../..
 pushd ../..
 
 
-GO_VERSION=1.9.3 \
-  make build-docker-functional-tester \
+make build-docker-functional-tester \
   -f ./hack/scripts-dev/Makefile
   -f ./hack/scripts-dev/Makefile
 
 
 popd
 popd
@@ -39,9 +38,20 @@ popd
 And run [example scripts](./scripts).
 And run [example scripts](./scripts).
 
 
 ```bash
 ```bash
-./scripts/agent-1.sh
-./scripts/agent-2.sh
-./scripts/agent-3.sh
-
-./scripts/tester-limit.sh
+# run 3 agents for 3-node local etcd cluster
+./scripts/docker-local-agent.sh 1
+./scripts/docker-local-agent.sh 2
+./scripts/docker-local-agent.sh 3
+
+# to run only 1 tester round
+LIMIT=1 ./scripts/docker-local-tester.sh
+
+# to run long-running tests with no limit
+LIMIT=1 ./scripts/docker-local-tester.sh
+
+# to run only 1 tester round with election runner and others
+# default is STRESSER="keys,lease"
+LIMIT=1 \
+  STRESSER="keys,lease,election-runner,watch-runner,lock-racer-runner,lease-runner" \
+  ./scripts/docker-local-tester.sh
 ```
 ```

+ 0 - 37
tools/functional-tester/scripts/agent-1.sh

@@ -1,37 +0,0 @@
-#!/usr/bin/env bash
-
-<<COMMENT
-# to run agent
-./scripts/agent-1.sh
-
-# to run with failpoints
-ETCD_EXEC_PATH=/etcd-failpoints ./scripts/agent-1.sh
-COMMENT
-
-if ! [[ "$0" =~ "scripts/agent-1.sh" ]]; then
-  echo "must be run from tools/functional-tester"
-  exit 255
-fi
-
-if [ -z "${ETCD_EXEC_PATH}" ]; then
-  ETCD_EXEC_PATH=/etcd
-	echo "Running agent without failpoints:" ${ETCD_EXEC_PATH}
-elif [[ "${ETCD_EXEC_PATH}" == "/etcd-failpoints" ]]; then
-	echo "Running agent with failpoints:" ${ETCD_EXEC_PATH}
-else
-  echo "Cannot find executable:" ${ETCD_EXEC_PATH}
-  exit 255
-fi
-
-rm -rf `pwd`/agent-1 && mkdir -p `pwd`/agent-1
-docker run \
-  --rm \
-  --net=host \
-  --name agent-1 \
-  --mount type=bind,source=`pwd`/agent-1,destination=/agent-1 \
-  gcr.io/etcd-development/etcd-functional-tester:go1.9.3 \
-  /bin/bash -c "/etcd-agent \
-    --etcd-path ${ETCD_EXEC_PATH} \
-    --etcd-log-dir /agent-1 \
-    --port :19027 \
-    --failpoint-addr :7381"

+ 0 - 37
tools/functional-tester/scripts/agent-2.sh

@@ -1,37 +0,0 @@
-#!/usr/bin/env bash
-
-<<COMMENT
-# to run agent
-./scripts/agent-2.sh
-
-# to run with failpoints
-ETCD_EXEC_PATH=/etcd-failpoints ./scripts/agent-2.sh
-COMMENT
-
-if ! [[ "$0" =~ "scripts/agent-2.sh" ]]; then
-  echo "must be run from tools/functional-tester"
-  exit 255
-fi
-
-if [ -z "${ETCD_EXEC_PATH}" ]; then
-  ETCD_EXEC_PATH=/etcd
-	echo "Running agent without failpoints:" ${ETCD_EXEC_PATH}
-elif [[ "${ETCD_EXEC_PATH}" == "/etcd-failpoints" ]]; then
-	echo "Running agent with failpoints:" ${ETCD_EXEC_PATH}
-else
-  echo "Cannot find executable:" ${ETCD_EXEC_PATH}
-  exit 255
-fi
-
-rm -rf `pwd`/agent-2 && mkdir -p `pwd`/agent-2
-docker run \
-  --rm \
-  --net=host \
-  --name agent-2 \
-  --mount type=bind,source=`pwd`/agent-2,destination=/agent-2 \
-  gcr.io/etcd-development/etcd-functional-tester:go1.9.3 \
-  /bin/bash -c "/etcd-agent \
-    --etcd-path ${ETCD_EXEC_PATH} \
-    --etcd-log-dir /agent-2 \
-    --port :29027 \
-    --failpoint-addr :7382"

+ 0 - 37
tools/functional-tester/scripts/agent-3.sh

@@ -1,37 +0,0 @@
-#!/usr/bin/env bash
-
-<<COMMENT
-# to run agent
-./scripts/agent-3.sh
-
-# to run with failpoints
-ETCD_EXEC_PATH=/etcd-failpoints ./scripts/agent-3.sh
-COMMENT
-
-if ! [[ "$0" =~ "scripts/agent-3.sh" ]]; then
-  echo "must be run from tools/functional-tester"
-  exit 255
-fi
-
-if [ -z "${ETCD_EXEC_PATH}" ]; then
-  ETCD_EXEC_PATH=/etcd
-	echo "Running agent without failpoints:" ${ETCD_EXEC_PATH}
-elif [[ "${ETCD_EXEC_PATH}" == "/etcd-failpoints" ]]; then
-	echo "Running agent with failpoints:" ${ETCD_EXEC_PATH}
-else
-  echo "Cannot find executable:" ${ETCD_EXEC_PATH}
-  exit 255
-fi
-
-rm -rf `pwd`/agent-3 && mkdir -p `pwd`/agent-3
-docker run \
-  --rm \
-  --net=host \
-  --name agent-3 \
-  --mount type=bind,source=`pwd`/agent-3,destination=/agent-3 \
-  gcr.io/etcd-development/etcd-functional-tester:go1.9.3 \
-  /bin/bash -c "/etcd-agent \
-    --etcd-path ${ETCD_EXEC_PATH} \
-    --etcd-log-dir /agent-3 \
-    --port :39027 \
-    --failpoint-addr :7383"

+ 58 - 0
tools/functional-tester/scripts/docker-local-agent.sh

@@ -0,0 +1,58 @@
+#!/usr/bin/env bash
+
+<<COMMENT
+# run 3 agents for 3-node local etcd cluster
+./scripts/docker-local-agent.sh 1
+./scripts/docker-local-agent.sh 2
+./scripts/docker-local-agent.sh 3
+COMMENT
+
+if ! [[ "${0}" =~ "scripts/docker-local-agent.sh" ]]; then
+  echo "must be run from tools/functional-tester"
+  exit 255
+fi
+
+if [[ -z "${GO_VERSION}" ]]; then
+  GO_VERSION=1.9.4
+fi
+echo "Running with GO_VERSION:" ${GO_VERSION}
+
+if [[ -z ${1} ]]; then
+  echo "Expected second argument: 1, 2, or 3"
+  exit 255
+else
+  case ${1} in
+    1) ;;
+    2) ;;
+    3) ;;
+    *) echo "Expected second argument 1, 2, or 3, got" \"${1}\"
+       exit 255 ;;
+  esac
+  AGENT_NAME="agent-${1}"
+  AGENT_PORT_FLAG="--port :${1}9027"
+  FAILPOINT_ADDR_FLAG="--failpoint-addr :738${1}"
+fi
+echo "AGENT_NAME:" ${AGENT_NAME}
+echo "AGENT_PORT_FLAG:" ${AGENT_PORT_FLAG}
+echo "FAILPOINT_ADDR_FLAG:" ${FAILPOINT_ADDR_FLAG}
+
+if [[ -z "${ETCD_EXEC_PATH}" ]]; then
+  ETCD_EXEC_PATH=/etcd
+elif [[ "${ETCD_EXEC_PATH}" != "/etcd-failpoints" ]]; then
+  echo "Cannot find etcd executable:" ${ETCD_EXEC_PATH}
+  exit 255
+fi
+echo "ETCD_EXEC_PATH:" ${ETCD_EXEC_PATH}
+
+rm -rf `pwd`/${AGENT_NAME} && mkdir -p `pwd`/${AGENT_NAME}
+docker run \
+  --rm \
+  --net=host \
+  --name ${AGENT_NAME} \
+  --mount type=bind,source=`pwd`/${AGENT_NAME},destination=/${AGENT_NAME} \
+  gcr.io/etcd-development/etcd-functional-tester:go${GO_VERSION} \
+  /bin/bash -c "/etcd-agent \
+    --etcd-path ${ETCD_EXEC_PATH} \
+    --etcd-log-dir /${AGENT_NAME} \
+    ${AGENT_PORT_FLAG} \
+    ${FAILPOINT_ADDR_FLAG}"

+ 65 - 0
tools/functional-tester/scripts/docker-local-tester.sh

@@ -0,0 +1,65 @@
+#!/usr/bin/env bash
+
+<<COMMENT
+# to run with different Go version
+# requires prebuilt Docker image
+#   GO_VERSION=1.9.4 make build-docker-functional-tester -f ./hack/scripts-dev/Makefile
+GO_VERSION=1.9.4 ./scripts/docker-local-tester.sh
+
+# to run only 1 tester round
+LIMIT=1 ./scripts/docker-local-tester.sh
+
+# to run long-running tests with no limit
+LIMIT=1 ./scripts/docker-local-tester.sh
+
+# to run only 1 tester round with election runner and others
+# default is STRESSER="keys,lease"
+LIMIT=1 \
+  STRESSER="keys,lease,election-runner,watch-runner,lock-racer-runner,lease-runner" \
+  ./scripts/docker-local-tester.sh
+
+# TODO: make stresser QPS configurable
+COMMENT
+
+if ! [[ "${0}" =~ "scripts/docker-local-tester.sh" ]]; then
+  echo "must be run from tools/functional-tester"
+  exit 255
+fi
+
+if [[ -z "${GO_VERSION}" ]]; then
+  GO_VERSION=1.9.4
+fi
+echo "Running with GO_VERSION:" ${GO_VERSION}
+
+if [[ "${LIMIT}" ]]; then
+  LIMIT_FLAG="--limit ${LIMIT}"
+  echo "Running with:" ${LIMIT_FLAG}
+else
+  echo "Running with no limit"
+fi
+
+if [[ "${STRESSER}" ]]; then
+  STRESSER_FLAG="--stresser ${STRESSER}"
+else
+  STRESSER_FLAG="--stresser keys,lease"
+fi
+echo "Running with:" ${STRESSER_FLAG}
+
+docker run \
+  --rm \
+  --net=host \
+  --name tester \
+  gcr.io/etcd-development/etcd-functional-tester:go${GO_VERSION} \
+  /bin/bash -c "/etcd-tester \
+    --agent-endpoints '127.0.0.1:19027,127.0.0.1:29027,127.0.0.1:39027' \
+    --client-ports 1379,2379,3379 \
+    --advertise-client-ports 13790,23790,33790 \
+    --peer-ports 1380,2380,3380 \
+    --advertise-peer-ports 13800,23800,33800 \
+    ${LIMIT_FLAG} \
+    --etcd-runner /etcd-runner \
+    --stress-qps=2500 \
+    --stress-key-txn-count 100 \
+    --stress-key-txn-ops 10 \
+    ${STRESSER_FLAG} \
+    --exit-on-failure"

+ 0 - 24
tools/functional-tester/scripts/tester-limit.sh

@@ -1,24 +0,0 @@
-#!/usr/bin/env bash
-
-if ! [[ "$0" =~ "scripts/tester-limit.sh" ]]; then
-  echo "must be run from tools/functional-tester"
-  exit 255
-fi
-
-# to run only 1 test round
-docker run \
-  --rm \
-  --net=host \
-  --name tester \
-  gcr.io/etcd-development/etcd-functional-tester:go1.9.3 \
-  /bin/bash -c "/etcd-tester \
-    --agent-endpoints '127.0.0.1:19027,127.0.0.1:29027,127.0.0.1:39027' \
-    --client-ports 1379,2379,3379 \
-    --advertise-client-ports 13790,23790,33790 \
-    --peer-ports 1380,2380,3380 \
-    --advertise-peer-ports 13800,23800,33800 \
-    --limit 1 \
-    --stress-qps=2500 \
-    --stress-key-txn-count 100 \
-    --stress-key-txn-ops 10 \
-    --exit-on-failure"

+ 0 - 25
tools/functional-tester/scripts/tester-runner.sh

@@ -1,25 +0,0 @@
-#!/usr/bin/env bash
-
-if ! [[ "$0" =~ "scripts/tester-runner.sh" ]]; then
-  echo "must be run from tools/functional-tester"
-  exit 255
-fi
-
-# to run with etcd-runner
-docker run \
-  --rm \
-  --net=host \
-  --name tester \
-  gcr.io/etcd-development/etcd-functional-tester:go1.9.3 \
-  /bin/bash -c "/etcd-tester \
-    --agent-endpoints '127.0.0.1:19027,127.0.0.1:29027,127.0.0.1:39027' \
-    --client-ports 1379,2379,3379 \
-    --advertise-client-ports 13790,23790,33790 \
-    --peer-ports 1380,2380,3380 \
-    --advertise-peer-ports 13800,23800,33800 \
-    --stress-qps=2500 \
-    --stress-key-txn-count 100 \
-    --stress-key-txn-ops 10 \
-    --etcd-runner /etcd-runner \
-    --stresser=keys,lease,election-runner,watch-runner,lock-racer-runner,lease-runner \
-    --exit-on-failure"

+ 0 - 22
tools/functional-tester/scripts/tester.sh

@@ -1,22 +0,0 @@
-#!/usr/bin/env bash
-
-if ! [[ "$0" =~ "scripts/tester.sh" ]]; then
-  echo "must be run from tools/functional-tester"
-  exit 255
-fi
-
-docker run \
-  --rm \
-  --net=host \
-  --name tester \
-  gcr.io/etcd-development/etcd-functional-tester:go1.9.3 \
-  /bin/bash -c "/etcd-tester \
-    --agent-endpoints '127.0.0.1:19027,127.0.0.1:29027,127.0.0.1:39027' \
-    --client-ports 1379,2379,3379 \
-    --advertise-client-ports 13790,23790,33790 \
-    --peer-ports 1380,2380,3380 \
-    --advertise-peer-ports 13800,23800,33800 \
-    --stress-qps=2500 \
-    --stress-key-txn-count 100 \
-    --stress-key-txn-ops 10 \
-    --exit-on-failure"