1 /*
2 * Copyright (c) 2022 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
16 #include <gtest/gtest.h>
17 #include <gmock/gmock.h>
18
19 #define protected public
20 #include "ability_command.h"
21 #undef protected
22 #include "mock_ability_manager_stub.h"
23 #define private public
24 #include "ability_manager_client.h"
25 #undef private
26 #include "ability_manager_interface.h"
27 #include "itest_observer.h"
28
29 using namespace testing::ext;
30 using namespace OHOS;
31 using namespace OHOS::AAFwk;
32 using testing::_;
33 using testing::Invoke;
34 using testing::Return;
35
36 namespace {
37 const std::string STRING_BUNDLE_NAME = "bundle";
38 } // namespace
39
40 class AaCommandTestTest : public ::testing::Test {
41 public:
42 static void SetUpTestCase();
43 static void TearDownTestCase();
44 void SetUp() override;
45 void TearDown() override;
46
47 void MakeMockObjects() const;
48
49 std::string cmd_ = "test";
50 };
51
SetUpTestCase()52 void AaCommandTestTest::SetUpTestCase()
53 {}
54
TearDownTestCase()55 void AaCommandTestTest::TearDownTestCase()
56 {}
57
SetUp()58 void AaCommandTestTest::SetUp()
59 {
60 // reset optind to 0
61 optind = 0;
62
63 // make mock objects
64 MakeMockObjects();
65 }
66
TearDown()67 void AaCommandTestTest::TearDown()
68 {}
69
MakeMockObjects() const70 void AaCommandTestTest::MakeMockObjects() const
71 {
72 // mock a stub
73 auto managerStubPtr = sptr<IAbilityManager>(new MockAbilityManagerStub());
74
75 // set the mock stub
76 auto managerClientPtr = AbilityManagerClient::GetInstance();
77 managerClientPtr->proxy_ = managerStubPtr;
78 }
79
80 /**
81 * @tc.number: Aa_Command_Test_0100
82 * @tc.name: ExecCommand
83 * @tc.desc: Verify the "aa test -b xxx -s unittest 1" command.
84 */
HWTEST_F(AaCommandTestTest, Aa_Command_Test_0100, Function | MediumTest | Level1)85 HWTEST_F(AaCommandTestTest, Aa_Command_Test_0100, Function | MediumTest | Level1)
86 {
87 char* argv[] = {
88 (char*)TOOL_NAME.c_str(),
89 (char*)cmd_.c_str(),
90 (char*)"-b",
91 (char*)"xxx",
92 (char*)"-s",
93 (char*)"unittest",
94 (char*)"1",
95 (char*)"",
96 };
97 int argc = sizeof(argv) / sizeof(argv[0]) - 1;
98 AbilityManagerShellCommand cmd(argc, argv);
99
100 auto managerClientPtr = AbilityManagerClient::GetInstance();
101 auto mockAbilityManagerStub = sptr<MockAbilityManagerStub>(new MockAbilityManagerStub());
102 ASSERT_NE(mockAbilityManagerStub, nullptr);
103 EXPECT_CALL(*mockAbilityManagerStub, StartUserTest(_, _))
104 .Times(1)
105 .WillOnce(Return(-1));
106 managerClientPtr->proxy_ = static_cast<IAbilityManager*>(mockAbilityManagerStub);
107
108 EXPECT_EQ(cmd.ExecCommand(), STRING_START_USER_TEST_NG + "\n");
109 managerClientPtr->proxy_ = nullptr;
110 }
111
112 /**
113 * @tc.number: Aa_Command_Test_0200
114 * @tc.name: ExecCommand
115 * @tc.desc: Verify the "aa test -b xxx -s unittest 1 -D" command.
116 */
HWTEST_F(AaCommandTestTest, Aa_Command_Test_0200, Function | MediumTest | Level1)117 HWTEST_F(AaCommandTestTest, Aa_Command_Test_0200, Function | MediumTest | Level1)
118 {
119 char* argv[] = {
120 (char*)TOOL_NAME.c_str(),
121 (char*)cmd_.c_str(),
122 (char*)"-b",
123 (char*)"xxx",
124 (char*)"-s",
125 (char*)"unittest",
126 (char*)"1",
127 (char*)"-D",
128 (char*)"",
129 };
130 int argc = sizeof(argv) / sizeof(argv[0]) - 1;
131 AbilityManagerShellCommand cmd(argc, argv);
132
133 auto managerClientPtr = AbilityManagerClient::GetInstance();
134 auto mockAbilityManagerStub = sptr<MockAbilityManagerStub>(new MockAbilityManagerStub());
135 ASSERT_NE(mockAbilityManagerStub, nullptr);
136 EXPECT_CALL(*mockAbilityManagerStub, StartUserTest(_, _))
137 .Times(1)
138 .WillOnce(Return(-1));
139 managerClientPtr->proxy_ = static_cast<IAbilityManager*>(mockAbilityManagerStub);
140
141 EXPECT_EQ(cmd.ExecCommand(), STRING_START_USER_TEST_NG + "\n");
142 managerClientPtr->proxy_ = nullptr;
143 testing::Mock::AllowLeak(mockAbilityManagerStub);
144 }
145
146 /**
147 * @tc.number: Aa_Command_Test_0300
148 * @tc.name: ExecCommand
149 * @tc.desc: Verify the "aa test -b bundle -s unittest 1 -w 1" command.
150 */
HWTEST_F(AaCommandTestTest, Aa_Command_Test_0300, Function | MediumTest | Level1)151 HWTEST_F(AaCommandTestTest, Aa_Command_Test_0300, Function | MediumTest | Level1)
152 {
153 char* argv[] = {
154 (char*)TOOL_NAME.c_str(),
155 (char*)cmd_.c_str(),
156 (char*)"-b",
157 (char*)STRING_BUNDLE_NAME.c_str(),
158 (char*)"-s",
159 (char*)"unittest",
160 (char*)"1",
161 (char*)"-w",
162 (char*)"1",
163 (char*)"",
164 };
165 int argc = sizeof(argv) / sizeof(argv[0]) - 1;
166 AbilityManagerShellCommand cmd(argc, argv);
167
168 auto managerClientPtr = AbilityManagerClient::GetInstance();
169 auto mockAbilityManagerStub = sptr<MockAbilityManagerStub>(new MockAbilityManagerStub());
170 ASSERT_NE(mockAbilityManagerStub, nullptr);
171 EXPECT_CALL(*mockAbilityManagerStub, StartUserTest(_, _))
172 .Times(1)
173 .WillOnce(Return(0));
174 managerClientPtr->proxy_ = static_cast<IAbilityManager*>(mockAbilityManagerStub);
175
176 EXPECT_EQ(cmd.ExecCommand(), "Timeout: user test is not completed within the specified time.\n");
177 managerClientPtr->proxy_ = nullptr;
178 testing::Mock::AllowLeak(mockAbilityManagerStub);
179 }
180
181 /**
182 * @tc.number: Aa_Command_Test_0400
183 * @tc.name: ExecCommand
184 * @tc.desc: Verify the "aa test -b bundle -s unittest 1 -w 0" command.
185 */
HWTEST_F(AaCommandTestTest, Aa_Command_Test_0400, Function | MediumTest | Level1)186 HWTEST_F(AaCommandTestTest, Aa_Command_Test_0400, Function | MediumTest | Level1)
187 {
188 char* argv[] = {
189 (char*)TOOL_NAME.c_str(),
190 (char*)cmd_.c_str(),
191 (char*)"-b",
192 (char*)STRING_BUNDLE_NAME.c_str(),
193 (char*)"-s",
194 (char*)"unittest",
195 (char*)"1",
196 (char*)"-w",
197 (char*)"0",
198 (char*)"",
199 };
200 int argc = sizeof(argv) / sizeof(argv[0]) - 1;
201 AbilityManagerShellCommand cmd(argc, argv);
202
203 auto mockHandler = [](const Want& want, const sptr<IRemoteObject>& observer) -> int {
204 sptr<ITestObserver> testObserver = iface_cast<ITestObserver>(observer);
205 if (!testObserver) {
206 return -1;
207 }
208 testObserver->TestFinished("success", 0);
209 return 0;
210 };
211 auto managerClientPtr = AbilityManagerClient::GetInstance();
212 auto mockAbilityManagerStub = sptr<MockAbilityManagerStub>(new MockAbilityManagerStub());
213 ASSERT_NE(mockAbilityManagerStub, nullptr);
214 EXPECT_CALL(*mockAbilityManagerStub, StartUserTest(_, _))
215 .Times(1)
216 .WillOnce(Invoke(mockHandler));
217 managerClientPtr->proxy_ = static_cast<IAbilityManager*>(mockAbilityManagerStub);
218
219 EXPECT_EQ(cmd.ExecCommand(), STRING_USER_TEST_FINISHED + "\n");
220 managerClientPtr->proxy_ = nullptr;
221 testing::Mock::AllowLeak(mockAbilityManagerStub);
222 }