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