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