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