From 9db25c3567bbc0897a64ab7856abf91ad2fe5af8 Mon Sep 17 00:00:00 2001 From: Arthy Loganathan Date: Mon, 12 Jun 2017 14:27:00 +0530 Subject: glusto nfs-ganesha: Added test to verify nfsv4 acl functionality with glusterfs Change-Id: I2747c3770925b8d8f05e10fb7da49d105b7130e6 Signed-off-by: Arthy Loganathan Signed-off-by: Jiffin Tony Thottan --- .../nfs_ganesha/acls/test_nfs_ganesha_acls.py | 113 +++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 tests/functional/nfs_ganesha/acls/test_nfs_ganesha_acls.py (limited to 'tests/functional/nfs_ganesha') diff --git a/tests/functional/nfs_ganesha/acls/test_nfs_ganesha_acls.py b/tests/functional/nfs_ganesha/acls/test_nfs_ganesha_acls.py new file mode 100644 index 000000000..871ad1090 --- /dev/null +++ b/tests/functional/nfs_ganesha/acls/test_nfs_ganesha_acls.py @@ -0,0 +1,113 @@ +# Copyright (C) 2016-2017 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 +# 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. + +""" Description: + Test Cases in this module tests the nfs ganesha version 4 + ACL functionality. +""" + +from glusto.core import Glusto as g +from glustolibs.gluster.gluster_base_class import runs_on +from glustolibs.gluster.nfs_ganesha_libs import NfsGaneshaVolumeBaseClass +from glustolibs.gluster.nfs_ganesha_ops import enable_acl, disable_acl +from glustolibs.gluster.exceptions import ExecutionError +import time +import re + + +@runs_on([['replicated', 'distributed', 'distributed-replicated', + 'dispersed', 'distributed-dispersed'], + ['nfs']]) +class TestNfsGaneshaAcls(NfsGaneshaVolumeBaseClass): + """ + Tests to verify Nfs Ganesha v4 ACL stability + """ + + @classmethod + def setUpClass(cls): + NfsGaneshaVolumeBaseClass.setUpClass.im_func(cls) + + def setUp(self): + ret = enable_acl(self.servers[0], self.volname) + if not ret: + raise ExecutionError("Failed to enable ACL on the nfs " + "ganesha cluster") + + def test_nfsv4_acls(self): + + source_file = ("/usr/share/glustolibs/io/scripts/nfs_ganesha/" + "nfsv4_acl_test.sh") + test_acl_file = "/tmp/nfsv4_acl_test.sh" + + for server in self.servers: + g.upload(server, source_file, "/tmp/", user="root") + + cmd = ("export ONLY_CREATE_USERS_AND_GROUPS=\"yes\";sh %s %s" + % (test_acl_file, "/tmp")) + ret, _, _ = g.run(server, cmd) + self.assertEqual(ret, 0, ("Failed to create users and groups " + "for running acl test in server %s" + % server)) + time.sleep(5) + + for client in self.clients: + g.upload(client, source_file, "/tmp/", user="root") + option_flag = 0 + for mount in self.mounts: + if mount.client_system == client: + mountpoint = mount.mountpoint + if "vers=4" not in mount.options: + option_flag = 1 + break + + if option_flag: + g.log.info("This acl test required mount option to be " + "vers=4 in %s" % client) + continue + + dirname = mountpoint + "/" + "testdir_" + client + cmd = "[ -d %s ] || mkdir %s" % (dirname, dirname) + ret, _, _ = g.run(client, cmd) + self.assertEqual(ret, 0, ("Failed to create dir %s for running " + "acl test" % dirname)) + + cmd = "sh %s %s" % (test_acl_file, dirname) + ret, out, _ = g.run(client, cmd) + self.assertEqual(ret, 0, ("Failed to execute acl test on %s" + % client)) + + g.log.info("ACL test output in %s : %s" % (client, out)) + acl_output = out.split('\n')[:-1] + for output in acl_output: + match = re.search("^OK.*", output) + if match is None: + self.assertTrue(False, ("Unexpected behaviour in acl " + "functionality in %s" % client)) + + cmd = "rm -rf %s" % dirname + ret, _, _ = g.run(client, cmd) + self.assertEqual(ret, 0, ("Failed to remove dir %s after running " + "acl test" % dirname)) + + def tearDown(self): + ret = disable_acl(self.servers[0], self.volname) + if not ret: + raise ExecutionError("Failed to disable ACL on nfs " + "ganesha cluster") + + @classmethod + def tearDownClass(cls): + NfsGaneshaVolumeBaseClass.tearDownClass.im_func(cls) -- cgit