1from unit.applications.lang.php import ApplicationPHP 2 3prerequisites = {'modules': {'php': 'any'}, 'features': {'isolation': True}} 4 5client = ApplicationPHP() 6 7 8def test_php_isolation_rootfs(is_su, require, temp_dir): 9 isolation = {'rootfs': temp_dir} 10 11 if not is_su: 12 require( 13 { 14 'features': { 15 'isolation': [ 16 'unprivileged_userns_clone', 17 'user', 18 'mnt', 19 'pid', 20 ] 21 } 22 } 23 ) 24 25 isolation['namespaces'] = { 26 'mount': True, 27 'credential': True, 28 'pid': True, 29 } 30 31 client.load('phpinfo', isolation=isolation) 32 33 assert 'success' in client.conf( 34 '"/app/php/phpinfo"', 'applications/phpinfo/root' 35 ) 36 assert 'success' in client.conf( 37 '"/app/php/phpinfo"', 'applications/phpinfo/working_directory' 38 ) 39 40 assert client.get()['status'] == 200, 'empty rootfs' 41 42 43def test_php_isolation_rootfs_extensions(is_su, require, temp_dir): 44 isolation = {'rootfs': temp_dir} 45 46 if not is_su: 47 require( 48 { 49 'features': { 50 'isolation': [ 51 'unprivileged_userns_clone', 52 'user', 53 'mnt', 54 'pid', 55 ] 56 } 57 } 58 ) 59 60 isolation['namespaces'] = { 61 'mount': True, 62 'credential': True, 63 'pid': True, 64 } 65 66 client.load('list-extensions', isolation=isolation) 67 68 assert 'success' in client.conf( 69 '"/app/php/list-extensions"', 'applications/list-extensions/root' 70 ) 71 72 assert 'success' in client.conf( 73 {'file': '/php/list-extensions/php.ini'}, 74 'applications/list-extensions/options', 75 ) 76 77 assert 'success' in client.conf( 78 '"/app/php/list-extensions"', 79 'applications/list-extensions/working_directory', 80 ) 81 82 extensions = client.getjson()['body'] 83 84 assert 'json' in extensions, 'json in extensions list' 85 assert 'unit' in extensions, 'unit in extensions list' 86