From: Loic Dachary Date: Wed, 1 Jan 2014 21:22:34 +0000 (+0100) Subject: ceph-disk: tests for the --data-dir code path X-Git-Tag: v0.77~54^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F1032%2Fhead;p=ceph.git ceph-disk: tests for the --data-dir code path Signed-off-by: Loic Dachary --- diff --git a/src/test/Makefile.am b/src/test/Makefile.am index 22bc834bfc59..5faf9ac49fd1 100644 --- a/src/test/Makefile.am +++ b/src/test/Makefile.am @@ -243,6 +243,7 @@ check_SCRIPTS += \ test/encoding/check-generated.sh \ test/mon/osd-pool-create.sh \ test/mon/mkfs.sh \ + test/ceph-disk.sh \ test/vstart_wrapped_tests.sh # target to build but not run the unit tests diff --git a/src/test/ceph-disk.sh b/src/test/ceph-disk.sh new file mode 100755 index 000000000000..2dd83f73f25c --- /dev/null +++ b/src/test/ceph-disk.sh @@ -0,0 +1,227 @@ +#!/bin/bash +# +# Copyright (C) 2014 Cloudwatt +# +# Author: Loic Dachary +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Library Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Library Public License for more details. +# +set -xe +PS4='${FUNCNAME[0]}: $LINENO: ' + +export PATH=:$PATH # make sure program from sources are prefered +DIR=test-ceph-disk +MON_ID=a +MONA=127.0.0.1:7451 +FSID=$(uuidgen) +export CEPH_CONF=/dev/null +export CEPH_ARGS="--fsid $FSID" +CEPH_ARGS+=" --chdir=" +CEPH_ARGS+=" --run-dir=$DIR" +CEPH_ARGS+=" --mon-host=$MONA" +CEPH_ARGS+=" --log-file=$DIR/\$name.log" +CEPH_ARGS+=" --pid-file=$DIR/\$name.pidfile" +CEPH_ARGS+=" --auth-supported=none" +CEPH_DISK_ARGS= +CEPH_DISK_ARGS+=" --statedir=$DIR" +CEPH_DISK_ARGS+=" --sysconfdir=$DIR" +CEPH_DISK_ARGS+=" --prepend-to-path=" +CEPH_DISK_ARGS+=" --verbose" + +function setup() { + teardown + mkdir $DIR + touch $DIR/ceph.conf +} + +function teardown() { + kill_daemons + rm -fr $DIR +} + +function run_mon() { + local mon_dir=$DIR/$MON_ID + + ./ceph-mon \ + --id $MON_ID \ + --mkfs \ + --mon-data=$mon_dir \ + --mon-initial-members=$MON_ID \ + "$@" + + ./ceph-mon \ + --id $MON_ID \ + --mon-data=$mon_dir \ + --mon-cluster-log-file=$mon_dir/log \ + --public-addr $MONA \ + "$@" +} + +function kill_daemons() { + for pidfile in $(find $DIR | grep pidfile) ; do + for try in 0 1 1 1 2 3 ; do + kill $(cat $pidfile) || break + sleep $try + done + done +} + +function command_fixture() { + local command=$1 + + [ $(which $command) = ./$command ] || return 1 + + cat > $DIR/$command <&1 | tee $DIR/out + grep --quiet 'Is a directory' $DIR/out || return 1 + ! [ -f $osd_data/magic ] || return 1 + rmdir $osd_data/fsid + + echo successfully prepare the OSD + + CEPH_ARGS="--fsid $uuid" \ + ./ceph-disk $CEPH_DISK_ARGS prepare $osd_data 2>&1 | tee $DIR/out + grep --quiet 'Preparing osd data dir' $DIR/out || return 1 + grep --quiet $uuid $osd_data/ceph_fsid || return 1 + [ -f $osd_data/magic ] || return 1 + + echo will not override an existing OSD + + CEPH_ARGS="--fsid $(uuidgen)" \ + ./ceph-disk $CEPH_DISK_ARGS prepare $osd_data 2>&1 | tee $DIR/out + grep --quiet 'ceph-disk:Data dir .* already exists' $DIR/out || return 1 + grep --quiet $uuid $osd_data/ceph_fsid || return 1 +} + +function test_activate_dir() { + run_mon + + local osd_data=$DIR/osd + + ./ceph-disk $CEPH_DISK_ARGS \ + prepare $osd_data || return 1 + + CEPH_ARGS="$CEPH_ARGS --osd-journal-size=100 --osd-data=$osd_data" \ + timeout 5 ./ceph-disk $CEPH_DISK_ARGS \ + activate \ + --mark-init=none \ + $osd_data || return 1 + timeout 5 ./ceph osd pool set data size 1 || return 1 + local id=$(cat $osd_data/whoami) + local weight=1 + ./ceph osd crush add osd.$id $weight root=default host=localhost || return 1 + echo FOO > $DIR/BAR + timeout 10 ./rados --pool data put BAR $DIR/BAR || return 1 + timeout 10 ./rados --pool data get BAR $DIR/BAR.copy || return 1 + diff $DIR/BAR $DIR/BAR.copy || return 1 +} + +function test_find_cluster_by_uuid() { + setup + test_activate_dir 2>&1 | tee $DIR/test_find + ! grep "No cluster conf found in $DIR" $DIR/test_find || return 1 + teardown + + setup + rm $DIR/ceph.conf + test_activate_dir 2>&1 | tee $DIR/test_find + grep "No cluster conf found in $DIR" $DIR/test_find || return 1 + teardown +} + +function run() { + local default_actions + default_actions+="test_path " + default_actions+="test_find_cluster_by_uuid " + default_actions+="test_prepend_to_path " + default_actions+="test_activate_dir_magic " + default_actions+="test_activate_dir " + local actions=${@:-$default_actions} + for action in $actions ; do + setup + $action || return 1 + teardown + done +} + +run $@ + +# Local Variables: +# compile-command: "cd .. ; test/ceph-disk.sh # test_activate_dir" +# End: