xref: /unit/test/unit/applications/lang/java.py (revision 1163)
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