1import os
2
3import infra.basetest
4
5
6class TestSELinuxInfra(infra.basetest.BRTest):
7    config = infra.basetest.BASIC_TOOLCHAIN_CONFIG +\
8        """
9        BR2_PACKAGE_REFPOLICY=y
10        BR2_PACKAGE_PYTHON3=y
11        BR2_PACKAGE_SETOOLS=y
12        BR2_TARGET_ROOTFS_CPIO=y
13        """
14
15    def base_test_run(self):
16        cpio_file = os.path.join(self.builddir, "images", "rootfs.cpio")
17        self.emulator.boot(arch="armv5", kernel="builtin",
18                           options=["-initrd", cpio_file])
19        self.emulator.login()
20
21
22class TestSELinuxExtraModules(TestSELinuxInfra):
23    config = TestSELinuxInfra.config + \
24        """
25        BR2_REFPOLICY_EXTRA_MODULES="ntp tor"
26        """
27
28    def test_run(self):
29        TestSELinuxInfra.base_test_run(self)
30
31        out, ret = self.emulator.run("seinfo -t ntpd_t", 15)
32        self.assertEqual(ret, 0)
33        self.assertEqual(out[2].strip(), "ntpd_t")
34
35        out, ret = self.emulator.run("seinfo -t tor_t", 15)
36        self.assertEqual(ret, 0)
37        self.assertEqual(out[2].strip(), "tor_t")
38
39
40class TestSELinuxExtraModulesDirs(TestSELinuxInfra):
41    config = TestSELinuxInfra.config + \
42        """
43        BR2_REFPOLICY_EXTRA_MODULES_DIRS="{}"
44        """.format(infra.filepath("tests/core/test_selinux/extra_modules"))
45
46    def test_run(self):
47        TestSELinuxInfra.base_test_run(self)
48
49        out, ret = self.emulator.run("seinfo -t buildroot_test_t", 15)
50        self.assertEqual(ret, 0)
51        self.assertEqual(out[2].strip(), "buildroot_test_t")
52
53
54class TestSELinuxCustomGit(TestSELinuxInfra):
55    config = TestSELinuxInfra.config + \
56        """
57        BR2_PACKAGE_REFPOLICY_CUSTOM_GIT=y
58        BR2_PACKAGE_REFPOLICY_CUSTOM_REPO_URL="https://github.com/SELinuxProject/refpolicy.git"
59        BR2_PACKAGE_REFPOLICY_CUSTOM_REPO_VERSION="RELEASE_2_20200818"
60        """
61
62    def test_run(self):
63        pass
64
65
66class TestSELinuxPackage(TestSELinuxInfra):
67    br2_external = [infra.filepath("tests/core/test_selinux/br2_external")]
68    config = TestSELinuxInfra.config + \
69        """
70        BR2_PACKAGE_SELINUX_TEST=y
71        """
72
73    def test_run(self):
74        TestSELinuxInfra.base_test_run(self)
75
76        out, ret = self.emulator.run("seinfo -t ntpd_t", 15)
77        self.assertEqual(ret, 0)
78        self.assertEqual(out[2].strip(), "ntpd_t")
79
80        out, ret = self.emulator.run("seinfo -t tor_t", 15)
81        self.assertEqual(ret, 0)
82        self.assertEqual(out[2].strip(), "tor_t")
83
84        out, ret = self.emulator.run("seinfo -t buildroot_test_t", 15)
85        self.assertEqual(ret, 0)
86        self.assertEqual(out[2].strip(), "buildroot_test_t")
87