All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] test: set LD_LIBRARY_PATH to all dirs with *.so
@ 2012-10-26 20:40 Tony Asleson
  2012-10-26 20:40 ` [PATCH 2/2] python-lvm: Initial check-in of python-lvm unit test case Tony Asleson
  0 siblings, 1 reply; 2+ messages in thread
From: Tony Asleson @ 2012-10-26 20:40 UTC (permalink / raw)
  To: lvm-devel

Instead of manually editing entries, add all the
directories which contain shared objects.

Signed-off-by: Tony Asleson <tasleson@redhat.com>
---
 test/lib/utils.sh |   10 +++++-----
 1 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/test/lib/utils.sh b/test/lib/utils.sh
index 70d9f66..ab5abc1 100644
--- a/test/lib/utils.sh
+++ b/test/lib/utils.sh
@@ -204,11 +204,11 @@ test -n "${abs_top_builddir+varset}" || . lib/paths || die "you must run make fi
 case "$PATH" in
 *"$abs_top_builddir/test/lib"*) ;;
 *)
-        PATH="$abs_top_builddir/test/lib":$PATH
-        for d in daemons/dmeventd/plugins/mirror daemons/dmeventd/plugins/snapshot \
-                daemons/dmeventd/plugins/lvm2 daemons/dmeventd liblvm tools libdm; do
-                LD_LIBRARY_PATH="$abs_top_builddir/$d":$LD_LIBRARY_PATH
-        done
+	PATH="$abs_top_builddir/test/lib":"$abs_top_builddir/test/api":$PATH
+	for i in `find $abs_top_builddir -name \*.so`; do
+		p=`dirname $i`
+		LD_LIBRARY_PATH="$p":$LD_LIBRARY_PATH
+	done
         export PATH LD_LIBRARY_PATH ;;
 esac
 
-- 
1.7.1



^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [PATCH 2/2] python-lvm: Initial check-in of python-lvm unit test case.
  2012-10-26 20:40 [PATCH 1/2] test: set LD_LIBRARY_PATH to all dirs with *.so Tony Asleson
@ 2012-10-26 20:40 ` Tony Asleson
  0 siblings, 0 replies; 2+ messages in thread
From: Tony Asleson @ 2012-10-26 20:40 UTC (permalink / raw)
  To: lvm-devel

Signed-off-by: Tony Asleson <tasleson@redhat.com>
---
 test/api/pytest.sh          |   27 +++
 test/api/python_lvm_unit.py |  375 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 402 insertions(+), 0 deletions(-)
 create mode 100644 test/api/pytest.sh
 create mode 100755 test/api/python_lvm_unit.py

