--- /dev/null
+# Unix SMB/CIFS implementation.
+#
+# Tests for Rust
+#
+# Copyright (C) David Mulder <dmulder@samba.org> 2024
+#
+# 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/>.
+#
+
+"""Cargo tests for Rust sources"""
+
+from samba.tests import BlackboxTestCase
+import os
+
+
+class RustCargoTests(BlackboxTestCase):
+ def setUp(self):
+ super().setUp()
+
+ # Locate the rust source directory
+ self.rust_dir = os.path.abspath(
+ os.path.join(
+ os.path.realpath(
+ os.path.dirname(__file__)
+ ),
+ '../../../../rust'
+ )
+ )
+
+ # Locate the bin directory
+ self.target_dir = os.path.abspath(
+ os.path.join(
+ os.path.realpath(
+ os.path.dirname(__file__)
+ ),
+ '../../..',
+ 'default/rust',
+ )
+ )
+
+ def check_cargo_test(self, crate_toml):
+ # Execute the cargo test command
+ cmd = 'cargo test --target-dir=%s --manifest-path=%s' % (self.target_dir, crate_toml)
+ return self.check_run(cmd, 'cargo test failed')
+
+ def test_rust(self):
+ crates = []
+ for root, dirs, files in os.walk(self.rust_dir):
+ for file in files:
+ if os.path.basename(file) == 'Cargo.toml':
+ if root != self.rust_dir:
+ crates.append(os.path.join(root, file))
+
+ for crate_toml in crates:
+ with self.subTest(crate_toml):
+ self.check_cargo_test(crate_toml)
.clang_arg("-Doffset_t=loff_t")
.clang_arg("-I../../bin/default")
.clang_arg("-I../../lib/talloc")
+ .generate_comments(false)
.clang_arg("-includestdint.h")
.header("../../lib/param/param.h")
.header("../../lib/param/loadparm.h")
.parse_callbacks(Box::new(bindgen::CargoCallbacks::new()))
.generate()
.expect("Unable to generate bindings");
+ println!("cargo:rerun-if-changed=../../lib/param/param.h");
+ println!("cargo:rerun-if-changed=../../lib/param/loadparm.h");
+ println!("cargo:rerun-if-changed=../../source3/param/loadparm.h");
println!(
"cargo:rerun-if-changed=../../bin/default/lib/param/param_functions.h"
);
[os.path.join(bindir(), "test_claim_conversion")])
plantestsuite("samba.unittests.cmdline", "none",
[os.path.join(bindir(), "test_cmdline")])
+
+# Run the Rust cargo tests
+planpythontestsuite("none", "samba.tests.rust")