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 <memory>
17 
18 #include "gtest/gtest.h"
19 
20 #define private public
21 #include "distributed_database_callback.h"
22 
23 using namespace testing::ext;
24 namespace OHOS {
25 namespace Notification {
26 class DistributedDatabaseCallbackTest : public testing::Test {
27 public:
28     void SetUp() override;
29     void TearDown() override;
30 
31 public:
32     virtual void OnInsert(const std::string &deviceId, const std::string &key, const std::string &value);
33     virtual void OnUpdate(const std::string &deviceId, const std::string &key, const std::string &value);
34     virtual void OnDelete(const std::string &deviceId, const std::string &key, const std::string &value);
35 };
36 
SetUp()37 void DistributedDatabaseCallbackTest::SetUp()
38 {}
39 
TearDown()40 void DistributedDatabaseCallbackTest::TearDown()
41 {}
42 
OnInsert(const std::string & deviceId,const std::string & key,const std::string & value)43 void DistributedDatabaseCallbackTest::OnInsert(
44     const std::string &deviceId, const std::string &key, const std::string &value) {}
45 
OnUpdate(const std::string & deviceId,const std::string & key,const std::string & value)46 void DistributedDatabaseCallbackTest::OnUpdate(
47     const std::string &deviceId, const std::string &key, const std::string &value) {}
48 
OnDelete(const std::string & deviceId,const std::string & key,const std::string & value)49 void DistributedDatabaseCallbackTest::OnDelete(
50     const std::string &deviceId, const std::string &key, const std::string &value) {}
51 
52 /**
53  * @tc.name      : DistributedDatabaseCallback_00100
54  * @tc.number    : DistributedDatabaseCallback_00100
55  * @tc.desc      : test OnChange function and callback_.OnInsert is nullptr .
56  */
57 HWTEST_F(DistributedDatabaseCallbackTest, DistributedDatabaseCallback_00100, Function | SmallTest | Level1)
58 {
59     DistributedDatabaseCallback::IDatabaseChange databaseCallback = {
60         .OnInsert = std::bind(&DistributedDatabaseCallbackTest::OnInsert,
61             this,
62             std::placeholders::_1,
63             std::placeholders::_2,
64             std::placeholders::_3),
65         .OnUpdate = std::bind(&DistributedDatabaseCallbackTest::OnUpdate,
66             this,
67             std::placeholders::_1,
68             std::placeholders::_2,
69             std::placeholders::_3),
70         .OnDelete = std::bind(&DistributedDatabaseCallbackTest::OnDelete,
71             this,
72             std::placeholders::_1,
73             std::placeholders::_2,
74             std::placeholders::_3),
75     };
76     std::shared_ptr<DistributedDatabaseCallback> databaseCallback_ =
77         std::make_shared<DistributedDatabaseCallback>(databaseCallback);
78     ASSERT_NE(nullptr, databaseCallback_);
79     databaseCallback_->callback_.OnInsert = nullptr;
80     std::vector<DistributedKv::Entry> insertEntries;
81     std::vector<DistributedKv::Entry> updateEntries;
82     std::vector<DistributedKv::Entry> deleteEntries;
83     DistributedKv::ChangeNotification changeNotification(
84         std::move(insertEntries), std::move(updateEntries), std::move(deleteEntries), "<remoteDeviceId>", false);
85     databaseCallback_->OnChange(changeNotification);
86 }
87 
88 /**
89  * @tc.name      : DistributedDatabaseCallback_00200
90  * @tc.number    : DistributedDatabaseCallback_00200
91  * @tc.desc      : test OnChange function and callback_.OnUpdate is nullptr .
92  */
93 HWTEST_F(DistributedDatabaseCallbackTest, DistributedDatabaseCallback_00200, Function | SmallTest | Level1)
94 {
95     DistributedDatabaseCallback::IDatabaseChange databaseCallback = {
96         .OnInsert = std::bind(&DistributedDatabaseCallbackTest::OnInsert,
97             this,
98             std::placeholders::_1,
99             std::placeholders::_2,
100             std::placeholders::_3),
101         .OnUpdate = std::bind(&DistributedDatabaseCallbackTest::OnUpdate,
102             this,
103             std::placeholders::_1,
104             std::placeholders::_2,
105             std::placeholders::_3),
106         .OnDelete = std::bind(&DistributedDatabaseCallbackTest::OnDelete,
107             this,
108             std::placeholders::_1,
109             std::placeholders::_2,
110             std::placeholders::_3),
111     };
112     std::shared_ptr<DistributedDatabaseCallback> databaseCallback_ =
113         std::make_shared<DistributedDatabaseCallback>(databaseCallback);
114     ASSERT_NE(nullptr, databaseCallback_);
115     databaseCallback_->callback_.OnUpdate = nullptr;
116     std::vector<DistributedKv::Entry> insertEntries;
117     std::vector<DistributedKv::Entry> updateEntries;
118     std::vector<DistributedKv::Entry> deleteEntries;
119     DistributedKv::ChangeNotification changeNotification(
120         std::move(insertEntries), std::move(updateEntries), std::move(deleteEntries), "<remoteDeviceId>", false);
121     databaseCallback_->OnChange(changeNotification);
122 }
123 
124 /**
125  * @tc.name      : DistributedDatabaseCallback_00300
126  * @tc.number    : DistributedDatabaseCallback_00300
127  * @tc.desc      : test OnChange function and callback_.OnDelete is nullptr .
128  */
129 HWTEST_F(DistributedDatabaseCallbackTest, DistributedDatabaseCallback_00300, Function | SmallTest | Level1)
130 {
131     DistributedDatabaseCallback::IDatabaseChange databaseCallback = {
132         .OnInsert = std::bind(&DistributedDatabaseCallbackTest::OnInsert,
133             this,
134             std::placeholders::_1,
135             std::placeholders::_2,
136             std::placeholders::_3),
137         .OnUpdate = std::bind(&DistributedDatabaseCallbackTest::OnUpdate,
138             this,
139             std::placeholders::_1,
140             std::placeholders::_2,
141             std::placeholders::_3),
142         .OnDelete = std::bind(&DistributedDatabaseCallbackTest::OnDelete,
143             this,
144             std::placeholders::_1,
145             std::placeholders::_2,
146             std::placeholders::_3),
147     };
148     std::shared_ptr<DistributedDatabaseCallback> databaseCallback_ =
149         std::make_shared<DistributedDatabaseCallback>(databaseCallback);
150     ASSERT_NE(nullptr, databaseCallback_);
151     databaseCallback_->callback_.OnDelete = nullptr;
152     std::vector<DistributedKv::Entry> insertEntries;
153     std::vector<DistributedKv::Entry> updateEntries;
154     std::vector<DistributedKv::Entry> deleteEntries;
155     DistributedKv::ChangeNotification changeNotification(
156         std::move(insertEntries), std::move(updateEntries), std::move(deleteEntries), "<remoteDeviceId>", false);
157     databaseCallback_->OnChange(changeNotification);
158 }
159 }  // namespace Notification
160 }  // namespace OHOS