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 <gtest/gtest.h>
16 
17 #include "begetctl.h"
18 #include "securec.h"
19 #include "shell.h"
20 #include "shell_utils.h"
21 #include "shell_bas.h"
22 #include "init_param.h"
23 #include "param_init.h"
24 
25 using namespace std;
26 using namespace testing::ext;
27 
28 namespace init_ut {
29 class ParamShellUnitTest : public testing::Test {
30 public:
ParamShellUnitTest()31     ParamShellUnitTest() {};
~ParamShellUnitTest()32     virtual ~ParamShellUnitTest() {};
SetUpTestCase(void)33     static void SetUpTestCase(void) {};
TearDownTestCase(void)34     static void TearDownTestCase(void) {};
SetUp(void)35     void SetUp(void) {};
TearDown(void)36     void TearDown(void) {};
TestBody(void)37     void TestBody(void) {};
TestInitParamShell()38     void TestInitParamShell()
39     {
40         SystemSetParameter("aaa", "aaa");
41         BShellHandle bshd = GetShellHandle();
42         if (bshd == nullptr) {
43             return;
44         }
45         const char *args[] = {"paramshell", "\n"};
46         const ParamInfo *param = BShellEnvGetReservedParam(bshd, PARAM_REVERESD_NAME_CURR_PARAMETER);
47         int ret = BShellEnvSetParam(bshd, PARAM_REVERESD_NAME_CURR_PARAMETER, "..a", PARAM_STRING, (void *)"..a");
48         EXPECT_EQ(ret, 0);
49         SetParamShellPrompt(bshd, args[1]);
50         SetParamShellPrompt(bshd, "..");
51 
52         ret = BShellEnvSetParam(bshd, param->name, param->desc, param->type, (void *)"");
53         SetParamShellPrompt(bshd, "..");
54 
55         SetParamShellPrompt(bshd, ".a");
56         SetParamShellPrompt(bshd, ".");
57         SetParamShellPrompt(bshd, args[1]);
58         BShellParamCmdRegister(bshd, 1);
59         BShellEnvStart(bshd);
60         ret = BShellEnvOutputPrompt(bshd, "testprompt");
61         ret = BShellEnvOutputPrompt(bshd, "testprompt1111111111111111111111111111111111111111111111111111111111");
62         BShellEnvOutputByte(bshd, 'o');
63         EXPECT_EQ(ret, 0);
64     }
TestParamShellCmd()65     void TestParamShellCmd()
66     {
67         BShellHandle bshd = GetShellHandle();
68         BShellKey *key = BShellEnvGetDefaultKey('\n');
69         EXPECT_NE(key, nullptr);
70         if (strcpy_s(bshd->buffer, sizeof(bshd->buffer), "cd const") != EOK) {
71             return;
72         }
73         bshd->length = strlen(bshd->buffer);
74         int ret = key->keyHandle(bshd, '\n');
75         EXPECT_EQ(ret, 0);
76         if (strcpy_s(bshd->buffer, sizeof(bshd->buffer), "cat aaa") != EOK) {
77             return;
78         }
79         bshd->length = strlen(bshd->buffer);
80         ret = key->keyHandle(bshd, '\n');
81         EXPECT_EQ(ret, 0);
82         if (strcpy_s(bshd->buffer, sizeof(bshd->buffer), "testnotcmd") != EOK) {
83             return;
84         }
85         bshd->length = strlen(bshd->buffer);
86         ret = key->keyHandle(bshd, '\n');
87         EXPECT_EQ(ret, 0);
88         // test param start with "
89         if (strcpy_s(bshd->buffer, sizeof(bshd->buffer), "\"ls") != EOK) {
90             return;
91         }
92         bshd->length = strlen(bshd->buffer);
93         ret = key->keyHandle(bshd, '\n');
94         EXPECT_EQ(ret, 0);
95         // test argc is 0
96         if (strcpy_s(bshd->buffer, sizeof(bshd->buffer), ",ls") != EOK) {
97             return;
98         }
99         bshd->length = strlen(bshd->buffer);
100         ret = key->keyHandle(bshd, '\n');
101         EXPECT_EQ(ret, 0);
102         if (strcpy_s(bshd->buffer, sizeof(bshd->buffer), "$test$") != EOK) {
103             return;
104         }
105         bshd->length = strlen(bshd->buffer);
106         ret = key->keyHandle(bshd, '\n');
107         EXPECT_EQ(ret, 0);
108         if (strcpy_s(bshd->buffer, sizeof(bshd->buffer), "exit") != EOK) {
109             return;
110         }
111         bshd->length = strlen(bshd->buffer);
112         ret = key->keyHandle(bshd, '\n');
113         EXPECT_EQ(ret, 0);
114     }
TestParamShellCmd1()115     void TestParamShellCmd1()
116     {
117         BShellHandle bshd = GetShellHandle();
118         BShellKey *key = BShellEnvGetDefaultKey('\n');
119         EXPECT_NE(key, nullptr);
120         if (strcpy_s(bshd->buffer, sizeof(bshd->buffer), "pwd") != EOK) {
121             return;
122         }
123         bshd->length = strlen(bshd->buffer);
124         int ret = key->keyHandle(bshd, '\n');
125         EXPECT_EQ(ret, 0);
126         if (strcpy_s(bshd->buffer, sizeof(bshd->buffer), "help") != EOK) {
127             return;
128         }
129         bshd->length = strlen(bshd->buffer);
130         ret = key->keyHandle(bshd, '\n');
131         EXPECT_EQ(ret, 0);
132         if (strcpy_s(bshd->buffer, sizeof(bshd->buffer), "dump") != EOK) {
133             return;
134         }
135         bshd->length = strlen(bshd->buffer);
136         ret = key->keyHandle(bshd, '\n');
137         EXPECT_EQ(ret, 0);
138         if (strcpy_s(bshd->buffer, sizeof(bshd->buffer), "dump verbose") != EOK) {
139             return;
140         }
141         bshd->length = strlen(bshd->buffer);
142         ret = key->keyHandle(bshd, '\n');
143         EXPECT_EQ(ret, 0);
144     }
TestParamShellcmdEndkey()145     void TestParamShellcmdEndkey()
146     {
147         BShellHandle bshd = GetShellHandle();
148         bshd->input(nullptr, 0);
149         BShellKey *key = BShellEnvGetDefaultKey('\b');
150         EXPECT_NE(key, nullptr);
151         if (strcpy_s(bshd->buffer, sizeof(bshd->buffer), "testbbackspace") != EOK) {
152             return;
153         }
154         bshd->length = strlen(bshd->buffer);
155         bshd->cursor = strlen("testb");
156         int ret = key->keyHandle(bshd, '\b');
157         EXPECT_EQ(ret, 0);
158         if (strcpy_s(bshd->buffer, sizeof(bshd->buffer), "testbbackspace") != EOK) {
159             return;
160         }
161         bshd->length = strlen(bshd->buffer);
162         bshd->cursor = strlen(bshd->buffer);
163         ret = key->keyHandle(bshd, '\b');
164         EXPECT_EQ(ret, 0);
165 
166         key = BShellEnvGetDefaultKey('\t');
167         if (strcpy_s(bshd->buffer, sizeof(bshd->buffer), "testtab") != EOK) {
168             return;
169         }
170         bshd->length = strlen(bshd->buffer);
171         ret = key->keyHandle(bshd, '\t');
172         EXPECT_NE(key, nullptr);
173         BShellEnvProcessInput(bshd, (char)3); // 3 is ctrl c
174         BShellEnvProcessInput(bshd, '\e');
175         BShellEnvProcessInput(bshd, '[');
176         bshd->length = 1;
177         bshd->cursor = 1;
178         BShellEnvProcessInput(bshd, 'C');
179         BShellEnvProcessInput(bshd, 'D');
180     }
181 };
182 
183 HWTEST_F(ParamShellUnitTest, Init_TestInitParamShell_001, TestSize.Level1)
184 {
185     ParamShellUnitTest test;
186     test.TestInitParamShell();
187     test.TestParamShellCmd();
188     test.TestParamShellCmd1();
189 }
190 HWTEST_F(ParamShellUnitTest, Init_TestParamShellInput_001, TestSize.Level1)
191 {
192     BShellHandle bshd = GetShellHandle();
193     BShellEnvProcessInput(bshd, '\n');
194 
195     BShellEnvProcessInput(bshd, 'l');
196     bshd->length = BSH_COMMAND_MAX_LENGTH;
197 
198     BShellEnvProcessInput(bshd, 'l');
199     bshd->length = sizeof('l');
200     bshd->cursor = 0;
201     BShellEnvProcessInput(bshd, 's');
202     BShellEnvProcessInput(bshd, '\n');
203 
204     BShellEnvProcessInput(bshd, '\n'); // test bshd buff length is 0
205 
206     int ret = BShellEnvRegisterKeyHandle(bshd, 'z', (BShellkeyHandle)(void*)0x409600); // 0x409600 construct address
207     EXPECT_EQ(ret, 0);
208 }
209 HWTEST_F(ParamShellUnitTest, Init_TestParamShellcmd_001, TestSize.Level1)
210 {
211     ParamShellUnitTest test;
212     test.TestParamShellcmdEndkey();
213     GetSystemCommitId();
214     BShellEnvLoop(nullptr);
215     BShellEnvErrString(GetShellHandle(), 1);
216     BShellEnvOutputResult(GetShellHandle(), 1);
217 }
218 }  // namespace init_ut
219