From 33bdebb7c8de0aa2384283bd751d88a7d0b138b0 Mon Sep 17 00:00:00 2001 From: David Mulder Date: Mon, 12 Aug 2024 09:39:06 -0600 Subject: [PATCH] Enable rust cargo test in Samba make test Signed-off-by: David Mulder Reviewed-by: Alexander Bokovoy --- python/samba/tests/rust.py | 67 ++++++++++++++++++++++++++++++++++++++ rust/idmap/build.rs | 1 + rust/nss/build.rs | 1 + rust/pam/build.rs | 1 + rust/param/build.rs | 4 +++ selftest/tests.py | 3 ++ 6 files changed, 77 insertions(+) create mode 100644 python/samba/tests/rust.py diff --git a/python/samba/tests/rust.py b/python/samba/tests/rust.py new file mode 100644 index 00000000000..e5624bbbeac --- /dev/null +++ b/python/samba/tests/rust.py @@ -0,0 +1,67 @@ +# Unix SMB/CIFS implementation. +# +# Tests for Rust +# +# Copyright (C) David Mulder 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 . +# + +"""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) diff --git a/rust/idmap/build.rs b/rust/idmap/build.rs index c24090c3a54..c1a9f35e31a 100644 --- a/rust/idmap/build.rs +++ b/rust/idmap/build.rs @@ -29,4 +29,5 @@ fn main() { .write_to_file(out_path.join("bindings.rs")) .expect("Couldn't write bindings!"); println!("cargo:rustc-link-lib=utf8proc"); + println!("cargo:rustc-env=LD_LIBRARY_PATH=../../bin/shared/private/"); } diff --git a/rust/nss/build.rs b/rust/nss/build.rs index 4f5e414bf9a..6fcc6b9f08e 100644 --- a/rust/nss/build.rs +++ b/rust/nss/build.rs @@ -14,4 +14,5 @@ fn main() { "cargo:rustc-env=CARGO_PKG_VERSION_PATCH={}", version::SAMBA_VERSION_RELEASE ); + println!("cargo:rustc-env=LD_LIBRARY_PATH=../../bin/shared:../../bin/shared/private/"); } diff --git a/rust/pam/build.rs b/rust/pam/build.rs index 3c23ee3f114..11313da3e5c 100644 --- a/rust/pam/build.rs +++ b/rust/pam/build.rs @@ -6,4 +6,5 @@ fn main() { let _ = pkg_config::Config::new() .atleast_version("1.3.0") .probe("pam"); + println!("cargo:rustc-env=LD_LIBRARY_PATH=../../bin/shared:../../bin/shared/private/"); } diff --git a/rust/param/build.rs b/rust/param/build.rs index 8fe81e1091b..6d533e3b3db 100644 --- a/rust/param/build.rs +++ b/rust/param/build.rs @@ -14,6 +14,7 @@ fn main() { .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") @@ -22,6 +23,9 @@ fn main() { .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" ); diff --git a/selftest/tests.py b/selftest/tests.py index e894a3594a4..f55c90750c8 100644 --- a/selftest/tests.py +++ b/selftest/tests.py @@ -615,3 +615,6 @@ plantestsuite("samba.unittests.claim_conversion", "none", [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")