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