]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
qa: krbd_blkroset.t: update for read-only changes
authorIlya Dryomov <idryomov@gmail.com>
Tue, 19 Nov 2019 15:05:37 +0000 (16:05 +0100)
committerNathan Cutler <ncutler@suse.com>
Fri, 14 Feb 2020 11:04:51 +0000 (12:04 +0100)
If an image is mapped read-only, setting its partition(s) to read-write
via BLKROSET is no longer allowed.

Add read-only OSD caps test cases.

Fixes: https://tracker.ceph.com/issues/42915
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
(cherry picked from commit 366a369c8d2dedf356d6848ccdc25a7693502f20)

qa/rbd/krbd_blkroset.t

index 5343584229f43a6f9b25c8341a5b67d4fb2f95b3..cbbd06ce2aef5040fbd5427b8c18049be17b89bb 100644 (file)
@@ -2,8 +2,11 @@
 Setup
 =====
 
+  $ RO_KEY=$(ceph auth get-or-create-key client.ro mon 'profile rbd' mgr 'profile rbd' osd 'profile rbd-read-only')
   $ rbd create --size 10 img
   $ rbd snap create img@snap
+  $ rbd snap protect img@snap
+  $ rbd clone img@snap cloneimg
   $ rbd create --size 1 imgpart
   $ DEV=$(sudo rbd map imgpart)
   $ cat <<EOF | sudo sfdisk $DEV >/dev/null 2>&1
@@ -144,10 +147,16 @@ R/O, unpartitioned:
   .*BLKROSET: Permission denied (re)
   [1]
   $ sudo blockdev --setrw $DEV
+  .*BLKROSET: Read-only file system (re)
+  [1]
   $ blockdev --getro $DEV
-  0
+  1
   $ dd if=/dev/urandom of=$DEV bs=1k seek=1 count=1 status=none
+  dd: error writing '/dev/rbd?': Operation not permitted (glob)
+  [1]
   $ blkdiscard $DEV
+  blkdiscard: /dev/rbd?: BLKDISCARD ioctl failed: Operation not permitted (glob)
+  [1]
   $ sudo rbd unmap $DEV
 
 R/O, partitioned:
@@ -174,18 +183,30 @@ R/O, partitioned:
   .*BLKROSET: Permission denied (re)
   [1]
   $ sudo blockdev --setrw ${DEV}p1
+  .*BLKROSET: Read-only file system (re)
+  [1]
   $ blockdev --setrw ${DEV}p2
   .*BLKROSET: Permission denied (re)
   [1]
   $ sudo blockdev --setrw ${DEV}p2
+  .*BLKROSET: Read-only file system (re)
+  [1]
   $ blockdev --getro ${DEV}p1
-  0
+  1
   $ blockdev --getro ${DEV}p2
-  0
+  1
   $ dd if=/dev/urandom of=${DEV}p1 bs=1k seek=1 count=1 status=none
+  dd: error writing '/dev/rbd?p1': Operation not permitted (glob)
+  [1]
   $ blkdiscard ${DEV}p1
+  blkdiscard: /dev/rbd?p1: BLKDISCARD ioctl failed: Operation not permitted (glob)
+  [1]
   $ dd if=/dev/urandom of=${DEV}p2 bs=1k seek=1 count=1 status=none
+  dd: error writing '/dev/rbd?p2': Operation not permitted (glob)
+  [1]
   $ blkdiscard ${DEV}p2
+  blkdiscard: /dev/rbd?p2: BLKDISCARD ioctl failed: Operation not permitted (glob)
+  [1]
   $ sudo rbd unmap $DEV
 
 
@@ -270,6 +291,45 @@ Partitioned:
   $ sudo rbd unmap $DEV
 
 
+read-only OSD caps
+==================
+
+R/W:
+
+  $ DEV=$(sudo rbd map --id ro --key $(echo $RO_KEY) img)
+  rbd: sysfs write failed
+  rbd: map failed: (1) Operation not permitted
+  [1]
+
+R/O:
+
+  $ DEV=$(sudo rbd map --id ro --key $(echo $RO_KEY) --read-only img)
+  $ blockdev --getro $DEV
+  1
+  $ sudo rbd unmap $DEV
+
+Snapshot:
+
+  $ DEV=$(sudo rbd map --id ro --key $(echo $RO_KEY) img@snap)
+  $ blockdev --getro $DEV
+  1
+  $ sudo rbd unmap $DEV
+
+R/W, clone:
+
+  $ DEV=$(sudo rbd map --id ro --key $(echo $RO_KEY) cloneimg)
+  rbd: sysfs write failed
+  rbd: map failed: (1) Operation not permitted
+  [1]
+
+R/O, clone:
+
+  $ DEV=$(sudo rbd map --id ro --key $(echo $RO_KEY) --read-only cloneimg)
+  $ blockdev --getro $DEV
+  1
+  $ sudo rbd unmap $DEV
+
+
 rw -> ro with open_count > 0
 ============================
 
@@ -288,6 +348,8 @@ Teardown
 
   $ rbd snap purge imgpart >/dev/null 2>&1
   $ rbd rm imgpart >/dev/null 2>&1
+  $ rbd rm cloneimg >/dev/null 2>&1
+  $ rbd snap unprotect img@snap
   $ rbd snap purge img >/dev/null 2>&1
   $ rbd rm img >/dev/null 2>&1