1 /*
2 * Copyright (c) 2025 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 #ifndef MOCK_NOTIFICATION_REQUEST_BUILDER_H
17 #define MOCK_NOTIFICATION_REQUEST_BUILDER_H
18
19 #include "mock_fuzz_object.h"
20 #include "mock_notification_content.h"
21 #include "mock_notification_distributed_options.h"
22 #include "mock_notification_template.h"
23 #include "mock_notification_flags.h"
24 #include "mock_notification_bundle_option.h"
25 #include "mock_notification_action_button.h"
26 #include "mock_pixel_map.h"
27 #include "mock_want_params.h"
28 #include "notification_request.h"
29
30
31 namespace OHOS {
32 namespace Notification {
GenerateBooleanTypeVeriables(FuzzedDataProvider * fdp,NotificationRequest * request)33 void GenerateBooleanTypeVeriables(FuzzedDataProvider* fdp, NotificationRequest* request)
34 {
35 request->SetColorEnabled(fdp->ConsumeBool());
36 request->SetAlertOneTime(fdp->ConsumeBool());
37 request->SetShowStopwatch(fdp->ConsumeBool());
38 request->SetCountdownTimer(fdp->ConsumeBool());
39 request->SetInProgress(fdp->ConsumeBool());
40 request->SetGroupOverview(fdp->ConsumeBool());
41 request->SetUnremovable(fdp->ConsumeBool());
42 request->SetFloatingIcon(fdp->ConsumeBool());
43 request->SetOnlyLocal(fdp->ConsumeBool());
44 request->SetPermitSystemGeneratedContextualActionButtons(fdp->ConsumeBool());
45 request->SetIsAgentNotification(fdp->ConsumeBool());
46 request->SetRemoveAllowed(fdp->ConsumeBool());
47 request->SetIsCoverActionButtons(fdp->ConsumeBool());
48 request->SetUpdateByOwnerAllowed(fdp->ConsumeBool());
49 request->SetUpdateOnly(fdp->ConsumeBool());
50 request->SetForceDistributed(fdp->ConsumeBool());
51 request->SetNotDistributed(fdp->ConsumeBool());
52 request->SetInProgress(fdp->ConsumeBool());
53 request->SetIsSystemApp(fdp->ConsumeBool());
54 request->SetIsDoNotDisturbByPassed(fdp->ConsumeBool());
55 request->SetDistributedCollaborate(fdp->ConsumeBool());
56 ANS_LOGE("Build mock veriables");
57 }
58
GenerateIntegerTypeVeriables(FuzzedDataProvider * fdp,NotificationRequest * request)59 void GenerateIntegerTypeVeriables(FuzzedDataProvider* fdp, NotificationRequest* request)
60 {
61 request->SetPublishDelayTime(fdp->ConsumeIntegral<uint32_t>());
62 request->SetNotificationId(fdp->ConsumeIntegral<int32_t>());
63 request->SetColor(fdp->ConsumeIntegral<uint32_t>());
64 request->SetBadgeNumber(fdp->ConsumeIntegral<uint32_t>());
65 request->SetNotificationControlFlags(fdp->ConsumeIntegral<uint32_t>());
66 request->SetCreateTime(fdp->ConsumeIntegral<int64_t>());
67 request->SetDeliveryTime(fdp->ConsumeIntegral<int64_t>());
68 request->SetAutoDeletedTime(fdp->ConsumeIntegral<int64_t>());
69 request->SetUpdateDeadLine(fdp->ConsumeIntegral<int64_t>());
70 request->SetFinishDeadLine(fdp->ConsumeIntegral<int64_t>());
71 request->SetArchiveDeadLine(fdp->ConsumeIntegral<int64_t>());
72 if (fdp->ConsumeIntegral<uint32_t>() % 3 == 0) {
73 request->SetCreatorPid(fdp->ConsumeIntegral<pid_t>());
74 }
75 if (fdp->ConsumeIntegral<uint32_t>() % 3 == 0) {
76 request->SetCreatorUid(fdp->ConsumeIntegralInRange<int32_t>(0, 10000));
77 }
78 if (fdp->ConsumeIntegral<uint32_t>() % 3 == 0) {
79 request->SetOwnerUid(fdp->ConsumeIntegralInRange<int32_t>(0, 10000));
80 }
81 if (fdp->ConsumeIntegral<uint32_t>() % 3 == 0) {
82 request->SetCreatorUserId(fdp->ConsumeIntegralInRange<int32_t>(0, 105));
83 }
84 if (fdp->ConsumeIntegral<uint32_t>() % 3 == 0) {
85 request->SetOwnerUserId(fdp->ConsumeIntegralInRange<int32_t>(0, 105));
86 }
87 if (fdp->ConsumeIntegral<uint32_t>() % 3 == 0) {
88 request->SetReceiverUserId(fdp->ConsumeIntegralInRange<int32_t>(0, 105));
89 }
90 request->SetCreatorInstanceKey(fdp->ConsumeIntegral<int32_t>());
91 request->SetHashCodeGenerateType(fdp->ConsumeIntegral<uint32_t>());
92 request->SetCollaboratedReminderFlag(fdp->ConsumeIntegral<uint32_t>());
93 ANS_LOGE("Build mock veriables");
94 }
95
GenerateStringTypeVeriables(FuzzedDataProvider * fdp,NotificationRequest * request)96 void GenerateStringTypeVeriables(FuzzedDataProvider* fdp, NotificationRequest* request)
97 {
98 request->SetAppInstanceKey(fdp->ConsumeRandomLengthString(20));
99 request->SetSettingsText(fdp->ConsumeRandomLengthString(20));
100 if (fdp->ConsumeIntegral<uint32_t>() % 3 == 0) {
101 request->SetCreatorBundleName(fdp->ConsumeRandomLengthString(20));
102 }
103 if (fdp->ConsumeIntegral<uint32_t>() % 3 == 0) {
104 request->SetOwnerBundleName(fdp->ConsumeRandomLengthString(20));
105 }
106 request->SetGroupName(fdp->ConsumeRandomLengthString(20));
107 request->SetStatusBarText(fdp->ConsumeRandomLengthString(20));
108 request->SetLabel(fdp->ConsumeRandomLengthString(20));
109 request->SetShortcutId(fdp->ConsumeRandomLengthString(20));
110 request->SetSortingKey(fdp->ConsumeRandomLengthString(20));
111 request->SetClassification(fdp->ConsumeRandomLengthString(20));
112 request->SetAppMessageId(fdp->ConsumeRandomLengthString(20));
113 request->SetSound(fdp->ConsumeRandomLengthString(20));
114 request->SetDistributedHashCode(fdp->ConsumeRandomLengthString(20));
115 ANS_LOGE("Build mock veriables");
116 }
117
GenerateEnumTypeVeriables(FuzzedDataProvider * fdp,NotificationRequest * request)118 void GenerateEnumTypeVeriables(FuzzedDataProvider* fdp, NotificationRequest* request)
119 {
120 request->SetBadgeIconStyle(static_cast<OHOS::Notification::NotificationRequest::BadgeStyle>(
121 fdp->ConsumeIntegralInRange<int>(0, 3)));
122 request->SetGroupAlertType(static_cast<OHOS::Notification::NotificationRequest::GroupAlertType>(
123 fdp->ConsumeIntegralInRange<int>(0, 3)));
124 request->SetSlotType(static_cast<OHOS::Notification::NotificationConstant::SlotType>(
125 fdp->ConsumeIntegralInRange<int>(0, 5)));
126 request->SetVisibleness(static_cast<OHOS::Notification::NotificationConstant::VisiblenessType>(
127 fdp->ConsumeIntegralInRange<int>(0, 2)));
128 ANS_LOGE("Build mock veriables");
129 }
130
131 template <>
Build(FuzzedDataProvider * fdp)132 NotificationRequest* ObjectBuilder<NotificationRequest>::Build(FuzzedDataProvider *fdp)
133 {
134 auto request = new NotificationRequest();
135 GenerateIntegerTypeVeriables(fdp, request);
136 GenerateBooleanTypeVeriables(fdp, request);
137 GenerateStringTypeVeriables(fdp, request);
138 GenerateEnumTypeVeriables(fdp, request);
139
140 if (NotificationConstant::SlotType::LIVE_VIEW == request->GetSlotType()) {
141 std::shared_ptr<NotificationLiveViewContent> liveViewContent (
142 ObjectBuilder<NotificationLiveViewContent>::Build(fdp));
143 std::shared_ptr<NotificationContent> content = std::make_shared<NotificationContent>(liveViewContent);
144 request->SetContent(content);
145 } else {
146 request->SetContent(ObjectBuilder<NotificationContent>::BuildSharedPtr(fdp));
147 }
148 request->SetTemplate(ObjectBuilder<NotificationTemplate>::BuildSharedPtr(fdp));
149 request->SetBundleOption(ObjectBuilder<NotificationBundleOption>::BuildSharedPtr(fdp));
150 request->SetAgentBundle(ObjectBuilder<NotificationBundleOption>::BuildSharedPtr(fdp));
151 request->SetAdditionalData(ObjectBuilder<AAFwk::WantParams>::BuildSharedPtr(fdp));
152 request->SetLittleIcon(ObjectBuilder<Media::PixelMap>::BuildSharedPtr(fdp));
153 request->SetBigIcon(ObjectBuilder<Media::PixelMap>::BuildSharedPtr(fdp));
154 request->SetOverlayIcon(ObjectBuilder<Media::PixelMap>::BuildSharedPtr(fdp));
155
156 size_t actionCount = fdp->ConsumeIntegralInRange<size_t>(0, 3);
157 for (size_t i = 0; i < actionCount; ++i) {
158 request->AddActionButton(ObjectBuilder<NotificationActionButton>::BuildSharedPtr(fdp));
159 }
160 std::vector<std::string> devicesSupportDisplay;
161 for(int i = 0; i < fdp->ConsumeIntegralInRange(0, 10); i++) {
162 devicesSupportDisplay.push_back(fdp->ConsumeRandomLengthString());
163 }
164 request->SetDevicesSupportDisplay(devicesSupportDisplay);
165 std::vector<std::string> devicesSupportOperate;
166 for(int i = 0; i < fdp->ConsumeIntegralInRange(0, 10); i++) {
167 devicesSupportOperate.push_back(fdp->ConsumeRandomLengthString());
168 }
169 request->SetDevicesSupportOperate(devicesSupportOperate);
170 std::vector<std::string> userInputHistory;
171 for(int i = 0; i < fdp->ConsumeIntegralInRange(0, 10); i++) {
172 userInputHistory.push_back(fdp->ConsumeRandomLengthString());
173 }
174 request->SetNotificationUserInputHistory(userInputHistory);
175 ANS_LOGE("Build mock veriables");
176 return request;
177 }
178
179 } // namespace Notification
180 } // namespace OHOS
181
182 #endif // MOCK_NOTIFICATION_REQUEST_BUILDER_H
183