1import os 2from pathlib import Path 3 4import pytest 5 6from unit.applications.proto import ApplicationProto 7 8client = ApplicationProto() 9 10 11@pytest.fixture(autouse=True) 12def setup_method_fixture(temp_dir): 13 os.makedirs(f'{temp_dir}/assets/dir') 14 os.makedirs(f'{temp_dir}/assets/dir2') 15 16 Path(f'{temp_dir}/assets/dir/file').write_text('1', encoding='utf-8') 17 Path(f'{temp_dir}/assets/dir2/file2').write_text('2', encoding='utf-8') 18 19 assert 'success' in client.conf( 20 { 21 "listeners": {"*:8080": {"pass": "routes"}}, 22 "routes": [{"action": {"share": f'{temp_dir}/assets$uri'}}], 23 "applications": {}, 24 } 25 ) 26 27 28def action_update(conf): 29 assert 'success' in client.conf(conf, 'routes/0/action') 30 31 32def test_share_array(temp_dir): 33 assert client.get(url='/dir/file')['body'] == '1' 34 assert client.get(url='/dir2/file2')['body'] == '2' 35 36 action_update({"share": [f'{temp_dir}/assets/dir$uri']}) 37 38 assert client.get(url='/file')['body'] == '1' 39 assert client.get(url='/file2')['status'] == 404 40 41 action_update( 42 { 43 "share": [ 44 f'{temp_dir}/assets/dir$uri', 45 f'{temp_dir}/assets/dir2$uri', 46 ] 47 } 48 ) 49 50 assert client.get(url='/file')['body'] == '1' 51 assert client.get(url='/file2')['body'] == '2' 52 53 action_update( 54 { 55 "share": [ 56 f'{temp_dir}/assets/dir2$uri', 57 f'{temp_dir}/assets/dir3$uri', 58 ] 59 } 60 ) 61 62 assert client.get(url='/file')['status'] == 404 63 assert client.get(url='/file2')['body'] == '2' 64 65 66def test_share_array_fallback(): 67 action_update({"share": ["/blah", "/blah2"], "fallback": {"return": 201}}) 68 69 assert client.get()['status'] == 201 70 71 72def test_share_array_invalid(): 73 assert 'error' in client.conf({"share": []}, 'routes/0/action') 74 assert 'error' in client.conf({"share": {}}, 'routes/0/action') 75