blob: 38f528aa7f8399ddba05d3a1a9e66b7b4960a060 [file] [log] [blame] [edit]
import os
import infra.basetest
class TestWhich(infra.basetest.BRTest):
config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \
"""
BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y
BR2_PACKAGE_WHICH=y
BR2_TARGET_ROOTFS_CPIO=y
# BR2_TARGET_ROOTFS_TAR is not set
"""
def test_run(self):
cpio_file = os.path.join(self.builddir, "images", "rootfs.cpio")
self.emulator.boot(arch="armv5",
kernel="builtin",
options=["-initrd", cpio_file])
self.emulator.login()
# We check the program can run. This also checks we are using
# the actual GNU which, since the BusyBox implementation does
# not accept this option.
self.assertRunOk("which --version")
# We check the primary usage is working.
out, ret = self.emulator.run("which sh")
self.assertEqual(ret, 0)
self.assertEqual(out[0], "/bin/sh")
alias_name = "buildoot_test_alias"
# We check "which" returns an error when the program is not
# found.
_, ret = self.emulator.run(f"which {alias_name}")
self.assertNotEqual(ret, 0)
# We define a shell alias.
alias_cmd = "/bin/true"
alias_def = f"{alias_name}='{alias_cmd}'"
self.assertRunOk(f"alias {alias_def}")
# We check our alias definition actually works, just by
# invoking it (since it's aliased to "true").
self.assertRunOk(alias_name)
# We check "which" is able to read aliases from the shell.
cmd = f"alias | which -i {alias_name}"
out, ret = self.emulator.run(cmd)
self.assertEqual(ret, 0)
self.assertEqual(out[0], alias_def)
self.assertEqual(out[1].strip(), alias_cmd)