diff --git a/test/api/pytest.sh b/test/api/pytest.sh
new file mode 100644
index 0000000..ad99624
--- /dev/null
+++ b/test/api/pytest.sh
@@ -0,0 +1,27 @@
+#!/bin/sh
+# Copyright (C) 2012 Red Hat, Inc. All rights reserved.
+#
+# This file is part of LVM2.
+#
+# This copyrighted material is made available to anyone wishing to use,
+# modify, copy, or redistribute it subject to the terms and conditions
+# of the GNU General Public License v.2.
+#
+# 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+
+. lib/test
+
+aux prepare_vg 1
+lvcreate -n test -l 5 $vg
+
+#Locate the python binding library to use.
+python_lib=`find $abs_top_builddir -name lvm.so`
+if [ "$python_lib" != "" ]
+then
+	export PYTHONPATH=`dirname $python_lib`:$PYTHONPATH
+	python_lvm_unit.py
+else
+	echo "Unable to test python bindings as library not available"
+fi
diff --git a/test/api/python_lvm_unit.py b/test/api/python_lvm_unit.py
new file mode 100755
index 0000000..fdeca75
--- /dev/null
+++ b/test/api/python_lvm_unit.py
@@ -0,0 +1,375 @@
+#!/usr/bin/env python
+
+# Copyright (C) 2012 Red Hat, Inc. All rights reserved.
+#
+# This file is part of LVM2.
+#
+# This copyrighted material is made available to anyone wishing to use,
+# modify, copy, or redistribute it subject to the terms and conditions
+# of the GNU General Public License v.2.
+#
+# 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+
+import unittest
+import random
+import string
+import lvm
+
+# Set of basic unit tests for the python bindings.
+
+def rs(l=10):
+	"""
+	Generate a random string
+	"""
+	return ''.join(random.choice(string.ascii_uppercase) for x in range(l))
+
+
+class TestLvm(unittest.TestCase):
+	def setUp(self):
+		pass
+
+	def tearDown(self):
+		pass
+
+	def testOpenClose(self):
+		pass
+
+	def testVersion(self):
+		version = lvm.getVersion()
+		self.assertNotEquals(version, None)
+		self.assertEquals(type(version), str)
+		self.assertTrue(len(version) > 0)
+
+	def testVgOpen(self):
+		vg_names = lvm.listVgNames()
+
+		for i in vg_names:
+			vg = lvm.vgOpen(i)
+			vg.close()
+
+	def _get_lv_test(self, mode='r'):
+		vg_name_list = lvm.listVgNames()
+		for vgname in vg_name_list:
+			vg = lvm.vgOpen(vgname, mode)
+			lvs = vg.listLVs()
+			if len(lvs):
+				return lvs[0]
+		return None
+
+	def _get_pv_test(self, mode='r'):
+		vg_name_list = lvm.listVgNames()
+		for vgname in vg_name_list:
+			vg = lvm.vgOpen(vgname, mode)
+			pvs = vg.listPVs()
+			if len(pvs):
+				return pvs[0]
+		return None
+
+	def testPvGetters(self):
+		pv = self._get_pv_test()
+
+		self.assertEqual(type(pv.getName()), str)
+		self.assertTrue(len(pv.getName()) > 0)
+
+		self.assertEqual(type(pv.getUuid()), str)
+		self.assertTrue(len(pv.getUuid()) > 0)
+
+		self.assertEqual(type(pv.getMdaCount()), int)
+		self.assertEqual(type(pv.getMdaCount()), int)
+
+		self.assertEqual(type(pv.getSize()), int)
+
+		self.assertEqual(type(pv.getDevSize()), int)
+
+		self.assertEqual(type(pv.getFree()), int)
+
+	def _test_prop(self, prop_obj, prop, var_type, settable):
+		result = prop_obj.getProperty(prop)
+
+		self.assertEqual(type(result[0]), var_type)
+		self.assertEqual(type(result[1]), bool)
+		self.assertTrue(result[1] == settable)
+
+	def testPvSegs(self):
+		pv = self._get_pv_test("r")
+		pv_segs = pv.listPVsegs()
+
+		#LVsegs returns a tuple, (value, bool settable)
+
+		#TODO: Test other properties of pv_seg
+		for i in pv_segs:
+			self._test_prop(i, 'pvseg_start', long, False)
+
+	def testPvProperty(self):
+		pv = self._get_pv_test("r")
+		self._test_prop(pv, 'pv_mda_count', long, False)
+
+	def testLvProperty(self):
+		lv = self._get_lv_test("r")
+		self._test_prop(lv, 'seg_count', long, False)
+
+	def testLvTags(self):
+		lv = self._get_lv_test("w")
+		self._testTags(lv)
+
+	def testLvActiveInactive(self):
+		lv = self._get_lv_test("w")
+		lv.deactivate()
+		self.assertTrue(lv.isActive() == False)
+		lv.activate()
+		self.assertTrue(lv.isActive() == True)
+
+	def testLvRename(self):
+		lv = self._get_lv_test("w")
+
+		current_name = lv.getName()
+		new_name = rs()
+		lv.rename(new_name)
+		self.assertEqual(lv.getName(), new_name)
+		lv.rename(current_name)
+
+	def testLvSuspend(self):
+		lv = self._get_lv_test("r")
+
+		result = lv.isSuspended()
+		self.assertTrue(type(result), bool)
+
+	def testLvSize(self):
+		lv = self._get_lv_test("r")
+		result = lv.getSize()
+		self.assertTrue(type(result), bool)
+
+	def testLvResize(self):
+		pass    #Not implemented!
+
+	def testPvResize(self):
+		pass    #Patch available, not committed
+
+	def testLvSeg(self):
+		lv = self._get_lv_test("r")
+
+		lv_segs = lv.listLVsegs()
+
+		#LVsegs returns a tuple, (value, bool settable)
+
+		#TODO: Test other properties of lv_seg
+		for i in lv_segs:
+			self._test_prop(i, 'seg_start_pe', long, False)
+
+	def testLvMisc(self):
+		#Need to look at lack of vg_write in vg create
+
+		#For this to work cleanly we will remove an existing lv & vg and then
+		#put it back so that the test framework can clean it up.
+		vg_name_list = lvm.listVgNames()
+
+		if len(vg_name_list):
+			vg_name = vg_name_list[0]
+
+			vg = lvm.vgOpen(vg_name, "w")
+
+			vg_mda_copies = vg.getProperty('vg_mda_copies')
+			vg.setProperty('vg_mda_copies', vg_mda_copies[0])
+
+			pvs = vg.listPVs()
+			lvs = vg.listLVs()
+
+			pe_devices = []
+			for p in pvs:
+				pe_devices.append(p.getName())
+
+			self.assertEquals(len(lvs), 1)
+
+			lv = lvs[0]
+
+			lv_name = lv.getName()
+			lv_size = lv.getSize()
+
+			lv.remove()
+			lv = None
+
+			vg.reduce(pe_devices[0])
+
+			vg.remove()
+			vg.close()
+
+			nvg = lvm.vgCreate(vg_name)
+			for p in pe_devices:
+				nvg.extend(p)
+
+			#2MiB extent size
+			new_extent = 1024 * 1024 * 2
+
+			nvg.setExtentSize(new_extent)
+			self.assertEqual(nvg.getExtentSize(), new_extent)
+
+			v = nvg.createLvLinear(lv_name, lv_size)
+
+			lv_find_name = nvg.lvFromName(lv_name)
+			lv_find_uuid = nvg.lvFromUuid(v.getUuid())
+
+			self.assertTrue(lv_find_name.getName() == v.getName())
+			self.assertTrue(lv_find_uuid.getUuid() == v.getUuid())
+
+			nvg.close()
+
+	def testVgNames(self):
+		vg = lvm.listVgNames()
+		self.assertTrue(isinstance(vg, tuple))
+
+	def testDupeLvCreate(self):
+		"""
+		Try to create a lv with the same name expecting a failure
+		Note: This was causing a seg. fault previously
+		"""
+		vgs = lvm.listVgNames()
+
+		if len(vgs):
+			vg_name = vgs[0]
+			vg = lvm.vgOpen(vg_name, "w")
+
+			lvs = vg.listLVs()
+
+			if len(lvs):
+				lv = lvs[0]
+				lv_name = lv.getName()
+				self.assertRaises(lvm.LibLVMError, vg.createLvLinear, lv_name,
+					lv.getSize())
+
+	def testVgUuids(self):
+		vgs_uuids = lvm.listVgUuids()
+
+		self.assertTrue(isinstance(vgs_uuids, tuple))
+
+		vgs_uuids = list(vgs_uuids)
+
+		vgs_names = lvm.listVgNames()
+
+		for vg_name in vgs_names:
+			vg = lvm.vgOpen(vg_name, "r")
+
+			#TODO Write/fix BUG, vg uuid don't match between lvm.listVgUuids
+			# and vg.getUuid()
+			vg_uuid_search = vg.getUuid().replace('-', '')
+
+			self.assertTrue(vg_uuid_search in vgs_uuids)
+			vgs_uuids.remove(vg_uuid_search)
+
+		self.assertTrue(len(vgs_uuids) == 0)
+
+	def testPercentToFloat(self):
+		self.assertEqual(lvm.percentToFloat(0), 0.0)
+		self.assertEqual(lvm.percentToFloat(1000000), 1.0)
+		self.assertEqual(lvm.percentToFloat(1000000 / 2), 0.5)
+
+	def testScan(self):
+		self.assertEqual(lvm.scan(), None)
+
+	def testConfigReload(self):
+		self.assertEqual(lvm.configReload(), None)
+
+	def testConfig_override(self):
+		self.assertEquals(lvm.configOverride("global.test = 1"), None)
+
+	def testConfigFindBool(self):
+		self.assertTrue(lvm.configFindBool("global/locking_type"))
+		self.assertFalse(lvm.configFindBool("global/fallback_to_local_locking"))
+
+	def testVgFromPVLookups(self):
+		vgname_list = lvm.listVgNames()
+		for vg_name in vgname_list:
+			vg = lvm.vgOpen(vg_name, 'r')
+
+			vg_name = vg.getName()
+
+			pv_list = vg.listPVs()
+			for pv in pv_list:
+				vg_name_from_pv = lvm.vgNameFromPvid(pv.getUuid())
+				self.assertEquals(vg_name, vg_name_from_pv)
+				self.assertEqual(vg_name, lvm.vgNameFromDevice(pv.getName()))
+			vg.close()
+
+	def testVgGetName(self):
+		vgname_list = lvm.listVgNames()
+
+		for vg_name in vgname_list:
+			vg = lvm.vgOpen(vg_name, 'r')
+			self.assertEqual(vg.getName(), vg_name)
+			vg.close()
+
+	def testVgGetUuid(self):
+		vgname_list = lvm.listVgNames()
+
+		for vg_name in vgname_list:
+			vg = lvm.vgOpen(vg_name, 'r')
+			uuid = vg.getUuid()
+			self.assertNotEqual(uuid, None)
+			self.assertTrue(len(uuid) > 0)
+			vg.close()
+
+
+	RETURN_NUMERIC = ["getSeqno", "getSize", "getFreeSize", "getFreeSize",
+					  "getExtentSize", "getExtentCount", "getFreeExtentCount",
+					  "getPvCount", "getMaxPv", "getMaxLv"]
+
+	def testVgGetters(self):
+		vg_name_list = lvm.listVgNames()
+
+		for vg_name in vg_name_list:
+			vg = lvm.vgOpen(vg_name, 'r')
+			self.assertTrue(type(vg.isClustered()) == bool)
+			self.assertTrue(type(vg.isExported()) == bool)
+			self.assertTrue(type(vg.isPartial()) == bool)
+
+			#Loop through the list invoking the method
+			for method_name in TestLvm.RETURN_NUMERIC:
+				method = getattr(vg, method_name)
+				result = method()
+				self.assertTrue(type(result) == int)
+
+			vg.close()
+
+	def _testTags(self, tag_obj):
+		existing_tags = tag_obj.getTags()
+		self.assertTrue(type(existing_tags) == tuple)
+
+		num_tags = random.randint(2, 40)
+		created_tags = []
+
+		for i in range(num_tags):
+			tag_name = rs(random.randint(1, 128))
+			tag_obj.addTag(tag_name)
+			created_tags.append(tag_name)
+
+		tags = tag_obj.getTags()
+		self.assertTrue(len(existing_tags) + len(created_tags) == len(tags))
+
+		num_remove = len(created_tags)
+
+		for i in range(num_remove):
+			tag_to_remove = created_tags[random.randint(0, len(created_tags) - 1)]
+
+			created_tags.remove(tag_to_remove)
+
+			tag_obj.removeTag(tag_to_remove)
+
+			current_tags = tag_obj.getTags()
+			self.assertFalse(tag_to_remove in current_tags)
+
+		current_tags = tag_obj.getTags()
+		self.assertTrue(len(current_tags) == len(existing_tags))
+		for e in existing_tags:
+			self.assertTrue(e in current_tags)
+
+	def testVgTags(self):
+		vg_name_list = lvm.listVgNames()
+
+		for vg_name in vg_name_list:
+			vg = lvm.vgOpen(vg_name, 'w')
+			self._testTags(vg)
+			vg.close()
+
+if __name__ == "__main__":
+	unittest.main()
\ No newline at end of file
-- 
1.7.1



^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2012-10-26 20:40 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-10-26 20:40 [PATCH 1/2] test: set LD_LIBRARY_PATH to all dirs with *.so Tony Asleson
2012-10-26 20:40 ` [PATCH 2/2] python-lvm: Initial check-in of python-lvm unit test case Tony Asleson

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.