diff --git a/tests/common.sh b/tests/common.sh new file mode 100644 index 00000000..32a259be --- /dev/null +++ b/tests/common.sh @@ -0,0 +1,35 @@ +#!/bin/bash -ex + +if [ ! "$BASH_VERSION" ] ; then + echo "Use bash to run this script ($0)" 1>&2 + exit 1 +fi + +format_error() +{ + echo $(echo -n -e "\033[1;31m")$1$(echo -n -e "\033[m") + $ETCDCTL get --prefix /vitastor > ./testdata/etcd-dump.txt + exit 1 +} +format_green() +{ + echo $(echo -n -e "\033[1;32m")$1$(echo -n -e "\033[m") +} + +cd `dirname $0`/.. + +trap 'kill -9 $(jobs -p)' EXIT + +ETCD=${ETCD:-etcd} +ETCD_PORT=${ETCD_PORT:-12379} + +rm -rf ./testdata +mkdir -p ./testdata + +$ETCD -name etcd_test --data-dir ./testdata/etcd \ + --advertise-client-urls http://127.0.0.1:$ETCD_PORT --listen-client-urls http://127.0.0.1:$ETCD_PORT \ + --initial-advertise-peer-urls http://127.0.0.1:$((ETCD_PORT+1)) --listen-peer-urls http://127.0.0.1:$((ETCD_PORT+1)) \ + --max-txn-ops=100000 --auto-compaction-retention=10 --auto-compaction-mode=revision &>./testdata/etcd.log & +ETCD_PID=$! +ETCD_URL=127.0.0.1:$ETCD_PORT/v3 +ETCDCTL="${ETCD}ctl --endpoints=http://$ETCD_URL" diff --git a/tests/test_failure_domain.sh b/tests/test_failure_domain.sh new file mode 100755 index 00000000..bc245d79 --- /dev/null +++ b/tests/test_failure_domain.sh @@ -0,0 +1,29 @@ +#!/bin/bash -ex + +. `dirname $0`/common.sh + +TIME=$(date '+%s') +$ETCDCTL put /vitastor/config/global '{"placement_levels":{"rack":1,"host":2,"osd":3}}' +$ETCDCTL put /vitastor/config/node_placement '{"rack1":{"level":"rack"},"rack2":{"level":"rack"},"host1":{"level":"host","parent":"rack1"},"host2":{"level":"host","parent":"rack1"},"host3":{"level":"host","parent":"rack2"},"host4":{"level":"host","parent":"rack2"}}' +$ETCDCTL put /vitastor/osd/stats/1 '{"host":"host1","size":1073741824,"time":"'$TIME'"}' +$ETCDCTL put /vitastor/osd/stats/2 '{"host":"host1","size":1073741824,"time":"'$TIME'"}' +$ETCDCTL put /vitastor/osd/stats/3 '{"host":"host2","size":1073741824,"time":"'$TIME'"}' +$ETCDCTL put /vitastor/osd/stats/4 '{"host":"host2","size":1073741824,"time":"'$TIME'"}' +$ETCDCTL put /vitastor/osd/stats/5 '{"host":"host3","size":1073741824,"time":"'$TIME'"}' +$ETCDCTL put /vitastor/osd/stats/6 '{"host":"host3","size":1073741824,"time":"'$TIME'"}' +$ETCDCTL put /vitastor/osd/stats/7 '{"host":"host4","size":1073741824,"time":"'$TIME'"}' +$ETCDCTL put /vitastor/osd/stats/8 '{"host":"host4","size":1073741824,"time":"'$TIME'"}' +$ETCDCTL put /vitastor/config/pools '{"1":{"name":"testpool","scheme":"replicated","pg_size":2,"pg_minsize":1,"pg_count":4,"failure_domain":"rack"}}' + +cd mon +npm install +cd .. +node mon/mon-main.js --etcd_url http://$ETCD_URL --etcd_prefix "/vitastor" &>./testdata/mon.log & +MON_PID=$! + +sleep 2 + +etcdctl --endpoints=http://localhost:12379 get --prefix /vitastor/config/pgs --print-value-only | \ + jq -s -e '([ .[0].items["1"] | .[].osd_set | map_values(. | tonumber) | select((.[0] <= 4) != (.[1] <= 4)) ] | length) == 4' + +format_green OK diff --git a/run_tests.sh b/tests/test_write.sh similarity index 71% rename from run_tests.sh rename to tests/test_write.sh index 4c580c52..c04fb976 100755 --- a/run_tests.sh +++ b/tests/test_write.sh @@ -1,42 +1,11 @@ -#!/bin/bash +#!/bin/bash -ex -if [ ! "$BASH_VERSION" ] ; then - echo "Use bash to run this script ($0)" 1>&2 - exit 1 -fi +. `dirname $0`/common.sh -format_error() -{ - echo $(echo -n -e "\033[1;31m")$1$(echo -n -e "\033[m") - $ETCDCTL get --prefix /vitastor > ./testdata/etcd-dump.txt - exit 1 -} -format_green() -{ - echo $(echo -n -e "\033[1;32m")$1$(echo -n -e "\033[m") -} - -set -e -x - -trap 'kill -9 $(jobs -p)' EXIT - -ETCD=${ETCD:-etcd} -ETCD_PORT=${ETCD_PORT:-12379} - -rm -rf ./testdata -mkdir -p ./testdata dd if=/dev/zero of=./testdata/test_osd1.bin bs=1024 count=1 seek=$((1024*1024-1)) dd if=/dev/zero of=./testdata/test_osd2.bin bs=1024 count=1 seek=$((1024*1024-1)) dd if=/dev/zero of=./testdata/test_osd3.bin bs=1024 count=1 seek=$((1024*1024-1)) -$ETCD -name etcd_test --data-dir ./testdata/etcd \ - --advertise-client-urls http://127.0.0.1:$ETCD_PORT --listen-client-urls http://127.0.0.1:$ETCD_PORT \ - --initial-advertise-peer-urls http://127.0.0.1:$((ETCD_PORT+1)) --listen-peer-urls http://127.0.0.1:$((ETCD_PORT+1)) \ - --max-txn-ops=100000 --auto-compaction-retention=10 --auto-compaction-mode=revision &>./testdata/etcd.log & -ETCD_PID=$! -ETCD_URL=127.0.0.1:$ETCD_PORT/v3 -ETCDCTL="${ETCD}ctl --endpoints=http://$ETCD_URL" - ./osd --osd_num 1 --bind_address 127.0.0.1 --etcd_address $ETCD_URL $(node mon/simple-offsets.js --format options --device ./testdata/test_osd1.bin 2>/dev/null) &>./testdata/osd1.log & OSD1_PID=$! ./osd --osd_num 2 --bind_address 127.0.0.1 --etcd_address $ETCD_URL $(node mon/simple-offsets.js --format options --device ./testdata/test_osd2.bin 2>/dev/null) &>./testdata/osd2.log &