Deleted Added
1import os
2import pytest
3import shutil
4
5from unit.applications.lang.ruby import TestApplicationRuby
6from unit.feature.isolation import TestFeatureIsolation
7from conftest import option
8
9
10class TestRubyIsolation(TestApplicationRuby):
11 prerequisites = {'modules': {'ruby': 'any'}, 'features': ['isolation']}
12
13 isolation = TestFeatureIsolation()
14
15 @classmethod
16 def setup_class(cls, complete_check=True):
17 unit = super().setup_class(complete_check=False)
18
19 TestFeatureIsolation().check(cls.available, unit.temp_dir)
20
21 return unit if not complete_check else unit.complete()
22
23 def test_ruby_isolation_rootfs(self, is_su):
24 isolation_features = self.available['features']['isolation'].keys()
25
26 if 'mnt' not in isolation_features:
27 pytest.skip('requires mnt ns')
28
29 if not is_su:
30 if 'user' not in isolation_features:
31 pytest.skip('requires unprivileged userns or root')
32
33 if not 'unprivileged_userns_clone' in isolation_features:
34 pytest.skip('requires unprivileged userns or root')
35
36 os.mkdir(self.temp_dir + '/ruby')
37
38 shutil.copytree(
39 option.test_dir + '/ruby/status_int',
40 self.temp_dir + '/ruby/status_int',
41 )
42 isolation = {
43 'namespaces': {'credential': not is_su, 'mount': True},
44 'rootfs': self.temp_dir,
45 }
46
47 self.load('status_int', isolation=isolation)
48
49 assert 'success' in self.conf(
50 '"/ruby/status_int/config.ru"', 'applications/status_int/script',
51 )
52
53 assert 'success' in self.conf(
54 '"/ruby/status_int"', 'applications/status_int/working_directory',
55 )
56
57 assert self.get()['status'] == 200, 'status int'