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 */
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 }
110
111 /**
112 * @tc.number: Aa_Command_Test_0200
113 * @tc.name: ExecCommand
114 * @tc.desc: Verify the "aa test -b xxx -s unittest 1 -D" command.
115 */
116 HWTEST_F(AaCommandTestTest, Aa_Command_Test_0200, Function | MediumTest | Level1)
117 {
118 char* argv[] = {
119 (char*)TOOL_NAME.c_str(),
120 (char*)cmd_.c_str(),
121 (char*)"-b",
122 (char*)"xxx",
123 (char*)"-s",
124 (char*)"unittest",
125 (char*)"1",
126 (char*)"-D",
127 (char*)"",
128 };
129 int argc = sizeof(argv) / sizeof(argv[0]) - 1;
130 AbilityManagerShellCommand cmd(argc, argv);
131
132 auto managerClientPtr = AbilityManagerClient::GetInstance();
133 auto mockAbilityManagerStub = sptr<MockAbilityManagerStub>(new MockAbilityManagerStub());
134 ASSERT_NE(mockAbilityManagerStub, nullptr);
135 EXPECT_CALL(*mockAbilityManagerStub, StartUserTest(_, _))
136 .Times(1)
137 .WillOnce(Return(-1));
138 managerClientPtr->proxy_ = static_cast<IAbilityManager*>(mockAbilityManagerStub);
139
140 EXPECT_EQ(cmd.ExecCommand(), STRING_START_USER_TEST_NG + "\n");
141 testing::Mock::AllowLeak(mockAbilityManagerStub);
142 }
143
144 /**
145 * @tc.number: Aa_Command_Test_0300
146 * @tc.name: ExecCommand
147 * @tc.desc: Verify the "aa test -b bundle -s unittest 1 -w 1" command.
148 */
149 HWTEST_F(AaCommandTestTest, Aa_Command_Test_0300, Function | MediumTest | Level1)
150 {
151 char* argv[] = {
152 (char*)TOOL_NAME.c_str(),
153 (char*)cmd_.c_str(),
154 (char*)"-b",
155 (char*)STRING_BUNDLE_NAME.c_str(),
156 (char*)"-s",
157 (char*)"unittest",
158 (char*)"1",
159 (char*)"-w",
160 (char*)"1",
161 (char*)"",
162 };
163 int argc = sizeof(argv) / sizeof(argv[0]) - 1;
164 AbilityManagerShellCommand cmd(argc, argv);
165
166 auto managerClientPtr = AbilityManagerClient::GetInstance();
167 auto mockAbilityManagerStub = sptr<MockAbilityManagerStub>(new MockAbilityManagerStub());
168 ASSERT_NE(mockAbilityManagerStub, nullptr);
169 EXPECT_CALL(*mockAbilityManagerStub, StartUserTest(_, _))
170 .Times(1)
171 .WillOnce(Return(0));
172 managerClientPtr->proxy_ = static_cast<IAbilityManager*>(mockAbilityManagerStub);
173
174 EXPECT_EQ(cmd.ExecCommand(), "Timeout: user test is not completed within the specified time.\n");
175 testing::Mock::AllowLeak(mockAbilityManagerStub);
176 }
177
178 /**
179 * @tc.number: Aa_Command_Test_0400
180 * @tc.name: ExecCommand
181 * @tc.desc: Verify the "aa test -b bundle -s unittest 1 -w 0" command.
182 */
183 HWTEST_F(AaCommandTestTest, Aa_Command_Test_0400, Function | MediumTest | Level1)
184 {
185 char* argv[] = {
186 (char*)TOOL_NAME.c_str(),
187 (char*)cmd_.c_str(),
188 (char*)"-b",
189 (char*)STRING_BUNDLE_NAME.c_str(),
190 (char*)"-s",
191 (char*)"unittest",
192 (char*)"1",
193 (char*)"-w",
194 (char*)"0",
195 (char*)"",
196 };
197 int argc = sizeof(argv) / sizeof(argv[0]) - 1;
198 AbilityManagerShellCommand cmd(argc, argv);
199
__anona1534ba20202(const Want& want, const sptr<IRemoteObject>& observer) 200 auto mockHandler = [](const Want& want, const sptr<IRemoteObject>& observer) -> int {
201 sptr<ITestObserver> testObserver = iface_cast<ITestObserver>(observer);
202 if (!testObserver) {
203 return -1;
204 }
205 testObserver->TestFinished("success", 0);
206 return 0;
207 };
208 auto managerClientPtr = AbilityManagerClient::GetInstance();
209 auto mockAbilityManagerStub = sptr<MockAbilityManagerStub>(new MockAbilityManagerStub());
210 ASSERT_NE(mockAbilityManagerStub, nullptr);
211 EXPECT_CALL(*mockAbilityManagerStub, StartUserTest(_, _))
212 .Times(1)
213 .WillOnce(Invoke(mockHandler));
214 managerClientPtr->proxy_ = static_cast<IAbilityManager*>(mockAbilityManagerStub);
215
216 EXPECT_EQ(cmd.ExecCommand(), STRING_USER_TEST_FINISHED + "\n");
217 testing::Mock::AllowLeak(mockAbilityManagerStub);
218 }