| 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) |