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