1 /*
2  * Copyright (c) 2022-2023 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 <string>
18 #include <vector>
19 #include "enterprise_admin_stub_mock.h"
20 #include "enterprise_bundle_connection.h"
21 #include "func_code.h"
22 #include "managed_event.h"
23 using namespace testing::ext;
24 using namespace testing;
25 
26 namespace OHOS {
27 namespace EDM {
28 namespace TEST {
29 constexpr uint32_t COMMAND_ON_ADMIN_CODE = 3;
30 constexpr int32_t DEFAULT_USER_ID = 100;
31 class EnterpriseBundleConnectionTest : public testing::Test {
32 protected:
33     void SetUp() override;
34 
TearDown()35     void TearDown() override {}
36 
37     std::shared_ptr<EnterpriseBundleConnection> enterpriseBundleConnectionTest {nullptr};
38     sptr<EnterpriseAdminStubMock> remoteObject {nullptr};
39 };
40 
SetUp()41 void EnterpriseBundleConnectionTest::SetUp()
42 {
43     remoteObject = new (std::nothrow) EnterpriseAdminStubMock();
44 }
45 
46 /**
47  * @tc.name: TestOnAbilityConnectDone01
48  * @tc.desc: Test EnterpriseBundleConnection::OnAbilityConnectDone func.
49  * @tc.type: FUNC
50  */
51 HWTEST_F(EnterpriseBundleConnectionTest, TestOnAbilityConnectDone01, TestSize.Level1)
52 {
53     AppExecFwk::ElementName admin;
54     admin.SetBundleName("com.edm.test.demo");
55     admin.SetAbilityName("com.edm.test.demo.Ability");
56     AAFwk::Want connectWant;
57     connectWant.SetElementName("com.edm.test.demo", "com.edm.test.demo.Ability");
58     int32_t resultCode = 0;
59     enterpriseBundleConnectionTest =
60         std::make_shared<EnterpriseBundleConnection>(connectWant,
61         static_cast<uint32_t>(ManagedEvent::BUNDLE_ADDED), DEFAULT_USER_ID, "com.edm.test.add", DEFAULT_USER_ID);
62     EXPECT_CALL(*remoteObject, SendRequest(_, _, _, _))
63         .Times(1)
64         .WillOnce(Invoke(remoteObject.GetRefPtr(), &EnterpriseAdminStubMock::InvokeSendRequest));
65     enterpriseBundleConnectionTest->OnAbilityConnectDone(admin, remoteObject, resultCode);
66     enterpriseBundleConnectionTest->OnAbilityDisconnectDone(admin, resultCode);
67     EXPECT_TRUE(remoteObject->code_ == IEnterpriseAdmin::COMMAND_ON_BUNDLE_ADDED);
68 }
69 
70 /**
71  * @tc.name: TestOnAbilityConnectDone02
72  * @tc.desc: Test EnterpriseBundleConnection::OnAbilityConnectDone func.
73  * @tc.type: FUNC
74  */
75 HWTEST_F(EnterpriseBundleConnectionTest, TestOnAbilityConnectDone02, TestSize.Level1)
76 {
77     AppExecFwk::ElementName admin;
78     admin.SetBundleName("com.edm.test.demo");
79     admin.SetAbilityName("com.edm.test.demo.Ability");
80     AAFwk::Want connectWant;
81     connectWant.SetElementName("com.edm.test.demo", "com.edm.test.demo.Ability");
82     int32_t resultCode = 0;
83     enterpriseBundleConnectionTest =
84         std::make_shared<EnterpriseBundleConnection>(connectWant,
85         static_cast<uint32_t>(ManagedEvent::BUNDLE_REMOVED), DEFAULT_USER_ID, "com.edm.test.remove", DEFAULT_USER_ID);
86     EXPECT_CALL(*remoteObject, SendRequest(_, _, _, _))
87         .Times(1)
88         .WillOnce(Invoke(remoteObject.GetRefPtr(), &EnterpriseAdminStubMock::InvokeSendRequest));
89     enterpriseBundleConnectionTest->OnAbilityConnectDone(admin, remoteObject, resultCode);
90     enterpriseBundleConnectionTest->OnAbilityDisconnectDone(admin, resultCode);
91     EXPECT_TRUE(remoteObject->code_ == IEnterpriseAdmin::COMMAND_ON_BUNDLE_REMOVED);
92 }
93 
94 /**
95  * @tc.name: TestOnAbilityConnectDone03
96  * @tc.desc: Test EnterpriseBundleConnection::OnAbilityConnectDone func.
97  * @tc.type: FUNC
98  */
99 HWTEST_F(EnterpriseBundleConnectionTest, TestOnAbilityConnectDone03, TestSize.Level1)
100 {
101     AppExecFwk::ElementName admin;
102     admin.SetBundleName("com.edm.test.demo");
103     admin.SetAbilityName("com.edm.test.demo.Ability");
104     AAFwk::Want connectWant;
105     connectWant.SetElementName("com.edm.test.demo", "com.edm.test.demo.Ability");
106     int32_t resultCode = 0;
107     enterpriseBundleConnectionTest = std::make_shared<EnterpriseBundleConnection>(connectWant,
108         COMMAND_ON_ADMIN_CODE, DEFAULT_USER_ID, "com.edm.test.err", DEFAULT_USER_ID);
109     enterpriseBundleConnectionTest->OnAbilityConnectDone(admin, remoteObject, resultCode);
110     enterpriseBundleConnectionTest->OnAbilityDisconnectDone(admin, resultCode);
111     EXPECT_TRUE(remoteObject->code_ != IEnterpriseAdmin::COMMAND_ON_BUNDLE_REMOVED);
112 }
113 
114 /**
115  * @tc.name: TestOnAbilityConnectDone04
116  * @tc.desc: Test EnterpriseBundleConnection::OnAbilityConnectDone func.
117  * @tc.type: FUNC
118  */
119 HWTEST_F(EnterpriseBundleConnectionTest, TestOnAbilityConnectDone04, TestSize.Level1)
120 {
121     AppExecFwk::ElementName admin;
122     admin.SetBundleName("com.edm.test.demo");
123     admin.SetAbilityName("com.edm.test.demo.Ability");
124     AAFwk::Want connectWant;
125     connectWant.SetElementName("com.edm.test.demo", "com.edm.test.demo.Ability");
126     int32_t resultCode = 0;
127     enterpriseBundleConnectionTest =
128         std::make_shared<EnterpriseBundleConnection>(connectWant,
129         static_cast<uint32_t>(ManagedEvent::APP_START), DEFAULT_USER_ID, "com.edm.test.start", DEFAULT_USER_ID);
130     EXPECT_CALL(*remoteObject, SendRequest(_, _, _, _))
131         .Times(1)
132         .WillOnce(Invoke(remoteObject.GetRefPtr(), &EnterpriseAdminStubMock::InvokeSendRequest));
133     enterpriseBundleConnectionTest->OnAbilityConnectDone(admin, remoteObject, resultCode);
134     enterpriseBundleConnectionTest->OnAbilityDisconnectDone(admin, resultCode);
135     EXPECT_TRUE(remoteObject->code_ == IEnterpriseAdmin::COMMAND_ON_APP_START);
136 }
137 
138 /**
139  * @tc.name: TestOnAbilityConnectDone05
140  * @tc.desc: Test EnterpriseBundleConnection::OnAbilityConnectDone func.
141  * @tc.type: FUNC
142  */
143 HWTEST_F(EnterpriseBundleConnectionTest, TestOnAbilityConnectDone05, TestSize.Level1)
144 {
145     AppExecFwk::ElementName admin;
146     admin.SetBundleName("com.edm.test.demo");
147     admin.SetAbilityName("com.edm.test.demo.Ability");
148     AAFwk::Want connectWant;
149     connectWant.SetElementName("com.edm.test.demo", "com.edm.test.demo.Ability");
150     int32_t resultCode = 0;
151     enterpriseBundleConnectionTest =
152         std::make_shared<EnterpriseBundleConnection>(connectWant,
153         static_cast<uint32_t>(ManagedEvent::SYSTEM_UPDATE), DEFAULT_USER_ID, "com.edm.test.update", DEFAULT_USER_ID);
154     enterpriseBundleConnectionTest->OnAbilityConnectDone(admin, remoteObject, resultCode);
155     enterpriseBundleConnectionTest->OnAbilityDisconnectDone(admin, resultCode);
156     EXPECT_TRUE(remoteObject->code_ == ERR_OK);
157 }
158 
159 } // namespace TEST
160 } // namespace EDM
161 } // namespace OHOS