1 /*
2 * Copyright (C) 2021 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #include "ut_command.h"
16 using namespace Hdc;
17
18 namespace HdcTest {
TestBackgroundServerForClient(void * param)19 void *TestBackgroundServerForClient(void *param)
20 {
21 HdcServer server(true);
22 server.Initial("0.0.0.0:8710");
23 server.WorkerPendding();
24 WRITE_LOG(LOG_DEBUG, "Test ServerForClient free");
25 return nullptr;
26 }
27
TestRunClient(const string & debugServerPort,const string & debugConnectKey,const string & cmd)28 void TestRunClient(const string &debugServerPort, const string &debugConnectKey, const string &cmd)
29 {
30 uv_loop_t loopMain;
31 uv_loop_init(&loopMain);
32 HdcClient client(false, debugServerPort, &loopMain);
33 client.Initial(debugConnectKey);
34 client.ExecuteCommand(cmd);
35 uv_loop_close(&loopMain);
36 }
37
PreConnectDaemon(const string & debugServerPort,const string & debugConnectKey)38 void PreConnectDaemon(const string &debugServerPort, const string &debugConnectKey)
39 {
40 string bufString = "tconn ";
41 bufString += debugConnectKey;
42 WRITE_LOG(LOG_DEBUG, "------------Connect command------------");
43 TestRunClient(debugServerPort, "", bufString.c_str());
44 }
45
TestRuntimeCommandSimple(bool bTCPorUSB,int method,bool bNeedConnectDaemon)46 int TestRuntimeCommandSimple(bool bTCPorUSB, int method, bool bNeedConnectDaemon)
47 {
48 // These two parameters are tested, not much change, manually modify by myself
49 string debugServerPort;
50 string debugConnectKey;
51 debugServerPort = DEBUG_ADDRESS;
52 if (bTCPorUSB) {
53 debugConnectKey = DEBUG_TCP_CONNECT_KEY;
54 } else {
55 debugConnectKey = DEBUG_USB_CONNECT_KEY;
56 }
57 if (bNeedConnectDaemon) { // just tcp
58 PreConnectDaemon(debugServerPort, debugConnectKey);
59 }
60 WRITE_LOG(LOG_DEBUG, "Test Jump TestRuntimeCommand");
61 TestRuntimeCommand(method, debugServerPort, debugConnectKey);
62 return 0;
63 }
64
TestTaskCommand(int method,const string & debugServerPort,const string & debugConnectKey)65 int TestTaskCommand(int method, const string &debugServerPort, const string &debugConnectKey)
66 {
67 WRITE_LOG(LOG_DEBUG, "------------Operate command------------");
68 string bufString;
69 switch (method) {
70 case UT_SHELL_BASIC: // Basic order test
71 TestRunClient(debugServerPort, debugConnectKey, "shell id");
72 break;
73 case UT_SHELL_LIGHT: // Small pressure test
74 TestRunClient(debugServerPort, debugConnectKey, "shell cat /etc/passwd");
75 break;
76 case UT_SHELL_HEAVY: // High pressure test (Long Time)
77 TestRunClient(debugServerPort, debugConnectKey, "shell cat /data/local/tmp/root.txt");
78 break;
79 case UT_SHELL_INTERACTIVE: // Interactive shell test
80 TestRunClient(debugServerPort, debugConnectKey, CMDSTR_SHELL.c_str());
81 break;
82 case UT_FILE_SEND: { // send files
83 bufString = Base::StringFormat("file send %s/file.local %s/file.remote", UT_TMP_PATH.c_str(),
84 UT_TMP_PATH.c_str());
85 TestRunClient(debugServerPort, debugConnectKey, bufString);
86 break;
87 }
88 case UT_FILE_RECV: // recv files
89 TestRunClient(debugServerPort, debugConnectKey,
90 "file recv /mnt/hgfs/vtmp/f.txt /mnt/hgfs/vtmp/f2.txt -z 1");
91 break;
92 case UT_FORWARD_TCP2TCP: // TCP forward
93 TestRunClient(debugServerPort, debugConnectKey, "fport tcp:8081 tcp:8082");
94 break;
95 case UT_FORWARD_TCP2FILE: // localfilesystem forward
96 TestRunClient(debugServerPort, debugConnectKey, "fport tcp:8081 localfilesystem:mysocket");
97 break;
98 case UT_FORWARD_TCP2DEV:
99 TestRunClient(debugServerPort, debugConnectKey, "fport tcp:8081 dev:/dev/urandom");
100 break;
101 case UT_FORWARD_TCP2JDWP: // jdwp forward
102 TestRunClient(debugServerPort, debugConnectKey, "fport tcp:8081 jdwp:1234");
103 break;
104 case UT_APP_INSTALL: // Single and multiple and multiple paths support
105 bufString = Base::StringFormat("install %s/app.hap", UT_TMP_PATH.c_str());
106 TestRunClient(debugServerPort, debugConnectKey, bufString);
107 break;
108 case UT_TEST_TMP:
109 #ifdef DEF_NULL
110 while (true) {
111 uv_sleep(GLOBAL_TIMEOUT);
112 TestRunClient(debugServerPort, debugConnectKey, "list targets");
113 TestRunClient(debugServerPort, debugConnectKey, "shell id");
114 TestRunClient(debugServerPort, debugConnectKey, "shell bm dump -a");
115 }
116 TestRunClient(debugServerPort, debugConnectKey, "install /d/helloworld.hap");
117 TestRunClient(debugServerPort, debugConnectKey, "target mount");
118 TestRunClient(debugServerPort, debugConnectKey, "shell pwd");
119 TestRunClient(debugServerPort, debugConnectKey, "target mount");
120 TestRunClient(debugServerPort, debugConnectKey, "shell pwd");
121 TestRunClient(debugServerPort, debugConnectKey, "install /d -rt");
122 TestRunClient(debugServerPort, debugConnectKey, "fport tcp:8081 tcp:8082");
123 TestRunClient(debugServerPort, debugConnectKey, "fport tcp:8081 dev:/dev/urandom");
124 TestRunClient(debugServerPort, debugConnectKey, "shell hilog");
125 TestRunClient(debugServerPort, debugConnectKey, "file send /mnt/hgfs/vtmp/f.txt /tmp/f2.txt");
126 TestRunClient(debugServerPort, debugConnectKey, "file recv /tmp/f2.txt /mnt/hgfs/vtmp/f2.txt");
127 TestRunClient(debugServerPort, debugConnectKey, "shell find /proc");
128 TestRunClient(debugServerPort, debugConnectKey, "file send \"/d/a b/1.txt\" \"/d/a b/2.txt\"");
129 TestRunClient(debugServerPort, debugConnectKey, "file recv \"/d/a b/1.txt\" \"/d/a b/2.txt\"");
130 #endif
131 break;
132 default:
133 break;
134 }
135 WRITE_LOG(LOG_DEBUG, "!!!Client finish");
136 return 0;
137 }
138
TestRuntimeCommand(const int method,const string & debugServerPort,const string & debugConnectKey)139 int TestRuntimeCommand(const int method, const string &debugServerPort, const string &debugConnectKey)
140 {
141 switch (method) {
142 case UT_HELP:
143 TestRunClient(debugServerPort, "", CMDSTR_SOFTWARE_HELP.c_str());
144 TestRunClient(debugServerPort, "", CMDSTR_SOFTWARE_VERSION.c_str());
145 break;
146 case UT_DISCOVER:
147 TestRunClient(debugServerPort, "", CMDSTR_TARGET_DISCOVER.c_str());
148 break;
149 case UT_LIST_TARGETS:
150 TestRunClient(debugServerPort, "", CMDSTR_LIST_TARGETS.c_str());
151 break;
152 case UT_CONNECT_ANY:
153 TestRunClient(debugServerPort, "", CMDSTR_CONNECT_ANY.c_str());
154 break;
155 case UT_KILL_SERVER:
156 TestRunClient(debugServerPort, "", CMDSTR_SERVICE_KILL.c_str());
157 break;
158 case UT_KILL_DAEMON:
159 TestRunClient(debugServerPort, debugConnectKey, "kill daemon");
160 break;
161 default:
162 TestTaskCommand(method, debugServerPort, debugConnectKey);
163 break;
164 }
165 return 0;
166 }
167 } // namespace HdcTest
168