xref: /unit/test/unit/applications/lang/go.py (revision 1165:998b521bbdb8)
1import os
2from subprocess import Popen
3from unit.applications.proto import TestApplicationProto
4
5
6class TestApplicationGo(TestApplicationProto):
7    @classmethod
8    def setUpClass(cls, complete_check=True):
9        unit = super().setUpClass(complete_check=False)
10
11        # check go module
12
13        go_app = TestApplicationGo()
14        go_app.testdir = unit.testdir
15        if go_app.prepare_env('empty', 'app').returncode == 0:
16            cls.available['modules']['go'] = []
17
18        return unit if not complete_check else unit.complete()
19
20    def prepare_env(self, script, name):
21        if not os.path.exists(self.testdir + '/go'):
22            os.mkdir(self.testdir + '/go')
23
24        env = os.environ.copy()
25        env['GOPATH'] = self.pardir + '/go'
26        process = Popen(
27            [
28                'go',
29                'build',
30                '-o',
31                self.testdir + '/go/' + name,
32                self.current_dir + '/go/' + script + '/' + name + '.go',
33            ],
34            env=env,
35        )
36
37        process.communicate()
38
39        return process
40
41    def load(self, script, name='app'):
42        self.prepare_env(script, name)
43
44        self._load_conf(
45            {
46                "listeners": {"*:7080": {"pass": "applications/" + script}},
47                "applications": {
48                    script: {
49                        "type": "external",
50                        "processes": {"spare": 0},
51                        "working_directory": self.current_dir
52                        + "/go/"
53                        + script,
54                        "executable": self.testdir + "/go/" + name,
55                    }
56                },
57            }
58        )
59