support/testing: TestRust{Bin} use ripgrep package for testing

TestRust and TestRustBin has been introduced at the time when there was
no cargo package infrastructure or any package using rust compiler
(Buildroot 2018.02).

Since then the ripgrep package has been introduced, initially using
the generic package infrastructure and converted later to the cargo
package infrastructure.

Due a recent change in rust/cargo removing the cargo config file [1]
the test TestRust and TestRustBin now fail to compile since they build
an hello-world crate outside of the cargo package infrastructure
without the correct environment for cross-compiling.

Replace the 'hello-world' crate by ripgrep package and check if it
can run properly in Qemu.

Fixes tests.package.test_rust.TestRustBin:
https://gitlab.com/buildroot.org/buildroot/-/jobs/2116202545

But doesn't fixes tests.package.test_rust.TestRust due another bug:
https://gitlab.com/buildroot.org/buildroot/-/jobs/2116202544

[1] b6378631c2

Signed-off-by: Romain Naour <romain.naour@gmail.com>
Cc: Eric Le Bihan <eric.le.bihan.dev@free.fr>
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
This commit is contained in:
Romain Naour 2022-02-24 16:45:12 +01:00 committed by Arnout Vandecappelle (Essensium/Mind)
parent e4eaddce8d
commit f0d1f21195

View File

@ -8,9 +8,6 @@ import infra.basetest
class TestRustBase(infra.basetest.BRTest): class TestRustBase(infra.basetest.BRTest):
target = 'armv7-unknown-linux-gnueabihf'
crate = 'hello-world'
def login(self): def login(self):
img = os.path.join(self.builddir, "images", "rootfs.cpio") img = os.path.join(self.builddir, "images", "rootfs.cpio")
self.emulator.boot(arch="armv7", self.emulator.boot(arch="armv7",
@ -18,43 +15,6 @@ class TestRustBase(infra.basetest.BRTest):
options=["-initrd", img]) options=["-initrd", img])
self.emulator.login() self.emulator.login()
def build_test_prog(self):
hostdir = os.path.join(self.builddir, 'host')
env = os.environ.copy()
env["USER"] = "br-user"
env["PATH"] = "{}:".format(os.path.join(hostdir, 'bin')) + env["PATH"]
env["CARGO_HOME"] = os.path.join(hostdir, 'usr', 'share', 'cargo')
env["RUST_TARGET_PATH"] = os.path.join(hostdir, 'etc', 'rustc')
cargo = os.path.join(hostdir, 'bin', 'cargo')
workdir = os.path.join(tempfile.mkdtemp(suffix='-br2-testing-rust'),
self.crate)
manifest = os.path.join(workdir, 'Cargo.toml')
prog = os.path.join(workdir, 'target', self.target, 'debug', self.crate)
cmd = [cargo, 'init', '--bin', '--vcs', 'none', '-vv', workdir]
ret = subprocess.call(cmd,
stdout=self.b.logfile,
stderr=self.b.logfile,
env=env)
if ret != 0:
raise SystemError("Cargo init failed")
cmd = [
cargo, 'build', '-vv', '--target', self.target,
'--manifest-path', manifest
]
ret = subprocess.call(cmd,
stdout=self.b.logfile,
stderr=self.b.logfile,
env=env)
if ret != 0:
raise SystemError("Cargo build failed")
shutil.copy(prog, os.path.join(self.builddir, 'target', 'usr', 'bin'))
self.b.build()
shutil.rmtree(workdir)
class TestRustBin(TestRustBase): class TestRustBin(TestRustBase):
config = \ config = \
""" """
@ -68,12 +28,12 @@ class TestRustBin(TestRustBase):
BR2_TARGET_ROOTFS_CPIO=y BR2_TARGET_ROOTFS_CPIO=y
# BR2_TARGET_ROOTFS_TAR is not set # BR2_TARGET_ROOTFS_TAR is not set
BR2_PACKAGE_HOST_RUSTC=y BR2_PACKAGE_HOST_RUSTC=y
BR2_PACKAGE_RIPGREP=y
""" """
def test_run(self): def test_run(self):
self.build_test_prog()
self.login() self.login()
self.assertRunOk(self.crate) self.assertRunOk("rg Buildroot /etc/issue")
class TestRust(TestRustBase): class TestRust(TestRustBase):
@ -90,9 +50,9 @@ class TestRust(TestRustBase):
# BR2_TARGET_ROOTFS_TAR is not set # BR2_TARGET_ROOTFS_TAR is not set
BR2_PACKAGE_HOST_RUSTC=y BR2_PACKAGE_HOST_RUSTC=y
BR2_PACKAGE_HOST_RUST=y BR2_PACKAGE_HOST_RUST=y
BR2_PACKAGE_RIPGREP=y
""" """
def test_run(self): def test_run(self):
self.build_test_prog()
self.login() self.login()
self.assertRunOk(self.crate) self.assertRunOk("rg Buildroot /etc/issue")