1import os 2import subprocess 3 4import pytest 5 6from unit.applications.lang.java import ApplicationJava 7from unit.option import option 8 9prerequisites = {'modules': {'java': 'all'}, 'privileged_user': True} 10 11client = ApplicationJava() 12 13 14@pytest.fixture(autouse=True) 15def setup_method_fixture(temp_dir): 16 os.makedirs(f'{temp_dir}/jars') 17 os.makedirs(f'{temp_dir}/tmp') 18 os.chmod(f'{temp_dir}/tmp', 0o777) 19 20 try: 21 subprocess.run( 22 [ 23 "mount", 24 "--bind", 25 f'{option.current_dir}/build', 26 f'{temp_dir}/jars', 27 ], 28 stderr=subprocess.STDOUT, 29 check=True, 30 ) 31 32 except KeyboardInterrupt: 33 raise 34 35 except subprocess.CalledProcessError: 36 pytest.fail("Can't run mount process.") 37 38 yield 39 40 try: 41 subprocess.run( 42 ["umount", "--lazy", f"{option.temp_dir}/jars"], 43 stderr=subprocess.STDOUT, 44 check=True, 45 ) 46 47 except KeyboardInterrupt: 48 raise 49 50 except subprocess.CalledProcessError: 51 pytest.fail("Can't run umount process.") 52 53 54def test_java_isolation_rootfs_chroot_war(temp_dir): 55 client.load('empty_war', isolation={'rootfs': temp_dir}) 56 57 assert 'success' in client.conf( 58 '"/"', 59 '/config/applications/empty_war/working_directory', 60 ) 61 62 assert 'success' in client.conf( 63 '"/jars"', 'applications/empty_war/unit_jars' 64 ) 65 assert 'success' in client.conf( 66 '"/java/empty.war"', 'applications/empty_war/webapp' 67 ) 68 69 assert client.get()['status'] == 200, 'war' 70