xref: /unit/test/unit/applications/lang/go.py (revision 1621:275b26bbd3ae)
1import os
2import subprocess
3
4from unit.applications.proto import TestApplicationProto
5from conftest import option
6
7
8class TestApplicationGo(TestApplicationProto):
9    def prepare_env(self, script, name, static=False):
10        if not os.path.exists(self.temp_dir + '/go'):
11            os.mkdir(self.temp_dir + '/go')
12
13        env = os.environ.copy()
14        env['GOPATH'] = option.current_dir + '/build/go'
15
16        if static:
17            args = [
18                'go',
19                'build',
20                '-tags',
21                'netgo',
22                '-ldflags',
23                '-extldflags "-static"',
24                '-o',
25                self.temp_dir + '/go/' + name,
26                option.test_dir + '/go/' + script + '/' + name + '.go',
27            ]
28        else:
29            args = [
30                'go',
31                'build',
32                '-o',
33                self.temp_dir + '/go/' + name,
34                option.test_dir + '/go/' + script + '/' + name + '.go',
35            ]
36
37        try:
38            process = subprocess.Popen(args, env=env)
39            process.communicate()
40
41        except:
42            return None
43
44        return process
45
46    def load(self, script, name='app', **kwargs):
47        static_build = False
48
49        wdir = option.test_dir + "/go/" + script
50        executable = self.temp_dir + "/go/" + name
51
52        if 'isolation' in kwargs and 'rootfs' in kwargs['isolation']:
53            wdir = "/go/"
54            executable = "/go/" + name
55            static_build = True
56
57        self.prepare_env(script, name, static=static_build)
58
59        conf = {
60            "listeners": {"*:7080": {"pass": "applications/" + script}},
61            "applications": {
62                script: {
63                    "type": "external",
64                    "processes": {"spare": 0},
65                    "working_directory": wdir,
66                    "executable": executable,
67                },
68            },
69        }
70
71        self._load_conf(conf, **kwargs)
72