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 }