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