summaryrefslogtreecommitdiffstats
path: root/tests/test_storage.py
diff options
context:
space:
mode:
authorShubhendu Tripathi <shtripat@redhat.com>2014-04-01 15:12:50 +0530
committerBala.FA <barumuga@redhat.com>2014-04-28 16:20:46 +0530
commiteaf3d4136d6dd1ef00a7cef23f9338b03783dd43 (patch)
tree2b6b2933bda4ac5fd90505477a1336a45c1bc705 /tests/test_storage.py
parent2873ff21e4f99b35ab88595a96c0ee45c83d26c3 (diff)
gluster-nagios-common: Added storage utils module
Introduced storage device utils module Change-Id: I738b46b0750deaf91b896a8edab07b5f1a692ddb Signed-off-by: Shubhendu Tripathi <shtripat@redhat.com> Reviewed-on: https://code.engineering.redhat.com/gerrit/22254 Reviewed-by: Sahina Bose <sabose@redhat.com> Tested-by: Sahina Bose <sabose@redhat.com>
Diffstat (limited to 'tests/test_storage.py')
-rw-r--r--tests/test_storage.py391
1 files changed, 391 insertions, 0 deletions
diff --git a/tests/test_storage.py b/tests/test_storage.py
new file mode 100644
index 0000000..3a15cf1
--- /dev/null
+++ b/tests/test_storage.py
@@ -0,0 +1,391 @@
+#
+# Copyright 2014 Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# Refer to the README and COPYING files for full details of the license
+#
+
+import mock
+
+from testrunner import GlusterNagiosTestCase as TestCaseBase
+from glusternagios import storage
+import glusternagios
+
+
+class TestStorageUtils(TestCaseBase):
+ @mock.patch('glusternagios.storage.utils')
+ def testGetLvs(self, mock_utils):
+ tmp_str = ["LVM2_LV_UUID=zjuuHG-HajL-PXxm-fjlL-5i00-EUnV-Wd2qL3^"
+ "LVM2_LV_NAME=lv_root^"
+ "LVM2_LV_PATH=/dev/vg_shubhnd/lv_root^"
+ "LVM2_LV_ATTR=-wi-ao---^"
+ "LVM2_LV_MAJOR=-1^"
+ "LVM2_LV_MINOR=-1^"
+ "LVM2_LV_READ_AHEAD=auto^"
+ "LVM2_LV_KERNEL_MAJOR=253^"
+ "LVM2_LV_KERNEL_MINOR=0^"
+ "LVM2_LV_KERNEL_READ_AHEAD=0.12^"
+ "LVM2_LV_SIZE=46728.00^"
+ "LVM2_LV_METADATA_SIZE=^"
+ "LVM2_SEG_COUNT=1^"
+ "LVM2_ORIGIN=^"
+ "LVM2_ORIGIN_SIZE=0^"
+ "LVM2_DATA_PERCENT=^"
+ "LVM2_SNAP_PERCENT=^"
+ "LVM2_METADATA_PERCENT=^"
+ "LVM2_COPY_PERCENT=^"
+ "LVM2_SYNC_PERCENT=^"
+ "LVM2_MOVE_PV=^"
+ "LVM2_CONVERT_LV=^"
+ "LVM2_MIRROR_LOG=^"
+ "LVM2_DATA_LV=^"
+ "LVM2_METADATA_LV=^"
+ "LVM2_POOL_LV=^"
+ "LVM2_LV_TAGS=^"
+ "LVM2_LV_TIME=2014-03-14 04:27:56 +0530^"
+ "LVM2_LV_HOST=shubh-nd.redhat.com^"
+ "LVM2_MODULES=^"
+ "LVM2_VG_NAME=vg_shubhnd",
+ "LVM2_LV_UUID=klTthp-BXN8-9loo-UUo9-Y2lB-6azb-X9fFdH^"
+ "LVM2_LV_NAME=lv_swap^"
+ "LVM2_LV_PATH=/dev/vg_shubhnd/lv_swap^"
+ "LVM2_LV_ATTR=-wi-ao---^"
+ "LVM2_LV_MAJOR=-1^"
+ "LVM2_LV_MINOR=-1^"
+ "LVM2_LV_READ_AHEAD=auto^"
+ "LVM2_LV_KERNEL_MAJOR=253^"
+ "LVM2_LV_KERNEL_MINOR=1^"
+ "LVM2_LV_KERNEL_READ_AHEAD=0.12^"
+ "LVM2_LV_SIZE=3968.00^"
+ "LVM2_LV_METADATA_SIZE=^"
+ "LVM2_SEG_COUNT=1^"
+ "LVM2_ORIGIN=^"
+ "LVM2_ORIGIN_SIZE=0^"
+ "LVM2_DATA_PERCENT=^"
+ "LVM2_SNAP_PERCENT=^"
+ "LVM2_METADATA_PERCENT=^"
+ "LVM2_COPY_PERCENT=^"
+ "LVM2_SYNC_PERCENT=^"
+ "LVM2_MOVE_PV=^"
+ "LVM2_CONVERT_LV=^"
+ "LVM2_MIRROR_LOG=^"
+ "LVM2_DATA_LV=^"
+ "LVM2_METADATA_LV=^"
+ "LVM2_POOL_LV=^"
+ "LVM2_LV_TAGS=^"
+ "LVM2_LV_TIME=2014-03-14 04:28:01 +0530^"
+ "LVM2_LV_HOST=shubh-nd.redhat.com^"
+ "LVM2_MODULES=^"
+ "LVM2_VG_NAME=vg_shubhnd"]
+ mock_utils.execCmd.return_value = (0, tmp_str, "")
+ ret_val = glusternagios.storage.getLvs()
+ value_to_verify = {'/dev/vg_shubhnd/lv_root':
+ {'LVM2_SYNC_PERCENT': '',
+ 'LVM2_LV_METADATA_SIZE': '',
+ 'LVM2_LV_ATTR': '-wi-ao---',
+ 'LVM2_MIRROR_LOG': '',
+ 'LVM2_LV_KERNEL_MINOR': '0',
+ 'LVM2_LV_SIZE': '46728.00',
+ 'LVM2_LV_MAJOR': '-1',
+ 'LVM2_ORIGIN_SIZE': '0',
+ 'LVM2_LV_TIME': '2014-03-14 04:27:56 +0530',
+ 'LVM2_METADATA_PERCENT': '',
+ 'LVM2_POOL_LV': '',
+ 'LVM2_COPY_PERCENT': '',
+ 'LVM2_CONVERT_LV': '',
+ 'LVM2_LV_KERNEL_READ_AHEAD': '0.12',
+ 'LVM2_LV_NAME': 'lv_root',
+ 'LVM2_LV_HOST': 'shubh-nd.redhat.com',
+ 'LVM2_LV_UUID':
+ 'zjuuHG-HajL-PXxm-fjlL-5i00-EUnV-Wd2qL3',
+ 'LVM2_LV_MINOR': '-1',
+ 'LVM2_DATA_PERCENT': '',
+ 'LVM2_LV_KERNEL_MAJOR': '253',
+ 'LVM2_LV_TAGS': '',
+ 'LVM2_MODULES': '',
+ 'LVM2_VG_NAME': 'vg_shubhnd',
+ 'LVM2_METADATA_LV': '',
+ 'LVM2_LV_PATH': '/dev/vg_shubhnd/lv_root',
+ 'LVM2_DATA_LV': '',
+ 'LVM2_LV_READ_AHEAD': 'auto',
+ 'LVM2_SNAP_PERCENT': '',
+ 'LVM2_MOVE_PV': '',
+ 'LVM2_ORIGIN': '',
+ 'LVM2_SEG_COUNT': '1'},
+ '/dev/vg_shubhnd/lv_swap':
+ {'LVM2_SYNC_PERCENT': '',
+ 'LVM2_LV_METADATA_SIZE': '',
+ 'LVM2_LV_ATTR': '-wi-ao---',
+ 'LVM2_MIRROR_LOG': '',
+ 'LVM2_LV_KERNEL_MINOR': '1',
+ 'LVM2_LV_SIZE': '3968.00',
+ 'LVM2_LV_MAJOR': '-1',
+ 'LVM2_ORIGIN_SIZE': '0',
+ 'LVM2_LV_TIME': '2014-03-14 04:28:01 +0530',
+ 'LVM2_METADATA_PERCENT': '',
+ 'LVM2_POOL_LV': '',
+ 'LVM2_COPY_PERCENT': '',
+ 'LVM2_CONVERT_LV': '',
+ 'LVM2_LV_KERNEL_READ_AHEAD': '0.12',
+ 'LVM2_LV_NAME': 'lv_swap',
+ 'LVM2_LV_HOST': 'shubh-nd.redhat.com',
+ 'LVM2_LV_UUID':
+ 'klTthp-BXN8-9loo-UUo9-Y2lB-6azb-X9fFdH',
+ 'LVM2_LV_MINOR': '-1',
+ 'LVM2_DATA_PERCENT': '',
+ 'LVM2_LV_KERNEL_MAJOR': '253',
+ 'LVM2_LV_TAGS': '',
+ 'LVM2_MODULES': '',
+ 'LVM2_VG_NAME': 'vg_shubhnd',
+ 'LVM2_METADATA_LV': '',
+ 'LVM2_LV_PATH': '/dev/vg_shubhnd/lv_swap',
+ 'LVM2_DATA_LV': '',
+ 'LVM2_LV_READ_AHEAD': 'auto',
+ 'LVM2_SNAP_PERCENT': '',
+ 'LVM2_MOVE_PV': '',
+ 'LVM2_ORIGIN': '',
+ 'LVM2_SEG_COUNT': '1'}}
+ self.assertEquals(ret_val, value_to_verify)
+
+ @mock.patch('glusternagios.storage.utils')
+ def testGetVgs(self, mock_utils):
+ tmp_str = ["LVM2_VG_FMT=lvm2^"
+ "LVM2_VG_UUID=sTDsBh-DOc7-JR3y-RPHb-yz4R-aWP7-yZWQ0E^"
+ "LVM2_VG_NAME=vg_shubhnd^"
+ "LVM2_VG_ATTR=wz--n-^"
+ "LVM2_VG_SIZE=50696.00^"
+ "LVM2_VG_FREE=0^"
+ "LVM2_VG_SYSID=^"
+ "LVM2_VG_EXTENT_SIZE=4.00^"
+ "LVM2_VG_EXTENT_COUNT=12674^"
+ "LVM2_VG_FREE_COUNT=0^"
+ "LVM2_MAX_LV=0^"
+ "LVM2_MAX_PV=0^"
+ "LVM2_PV_COUNT=1^"
+ "LVM2_LV_COUNT=2^"
+ "LVM2_SNAP_COUNT=0^"
+ "LVM2_VG_SEQNO=3^"
+ "LVM2_VG_TAGS=^"
+ "LVM2_VG_MDA_COUNT=1^"
+ "LVM2_VG_MDA_USED_COUNT=1^"
+ "LVM2_VG_MDA_FREE=0.50^"
+ "LVM2_VG_MDA_SIZE=1.00^"
+ "LVM2_VG_MDA_COPIES=unmanaged^"
+ "LVM2_LV_PATH=/dev/vg_shubhnd/lv_root",
+ "LVM2_VG_FMT=lvm2^"
+ "LVM2_VG_UUID=sTDsBh-DOc7-JR3y-RPHb-yz4R-aWP7-yZWQ0E^"
+ "LVM2_VG_NAME=vg_shubhnd^"
+ "LVM2_VG_ATTR=wz--n-^"
+ "LVM2_VG_SIZE=50696.00^"
+ "LVM2_VG_FREE=0^"
+ "LVM2_VG_SYSID=^"
+ "LVM2_VG_EXTENT_SIZE=4.00^"
+ "LVM2_VG_EXTENT_COUNT=12674^"
+ "LVM2_VG_FREE_COUNT=0^"
+ "LVM2_MAX_LV=0^"
+ "LVM2_MAX_PV=0^"
+ "LVM2_PV_COUNT=1^"
+ "LVM2_LV_COUNT=2^"
+ "LVM2_SNAP_COUNT=0^"
+ "LVM2_VG_SEQNO=3^"
+ "LVM2_VG_TAGS=^"
+ "LVM2_VG_MDA_COUNT=1^"
+ "LVM2_VG_MDA_USED_COUNT=1^"
+ "LVM2_VG_MDA_FREE=0.50^"
+ "LVM2_VG_MDA_SIZE=1.00^"
+ "LVM2_VG_MDA_COPIES=unmanaged^"
+ "LVM2_LV_PATH=/dev/vg_shubhnd/lv_swap"]
+ mock_utils.execCmd.return_value = (0, tmp_str, "")
+ ret_val = glusternagios.storage.getVgs()
+ value_to_verify = {'vg_shubhnd':
+ {'LVM2_VG_EXTENT_SIZE': '4.00',
+ 'LVM2_VG_MDA_COUNT': '1',
+ 'LVM2_VG_SYSID': '',
+ 'LVM2_VG_ATTR': 'wz--n-',
+ 'LVM2_VG_UUID':
+ 'sTDsBh-DOc7-JR3y-RPHb-yz4R-aWP7-yZWQ0E',
+ 'LVM2_VG_MDA_COPIES': 'unmanaged',
+ 'LVM2_VG_MDA_FREE': '0.50',
+ 'LVM2_VG_TAGS': '',
+ 'LVM2_VG_FMT': 'lvm2',
+ 'LVM2_PV_COUNT': '1',
+ 'LVM2_VG_EXTENT_COUNT': '12674',
+ 'LVM2_VG_MDA_SIZE': '1.00',
+ 'LVM2_SNAP_COUNT': '0',
+ 'LVM2_LV_COUNT': '2',
+ 'LVM2_VG_NAME': 'vg_shubhnd',
+ 'LVM2_VG_MDA_USED_COUNT': '1',
+ 'LVM2_VG_FREE': '0',
+ 'LVM2_VG_SEQNO': '3',
+ 'LVM2_LV_PATH':
+ ['/dev/vg_shubhnd/lv_root',
+ '/dev/vg_shubhnd/lv_swap'],
+ 'LVM2_VG_FREE_COUNT': '0',
+ 'LVM2_MAX_PV': '0',
+ 'LVM2_MAX_LV': '0',
+ 'LVM2_VG_SIZE': '50696.00'}}
+ self.assertEquals(ret_val, value_to_verify)
+
+ @mock.patch('glusternagios.storage.utils')
+ def testGetPvs(self, mock_utils):
+ tmp_str = ["LVM2_PV_FMT=lvm2^"
+ "LVM2_PV_UUID=NF1uv0-eXJM-YJrn-Rc7b-Z2nw-E1Ly-3S24zn^"
+ "LVM2_DEV_SIZE=50699.00^"
+ "LVM2_PV_NAME=/dev/vda2^"
+ "LVM2_PV_MDA_FREE=0.50^"
+ "LVM2_PV_MDA_SIZE=1.00^"
+ "LVM2_PE_START=1.00^"
+ "LVM2_PV_SIZE=50696.00^"
+ "LVM2_PV_FREE=0^"
+ "LVM2_PV_USED=50696.00^"
+ "LVM2_PV_ATTR=a--^"
+ "LVM2_PV_PE_COUNT=12674^"
+ "LVM2_PV_PE_ALLOC_COUNT=12674^"
+ "LVM2_PV_TAGS=^"
+ "LVM2_PV_MDA_COUNT=1^"
+ "LVM2_PV_MDA_USED_COUNT=1^"
+ "LVM2_VG_NAME=vg_shubhnd"]
+ mock_utils.execCmd.return_value = (0, tmp_str, "")
+ ret_val = glusternagios.storage.getPvs()
+ value_to_verify = {'/dev/vda2':
+ {'LVM2_PV_MDA_USED_COUNT': '1',
+ 'LVM2_PV_UUID':
+ 'NF1uv0-eXJM-YJrn-Rc7b-Z2nw-E1Ly-3S24zn',
+ 'LVM2_PE_START': '1.00',
+ 'LVM2_DEV_SIZE': '50699.00',
+ 'LVM2_PV_NAME': '/dev/vda2',
+ 'LVM2_PV_FMT': 'lvm2',
+ 'LVM2_PV_MDA_COUNT': '1',
+ 'LVM2_PV_MDA_FREE': '0.50',
+ 'LVM2_PV_TAGS': '',
+ 'LVM2_PV_FREE': '0',
+ 'LVM2_PV_SIZE': '50696.00',
+ 'LVM2_PV_PE_ALLOC_COUNT': '12674',
+ 'LVM2_PV_MDA_SIZE': '1.00',
+ 'LVM2_VG_NAME': 'vg_shubhnd',
+ 'LVM2_PV_USED': '50696.00',
+ 'LVM2_PV_ATTR': 'a--',
+ 'LVM2_PV_PE_COUNT': '12674'}}
+ self.assertEquals(ret_val, value_to_verify)
+
+ @mock.patch('glusternagios.storage._getMountPoint')
+ @mock.patch('glusternagios.storage._getProcMounts')
+ @mock.patch('glusternagios.storage.glustercli.utils')
+ @mock.patch('glusternagios.storage._getLvDetails')
+ def testGetBricksForDisk(self,
+ mock_get_lv_details,
+ mock_utils,
+ mock_proc_mounts,
+ mock_get_mount_point):
+ mock_get_lv_details.return_value = {'lv_root':
+ {'LVM2_LV_NAME': 'lv_root',
+ 'LVM2_PV_NAME': '/dev/vda2',
+ 'LVM2_VG_NAME': 'vg_shubhnd'},
+ 'lv_swap':
+ {'LVM2_LV_NAME': 'lv_swap',
+ 'LVM2_PV_NAME': '/dev/vda2',
+ 'LVM2_VG_NAME': 'vg_shubhnd'}}
+ tmp_out = ['<?xml version="1.0" encoding="UTF-8" standalone="yes"?>',
+ '<cliOutput>',
+ ' <opRet>0</opRet>',
+ ' <opErrno>0</opErrno>',
+ ' <opErrstr/>',
+ ' <volInfo>',
+ ' <volumes>',
+ ' <volume>',
+ ' <name>vol1</name>',
+ ' <id>9510c150-f471-450c-9c6e-1c489792bfb2</id>',
+ ' <status>1</status>',
+ ' <statusStr>Started</statusStr>',
+ ' <brickCount>1</brickCount>',
+ ' <distCount>1</distCount>',
+ ' <stripeCount>1</stripeCount>',
+ ' <replicaCount>1</replicaCount>',
+ ' <type>0</type>',
+ ' <typeStr>Distribute</typeStr>',
+ ' <transport>0</transport>',
+ ' <bricks>',
+ ' <brick>server-1:/tmp/vol1-a</brick>',
+ ' </bricks>',
+ ' <optCount>0</optCount>',
+ ' <options/>',
+ ' </volume>',
+ ' <count>1</count>',
+ ' </volumes>',
+ ' </volInfo>',
+ '</cliOutput>']
+ mock_utils.execCmd.return_value = (0, tmp_out, "")
+ mock_proc_mounts.return_value = {'devpts': '/dev/pts',
+ '/dev/mapper/vg_shubhnd-lv_root': '/',
+ 'sysfs': '/sys',
+ '/proc/bus/usb': '/proc/bus/usb',
+ 'proc': '/proc'}
+ mock_get_mount_point.return_value = "/"
+ bricks = glusternagios.storage.getBricksForDisk("/dev/vda2")
+ self.assertEquals(bricks, ['server-1:/tmp/vol1-a'])
+
+ @mock.patch('glusternagios.storage._getLvDetails')
+ @mock.patch('glusternagios.storage.glustercli.utils')
+ @mock.patch('glusternagios.storage._getMountPoint')
+ def testGetDisksForBrick(self,
+ mock_get_mount_point,
+ mock_utils,
+ mock_get_lv_details):
+ mock_get_mount_point.return_value = "/"
+ tmp_out = ['<?xml version="1.0" encoding="UTF-8" standalone="yes"?>',
+ '<cliOutput>',
+ ' <opRet>0</opRet>',
+ ' <opErrno>0</opErrno>',
+ ' <opErrstr>(null)</opErrstr>',
+ ' <volStatus>',
+ ' <volumes>',
+ ' <volume>',
+ ' <volName>vol1</volName>',
+ ' <nodeCount>1</nodeCount>',
+ ' <node>',
+ ' <hostname>server-1</hostname>',
+ ' <path>/tmp/vol1-a</path>',
+ ' <status>1</status>',
+ ' <port>49152</port>',
+ ' <pid>8716</pid>',
+ ' <sizeTotal>48228589568</sizeTotal>',
+ ' <sizeFree>45994987520</sizeFree>',
+ ' <device>/dev/mapper/vg_shubhnd-lv_root</device>',
+ ' <blockSize>4096</blockSize>',
+ ' <mntOptions>rw</mntOptions>',
+ ' <fsName>ext4</fsName>',
+ ' </node>',
+ ' </volume>',
+ ' </volumes>',
+ ' </volStatus>',
+ '</cliOutput>']
+ mock_utils.execCmd.return_value = (0, tmp_out, "")
+ mock_get_lv_details.return_value = {'lv_root':
+ {'LVM2_LV_NAME': 'lv_root',
+ 'LVM2_PV_NAME': '/dev/vda2',
+ 'LVM2_VG_NAME': 'vg_shubhnd'},
+ 'lv_swap':
+ {'LVM2_LV_NAME': 'lv_swap',
+ 'LVM2_PV_NAME': '/dev/vda2',
+ 'LVM2_VG_NAME': 'vg_shubhnd'}}
+ disk = glusternagios.storage.getDisksForBrick("server-1:"
+ "/tmp/vol1-a")
+ self.assertEquals(disk, "/dev/vda2")
+
+ disk = glusternagios.storage.getDisksForBrick(
+ "server-1:/tmp/vol1-a",
+ "/dev/mapper/vg_shubhnd-lv_root")
+ self.assertEquals(disk, "/dev/vda2")