1d9f0492fSopenharmony_ci/*
2d9f0492fSopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd.
3d9f0492fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4d9f0492fSopenharmony_ci * you may not use this file except in compliance with the License.
5d9f0492fSopenharmony_ci * You may obtain a copy of the License at
6d9f0492fSopenharmony_ci *
7d9f0492fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0
8d9f0492fSopenharmony_ci *
9d9f0492fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10d9f0492fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11d9f0492fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12d9f0492fSopenharmony_ci * See the License for the specific language governing permissions and
13d9f0492fSopenharmony_ci * limitations under the License.
14d9f0492fSopenharmony_ci */
15d9f0492fSopenharmony_ci#include <gtest/gtest.h>
16d9f0492fSopenharmony_ci
17d9f0492fSopenharmony_ci#include "begetctl.h"
18d9f0492fSopenharmony_ci#include "securec.h"
19d9f0492fSopenharmony_ci#include "shell.h"
20d9f0492fSopenharmony_ci#include "shell_utils.h"
21d9f0492fSopenharmony_ci#include "shell_bas.h"
22d9f0492fSopenharmony_ci#include "init_param.h"
23d9f0492fSopenharmony_ci#include "param_init.h"
24d9f0492fSopenharmony_ci
25d9f0492fSopenharmony_ciusing namespace std;
26d9f0492fSopenharmony_ciusing namespace testing::ext;
27d9f0492fSopenharmony_ci
28d9f0492fSopenharmony_cinamespace init_ut {
29d9f0492fSopenharmony_ciclass ParamShellUnitTest : public testing::Test {
30d9f0492fSopenharmony_cipublic:
31d9f0492fSopenharmony_ci    ParamShellUnitTest() {};
32d9f0492fSopenharmony_ci    virtual ~ParamShellUnitTest() {};
33d9f0492fSopenharmony_ci    static void SetUpTestCase(void) {};
34d9f0492fSopenharmony_ci    static void TearDownTestCase(void) {};
35d9f0492fSopenharmony_ci    void SetUp(void) {};
36d9f0492fSopenharmony_ci    void TearDown(void) {};
37d9f0492fSopenharmony_ci    void TestBody(void) {};
38d9f0492fSopenharmony_ci    void TestInitParamShell()
39d9f0492fSopenharmony_ci    {
40d9f0492fSopenharmony_ci        SystemSetParameter("aaa", "aaa");
41d9f0492fSopenharmony_ci        BShellHandle bshd = GetShellHandle();
42d9f0492fSopenharmony_ci        if (bshd == nullptr) {
43d9f0492fSopenharmony_ci            return;
44d9f0492fSopenharmony_ci        }
45d9f0492fSopenharmony_ci        const char *args[] = {"paramshell", "\n"};
46d9f0492fSopenharmony_ci        const ParamInfo *param = BShellEnvGetReservedParam(bshd, PARAM_REVERESD_NAME_CURR_PARAMETER);
47d9f0492fSopenharmony_ci        int ret = BShellEnvSetParam(bshd, PARAM_REVERESD_NAME_CURR_PARAMETER, "..a", PARAM_STRING, (void *)"..a");
48d9f0492fSopenharmony_ci        EXPECT_EQ(ret, 0);
49d9f0492fSopenharmony_ci        SetParamShellPrompt(bshd, args[1]);
50d9f0492fSopenharmony_ci        SetParamShellPrompt(bshd, "..");
51d9f0492fSopenharmony_ci
52d9f0492fSopenharmony_ci        ret = BShellEnvSetParam(bshd, param->name, param->desc, param->type, (void *)"");
53d9f0492fSopenharmony_ci        SetParamShellPrompt(bshd, "..");
54d9f0492fSopenharmony_ci
55d9f0492fSopenharmony_ci        SetParamShellPrompt(bshd, ".a");
56d9f0492fSopenharmony_ci        SetParamShellPrompt(bshd, ".");
57d9f0492fSopenharmony_ci        SetParamShellPrompt(bshd, args[1]);
58d9f0492fSopenharmony_ci        BShellParamCmdRegister(bshd, 1);
59d9f0492fSopenharmony_ci        BShellEnvStart(bshd);
60d9f0492fSopenharmony_ci        ret = BShellEnvOutputPrompt(bshd, "testprompt");
61d9f0492fSopenharmony_ci        ret = BShellEnvOutputPrompt(bshd, "testprompt1111111111111111111111111111111111111111111111111111111111");
62d9f0492fSopenharmony_ci        BShellEnvOutputByte(bshd, 'o');
63d9f0492fSopenharmony_ci        EXPECT_EQ(ret, 0);
64d9f0492fSopenharmony_ci    }
65d9f0492fSopenharmony_ci    void TestParamShellCmd()
66d9f0492fSopenharmony_ci    {
67d9f0492fSopenharmony_ci        BShellHandle bshd = GetShellHandle();
68d9f0492fSopenharmony_ci        BShellKey *key = BShellEnvGetDefaultKey('\n');
69d9f0492fSopenharmony_ci        EXPECT_NE(key, nullptr);
70d9f0492fSopenharmony_ci        if (strcpy_s(bshd->buffer, sizeof(bshd->buffer), "cd const") != EOK) {
71d9f0492fSopenharmony_ci            return;
72d9f0492fSopenharmony_ci        }
73d9f0492fSopenharmony_ci        bshd->length = strlen(bshd->buffer);
74d9f0492fSopenharmony_ci        int ret = key->keyHandle(bshd, '\n');
75d9f0492fSopenharmony_ci        EXPECT_EQ(ret, 0);
76d9f0492fSopenharmony_ci        if (strcpy_s(bshd->buffer, sizeof(bshd->buffer), "cat aaa") != EOK) {
77d9f0492fSopenharmony_ci            return;
78d9f0492fSopenharmony_ci        }
79d9f0492fSopenharmony_ci        bshd->length = strlen(bshd->buffer);
80d9f0492fSopenharmony_ci        ret = key->keyHandle(bshd, '\n');
81d9f0492fSopenharmony_ci        EXPECT_EQ(ret, 0);
82d9f0492fSopenharmony_ci        if (strcpy_s(bshd->buffer, sizeof(bshd->buffer), "testnotcmd") != EOK) {
83d9f0492fSopenharmony_ci            return;
84d9f0492fSopenharmony_ci        }
85d9f0492fSopenharmony_ci        bshd->length = strlen(bshd->buffer);
86d9f0492fSopenharmony_ci        ret = key->keyHandle(bshd, '\n');
87d9f0492fSopenharmony_ci        EXPECT_EQ(ret, 0);
88d9f0492fSopenharmony_ci        // test param start with "
89d9f0492fSopenharmony_ci        if (strcpy_s(bshd->buffer, sizeof(bshd->buffer), "\"ls") != EOK) {
90d9f0492fSopenharmony_ci            return;
91d9f0492fSopenharmony_ci        }
92d9f0492fSopenharmony_ci        bshd->length = strlen(bshd->buffer);
93d9f0492fSopenharmony_ci        ret = key->keyHandle(bshd, '\n');
94d9f0492fSopenharmony_ci        EXPECT_EQ(ret, 0);
95d9f0492fSopenharmony_ci        // test argc is 0
96d9f0492fSopenharmony_ci        if (strcpy_s(bshd->buffer, sizeof(bshd->buffer), ",ls") != EOK) {
97d9f0492fSopenharmony_ci            return;
98d9f0492fSopenharmony_ci        }
99d9f0492fSopenharmony_ci        bshd->length = strlen(bshd->buffer);
100d9f0492fSopenharmony_ci        ret = key->keyHandle(bshd, '\n');
101d9f0492fSopenharmony_ci        EXPECT_EQ(ret, 0);
102d9f0492fSopenharmony_ci        if (strcpy_s(bshd->buffer, sizeof(bshd->buffer), "$test$") != EOK) {
103d9f0492fSopenharmony_ci            return;
104d9f0492fSopenharmony_ci        }
105d9f0492fSopenharmony_ci        bshd->length = strlen(bshd->buffer);
106d9f0492fSopenharmony_ci        ret = key->keyHandle(bshd, '\n');
107d9f0492fSopenharmony_ci        EXPECT_EQ(ret, 0);
108d9f0492fSopenharmony_ci        if (strcpy_s(bshd->buffer, sizeof(bshd->buffer), "exit") != EOK) {
109d9f0492fSopenharmony_ci            return;
110d9f0492fSopenharmony_ci        }
111d9f0492fSopenharmony_ci        bshd->length = strlen(bshd->buffer);
112d9f0492fSopenharmony_ci        ret = key->keyHandle(bshd, '\n');
113d9f0492fSopenharmony_ci        EXPECT_EQ(ret, 0);
114d9f0492fSopenharmony_ci    }
115d9f0492fSopenharmony_ci    void TestParamShellCmd1()
116d9f0492fSopenharmony_ci    {
117d9f0492fSopenharmony_ci        BShellHandle bshd = GetShellHandle();
118d9f0492fSopenharmony_ci        BShellKey *key = BShellEnvGetDefaultKey('\n');
119d9f0492fSopenharmony_ci        EXPECT_NE(key, nullptr);
120d9f0492fSopenharmony_ci        if (strcpy_s(bshd->buffer, sizeof(bshd->buffer), "pwd") != EOK) {
121d9f0492fSopenharmony_ci            return;
122d9f0492fSopenharmony_ci        }
123d9f0492fSopenharmony_ci        bshd->length = strlen(bshd->buffer);
124d9f0492fSopenharmony_ci        int ret = key->keyHandle(bshd, '\n');
125d9f0492fSopenharmony_ci        EXPECT_EQ(ret, 0);
126d9f0492fSopenharmony_ci        if (strcpy_s(bshd->buffer, sizeof(bshd->buffer), "help") != EOK) {
127d9f0492fSopenharmony_ci            return;
128d9f0492fSopenharmony_ci        }
129d9f0492fSopenharmony_ci        bshd->length = strlen(bshd->buffer);
130d9f0492fSopenharmony_ci        ret = key->keyHandle(bshd, '\n');
131d9f0492fSopenharmony_ci        EXPECT_EQ(ret, 0);
132d9f0492fSopenharmony_ci        if (strcpy_s(bshd->buffer, sizeof(bshd->buffer), "dump") != EOK) {
133d9f0492fSopenharmony_ci            return;
134d9f0492fSopenharmony_ci        }
135d9f0492fSopenharmony_ci        bshd->length = strlen(bshd->buffer);
136d9f0492fSopenharmony_ci        ret = key->keyHandle(bshd, '\n');
137d9f0492fSopenharmony_ci        EXPECT_EQ(ret, 0);
138d9f0492fSopenharmony_ci        if (strcpy_s(bshd->buffer, sizeof(bshd->buffer), "dump verbose") != EOK) {
139d9f0492fSopenharmony_ci            return;
140d9f0492fSopenharmony_ci        }
141d9f0492fSopenharmony_ci        bshd->length = strlen(bshd->buffer);
142d9f0492fSopenharmony_ci        ret = key->keyHandle(bshd, '\n');
143d9f0492fSopenharmony_ci        EXPECT_EQ(ret, 0);
144d9f0492fSopenharmony_ci    }
145d9f0492fSopenharmony_ci    void TestParamShellcmdEndkey()
146d9f0492fSopenharmony_ci    {
147d9f0492fSopenharmony_ci        BShellHandle bshd = GetShellHandle();
148d9f0492fSopenharmony_ci        bshd->input(nullptr, 0);
149d9f0492fSopenharmony_ci        BShellKey *key = BShellEnvGetDefaultKey('\b');
150d9f0492fSopenharmony_ci        EXPECT_NE(key, nullptr);
151d9f0492fSopenharmony_ci        if (strcpy_s(bshd->buffer, sizeof(bshd->buffer), "testbbackspace") != EOK) {
152d9f0492fSopenharmony_ci            return;
153d9f0492fSopenharmony_ci        }
154d9f0492fSopenharmony_ci        bshd->length = strlen(bshd->buffer);
155d9f0492fSopenharmony_ci        bshd->cursor = strlen("testb");
156d9f0492fSopenharmony_ci        int ret = key->keyHandle(bshd, '\b');
157d9f0492fSopenharmony_ci        EXPECT_EQ(ret, 0);
158d9f0492fSopenharmony_ci        if (strcpy_s(bshd->buffer, sizeof(bshd->buffer), "testbbackspace") != EOK) {
159d9f0492fSopenharmony_ci            return;
160d9f0492fSopenharmony_ci        }
161d9f0492fSopenharmony_ci        bshd->length = strlen(bshd->buffer);
162d9f0492fSopenharmony_ci        bshd->cursor = strlen(bshd->buffer);
163d9f0492fSopenharmony_ci        ret = key->keyHandle(bshd, '\b');
164d9f0492fSopenharmony_ci        EXPECT_EQ(ret, 0);
165d9f0492fSopenharmony_ci
166d9f0492fSopenharmony_ci        key = BShellEnvGetDefaultKey('\t');
167d9f0492fSopenharmony_ci        if (strcpy_s(bshd->buffer, sizeof(bshd->buffer), "testtab") != EOK) {
168d9f0492fSopenharmony_ci            return;
169d9f0492fSopenharmony_ci        }
170d9f0492fSopenharmony_ci        bshd->length = strlen(bshd->buffer);
171d9f0492fSopenharmony_ci        ret = key->keyHandle(bshd, '\t');
172d9f0492fSopenharmony_ci        EXPECT_NE(key, nullptr);
173d9f0492fSopenharmony_ci        BShellEnvProcessInput(bshd, (char)3); // 3 is ctrl c
174d9f0492fSopenharmony_ci        BShellEnvProcessInput(bshd, '\e');
175d9f0492fSopenharmony_ci        BShellEnvProcessInput(bshd, '[');
176d9f0492fSopenharmony_ci        bshd->length = 1;
177d9f0492fSopenharmony_ci        bshd->cursor = 1;
178d9f0492fSopenharmony_ci        BShellEnvProcessInput(bshd, 'C');
179d9f0492fSopenharmony_ci        BShellEnvProcessInput(bshd, 'D');
180d9f0492fSopenharmony_ci    }
181d9f0492fSopenharmony_ci};
182d9f0492fSopenharmony_ci
183d9f0492fSopenharmony_ciHWTEST_F(ParamShellUnitTest, Init_TestInitParamShell_001, TestSize.Level1)
184d9f0492fSopenharmony_ci{
185d9f0492fSopenharmony_ci    ParamShellUnitTest test;
186d9f0492fSopenharmony_ci    test.TestInitParamShell();
187d9f0492fSopenharmony_ci    test.TestParamShellCmd();
188d9f0492fSopenharmony_ci    test.TestParamShellCmd1();
189d9f0492fSopenharmony_ci}
190d9f0492fSopenharmony_ciHWTEST_F(ParamShellUnitTest, Init_TestParamShellInput_001, TestSize.Level1)
191d9f0492fSopenharmony_ci{
192d9f0492fSopenharmony_ci    BShellHandle bshd = GetShellHandle();
193d9f0492fSopenharmony_ci    BShellEnvProcessInput(bshd, '\n');
194d9f0492fSopenharmony_ci
195d9f0492fSopenharmony_ci    BShellEnvProcessInput(bshd, 'l');
196d9f0492fSopenharmony_ci    bshd->length = BSH_COMMAND_MAX_LENGTH;
197d9f0492fSopenharmony_ci
198d9f0492fSopenharmony_ci    BShellEnvProcessInput(bshd, 'l');
199d9f0492fSopenharmony_ci    bshd->length = sizeof('l');
200d9f0492fSopenharmony_ci    bshd->cursor = 0;
201d9f0492fSopenharmony_ci    BShellEnvProcessInput(bshd, 's');
202d9f0492fSopenharmony_ci    BShellEnvProcessInput(bshd, '\n');
203d9f0492fSopenharmony_ci
204d9f0492fSopenharmony_ci    BShellEnvProcessInput(bshd, '\n'); // test bshd buff length is 0
205d9f0492fSopenharmony_ci
206d9f0492fSopenharmony_ci    int ret = BShellEnvRegisterKeyHandle(bshd, 'z', (BShellkeyHandle)(void*)0x409600); // 0x409600 construct address
207d9f0492fSopenharmony_ci    EXPECT_EQ(ret, 0);
208d9f0492fSopenharmony_ci}
209d9f0492fSopenharmony_ciHWTEST_F(ParamShellUnitTest, Init_TestParamShellcmd_001, TestSize.Level1)
210d9f0492fSopenharmony_ci{
211d9f0492fSopenharmony_ci    ParamShellUnitTest test;
212d9f0492fSopenharmony_ci    test.TestParamShellcmdEndkey();
213d9f0492fSopenharmony_ci    GetSystemCommitId();
214d9f0492fSopenharmony_ci    BShellEnvLoop(nullptr);
215d9f0492fSopenharmony_ci    BShellEnvErrString(GetShellHandle(), 1);
216d9f0492fSopenharmony_ci    BShellEnvOutputResult(GetShellHandle(), 1);
217d9f0492fSopenharmony_ci}
218d9f0492fSopenharmony_ci}  // namespace init_ut
219