test_ruby_isolation.py (1730:44912af5b3e6) test_ruby_isolation.py (1737:9be01e5d6ce5)
1import shutil
2
1import shutil
2
3import os
3import pytest
4
5from conftest import unit_run
6from conftest import unit_stop
7from unit.applications.lang.ruby import TestApplicationRuby
8from unit.feature.isolation import TestFeatureIsolation
9from unit.option import option
10

--- 10 unchanged lines hidden (view full) ---

21
22 TestFeatureIsolation().check(option.available, unit['temp_dir'])
23
24 assert unit_stop() is None
25 shutil.rmtree(unit['temp_dir'])
26
27 return check if not complete_check else check()
28
4import pytest
5
6from conftest import unit_run
7from conftest import unit_stop
8from unit.applications.lang.ruby import TestApplicationRuby
9from unit.feature.isolation import TestFeatureIsolation
10from unit.option import option
11

--- 10 unchanged lines hidden (view full) ---

22
23 TestFeatureIsolation().check(option.available, unit['temp_dir'])
24
25 assert unit_stop() is None
26 shutil.rmtree(unit['temp_dir'])
27
28 return check if not complete_check else check()
29
29 def test_ruby_isolation_rootfs_mount_namespace(self, is_su):
30 def test_ruby_isolation_rootfs(self, is_su):
30 isolation_features = option.available['features']['isolation'].keys()
31
32 if not is_su:
33 if not 'unprivileged_userns_clone' in isolation_features:
34 pytest.skip('requires unprivileged userns or root')
35
36 if 'user' not in isolation_features:
37 pytest.skip('user namespace is not supported')
38
39 if 'mnt' not in isolation_features:
40 pytest.skip('mnt namespace is not supported')
41
42 if 'pid' not in isolation_features:
43 pytest.skip('pid namespace is not supported')
44
31 isolation_features = option.available['features']['isolation'].keys()
32
33 if not is_su:
34 if not 'unprivileged_userns_clone' in isolation_features:
35 pytest.skip('requires unprivileged userns or root')
36
37 if 'user' not in isolation_features:
38 pytest.skip('user namespace is not supported')
39
40 if 'mnt' not in isolation_features:
41 pytest.skip('mnt namespace is not supported')
42
43 if 'pid' not in isolation_features:
44 pytest.skip('pid namespace is not supported')
45
45 isolation = {'rootfs': option.test_dir}
46 isolation = {'rootfs': option.temp_dir}
46
47 if not is_su:
48 isolation['namespaces'] = {
49 'mount': True,
50 'credential': True,
47
48 if not is_su:
49 isolation['namespaces'] = {
50 'mount': True,
51 'credential': True,
51 'pid': True
52 'pid': True,
52 }
53
53 }
54
54 self.load('status_int', isolation=isolation)
55 os.mkdir(option.temp_dir + '/ruby')
55
56
56 assert 'success' in self.conf(
57 '"/ruby/status_int/config.ru"', 'applications/status_int/script',
57 shutil.copytree(
58 option.test_dir + '/ruby/status_int',
59 option.temp_dir + '/ruby/status_int',
58 )
59
60 )
61
60 assert 'success' in self.conf(
61 '"/ruby/status_int"', 'applications/status_int/working_directory',
62 )
63
64 assert self.get()['status'] == 200, 'status int'
65
66 def test_ruby_isolation_rootfs(self, is_su):
67 if not is_su:
68 pytest.skip('requires root')
69 return
70
71 isolation = {'rootfs': option.test_dir}
72
73 self.load('status_int', isolation=isolation)
74
75 assert 'success' in self.conf(
76 '"/ruby/status_int/config.ru"', 'applications/status_int/script',
77 )
78
79 assert 'success' in self.conf(
80 '"/ruby/status_int"', 'applications/status_int/working_directory',
81 )
82
83 assert self.get()['status'] == 200, 'status int'
62 self.load('status_int', isolation=isolation)
63
64 assert 'success' in self.conf(
65 '"/ruby/status_int/config.ru"', 'applications/status_int/script',
66 )
67
68 assert 'success' in self.conf(
69 '"/ruby/status_int"', 'applications/status_int/working_directory',
70 )
71
72 assert self.get()['status'] == 200, 'status int'