xref: /unit/test/unit/applications/lang/go.py (revision 1303)
11019Szelenkov@nginx.comimport os
21019Szelenkov@nginx.comfrom subprocess import Popen
31019Szelenkov@nginx.comfrom unit.applications.proto import TestApplicationProto
41019Szelenkov@nginx.com
51019Szelenkov@nginx.com
61019Szelenkov@nginx.comclass TestApplicationGo(TestApplicationProto):
71165Szelenkov@nginx.com    @classmethod
81165Szelenkov@nginx.com    def setUpClass(cls, complete_check=True):
91165Szelenkov@nginx.com        unit = super().setUpClass(complete_check=False)
101165Szelenkov@nginx.com
111165Szelenkov@nginx.com        # check go module
121165Szelenkov@nginx.com
131165Szelenkov@nginx.com        go_app = TestApplicationGo()
141165Szelenkov@nginx.com        go_app.testdir = unit.testdir
151208Szelenkov@nginx.com        proc = go_app.prepare_env('empty', 'app')
161208Szelenkov@nginx.com        if proc and proc.returncode == 0:
171165Szelenkov@nginx.com            cls.available['modules']['go'] = []
181165Szelenkov@nginx.com
191165Szelenkov@nginx.com        return unit if not complete_check else unit.complete()
201165Szelenkov@nginx.com
211164Szelenkov@nginx.com    def prepare_env(self, script, name):
221164Szelenkov@nginx.com        if not os.path.exists(self.testdir + '/go'):
231019Szelenkov@nginx.com            os.mkdir(self.testdir + '/go')
241019Szelenkov@nginx.com
251019Szelenkov@nginx.com        env = os.environ.copy()
261019Szelenkov@nginx.com        env['GOPATH'] = self.pardir + '/go'
271164Szelenkov@nginx.com
281208Szelenkov@nginx.com        try:
291208Szelenkov@nginx.com            process = Popen(
301208Szelenkov@nginx.com                [
311208Szelenkov@nginx.com                    'go',
321208Szelenkov@nginx.com                    'build',
331208Szelenkov@nginx.com                    '-o',
341208Szelenkov@nginx.com                    self.testdir + '/go/' + name,
351208Szelenkov@nginx.com                    self.current_dir + '/go/' + script + '/' + name + '.go',
361208Szelenkov@nginx.com                ],
371208Szelenkov@nginx.com                env=env,
381208Szelenkov@nginx.com            )
391208Szelenkov@nginx.com
401208Szelenkov@nginx.com            process.communicate()
411208Szelenkov@nginx.com
421208Szelenkov@nginx.com        except:
431208Szelenkov@nginx.com            return None
441019Szelenkov@nginx.com
451164Szelenkov@nginx.com        return process
461164Szelenkov@nginx.com
47*1303St.nateldemoura@f5.com    def load(self, script, name='app', **kwargs):
481164Szelenkov@nginx.com        self.prepare_env(script, name)
491164Szelenkov@nginx.com
501050Szelenkov@nginx.com        self._load_conf(
511019Szelenkov@nginx.com            {
521041Svbart@nginx.com                "listeners": {"*:7080": {"pass": "applications/" + script}},
531019Szelenkov@nginx.com                "applications": {
541019Szelenkov@nginx.com                    script: {
551019Szelenkov@nginx.com                        "type": "external",
561019Szelenkov@nginx.com                        "processes": {"spare": 0},
571164Szelenkov@nginx.com                        "working_directory": self.current_dir
581164Szelenkov@nginx.com                        + "/go/"
591164Szelenkov@nginx.com                        + script,
601164Szelenkov@nginx.com                        "executable": self.testdir + "/go/" + name,
611019Szelenkov@nginx.com                    }
621019Szelenkov@nginx.com                },
63*1303St.nateldemoura@f5.com            },
64*1303St.nateldemoura@f5.com            **kwargs
651019Szelenkov@nginx.com        )
66