Nir Soffer has uploaded a new change for review.

Change subject: guest-lvs: Add lvm bootstrap tests
......................................................................

guest-lvs: Add lvm bootstrap tests

Add fake_env for creating lvm tests using loop devices instead of shared
storage, and start lvm.bootstrap tests.

The first test is verifying that unused ovirt lvs are deactivated.

Change-Id: I314544930aa28cf1d929a23842a7e011d461706d
Bug-Url: https://bugzilla.redhat.com/1374545
Signed-off-by: Nir Soffer <nsof...@redhat.com>
---
M tests/storage_lvm_test.py
1 file changed, 86 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/67/64367/1

diff --git a/tests/storage_lvm_test.py b/tests/storage_lvm_test.py
index 6792266..67ed799 100644
--- a/tests/storage_lvm_test.py
+++ b/tests/storage_lvm_test.py
@@ -19,9 +19,25 @@
 # Refer to the README and COPYING files for full details of the license
 #
 
-from testlib import VdsmTestCase as TestCaseBase
+import collections
+import os
+import logging
 
-import storage.lvm as lvm
+from contextlib import contextmanager
+
+from vdsm import commands
+from vdsm import cmdutils
+
+from storage import blockSD
+from storage import lvm
+
+import loop
+from monkeypatch import MonkeyPatchScope
+from testlib import VdsmTestCase as TestCaseBase
+from testlib import namedTemporaryDir
+from testValidation import ValidateRunningAsRoot
+
+log = logging.getLogger("test")
 
 
 class LvmTests(TestCaseBase):
@@ -37,3 +53,71 @@
                           "\\\\x22\\\\x28|\', \'r|.*|\' ]"
                           )
         self.assertEqual(expectedFilter, filter)
+
+
+class TestBootstrap(TestCaseBase):
+
+    @ValidateRunningAsRoot
+    def test_deactivate_unused_ovirt_lvs(self):
+        with fake_env() as env:
+            log.debug("Creating ovirt lvs")
+            run("pvcreate", "-ff", env.device)
+            run("vgcreate", "ovirt-vg", env.device)
+            run("vgchange", "--addtag", blockSD.STORAGE_DOMAIN_TAG)
+            run("lvcreate", "-n", "ovirt-lv-1", "-L", "128m", "ovirt-vg")
+            run("lvcreate", "-n", "ovirt-lv-2", "-L", "128m", "ovirt-vg")
+            try:
+                lvm.bootstrap()
+                # ovirt-lv must be inactive
+                self.check_no_active_lvs("ovirt-vg")
+            finally:
+                run("lvchange", "-an", "ovirt-vg")
+
+    # TODO: do not modify vgs without STORAGE_DOMAIN_TAG
+
+    def check_no_active_lvs(self, vgname):
+        out = run("lvs", "--noheadings", "-o", "name",
+                  "--select", "lv_active=active", vgname)[0]
+        lvs = [line.strip() for line in out.splitlines()]
+        self.assertEqual(lvs, [])
+
+
+Env = collections.namedtuple("Env", "tmpdir, device")
+
+
+@contextmanager
+def fake_env():
+    """
+    Create test environment for lvm tests.
+    """
+    with namedTemporaryDir() as tmpdir:
+        backing_file = os.path.join(tmpdir, "backing_file")
+        truncate(backing_file, 1024**3)
+        with loop.Device(backing_file) as device:
+            log.debug("Using loop device %s", device.path)
+            with MonkeyPatchScope([
+                # Created during bootstrap.
+                (lvm, "VDSM_LVM_SYSTEM_DIR", os.path.join(tmpdir, "lvm")),
+                # Saved each time conf is changed.
+                (lvm, "VDSM_LVM_CONF", os.path.join(tmpdir, "lvm", 
"lvm.conf")),
+                # Allow detection of test device, otherwise only
+                # /dev/mapper/guid devices are detected.
+                (lvm, "USER_DEV_LIST", [device.path]),
+            ]):
+                try:
+                    yield Env(tmpdir, device.path)
+                finally:
+                    # Update lvmetad to keep the environment sane
+                    run("pvscan", "--cache")
+
+
+def run(*cmd):
+    rc, out, err = commands.execCmd(cmd, raw=True)
+    if rc != 0:
+        raise cmdutils.Error(cmd, rc, out, err)
+    return out, err
+
+
+def truncate(path, size):
+    with open(path, "w") as f:
+        f.truncate(size)


-- 
To view, visit https://gerrit.ovirt.org/64367
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I314544930aa28cf1d929a23842a7e011d461706d
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Nir Soffer <nsof...@redhat.com>
_______________________________________________
vdsm-patches mailing list -- vdsm-patches@lists.fedorahosted.org
To unsubscribe send an email to vdsm-patches-le...@lists.fedorahosted.org

Reply via email to