summaryrefslogtreecommitdiffstats
path: root/qa
diff options
context:
space:
mode:
Diffstat (limited to 'qa')
-rwxr-xr-xqa/qa_scripts/RbdLib.pm373
-rwxr-xr-xqa/qa_scripts/cephscrub.sh27
-rwxr-xr-xqa/qa_scripts/rbd_cli_tests.pl313
3 files changed, 713 insertions, 0 deletions
diff --git a/qa/qa_scripts/RbdLib.pm b/qa/qa_scripts/RbdLib.pm
new file mode 100755
index 00000000000..0d0c0e05412
--- /dev/null
+++ b/qa/qa_scripts/RbdLib.pm
@@ -0,0 +1,373 @@
+#! /usr/bin/perl
+=head1 NAME
+
+RbdLib.pm - Perl Module that contains the functions used by CLI and functionality scripts for testing RBD
+
+=cut
+
+package RbdLib;
+use Cwd;
+use Exporter;
+@ISA = 'Exporter';
+@EXPORT_OK = qw(perform_action create_image resize_image rename_image copy_image list_image info_image export_image import_image remove_image create_snapshots rollback_snapshots purge_snapshots list_snapshots remove_snapshot rbd_map rbd_unmap rbd_showmapped display_result _clean_up _create_rados_pool display_ceph_os_info $RADOS_MKPOOL $RADOS_RMPOOL $RBD_CREATE $RBD_RESIZE $RBD_INFO $RBD_REMOVE $RBD_RENAME $RBD_MV $RBD_LS $RBD_LIST $RBD_CLONE $RBD_EXPORT $RBD_IMPORT $RBD_CP $RBD_COPY $SNAP_CREATE $SNAP_LS $SNAP_LIST $SNAP_ROLLBACK $SNAP_PURGE $SNAP_REMOVE $POOL_RM_SUCCESS $POOL_MK_SUCCESS $RBD_EXISTS_ERR $RBD_WATCH $RBD_MAP $RBD_UNMAP $RBD_SHOWMAPPED get_command_output debug_msg );
+use Pod::Usage();
+use Getopt::Long();
+
+use strict;
+#use warnings;
+$|=1;
+
+# variables
+our $TC_CNT = " ";
+our $PASS_CNT = 0;
+our $FAIL_CNT = 0;
+our $RADOS_MKPOOL = "rados mkpool";
+our $RADOS_RMPOOL = "rados rmpool";
+our $RBD_CREATE = "rbd create";
+our $RBD_RESIZE = "rbd resize";
+our $RBD_INFO = "rbd info";
+our $RBD_REMOVE = "rbd rm";
+our $RBD_RENAME = "rbd rename";
+our $RBD_MV = "rbd mv";
+our $RBD_LS = "rbd ls";
+our $RBD_LIST = "rbd list";
+our $RBD_CLONE = "rbd clone";
+our $RBD_EXPORT = "rbd export";
+our $RBD_IMPORT = "rbd import";
+our $RBD_COPY = "rbd copy";
+our $RBD_CP = "rbd cp";
+our $SNAP_CREATE = "rbd snap create";
+our $SNAP_LIST = "rbd snap list";
+our $SNAP_LS = "rbd snap ls";
+our $SNAP_ROLLBACK = "rbd snap rollback";
+our $SNAP_REMOVE = "rbd snap rm";
+our $SNAP_PURGE = "rbd snap purge";
+our $RBD_WATCH = "rbd watch";
+our $RBD_MAP = "sudo rbd map";
+our $RBD_UNMAP = "sudo rbd unmap";
+our $RBD_SHOWMAPPED = "rbd showmapped";
+
+#====Error messages========================
+
+our $RBD_RM_ERROR = "image name was not specified";
+our $SNAP_LS_ERROR = "snap name was not specified";
+our $SNAP_RM_ERROR = "remove failed";
+our $SNAP_ROLLBACK_ERR = "rollback failed";
+our $RBD_CP_ERROR = "error: destination image name";
+our $RBD_EXISTS_ERR = "exists";
+our $RBD_RENAME_ERROR = "rename error";
+our $RBD_DELETE_ERROR = "delete error";
+our $RBD_NO_IMAGE = "error opening image";
+our $RBD_POOL_ERROR = "error opening pool";
+our $RBD_INT_ERR = "expected integer";
+our $RBD_ARG_ERR = "requires an argument";
+our $RBD_EXP_ERR = "export error";
+our $RBD_IMP_ERR = "import failed";
+our $RBD_MAP_ERR = "add failed";
+our $RBD_UNMAP_ERR = "remove failed";
+our $RBD_INFO_SNAP_ERR = "error setting snapshot context";
+
+#=======Success messages=======================
+
+our $POOL_MK_SUCCESS = "successfully created pool";
+our $POOL_RM_SUCCESS = "successfully deleted pool";
+our $RBD_RM_SUCCESS = "Removing image: 100%";
+our $RBD_CP_SUCCESS = "Image copy: 100%";
+our $RBD_RESIZE_SUCCESS = "Resizing image: 100%";
+our $RBD_EXP_SUCCESS = "Exporting image: 100%";
+our $RBD_IMP_SUCCESS = "Importing image: 100%";
+our $SNAP_ROLLBACK_SUCCESS = "Rolling back to snapshot: 100%";
+our $SNAP_PURGE_SUCCESS = "Removing all snapshots: 100%";
+
+#===========Variables used in the script========
+our $test_log = "logfile.txt";
+our $success = "test_completed.txt";
+our $fail = "log.txt";
+our $exec_cmd;
+our $PASS_FLAG;
+our $MSG;
+our $pool_name;
+our $rbd_imp_file = "test_file";
+our $exp_file = "rbd_test_file1";
+our $exp_file1 = "rbd_test_file2";
+our $rbd_imp_test = "new_test_file";
+our $img_name = "test_img";
+
+sub _clean_up {
+ my $exec_cmd = get_command_output(
+"rm $img_name $rbd_imp_file $rbd_imp_test $exp_file $exp_file1"
+ );
+}
+
+sub perform_action {
+ my ( $action, $cmd_args, $option ) = @_;
+ my $command = frame_command( $action, $cmd_args, $option );
+ my $cmd_op = get_command_output($command);
+ validate_cmd_output( $cmd_op, $action, $cmd_args, $option );
+}
+
+sub pass {
+ my ($comment) = @_;
+ print "Comment required." unless length $comment;
+ chomp $comment;
+ print_border2();
+ print "Test case: $TC_CNT PASSED - $comment \n";
+ print_border2();
+ $PASS_CNT++;
+ $PASS_FLAG = "TRUE";
+ $MSG = "$comment";
+}
+
+sub fail {
+ my ($comment) = @_;
+ print "Comment required." unless length $comment;
+ chomp $comment;
+ print_border2();
+ print "Test case: $TC_CNT FAILED - $comment \n";
+ print_border2();
+ $FAIL_CNT++;
+ $PASS_FLAG = "FALSE";
+ $MSG = "$comment";
+}
+
+sub debug_msg {
+ my ($comment,$is_debug) = @_;
+ print "Comment required." unless length $comment;
+ chomp $comment;
+ print_border3();
+ if (!$is_debug){
+ print "DEBUG: $comment \n";
+ } else {
+ print "$comment \n";
+ }
+ print_border3();
+}
+
+sub print_border {
+ print "=" x 70 . "\n";
+}
+
+sub print_border2 {
+ print "~" x 70 . "\n";
+}
+
+sub print_border3 {
+ print "+" x 70 . "\n";
+}
+
+sub banner {
+ my ($string) = @_;
+ chomp $string;
+ print_border();
+ print $string, "\n";
+ print_border();
+}
+
+sub display_result {
+ banner("TEST RESULTS");
+ banner(
+"No. of test cases passed:$PASS_CNT\nNo. of test cases failed:$FAIL_CNT\n"
+ );
+}
+
+sub get_command_output {
+ my $cmd_output = shift;
+ open( FH, ">>$test_log" );
+ print "\"$cmd_output\"\n";
+ my $exec_cmd = `$cmd_output 2>&1`;
+ print "$exec_cmd\n";
+ print FH "$exec_cmd\n";
+ close(FH);
+ return $exec_cmd;
+}
+
+sub frame_command {
+ my ( $action, $cmd_args, $option ) = @_;
+ my @command_set = split( /,/, $cmd_args );
+ my $command = join( ' --', @command_set );
+ $command = "$action $command";
+ return $command;
+}
+
+sub check_if_listed {
+ my ( $chk_cmd, $check_arg, $cmd, $args ) = @_;
+ my $check_op = get_command_output($chk_cmd);
+ if ( $check_op =~ /$check_arg/ ) {
+ pass("$cmd $args passed");
+ }
+ else {
+ fail("$cmd $args failed");
+ }
+}
+
+sub check_if_not_listed {
+ my ( $chk_cmd, $check_arg, $cmd, $args ) = @_;
+ my $check_op = get_command_output($chk_cmd);
+ if ( $check_op =~ /$check_arg/ ) {
+ fail("$cmd $args failed");
+ }
+ else {
+ pass("$cmd $args passed");
+ }
+}
+
+sub validate_cmd_output {
+ $TC_CNT++;
+ $PASS_FLAG = "FALSE";
+ $MSG = " ";
+ my ( $arg, $snap, $arg1 );
+ my $snaps;
+ my ( $cmd_op, $act, $args, $test_flag ) = @_;
+ if ( !$test_flag ) {
+ if ( ( $act =~ /$RBD_CREATE/ ) && ( !$cmd_op ) ) {
+ $arg = ( split /,/, $args )[0];
+ check_if_listed( "$RBD_LS $pool_name", $arg, $act , $args);
+ }
+ elsif (( ( $act =~ /$RBD_RENAME/ ) || ( $act =~ /$RBD_MV/ ) )
+ && ( !$cmd_op ) )
+ {
+ $arg = ( split /\//, $args )[-1];
+ check_if_listed( "$RBD_LS $pool_name", $arg, $act, $args );
+ }
+ elsif ( ( $act =~ /$SNAP_CREATE/ ) && ( !$cmd_op ) ) {
+ $snaps = ( split / /, $args )[1];
+ $arg = ( split /\//, $args )[-1];
+ check_if_listed( "$SNAP_LS $arg", $snaps, $act, $args );
+ }
+ elsif ( ( $act =~ /$SNAP_REMOVE/ ) && ( !$cmd_op ) ) {
+ $snaps = ( split /\@/, $args )[-1];
+ $arg1 = ( split /\@/, $args )[-2];
+ $arg = ( split /\//, $arg1 )[-1];
+ check_if_not_listed( "$SNAP_LS $arg", $snaps , $act, $args);
+ }
+ elsif (( $act =~ /$SNAP_PURGE/ )
+ && ( $cmd_op =~ /$SNAP_PURGE_SUCCESS/ ) )
+ {
+ pass("$act $args passed");
+ }
+ elsif ( $act =~ /$RBD_INFO/ ) {
+ $arg = ( split /\//, $args )[-1];
+ my $rbd_img_quoted = "\'$arg\'";
+ pass("$act $args passed")
+ if ( $cmd_op =~ /rbd image $rbd_img_quoted/ );
+ }
+ elsif ( ( $act =~ /$RBD_REMOVE/ ) && ( $cmd_op =~ /$RBD_RM_SUCCESS/ ) )
+ {
+ check_if_not_listed( "$RBD_LS $pool_name", $args, $act );
+ }
+ elsif (( $act =~ /$RBD_RESIZE/ )
+ && ( $cmd_op =~ /$RBD_RESIZE_SUCCESS/ ) )
+ {
+ pass("$act $args passed");
+ }
+ elsif (( ( $act =~ /$RBD_COPY/ ) || ( $act =~ /$RBD_CP/ ) )
+ && ( $cmd_op =~ /$RBD_CP_SUCCESS/ ) )
+ {
+ pass("$act $args passed");
+ }
+ elsif (
+ ( $act =~ /$RBD_EXPORT/ )
+ && ( ( $cmd_op =~ /$RBD_EXP_SUCCESS/ )
+ || ( $cmd_op =~ /$RBD_EXISTS_ERR/ ) )
+ )
+ {
+ pass("$act $args passed");
+ }
+ elsif (
+ ( $act =~ /$RBD_IMPORT/ )
+ && ( ( $cmd_op =~ /$RBD_IMP_SUCCESS/ )
+ || ( $cmd_op =~ /$RBD_EXISTS_ERR/ ) )
+ )
+ {
+ pass("$act $args passed");
+ }
+ elsif (( $act =~ /$SNAP_ROLLBACK/ )
+ && ( $cmd_op =~ /$SNAP_ROLLBACK_SUCCESS/ ) )
+ {
+ pass("$act $args passed");
+ }
+ elsif ( ( $act =~ /$RBD_SHOWMAPPED/ ) && ( $cmd_op =~ /$img_name/ ) ) {
+ pass("$act $args passed");
+ }
+ elsif ( ( $act =~ /$RBD_MAP/ ) && ( $cmd_op !~ /./ ) ) {
+ pass("$act $args passed");
+ }
+ elsif ( ( $act =~ /$RBD_UNMAP/ ) && ( $cmd_op !~ /$RBD_UNMAP_ERR/ ) ) {
+ pass("$act $args passed");
+ }
+ else {
+ if ( $cmd_op =~ /$RBD_EXISTS_ERR/ ) {
+ pass("$act $args $RBD_EXISTS_ERR");
+ }
+ else {
+ fail("$act $args failed");
+ }
+ }
+ }
+ elsif ( ( $test_flag == 1 ) && ( $cmd_op =~ /$RBD_EXISTS_ERR/ ) ) {
+ pass("Already exists: $act $args passed");
+ }
+ elsif (
+ ( $test_flag == 2 )
+ && ( ( $cmd_op =~ /$RBD_RENAME_ERROR/ )
+ || ( $cmd_op =~ /$RBD_DELETE_ERROR/ )
+ || ( $cmd_op =~ /$RBD_NO_IMAGE/ )
+ || ( $cmd_op =~ /$RBD_POOL_ERROR/ )
+ || ( $cmd_op =~ /$RBD_INT_ERR/ )
+ || ( $cmd_op =~ /$RBD_ARG_ERR/ )
+ || ( $cmd_op =~ /$RBD_RM_ERROR/ )
+ || ( $cmd_op =~ /$SNAP_LS_ERROR/ )
+ || ( $cmd_op =~ /$SNAP_RM_ERROR/ )
+ || ( $cmd_op =~ /$RBD_CP_ERROR/ )
+ || ( $cmd_op =~ /$RBD_EXP_ERR/ )
+ || ( $cmd_op =~ /$RBD_IMP_ERR/ )
+ || ( $cmd_op =~ /$SNAP_ROLLBACK_ERR/ )
+ || ( $cmd_op =~ /$RBD_MAP_ERR/ )
+ || ( $cmd_op =~ /$RBD_UNMAP_ERR/ )
+ || ( $cmd_op =~ /$RBD_INFO_SNAP_ERR/ ) )
+ )
+ {
+ pass("negative case: $act $args passed");
+ }
+ elsif ( ( $test_flag == 3 ) && ( $cmd_op =~ /usage/ ) ) {
+ pass("negative case: $act $args passed");
+ }
+ else {
+ fail("negative case:$act $args failed");
+ }
+ log_results();
+}
+
+# Test Script execution result
+sub log_results
+{
+ if ( $PASS_FLAG eq "TRUE" ) {
+ open( TC, '>>test_completed.txt' );
+ print TC "[Test Case $TC_CNT: Success] $MSG\n";
+ close(TC);
+ open( TC, '>>log.txt' );
+ print TC "[Test Case $TC_CNT: Success] $MSG\n";
+ close(TC);
+ }
+ else {
+ open( TC, '>>test_completed.txt' );
+ print TC "[Test Case $TC_CNT: Failure] $MSG\n";
+ close(TC);
+ open( TC, '>>log.txt' );
+ print TC "[Test Case $TC_CNT: Failure] $MSG\n";
+ close(TC);
+ }
+}
+
+sub display_ceph_os_info
+{
+ my $ceph_v = get_command_output ( "ceph -v" );
+ my @ceph_arr = split(" ",$ceph_v);
+ $ceph_v = "Ceph Version: $ceph_arr[2]";
+ my $msg = "The Tests are running on";
+ my $os_distro = get_command_output ( "lsb_release -d" );
+ my @os_arr = split(":",$os_distro);
+ $os_distro = "Linux Flavor:$os_arr[1]";
+ debug_msg ( "$msg\n$os_distro$ceph_v",1 );
+}
+1;
diff --git a/qa/qa_scripts/cephscrub.sh b/qa/qa_scripts/cephscrub.sh
new file mode 100755
index 00000000000..e28a52e929c
--- /dev/null
+++ b/qa/qa_scripts/cephscrub.sh
@@ -0,0 +1,27 @@
+sudo apt-get -y purge ceph
+sudo apt-get -y purge ceph-dbg
+sudo apt-get -y purge ceph-mds
+sudo apt-get -y purge ceph-mds-dbg
+sudo apt-get -y purge ceph-fuse
+sudo apt-get -y purge ceph-fuse-dbg
+sudo apt-get -y purge ceph-common
+sudo apt-get -y purge ceph-common-dbg
+sudo apt-get -y purge ceph-fs-common
+sudo apt-get -y purge ceph-fs-common-dbg
+sudo apt-get -y purge ceph-resource-agents
+sudo apt-get -y purge librados2
+sudo apt-get -y purge librados2-dbg
+sudo apt-get -y purge librados-dev
+sudo apt-get -y purge librbd1
+sudo apt-get -y purge librbd1-dbg
+sudo apt-get -y purge librbd-dev
+sudo apt-get -y purge libcephfs1
+sudo apt-get -y purge libcephfs1-dbg
+sudo apt-get -y purge libcephfs-dev
+sudo apt-get -y purge radosgw
+sudo apt-get -y purge radosgw-dbg
+sudo apt-get -y purge rest-bench
+sudo apt-get -y purge rest-bench-dbg
+sudo apt-get -y purge obsync
+sudo apt-get -y purge python-ceph
+
diff --git a/qa/qa_scripts/rbd_cli_tests.pl b/qa/qa_scripts/rbd_cli_tests.pl
new file mode 100755
index 00000000000..b95c3240601
--- /dev/null
+++ b/qa/qa_scripts/rbd_cli_tests.pl
@@ -0,0 +1,313 @@
+#! /usr/bin/perl
+
+=head1 NAME
+
+rbd_cli_tests.pl - Script to test the RBD CLI commands and report the
+test results
+
+=head1 SYNOPSIS
+
+Use:
+ perl rbd_cli_tests.pl [--pool pool_name][--help]
+
+Examples:
+ perl rbd_cli_tests.pl --pool test_pool
+ or
+ perl rbd_cli_tests.pl --help
+
+=head1 DESCRIPTION
+
+This script intends to test the RBD CLI commands for the scenarios mentioned below
+and reports the test results
+
+Positive cases
+Negative cases
+-- Boundary value testing
+-- Incorrect Parameter values/ Incorrect field values
+-- Insufficient parameters / Extra parameters
+
+=head1 ARGUMENTS
+
+rbd_cli_tests.pl takes the following arguments:
+ --pool
+ (optional) If not specified, rbd pool is used.
+ --help
+ (optional) Displays the usage message.
+
+=cut
+
+use Cwd;
+use RbdLib qw(perform_action create_image resize_image rename_image copy_image list_image info_image export_image import_image remove_image create_snapshots rollback_snapshots purge_snapshots list_snapshots remove_snapshot rbd_map rbd_unmap rbd_showmapped display_result _clean_up _create_rados_pool display_ceph_os_info $RADOS_MKPOOL $RADOS_RMPOOL $RBD_CREATE $RBD_RESIZE $RBD_INFO $RBD_REMOVE $RBD_RENAME $RBD_MV $RBD_LS $RBD_LIST $RBD_CLONE $RBD_EXPORT $RBD_IMPORT $RBD_CP $RBD_COPY $SNAP_CREATE $SNAP_LS $SNAP_LIST $SNAP_ROLLBACK $SNAP_PURGE $SNAP_REMOVE $POOL_RM_SUCCESS $POOL_MK_SUCCESS $RBD_EXISTS_ERR $RBD_WATCH $RBD_MAP $RBD_UNMAP $RBD_SHOWMAPPED get_command_output debug_msg );
+
+use Pod::Usage();
+use Getopt::Long();
+
+use strict;
+my ( $help, $pool );
+
+Getopt::Long::GetOptions(
+ 'pool=s' => \$pool,
+ 'help' => \$help
+);
+
+Pod::Usage::pod2usage( -verbose => 1 ) if ($help);
+
+our $pool_name = "rbd";
+$pool_name = $pool if ($pool);
+
+RbdLib::banner ("Starting Test Execution");
+
+#===========Variables used in the script========
+
+our $img_name = "test_img";
+our $snap_name = "snap1";
+our $snap_name2 = "snap2";
+our $snap_name3 = "snap3";
+our $snap_name4 = "snap4";
+our $new_rbd_img = "new_rbd_img";
+our $non_existing_img = "rbdimage";
+our $cp_new = "new";
+our $exp_file = "rbd_test_file1";
+our $exp_file1 = "rbd_test_file2";
+our $exp_file2 = "rbd_test_file3";
+our $rbd_imp_file = "test_file";
+our $rbd_imp_image = "new_imp_img";
+our $content = "This is a test file";
+our $rbd_snap_new = "new";
+our $neg_img_name = "neg_img";
+our $new_img_name = "new_img";
+our $max_img_name = "max_img";
+our $img_name1 = "test_img1";
+our $rbd_imp_test = "new_test_file";
+our $non_pool_name = "no_pool";
+our $no_snap = "no_snap";
+our $img_name_mv = "new_img_mv";
+our $test_log = "logfile.txt";
+our $success = "test_completed.txt";
+our $fail = "log.txt";
+our $exec_cmd;
+our $PASS_FLAG;
+our $MSG;
+our $pool_name;
+
+print "rbd $RBD_CREATE \n";
+# Tests for create image
+sub create_image {
+ perform_action ( $RBD_CREATE, "$img_name,pool $pool_name,size 1024", 0 );
+
+ perform_action( $RBD_CREATE, "$img_name_mv,pool $pool_name,size 1024", 0 );
+ perform_action( $RBD_CREATE, "$img_name1,pool $pool_name,size 0,order 22",
+ 3 );
+ perform_action( $RBD_CREATE, "$img_name1,pool $pool_name,size 0", 3 );
+ perform_action( $RBD_CREATE, "$neg_img_name,pool $pool_name,size -1", 3 );
+ perform_action( $RBD_CREATE, "$img_name1 pool $pool_name", 3 );
+ perform_action( $RBD_CREATE, "--size 1024", 3 );
+ perform_action( $RBD_CREATE,
+ "$max_img_name,pool $pool_name,size 1024000000000", 0 );
+ perform_action( $RBD_CREATE, "$img_name1,pool $pool_name,size 2048,order",
+ 2 );
+ perform_action( $RBD_CREATE, "$img_name1,pool $pool_name,size,order 22",
+ 2 );
+ perform_action( $RBD_CREATE,
+ "$new_img_name,pool $pool_name,size 1024,new-format", 0 );
+
+}
+
+#Tests to create snapshot
+sub create_snapshots {
+ perform_action( $SNAP_CREATE, "--snap $snap_name $pool_name\/$img_name",
+ 0 );
+ perform_action( $SNAP_CREATE, "--snap $snap_name $pool_name\/$img_name",
+ 1 );
+ perform_action( $SNAP_CREATE, "$snap_name", 2 );
+
+ perform_action($SNAP_CREATE,"--snap $snap_name2 $pool_name\/$img_name",0);
+ perform_action( $SNAP_CREATE, "--snap $snap_name3 $pool_name\/$img_name",
+ 0 );
+ perform_action( $SNAP_CREATE, "--snap $snap_name4 $pool_name\/$img_name",
+ 0 );
+}
+
+#Tests to rollback snapshot
+sub rollback_snapshot {
+ perform_action( $SNAP_ROLLBACK, "--snap $snap_name2 $pool_name\/$img_name",
+ 0 );
+ perform_action( $SNAP_ROLLBACK,
+ "--snap $rbd_snap_new $pool_name\/$img_name", 2 );
+ perform_action( $SNAP_ROLLBACK,
+ "--snap $snap_name $pool_name\/$new_rbd_img", 2 );
+}
+
+#Tests to purge snapshots
+sub purge_snapshots {
+ perform_action( $SNAP_PURGE, "$pool_name\/$img_name", 0 );
+ perform_action( $SNAP_PURGE, "$pool_name\/$new_rbd_img", 2 );
+}
+
+#Tests to list snapshots for an image
+sub list_snapshots {
+ perform_action( $SNAP_LIST, "$pool_name\/$non_existing_img", 2 );
+}
+
+# Tests for remove snapshots
+sub remove_snapshot {
+ perform_action( $SNAP_REMOVE, "$pool_name\/$img_name\@$snap_name", 0 );
+ perform_action( $SNAP_REMOVE, "$non_pool_name\/$img_name\@$snap_name3", 2 );
+ perform_action( $SNAP_REMOVE, "$pool_name\/$img_name\@$snap_name2", 0 );
+ perform_action( $SNAP_REMOVE, "$pool_name\/$non_existing_img", 2 );
+ perform_action( $SNAP_REMOVE, " ", 2 );
+}
+
+# Tests for resize image
+sub resize_image {
+ perform_action( $RBD_RESIZE, "$img_name,size 1024,pool $pool_name", 0 );
+ perform_action( $RBD_RESIZE, "$non_existing_img,size 1024,pool $pool_name",
+ 2 );
+}
+
+# Tests for list rbd image
+sub list_image {
+ perform_action( $RBD_LIST, "$non_pool_name", 2 );
+}
+
+# Tests to copy rbd image
+sub copy_image {
+ perform_action( $RBD_CP, "$pool_name\/$img_name $pool_name\/$cp_new", 0 );
+ perform_action( $RBD_CP, "$pool_name\/$non_existing_img", 2 );
+}
+
+#Tests for rbd info
+sub info_image {
+ perform_action( $RBD_INFO, "$pool_name\/$img_name", 0 );
+ perform_action( $RBD_INFO, "--snap $snap_name $pool_name\/$img_name_mv",
+ 2 );
+ perform_action( $RBD_INFO, "--snap $no_snap $pool_name\/$img_name", 2 );
+ perform_action( $RBD_INFO, "$pool_name\/$non_existing_img", 2 );
+}
+
+#Tests for rename image
+sub rename_image {
+ perform_action( $RBD_RENAME,
+ "$pool_name\/$img_name_mv $pool_name\/$new_rbd_img", 0 );
+ perform_action( $RBD_MV,
+ "$pool_name\/$new_rbd_img $pool_name\/$img_name_mv", 0 );
+}
+
+# Tests for remove image
+sub remove_image {
+ perform_action( $RBD_REMOVE,"$pool_name\/$img_name",0);
+ perform_action( $RBD_REMOVE, "$pool_name\/$new_rbd_img", 2 );
+ perform_action( $RBD_REMOVE, "--pool $pool_name $rbd_imp_image", 0 );
+ perform_action( $RBD_REMOVE, "-p $pool_name $cp_new", 0 );
+ perform_action( $RBD_REMOVE, " ", 2 );
+}
+
+# Tests for export rbd image
+sub export_image {
+ perform_action( $RBD_EXPORT, "$pool_name\/$img_name $exp_file", 0 );
+ perform_action( $RBD_EXPORT, "$pool_name\/$img_name .", 2 );
+ perform_action( $RBD_EXPORT, "$pool_name\/$img_name", 2 );
+ perform_action( $RBD_EXPORT,
+ "--snap $snap_name $pool_name\/$img_name $exp_file1", 0 );
+ perform_action( $RBD_EXPORT,
+ "--snap $no_snap $pool_name\/$img_name $exp_file1", 2 );
+ perform_action( $RBD_EXPORT,
+ "--snap $snap_name $pool_name\/$non_existing_img $exp_file2", 2 );
+}
+
+#Tests for import file to rbd image
+sub import_image {
+ my $i = create_test_file( $rbd_imp_file, $content );
+ if ( $i == 0 ) {
+ perform_action( $RBD_IMPORT, "$rbd_imp_file $rbd_imp_image", 0 );
+ }
+ create_test_file( "$rbd_imp_test", 0 );
+ perform_action( $RBD_IMPORT, "$rbd_imp_test $pool_name\/$rbd_imp_image",
+ 2 );
+ perform_action( $RBD_IMPORT, "$exp_file $pool_name\/$rbd_imp_image", 2 );
+}
+
+#To map rbd image to device
+sub rbd_map {
+
+ # Execute "modprobe rbd"
+ my $cmd = get_command_output("sudo modprobe rbd");
+ if ( !$cmd ) {
+ perform_action( $RBD_MAP, "$pool_name\/$img_name", 0 );
+ rbd_showmapped();
+ perform_action( $RBD_MAP, "$pool_name\/$non_existing_img", 2 );
+ }
+}
+
+# To list rbd map
+sub rbd_showmapped {
+ perform_action( $RBD_SHOWMAPPED, "", 0 );
+}
+
+# To unmap rbd device
+sub rbd_unmap {
+ perform_action( $RBD_UNMAP, "/dev/rbd0", 0 );
+ sleep(10);
+ perform_action( $RBD_UNMAP, "/dev/rbd10", 2 );
+}
+
+# To create a test file and write to it
+sub create_test_file {
+ my ( $test_arg, $content ) = @_;
+ my $command = "touch $test_arg";
+ my $cmd = get_command_output($command);
+ if ( ( !$cmd ) && ($content) ) {
+ $command = "echo $content > $test_arg";
+ $cmd = get_command_output($command);
+ if ( !$cmd ) {
+ my $cmd = get_command_output("ls -l $test_arg");
+ }
+ else {
+ return 1;
+ }
+ }
+ else {
+ return 1;
+ }
+ return 0;
+}
+
+sub _create_rados_pool {
+ $exec_cmd = get_command_output("$RADOS_RMPOOL $pool_name");
+ if ( ( $exec_cmd =~ /$POOL_RM_SUCCESS/ )
+ || ( $exec_cmd =~ /does not exist/ ) )
+ {
+ debug_msg("Pool $pool_name deleted");
+ }
+ $exec_cmd = get_command_output("$RADOS_MKPOOL $pool_name");
+ if ( ( $exec_cmd =~ /$POOL_MK_SUCCESS/ )
+ || ( $exec_cmd =~ /$RBD_EXISTS_ERR/ ) )
+ {
+ debug_msg("Pool $pool_name created");
+ }
+}
+
+#main() starts here
+
+display_ceph_os_info();
+_create_rados_pool();
+create_image();
+list_image();
+rename_image();
+resize_image();
+info_image();
+create_snapshots();
+export_image();
+import_image();
+list_snapshots();
+rollback_snapshot();
+remove_snapshot();
+purge_snapshots();
+rbd_map();
+rbd_unmap();
+copy_image();
+remove_image();
+display_result();
+_clean_up();
+
+