]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
tests: verify ceph-disk activate-lockbox
authorLoic Dachary <ldachary@redhat.com>
Fri, 26 Feb 2016 12:00:17 +0000 (19:00 +0700)
committerLoic Dachary <ldachary@redhat.com>
Fri, 4 Mar 2016 02:13:35 +0000 (09:13 +0700)
Signed-off-by: Loic Dachary <loic@dachary.org>
qa/workunits/ceph-disk/ceph-disk-test.py
qa/workunits/ceph-disk/ceph-disk.sh

index a0b5354f887352284b3a54434036f1e7d28b9c91..08f697be8bb86489459cdacfafcfef3b1c5be670 100644 (file)
@@ -123,6 +123,15 @@ class CephDisk:
     def unload_scsi_debug(self):
         self.sh("rmmod scsi_debug || true")
 
+    def get_lockbox(self):
+        disks = json.loads(self.sh("ceph-disk list --format json"))
+        for disk in disks:
+            if 'partitions' in disk:
+                for partition in disk['partitions']:
+                    if partition.get('type') == 'lockbox':
+                        return partition
+        raise Exception("no lockbox found " + str(disks))
+
     def get_osd_partition(self, uuid):
         disks = json.loads(self.sh("ceph-disk list --format json"))
         for disk in disks:
@@ -292,8 +301,10 @@ class TestCephDisk(object):
         c = CephDisk()
         osd_uuid = self.activate_dmcrypt('ceph-disk')
         data_partition = c.get_osd_partition(osd_uuid)
+        lockbox_partition = c.get_lockbox()
         c.sh("ceph-disk --verbose deactivate " + data_partition['path'])
         c.wait_for_osd_down(osd_uuid)
+        c.sh("ceph-disk --verbose trigger --sync " + lockbox_partition['path'])
         c.sh("ceph-disk --verbose activate-journal " + data_partition['journal_dev'] +
              " --reactivate" + " --dmcrypt")
         c.wait_for_osd_up(osd_uuid)
@@ -304,16 +315,39 @@ class TestCephDisk(object):
         c = CephDisk()
         c.conf['global']['osd dmcrypt type'] = 'plain'
         c.save_conf()
-        self.activate_dmcrypt('ceph-disk-no-lockbox')
+        osd_uuid = self.activate_dmcrypt('ceph-disk-no-lockbox')
+        c.destroy_osd(osd_uuid)
         c.save_conf()
 
     def test_activate_dmcrypt_luks_no_lockbox(self):
         c = CephDisk()
-        self.activate_dmcrypt('ceph-disk-no-lockbox')
+        osd_uuid = self.activate_dmcrypt('ceph-disk-no-lockbox')
+        c.destroy_osd(osd_uuid)
 
     def test_activate_dmcrypt_luks_with_lockbox(self):
         c = CephDisk()
-        self.activate_dmcrypt('ceph-disk')
+        osd_uuid = self.activate_dmcrypt('ceph-disk')
+        c.destroy_osd(osd_uuid)
+
+    def test_activate_lockbox(self):
+        c = CephDisk()
+        osd_uuid = self.activate_dmcrypt('ceph-disk')
+        lockbox = c.get_lockbox()
+        assert lockbox['state'] == 'active'
+        c.sh("umount " + lockbox['path'])
+        lockbox = c.get_lockbox()
+        assert lockbox['state'] == 'prepared'
+        c.sh("ceph-disk --verbose trigger " + lockbox['path'])
+        success = False
+        for delay in (1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024):
+            lockbox = c.get_lockbox()
+            if lockbox['state'] == 'active':
+                success = True
+                break
+            time.sleep(delay)
+        if not success:
+            raise Exception('timeout waiting for lockbox ' + lockbox['path'])
+        c.destroy_osd(osd_uuid)
 
     def activate_dmcrypt(self, ceph_disk):
         c = CephDisk()
@@ -328,7 +362,7 @@ class TestCephDisk(object):
              " " + disk)
         c.wait_for_osd_up(osd_uuid)
         c.check_osd_status(osd_uuid, 'journal')
-        c.destroy_osd(osd_uuid)
+        return osd_uuid
 
     def test_activate_no_journal(self):
         c = CephDisk()
index ec17b967c9ffac990b28482d3a36b737b756c4ef..cf36324fb45229abece70e89a951f7f09a59869e 100755 (executable)
@@ -22,14 +22,14 @@ sudo ceph osd crush rm osd.1 || true
 
 perl -pi -e 's|pid file.*|pid file = /var/run/ceph/\$cluster-\$name.pid|' /etc/ceph/ceph.conf
 
-PATH=.:$(dirname $0)/..:$PATH
+PATH=$(dirname $0):$(dirname $0)/..:$PATH
 
 if ! which py.test > /dev/null; then
     echo "py.test not installed"
     exit 1
 fi
 
-sudo env PATH=.:$(dirname $0)/..:$PATH py.test -s -v $(dirname $0)/ceph-disk-test.py
+sudo env PATH=$(dirname $0):$(dirname $0)/..:$PATH py.test -s -v $(dirname $0)/ceph-disk-test.py
 result=$?
 
 # own whatever was created as a side effect of the py.test run