]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: osd create pool test refactor
authorLoic Dachary <loic@dachary.org>
Thu, 13 Feb 2014 09:23:28 +0000 (10:23 +0100)
committerLoic Dachary <loic@dachary.org>
Thu, 13 Feb 2014 11:27:36 +0000 (12:27 +0100)
* Use test-helpers.sh instead of duplicating it
* Isolate each test in a separate function for clarity

Signed-off-by: Loic Dachary <loic@dachary.org>
src/test/mon/osd-pool-create.sh

index 39c6918da3a4f3e192d5f9ab929e0cd2b2902332..c24bd38f78123c701f9c07e8ef8a4d9677b0a8ad 100755 (executable)
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU Library Public License for more details.
 #
-set -xe
-PS4='$LINENO: '
-
-DIR=osd-pool-create
-rm -fr $DIR
-trap "test \$? = 0 || cat $DIR/log ; set +x ; kill_mon || true && rm -fr $DIR" EXIT
-mkdir $DIR
-export CEPH_ARGS="--conf /dev/null --auth-supported=none --mon-host=127.0.0.1" 
-
-function run_mon() {
-    ./ceph-mon --id a \
-        --public-addr=127.0.0.1 --mkfs \
-        --fsid=$(uuidgen) --mon-data=$DIR --run-dir=$DIR
-
-    ./ceph-mon --id a \
-        --chdir= \
-        --paxos-propose-interval=0.1 \
-        --osd-pool-default-erasure-code-directory=.libs \
-        --mon-data=$DIR \
-        --log-file=$DIR/log \
-        --mon-cluster-log-file=$DIR/log \
-        --run-dir=$DIR \
-        --pid-file=$DIR/pidfile \
-        "$@"
-}
+source test/mon/mon-test-helpers.sh
+
+function run() {
+    local dir=$1
 
-function kill_mon() {
-    for try in 0 1 1 1 2 3 ; do
-        if [ ! -e $DIR/pidfile ] ||
-            ! kill -9 $(cat $DIR/pidfile) ; then
-            break
-        fi
-        sleep $try
+    export CEPH_ARGS
+    CEPH_ARGS+="--fsid=$(uuidgen) --auth-supported=none "
+    CEPH_ARGS+="--mon-host=127.0.0.1 "
+
+    for TEST_function in $(set | sed -n -e 's/^\(TEST_[0-9a-z_]*\) .*/\1/p') ; do
+        setup $dir || return 1
+        $TEST_function $dir || return 1
+        teardown $dir || return 1
     done
+}
+
+function TEST_default_deprectated_0() {
+    local dir=$1
+    # explicitly set the default crush rule
+    expected=66
+    run_mon $dir a --public-addr 127.0.0.1 \
+        --osd_pool_default_crush_replicated_ruleset $expected
+    ./ceph --format json osd dump | grep '"crush_ruleset":'$expected
+    ! grep "osd_pool_default_crush_rule is deprecated " $dir/a/log || return 1
+}
+
+function TEST_default_deprectated_1() {
+    local dir=$1
+    # explicitly set the default crush rule using deprecated option
+    expected=55
+    run_mon $dir a --public-addr 127.0.0.1 \
+        --osd_pool_default_crush_rule $expected
+    ./ceph --format json osd dump | grep '"crush_ruleset":'$expected
+    grep "osd_pool_default_crush_rule is deprecated " $dir/a/log || return 1
+}
+
+function TEST_default_deprectated_2() {
+    local dir=$1
+    expected=77
+    unexpected=33
+    run_mon $dir a --public-addr 127.0.0.1 \
+        --osd_pool_default_crush_rule $expected \
+        --osd_pool_default_crush_replicated_ruleset $unexpected
+    ./ceph --format json osd dump | grep '"crush_ruleset":'$expected
+    ! ./ceph --format json osd dump | grep '"crush_ruleset":'$unexpected || return 1
+    grep "osd_pool_default_crush_rule is deprecated " $dir/a/log || return 1
+}
+
+function TEST_erasure_crush_rule() {
+    local dir=$1
+    run_mon $dir a --public-addr 127.0.0.1
+    crush_ruleset=erasure_ruleset
+    ./ceph osd crush rule create-erasure $crush_ruleset
+    ./ceph osd crush rule ls | grep $crush_ruleset
+    ./ceph osd pool create pool_erasure 12 12 erasure 2>&1 | \
+        grep 'crush_ruleset is missing' || return 1
+    ! ./ceph osd pool create pool_erasure 12 12 erasure crush_ruleset=WRONG > $dir/out 2>&1
+    grep 'WRONG does not exist' $dir/out || return 1
+    grep 'EINVAL' $dir/out || return 1
+    ! ./ceph --format json osd dump | grep '"crush_ruleset":1' || return 1
+    ./ceph osd pool create pool_erasure 12 12 erasure crush_ruleset=$crush_ruleset
+    ./ceph --format json osd dump | grep '"crush_ruleset":1' || return 1
+}
+
+function TEST_erasure_crush_rule_pending() {
+    local dir=$1
+    run_mon $dir a --public-addr 127.0.0.1
+    # try again if the ruleset creation is pending
+    crush_ruleset=erasure_ruleset
+    # add to the pending OSD map without triggering a paxos proposal
+    result=$(echo '{"prefix":"osdmonitor_prepare_command","prepare":"osd crush rule create-erasure","name":"'$crush_ruleset'"}' | nc -U $dir/a/ceph-mon.a.asok | cut --bytes=5-)
+    test $result = true || return 1
+    ./ceph osd pool create pool_erasure 12 12 erasure crush_ruleset=$crush_ruleset || return 1
+    grep "$crush_ruleset try again" $dir/a/log || return 1
+}
+
+function TEST_erasure_code_property_format() {
+    local dir=$1
+    # osd_pool_default_erasure_code_properties is
+    # valid JSON but not of the expected type
+    run_mon $dir a --public-addr 127.0.0.1 \
+        --osd_pool_default_erasure_code_properties 1
+    ./ceph osd pool create poolA 12 12 erasure 2>&1 | grep 'must be a JSON object' || return 1
+}
+
+function TEST_erasure_crush_property_format_json() {
+    local dir=$1
+    # osd_pool_default_erasure_code_properties is JSON
+    expected='"erasure-code-plugin":"example"'
+    run_mon $dir a --public-addr 127.0.0.1 \
+        --osd_pool_default_erasure_code_properties "{$expected}"
+    ! ./ceph --format json osd dump | grep "$expected" || return 1
+    crush_ruleset=erasure_ruleset
+    ./ceph osd crush rule create-erasure $crush_ruleset
+    ./ceph osd pool create pool_erasure 12 12 erasure crush_ruleset=$crush_ruleset
+    ./ceph --format json osd dump | grep "$expected" || return 1
+}
+
+function TEST_erasure_crush_property_format_plain() {
+    local dir=$1
+    # osd_pool_default_erasure_code_properties is plain text
+    expected='"erasure-code-plugin":"example"'
+    run_mon $dir a --public-addr 127.0.0.1 \
+        --osd_pool_default_erasure_code_properties "erasure-code-plugin=example"
+    ! ./ceph --format json osd dump | grep "$expected" || return 1
+    crush_ruleset=erasure_ruleset
+    ./ceph osd crush rule create-erasure $crush_ruleset
+    ./ceph osd pool create pool_erasure 12 12 erasure crush_ruleset=$crush_ruleset
+    ./ceph --format json osd dump | grep "$expected" || return 1
+}
+
+function TEST_erasure_crush_stripe_width() {
+    local dir=$1
+    # the default stripe width is used to initialize the pool
+    run_mon $dir a --public-addr 127.0.0.1
+    stripe_width=$(./ceph-conf --show-config-value osd_pool_erasure_code_stripe_width)
+    crush_ruleset=erasure_ruleset
+    ./ceph osd crush rule create-erasure $crush_ruleset
+    ./ceph osd pool create pool_erasure 12 12 erasure crush_ruleset=$crush_ruleset
+    ./ceph --format json osd dump | tee $dir/osd.json
+    grep '"stripe_width":'$stripe_width $dir/osd.json > /dev/null || return 1
+}
+
+function TEST_erasure_crush_stripe_width_padded() {
+    local dir=$1
+    # setting osd_pool_erasure_code_stripe_width modifies the stripe_width
+    # and it is padded as required by the default plugin
+    properties+=" erasure-code-plugin=jerasure"
+    properties+=" erasure-code-technique=reed_sol_van"
+    k=4
+    properties+=" erasure-code-k=$k"
+    properties+=" erasure-code-m=2"
+    expected_chunk_size=2048
+    actual_stripe_width=$(($expected_chunk_size * $k))
+    desired_stripe_width=$(($actual_stripe_width - 1))
+    run_mon $dir a --public-addr 127.0.0.1 \
+        --osd_pool_erasure_code_stripe_width $desired_stripe_width \
+        --osd_pool_default_erasure_code_properties "$properties"
+    crush_ruleset=erasure_ruleset
+    ./ceph osd crush rule create-erasure $crush_ruleset
+    ./ceph osd pool create pool_erasure 12 12 erasure crush_ruleset=$crush_ruleset
+    ./ceph osd dump | tee $dir/osd.json
+    grep "stripe_width $actual_stripe_width" $dir/osd.json > /dev/null || return 1
+}
+
+function TEST_erasure_code_pool() {
+    local dir=$1
+    run_mon $dir a --public-addr 127.0.0.1
+    ./ceph --format json osd dump > $dir/osd.json
+    ! grep "erasure-code-plugin" $dir/osd.json || return 1
+    ./ceph osd crush rule create-erasure erasure_ruleset
+    ./ceph osd pool create erasurecodes 12 12 erasure crush_ruleset=erasure_ruleset
+    ./ceph --format json osd dump | tee $dir/osd.json
+    grep "erasure-code-plugin" $dir/osd.json > /dev/null || return 1
+    grep "erasure-code-directory" $dir/osd.json > /dev/null || return 1
+
+    ./ceph osd pool create erasurecodes 12 12 erasure 2>&1 | \
+        grep 'already exists' || return 1
+    ./ceph osd pool create erasurecodes 12 12 2>&1 | \
+        grep 'cannot change to type replicated' || return 1
+}
 
-    rm -fr $DIR/*
+function TEST_replicated_pool() {
+    local dir=$1
+    run_mon $dir a --public-addr 127.0.0.1
+    ./ceph osd pool create replicated 12 12 replicated
+    ./ceph osd pool create replicated 12 12 replicated 2>&1 | \
+        grep 'already exists' || return 1
+    ./ceph osd pool create replicated 12 12 # default is replicated
+    ./ceph osd pool create replicated 12    # default is replicated, pgp_num = pg_num
+    ./ceph osd pool create replicated 12 12 erasure 2>&1 | \
+        grep 'cannot change to type erasure' || return 1
 }
 
-# explicitly set the default crush rule
-expected=66
-run_mon --osd_pool_default_crush_replicated_ruleset $expected
-./ceph --format json osd dump | grep '"crush_ruleset":'$expected
-! grep "osd_pool_default_crush_rule is deprecated " $DIR/log || exit 1
-kill_mon
-
-# explicitly set the default crush rule using deprecated option
-expected=55
-run_mon --osd_pool_default_crush_rule $expected
-./ceph --format json osd dump | grep '"crush_ruleset":'$expected
-grep "osd_pool_default_crush_rule is deprecated " $DIR/log
-kill_mon
-
-expected=77
-unexpected=33
-run_mon \
-    --osd_pool_default_crush_rule $expected \
-    --osd_pool_default_crush_replicated_ruleset $unexpected
-./ceph --format json osd dump | grep '"crush_ruleset":'$expected
-! ./ceph --format json osd dump | grep '"crush_ruleset":'$unexpected || exit 1
-grep "osd_pool_default_crush_rule is deprecated " $DIR/log
-kill_mon
-
-# osd_pool_default_erasure_code_properties is 
-# valid JSON but not of the expected type
-run_mon --osd_pool_default_erasure_code_properties 1 
-./ceph osd pool create poolA 12 12 erasure 2>&1 | grep 'must be a JSON object'
-kill_mon
-
-# set the erasure crush rule
-run_mon 
-crush_ruleset=erasure_ruleset
-./ceph osd crush rule create-erasure $crush_ruleset
-./ceph osd crush rule ls | grep $crush_ruleset
-./ceph osd pool create pool_erasure 12 12 erasure 2>&1 | 
-  grep 'crush_ruleset is missing'
-! ./ceph osd pool create pool_erasure 12 12 erasure crush_ruleset=WRONG > $DIR/out 2>&1 
-grep 'WRONG does not exist' $DIR/out
-grep 'EINVAL' $DIR/out
-! ./ceph --format json osd dump | grep '"crush_ruleset":1' || exit 1
-./ceph osd pool create pool_erasure 12 12 erasure crush_ruleset=$crush_ruleset
-./ceph --format json osd dump | grep '"crush_ruleset":1'
-kill_mon
-
-# try again if the ruleset creation is pending
-run_mon --mon-advanced-debug-mode --debug-mon=20 --debug-paxos=20 
-crush_ruleset=erasure_ruleset
-# add to the pending OSD map without triggering a paxos proposal
-result=$(echo '{"prefix":"osdmonitor_prepare_command","prepare":"osd crush rule create-erasure","name":"'$crush_ruleset'"}' | nc -U $DIR/ceph-mon.a.asok | cut --bytes=5-)
-test $result = true || exit 1
-./ceph osd pool create pool_erasure 12 12 erasure crush_ruleset=$crush_ruleset
-grep "$crush_ruleset try again" $DIR/log
-kill_mon
-
-# osd_pool_default_erasure_code_properties is JSON
-expected='"erasure-code-plugin":"example"'
-run_mon --osd_pool_default_erasure_code_properties "{$expected}"
-! ./ceph --format json osd dump | grep "$expected" || exit 1
-crush_ruleset=erasure_ruleset
-./ceph osd crush rule create-erasure $crush_ruleset
-./ceph osd pool create pool_erasure 12 12 erasure crush_ruleset=$crush_ruleset
-./ceph --format json osd dump | grep "$expected"
-kill_mon
-
-# osd_pool_default_erasure_code_properties is plain text
-expected='"erasure-code-plugin":"example"'
-run_mon --osd_pool_default_erasure_code_properties "erasure-code-plugin=example"
-! ./ceph --format json osd dump | grep "$expected" || exit 1
-crush_ruleset=erasure_ruleset
-./ceph osd crush rule create-erasure $crush_ruleset
-./ceph osd pool create pool_erasure 12 12 erasure crush_ruleset=$crush_ruleset
-./ceph --format json osd dump | grep "$expected"
-kill_mon
-
-# the default stripe width is used to initialize the pool
-run_mon
-stripe_width=$(./ceph-conf --show-config-value osd_pool_erasure_code_stripe_width)
-crush_ruleset=erasure_ruleset
-./ceph osd crush rule create-erasure $crush_ruleset
-./ceph osd pool create pool_erasure 12 12 erasure crush_ruleset=$crush_ruleset
-./ceph --format json osd dump | tee $DIR/osd.json
-grep '"stripe_width":'$stripe_width $DIR/osd.json > /dev/null
-kill_mon
-
-# setting osd_pool_erasure_code_stripe_width modifies the stripe_width
-# and it is padded as required by the default plugin
-properties+=" erasure-code-plugin=jerasure"
-properties+=" erasure-code-technique=reed_sol_van"
-k=4
-properties+=" erasure-code-k=$k"
-properties+=" erasure-code-m=2"
-expected_chunk_size=2048
-actual_stripe_width=$(($expected_chunk_size * $k))
-desired_stripe_width=$(($actual_stripe_width - 1))
-run_mon \
-    --osd_pool_erasure_code_stripe_width $desired_stripe_width \
-    --osd_pool_default_erasure_code_properties "$properties"
-crush_ruleset=erasure_ruleset
-./ceph osd crush rule create-erasure $crush_ruleset
-./ceph osd pool create pool_erasure 12 12 erasure crush_ruleset=$crush_ruleset
-./ceph osd dump | tee $DIR/osd.json
-grep "stripe_width $actual_stripe_width" $DIR/osd.json > /dev/null
-kill_mon
-
-run_mon
-# creating an erasure code pool sets defaults properties
-./ceph --format json osd dump > $DIR/osd.json
-! grep "erasure-code-plugin" $DIR/osd.json || exit 1
-./ceph osd crush rule create-erasure erasure_ruleset
-./ceph osd pool create erasurecodes 12 12 erasure crush_ruleset=erasure_ruleset
-./ceph --format json osd dump | tee $DIR/osd.json
-grep "erasure-code-plugin" $DIR/osd.json > /dev/null
-grep "erasure-code-directory" $DIR/osd.json > /dev/null
-
-./ceph osd pool create erasurecodes 12 12 erasure 2>&1 |
-   grep 'already exists'
-./ceph osd pool create erasurecodes 12 12 2>&1 |
-   grep 'cannot change to type replicated'
-./ceph osd pool create replicated 12 12 replicated
-./ceph osd pool create replicated 12 12 replicated 2>&1 |
-   grep 'already exists'
-./ceph osd pool create replicated 12 12 # default is replicated
-./ceph osd pool create replicated 12    # default is replicated, pgp_num = pg_num
-./ceph osd pool create replicated 12 12 erasure 2>&1 |
-   grep 'cannot change to type erasure'
-
-kill_mon
+main osd-pool-create
 
 # Local Variables:
 # compile-command: "cd ../.. ; make -j4 && test/mon/osd-pool-create.sh"