1e509ee18Sopenharmony_ci# 2e509ee18Sopenharmony_ci# Copyright (c) 2024 Huawei Device Co., Ltd. 3e509ee18Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License"); 4e509ee18Sopenharmony_ci# you may not use this file except in compliance with the License. 5e509ee18Sopenharmony_ci# You may obtain a copy of the License at 6e509ee18Sopenharmony_ci# 7e509ee18Sopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0 8e509ee18Sopenharmony_ci# 9e509ee18Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software 10e509ee18Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS, 11e509ee18Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12e509ee18Sopenharmony_ci# See the License for the specific language governing permissions and 13e509ee18Sopenharmony_ci# limitations under the License. 14e509ee18Sopenharmony_ci# 15e509ee18Sopenharmony_ci 16e509ee18Sopenharmony_ciimport os 17e509ee18Sopenharmony_ciimport socket 18e509ee18Sopenharmony_ciimport time 19e509ee18Sopenharmony_ciimport subprocess 20e509ee18Sopenharmony_ciimport sys 21e509ee18Sopenharmony_ciimport unittest 22e509ee18Sopenharmony_ci 23e509ee18Sopenharmony_ci 24e509ee18Sopenharmony_ciclass JsTestBase(unittest.TestCase): 25e509ee18Sopenharmony_ci hdctool = None 26e509ee18Sopenharmony_ci tcp_client_socket = None 27e509ee18Sopenharmony_ci HOST = '127.0.0.1' 28e509ee18Sopenharmony_ci PORT = 9999 29e509ee18Sopenharmony_ci BUFSIZ = 1024 30e509ee18Sopenharmony_ci ADDRESS = (HOST, PORT) 31e509ee18Sopenharmony_ci 32e509ee18Sopenharmony_ci def get_hdctool(self): 33e509ee18Sopenharmony_ci self.hdctool = os.environ.get("HDCTool", "hdc") 34e509ee18Sopenharmony_ci 35e509ee18Sopenharmony_ci def connect_client_socket(self, dbg_name): 36e509ee18Sopenharmony_ci self.tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 37e509ee18Sopenharmony_ci subprocess.run( 38e509ee18Sopenharmony_ci [ 39e509ee18Sopenharmony_ci self.hdctool, 40e509ee18Sopenharmony_ci "fport", 41e509ee18Sopenharmony_ci "tcp:%i" % self.PORT, 42e509ee18Sopenharmony_ci "tcp:%i" % self.PORT, 43e509ee18Sopenharmony_ci ], 44e509ee18Sopenharmony_ci stdout=subprocess.PIPE 45e509ee18Sopenharmony_ci ) 46e509ee18Sopenharmony_ci connection = 0 47e509ee18Sopenharmony_ci while(connection < 5): 48e509ee18Sopenharmony_ci arkdb_server = False 49e509ee18Sopenharmony_ci ret = None 50e509ee18Sopenharmony_ci result = subprocess.run( 51e509ee18Sopenharmony_ci '%s shell "netstat -anp | grep PandaDebugger"' % os.environ.get("HDCTool", "hdc"), 52e509ee18Sopenharmony_ci stdout=subprocess.PIPE, 53e509ee18Sopenharmony_ci ) 54e509ee18Sopenharmony_ci if (result.returncode == 0): 55e509ee18Sopenharmony_ci ret = result.stdout 56e509ee18Sopenharmony_ci else: 57e509ee18Sopenharmony_ci print("Failed to grep PandaDebugger!") 58e509ee18Sopenharmony_ci sys.exit(0) 59e509ee18Sopenharmony_ci 60e509ee18Sopenharmony_ci out_str = str(ret).split('\\n') 61e509ee18Sopenharmony_ci for sub_str in out_str: 62e509ee18Sopenharmony_ci if (sub_str.find('CONNECTED') != -1): 63e509ee18Sopenharmony_ci arkdb_server = True 64e509ee18Sopenharmony_ci if arkdb_server == True: 65e509ee18Sopenharmony_ci self.tcp_client_socket.connect(self.ADDRESS) 66e509ee18Sopenharmony_ci break 67e509ee18Sopenharmony_ci time.sleep(1) 68e509ee18Sopenharmony_ci connection = connection + 1 69e509ee18Sopenharmony_ci if connection == 5: 70e509ee18Sopenharmony_ci self.fail(self, "Not connect to arkdb server.") 71e509ee18Sopenharmony_ci 72e509ee18Sopenharmony_ci def close_client_socket(self): 73e509ee18Sopenharmony_ci self.tcp_client_socket.close() 74e509ee18Sopenharmony_ci 75e509ee18Sopenharmony_ci def send_command(self, command): 76e509ee18Sopenharmony_ci if command == '': 77e509ee18Sopenharmony_ci self.fail('Command is not vaild') 78e509ee18Sopenharmony_ci sent = self.tcp_client_socket.send(command.encode('utf-8')) 79e509ee18Sopenharmony_ci if sent == 0: 80e509ee18Sopenharmony_ci self.fail('Failed to send command: %s' % command) 81e509ee18Sopenharmony_ci try: 82e509ee18Sopenharmony_ci self.tcp_client_socket.settimeout(15) 83e509ee18Sopenharmony_ci os.environ["isSkipped"] = "False" 84e509ee18Sopenharmony_ci data, addr = self.tcp_client_socket.recvfrom(self.BUFSIZ) 85e509ee18Sopenharmony_ci print("Recv: ", data.decode('utf-8')) 86e509ee18Sopenharmony_ci except TimeoutError: 87e509ee18Sopenharmony_ci self.tcp_client_socket.close() 88e509ee18Sopenharmony_ci os.environ["isSkipped"] = "True" 89e509ee18Sopenharmony_ci self.fail("TimeoutError") 90e509ee18Sopenharmony_ci 91e509ee18Sopenharmony_ci def run_arkdb_server(self, dbg_name): 92e509ee18Sopenharmony_ci panda_dbg = [] 93e509ee18Sopenharmony_ci real_panda_name = None 94e509ee18Sopenharmony_ci ret = None 95e509ee18Sopenharmony_ci result = subprocess.run( 96e509ee18Sopenharmony_ci '%s shell "netstat -anp | grep PandaDebugger"' % os.environ.get("HDCTool", "hdc"), 97e509ee18Sopenharmony_ci stdout=subprocess.PIPE, 98e509ee18Sopenharmony_ci ) 99e509ee18Sopenharmony_ci if (result.returncode == 0): 100e509ee18Sopenharmony_ci ret = result.stdout 101e509ee18Sopenharmony_ci else: 102e509ee18Sopenharmony_ci print("Failed to grep PandaDebugger!") 103e509ee18Sopenharmony_ci sys.exit(0) 104e509ee18Sopenharmony_ci 105e509ee18Sopenharmony_ci out_str = str(ret).split('\\n') 106e509ee18Sopenharmony_ci pos_start = out_str[0].find("@") + 1 107e509ee18Sopenharmony_ci out_str = out_str[0].split('\\r')[0] 108e509ee18Sopenharmony_ci panda_dbg.append(out_str[pos_start : ]) 109e509ee18Sopenharmony_ci if len(panda_dbg) == 0: 110e509ee18Sopenharmony_ci print('Not exist PandaDebugger with name %s' % dbg_name) 111e509ee18Sopenharmony_ci sys.exit(0) 112e509ee18Sopenharmony_ci else: 113e509ee18Sopenharmony_ci panda_name_len = 0 114e509ee18Sopenharmony_ci for sub_panda in panda_dbg: 115e509ee18Sopenharmony_ci if panda_name_len == 0: 116e509ee18Sopenharmony_ci panda_name_len = len(sub_panda) 117e509ee18Sopenharmony_ci real_panda_name = sub_panda 118e509ee18Sopenharmony_ci elif len(sub_panda) < panda_name_len: 119e509ee18Sopenharmony_ci panda_name_len = len(sub_panda) 120e509ee18Sopenharmony_ci real_panda_name = sub_panda 121e509ee18Sopenharmony_ci 122e509ee18Sopenharmony_ci subprocess.Popen( 123e509ee18Sopenharmony_ci [self.hdctool, 'shell', 'arkdb', real_panda_name, 'server'], 124e509ee18Sopenharmony_ci stdout=subprocess.PIPE, 125e509ee18Sopenharmony_ci ) 126