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