]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
selftest: Add a python blackbox test for some misc (widelink) DFS tests
authorNoel Power <noel.power@suse.com>
Tue, 11 Jun 2024 10:19:50 +0000 (11:19 +0100)
committerJule Anger <janger@samba.org>
Wed, 3 Jul 2024 08:48:12 +0000 (08:48 +0000)
On master attempting to chdir into a nested dfs link

e.g. cd dfslink (works)
     cd dfslink/another_dfslink (fails)

[1] Add a test for this scenario (nested chdir)
[2] Add test for enumerating a dfs link in root of dfs share
[3] Add a test to check case insensitive chdir into dfs link on widelink
  enabled share

Add knownfails for tests 1 and 3

Signed-off-by: Noel Power <noel.power@suse.com>
Reviewed-by: Jeremy Allison <jra@samba.org>
BUG: https://bugzilla.samba.org/show_bug.cgi?id=15435
(cherry picked from commit 7f1de90f72d6e8287aec6ab1d9f7776b7df624e5)

[noel.power@suse.com backported to Samba 4.19 changed knownfails because
  test_ci_chdir doen't fail in 4.19 but test_enumerate_dfs_link does]

python/samba/tests/blackbox/misc_dfs_widelink.py [new file with mode: 0644]
selftest/knownfail.d/dfs_widelink [new file with mode: 0644]
source4/selftest/tests.py

diff --git a/python/samba/tests/blackbox/misc_dfs_widelink.py b/python/samba/tests/blackbox/misc_dfs_widelink.py
new file mode 100644 (file)
index 0000000..7948590
--- /dev/null
@@ -0,0 +1,86 @@
+# Blackbox tests for DFS (widelink)
+#
+# Copyright (C) Noel Power noel.power@suse.com
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+#
+from samba.tests import BlackboxTestCase, BlackboxProcessError
+from samba.samba3 import param as s3param
+
+from samba.credentials import Credentials
+
+import os
+
+class DfsWidelinkBlockboxTestBase(BlackboxTestCase):
+
+    def setUp(self):
+        super().setUp()
+        self.lp = s3param.get_context()
+        self.server = os.environ["SERVER"]
+        self.user = os.environ["USER"]
+        self.passwd = os.environ["PASSWORD"]
+        self.creds = Credentials()
+        self.creds.guess(self.lp)
+        self.creds.set_username(self.user)
+        self.creds.set_password(self.passwd)
+        self.testdir = os.getenv("TESTDIR", "msdfs-share-wl")
+        self.share = os.getenv("SHARE", "msdfs-share-wl")
+        self.dirpath = os.path.join(os.environ["LOCAL_PATH"],self.testdir)
+        # allow a custom teardown function to be defined
+        self.cleanup = None
+        self.cleanup_args = []
+
+    def tearDown(self):
+        try:
+            if (self.cleanup):
+                self.cleanup(self.cleanup_args)
+        except Exception as e:
+            print("remote remove failed: %s" % str(e))
+
+    def build_test_cmd(self, cmd, args):
+        cmd = [cmd, "-U%s%%%s" % (self.user, self.passwd)]
+        cmd.extend(args)
+        return cmd
+
+    def test_ci_chdir(self):
+        parent_dir = "msdfs-src1"
+        dirs = [parent_dir, parent_dir.upper()]
+        # try as named dir first then try upper-cased version
+        for adir in dirs:
+            smbclient_args = self.build_test_cmd("smbclient", ["//%s/%s" % (self.server, self.share), "-c", "cd %s" % (adir)])
+            try:
+                out_str = self.check_output(smbclient_args)
+            except BlackboxProcessError as e:
+                print(str(e))
+                self.fail(str(e))
+
+    def test_nested_chdir(self):
+        parent_dir = "dfshop1"
+        child_dir = "dfshop2"
+        smbclient_args = self.build_test_cmd("smbclient", ["//%s/%s" % (self.server, self.share), "-c", "cd %s/%s" % (parent_dir,child_dir)])
+        try:
+            out_str = self.check_output(smbclient_args)
+        except BlackboxProcessError as e:
+            print(str(e))
+            self.fail(str(e))
+
+    def test_enumerate_dfs_link(self):
+        smbclient_args = self.build_test_cmd("smbclient", ["//%s/%s" % (self.server, self.share), "-c", "dir"])
+        try:
+            out_str = self.check_output(smbclient_args)
+        except BlackboxProcessError as e:
+            print(str(e))
+            self.fail(str(e))
+        out_str = out_str.decode()
+        self.assertIn("msdfs-src1", out_str)
diff --git a/selftest/knownfail.d/dfs_widelink b/selftest/knownfail.d/dfs_widelink
new file mode 100644 (file)
index 0000000..1427a8b
--- /dev/null
@@ -0,0 +1,2 @@
+^samba.tests.blackbox.misc_dfs_widelink.samba.tests.blackbox.misc_dfs_widelink.DfsWidelinkBlockboxTestBase.test_nested_chdir\(fileserver\)
+^samba.tests.blackbox.misc_dfs_widelink.samba.tests.blackbox.misc_dfs_widelink.DfsWidelinkBlockboxTestBase.test_enumerate_dfs_link
index ff53ae8c2a29c8278e38a29d9d1066ebc0b30740..ec787f97aa0467659bad2884ea909fb16d1ace65 100755 (executable)
@@ -1463,6 +1463,9 @@ planoldpythontestsuite("fileserver",
                        "samba.tests.blackbox.smbcacls_dfs_propagate_inherit",
                        "samba.tests.blackbox.smbcacls_dfs_propagate_inherit(DFS-msdfs-root)",
                        environ={'SHARE': 'smbcacls_share'})
+
+planoldpythontestsuite("fileserver",
+                       "samba.tests.blackbox.misc_dfs_widelink")
 #
 # Want a selection of environments across the process models
 #