11019Szelenkov@nginx.comimport os 21157Smax.romanov@nginx.comimport glob 31019Szelenkov@nginx.comimport shutil 41019Szelenkov@nginx.comfrom subprocess import Popen 51019Szelenkov@nginx.comfrom unit.applications.proto import TestApplicationProto 61019Szelenkov@nginx.com 71019Szelenkov@nginx.com 81019Szelenkov@nginx.comclass TestApplicationJava(TestApplicationProto): 91019Szelenkov@nginx.com def load(self, script, name='app'): 101019Szelenkov@nginx.com app_path = self.testdir + '/java' 111019Szelenkov@nginx.com web_inf_path = app_path + '/WEB-INF/' 121019Szelenkov@nginx.com classes_path = web_inf_path + 'classes/' 131019Szelenkov@nginx.com script_path = self.current_dir + '/java/' + script + '/' 141019Szelenkov@nginx.com 151019Szelenkov@nginx.com if not os.path.isdir(app_path): 161019Szelenkov@nginx.com os.makedirs(app_path) 171019Szelenkov@nginx.com 181019Szelenkov@nginx.com src = [] 191019Szelenkov@nginx.com 201019Szelenkov@nginx.com for f in os.listdir(script_path): 21*1163Szelenkov@nginx.com file_path = script_path + f 22*1163Szelenkov@nginx.com 231019Szelenkov@nginx.com if f.endswith('.java'): 24*1163Szelenkov@nginx.com src.append(file_path) 251019Szelenkov@nginx.com continue 261019Szelenkov@nginx.com 271019Szelenkov@nginx.com if f.startswith('.') or f == 'Makefile': 281019Szelenkov@nginx.com continue 291019Szelenkov@nginx.com 30*1163Szelenkov@nginx.com if os.path.isdir(file_path): 311019Szelenkov@nginx.com if f == 'WEB-INF': 321019Szelenkov@nginx.com continue 331019Szelenkov@nginx.com 34*1163Szelenkov@nginx.com shutil.copytree(file_path, app_path + '/' + f) 351019Szelenkov@nginx.com continue 361019Szelenkov@nginx.com 371019Szelenkov@nginx.com if f == 'web.xml': 381019Szelenkov@nginx.com if not os.path.isdir(web_inf_path): 391019Szelenkov@nginx.com os.makedirs(web_inf_path) 401019Szelenkov@nginx.com 41*1163Szelenkov@nginx.com shutil.copy2(file_path, web_inf_path) 421019Szelenkov@nginx.com else: 43*1163Szelenkov@nginx.com shutil.copy2(file_path, app_path) 441019Szelenkov@nginx.com 451019Szelenkov@nginx.com if src: 461019Szelenkov@nginx.com if not os.path.isdir(classes_path): 471019Szelenkov@nginx.com os.makedirs(classes_path) 481019Szelenkov@nginx.com 491157Smax.romanov@nginx.com classpath = self.pardir + '/build/tomcat-servlet-api-9.0.13.jar' 501157Smax.romanov@nginx.com 511157Smax.romanov@nginx.com ws_jars = glob.glob( 521157Smax.romanov@nginx.com self.pardir + '/build/websocket-api-java-*.jar' 531157Smax.romanov@nginx.com ) 541157Smax.romanov@nginx.com 551157Smax.romanov@nginx.com if not ws_jars: 561157Smax.romanov@nginx.com self.fail('websocket api jar not found.') 571019Szelenkov@nginx.com 581019Szelenkov@nginx.com javac = [ 591019Szelenkov@nginx.com 'javac', 601019Szelenkov@nginx.com '-encoding', 'utf-8', 611019Szelenkov@nginx.com '-d', classes_path, 621157Smax.romanov@nginx.com '-classpath', classpath + ':' + ws_jars[0], 631019Szelenkov@nginx.com ] 641019Szelenkov@nginx.com javac.extend(src) 651019Szelenkov@nginx.com 661019Szelenkov@nginx.com process = Popen(javac) 671019Szelenkov@nginx.com process.communicate() 681019Szelenkov@nginx.com 691050Szelenkov@nginx.com self._load_conf( 701019Szelenkov@nginx.com { 711041Svbart@nginx.com "listeners": {"*:7080": {"pass": "applications/" + script}}, 721019Szelenkov@nginx.com "applications": { 731019Szelenkov@nginx.com script: { 741019Szelenkov@nginx.com "unit_jars": self.pardir + '/build', 751128Szelenkov@nginx.com "type": 'java', 761019Szelenkov@nginx.com "processes": {"spare": 0}, 771019Szelenkov@nginx.com "working_directory": script_path, 781019Szelenkov@nginx.com "webapp": app_path, 791019Szelenkov@nginx.com } 801019Szelenkov@nginx.com }, 811019Szelenkov@nginx.com } 821019Szelenkov@nginx.com ) 83