• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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