xref: /unit/test/test_java_isolation_rootfs.py (revision 1596:b7e2d4d92624)
1import os
2import subprocess
3import pytest
4
5from unit.applications.lang.java import TestApplicationJava
6
7
8class TestJavaIsolationRootfs(TestApplicationJava):
9    prerequisites = {'modules': {'java': 'all'}}
10
11    def setup_method(self, is_su):
12        super().setup_method()
13
14        if not is_su:
15            return
16
17        os.makedirs(self.temp_dir + '/jars')
18        os.makedirs(self.temp_dir + '/tmp')
19        os.chmod(self.temp_dir + '/tmp', 0o777)
20
21        try:
22            process = subprocess.Popen(
23                [
24                    "mount",
25                    "--bind",
26                    self.pardir + "/build",
27                    self.temp_dir + "/jars",
28                ],
29                stderr=subprocess.STDOUT,
30            )
31
32            process.communicate()
33
34        except:
35            pytest.fail('Cann\'t run mount process.')
36
37    def teardown_method(self, is_su):
38        if not is_su:
39            return
40
41        try:
42            process = subprocess.Popen(
43                ["umount", "--lazy", self.temp_dir + "/jars"],
44                stderr=subprocess.STDOUT,
45            )
46
47            process.communicate()
48
49        except:
50            pytest.fail('Cann\'t run mount process.')
51
52        # super teardown must happen after unmount to avoid deletion of /build
53        super().teardown_method()
54
55    def test_java_isolation_rootfs_chroot_war(self, is_su):
56        if not is_su:
57            pytest.skip('require root')
58
59        isolation = {
60            'rootfs': self.temp_dir,
61        }
62
63        self.load('empty_war', isolation=isolation)
64
65        assert 'success' in self.conf(
66            '"/"', '/config/applications/empty_war/working_directory',
67        )
68
69        assert 'success' in self.conf(
70            '"/jars"', 'applications/empty_war/unit_jars'
71        )
72        assert 'success' in self.conf(
73            '"/java/empty.war"', 'applications/empty_war/webapp'
74        )
75
76        assert self.get()['status'] == 200, 'war'
77