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