]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: osd crush rule create-simple functional tests 1202/head
authorLoic Dachary <loic@dachary.org>
Thu, 13 Feb 2014 12:54:49 +0000 (13:54 +0100)
committerLoic Dachary <loic@dachary.org>
Thu, 13 Feb 2014 13:54:59 +0000 (14:54 +0100)
Basic tests and a test that create the conditions where an OSDMap
is pending with a ruleset that is not yet in the OSDMap. An attempt to
create a rule by the same name will return success and not create it again.

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

index ec0ec0f33d9f51d0520070b2efc76150355e5c38..e826f393fcc45ac373835f1ca82314ad555b69c0 100755 (executable)
@@ -33,11 +33,29 @@ function run() {
         fi
     done
     teardown $dir || return 1
+}
 
+function TEST_crush_rule_create_simple() {
+    local dir=$1
+    ./ceph osd crush rule dump replicated_ruleset xml | \
+        grep '<op>take</op><item>default</item>' | \
+        grep '<op>chooseleaf_firstn</op><num>0</num><type>host</type>' || return 1
+    local ruleset=ruleset0
+    local root=host1
+    ./ceph osd crush add-bucket $root host
+    local failure_domain=osd
+    ./ceph osd crush rule create-simple $ruleset $root $failure_domain || return 1
+    ./ceph osd crush rule create-simple $ruleset $root $failure_domain 2>&1 | \
+        grep "$ruleset already exists" || return 1
+    ./ceph osd crush rule dump $ruleset xml | \
+        grep '<op>take</op><item>'$root'</item>' | \
+        grep '<op>choose_firstn</op><num>0</num><type>'$failure_domain'</type>' || return 1
+    ./ceph osd crush rule rm $ruleset || return 1
+}
 
 function TEST_crush_rule_dump() {
     local dir=$1
-    local ruleset=ruleset
+    local ruleset=ruleset1
     ./ceph osd crush rule create-erasure $ruleset || return 1
     local expected
     expected="<rule_name>$ruleset</rule_name>"
@@ -67,6 +85,19 @@ function TEST_crush_rule_all() {
     ! ./ceph osd crush rule ls | grep $crush_ruleset || return 1
 }
 
+function TEST_crush_rule_create_simple_exists() {
+    local dir=$1
+    local ruleset=ruleset2
+    local root=default
+    local failure_domain=host
+    # add to the pending OSD map without triggering a paxos proposal
+    result=$(echo '{"prefix":"osdmonitor_prepare_command","prepare":"osd crush rule create-simple","name":"'$ruleset'","root":"'$root'","type":"'$failure_domain'"}' | nc -U $dir/a/ceph-mon.a.asok | cut --bytes=5-)
+    test $result = true || return 1
+    ./ceph osd crush rule create-simple $ruleset $root $failure_domain 2>&1 | \
+        grep "$ruleset already exists" || return 1
+    ./ceph osd crush rule rm $ruleset || return 1
+}
+
 main osd-crush
 
 # Local Variables: