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