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