1e5d0e473Sopenharmony_ci/*
2e5d0e473Sopenharmony_ci * Copyright (C) 2021 Huawei Device Co., Ltd.
3e5d0e473Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4e5d0e473Sopenharmony_ci * you may not use this file except in compliance with the License.
5e5d0e473Sopenharmony_ci * You may obtain a copy of the License at
6e5d0e473Sopenharmony_ci *
7e5d0e473Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8e5d0e473Sopenharmony_ci *
9e5d0e473Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10e5d0e473Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11e5d0e473Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12e5d0e473Sopenharmony_ci * See the License for the specific language governing permissions and
13e5d0e473Sopenharmony_ci * limitations under the License.
14e5d0e473Sopenharmony_ci */
15e5d0e473Sopenharmony_ci
16e5d0e473Sopenharmony_ci#include <memory>
17e5d0e473Sopenharmony_ci#include <vector>
18e5d0e473Sopenharmony_ci
19e5d0e473Sopenharmony_ci#include "cdma_sms_test.h"
20e5d0e473Sopenharmony_ci#include "common_event_support.h"
21e5d0e473Sopenharmony_ci#include "gsm_sms_sender_test.h"
22e5d0e473Sopenharmony_ci#include "if_system_ability_manager.h"
23e5d0e473Sopenharmony_ci#include "ipc_skeleton.h"
24e5d0e473Sopenharmony_ci#include "iservice_registry.h"
25e5d0e473Sopenharmony_ci#include "mms_msg_test.h"
26e5d0e473Sopenharmony_ci#include "short_message_test.h"
27e5d0e473Sopenharmony_ci#include "sms_broadcast_subscriber.h"
28e5d0e473Sopenharmony_ci#include "sms_cb_message_test.h"
29e5d0e473Sopenharmony_ci#include "sms_gsm_message_test.h"
30e5d0e473Sopenharmony_ci
31e5d0e473Sopenharmony_ciusing namespace OHOS;
32e5d0e473Sopenharmony_ciusing namespace OHOS::Telephony;
33e5d0e473Sopenharmony_ciusing namespace OHOS::EventFwk;
34e5d0e473Sopenharmony_ci
35e5d0e473Sopenharmony_ciusing TestStruct = struct FunStruct {
36e5d0e473Sopenharmony_ci    std::string funName;
37e5d0e473Sopenharmony_ci    std::function<void(void)> fun = nullptr;
38e5d0e473Sopenharmony_ci    FunStruct(const std::string &name, const std::function<void(void)> &function) : funName(name), fun(function) {}
39e5d0e473Sopenharmony_ci};
40e5d0e473Sopenharmony_ci
41e5d0e473Sopenharmony_ciusing TestParam = struct Param {
42e5d0e473Sopenharmony_ci    GsmSmsSenderTest gsmSmsSenderTest;
43e5d0e473Sopenharmony_ci    ShortMessageTest shortMessageTest;
44e5d0e473Sopenharmony_ci    SmsCbMessageTest smsCbMessageTest;
45e5d0e473Sopenharmony_ci    MmsMsgTest mmsMsgTest;
46e5d0e473Sopenharmony_ci    CdmaSmsTest cdmaSmsTest;
47e5d0e473Sopenharmony_ci    SmsGsmMessageTest smsGsmMessageTest;
48e5d0e473Sopenharmony_ci};
49e5d0e473Sopenharmony_ci
50e5d0e473Sopenharmony_cinamespace OHOS {
51e5d0e473Sopenharmony_cinamespace Telephony {
52e5d0e473Sopenharmony_ciclass SmsMmsTest {
53e5d0e473Sopenharmony_cipublic:
54e5d0e473Sopenharmony_ci    SmsMmsTest() = default;
55e5d0e473Sopenharmony_ci    ~SmsMmsTest() = default;
56e5d0e473Sopenharmony_ci
57e5d0e473Sopenharmony_ci    void TestRecev()
58e5d0e473Sopenharmony_ci    {
59e5d0e473Sopenharmony_ci        EventFwk::MatchingSkills matchingSkills;
60e5d0e473Sopenharmony_ci        matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_SMS_RECEIVE_COMPLETED);
61e5d0e473Sopenharmony_ci        matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_SMS_EMERGENCY_CB_RECEIVE_COMPLETED);
62e5d0e473Sopenharmony_ci        matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_SMS_CB_RECEIVE_COMPLETED);
63e5d0e473Sopenharmony_ci        matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_SMS_WAPPUSH_RECEIVE_COMPLETED);
64e5d0e473Sopenharmony_ci        // make subcriber info
65e5d0e473Sopenharmony_ci        EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills);
66e5d0e473Sopenharmony_ci        // make a subcriber object
67e5d0e473Sopenharmony_ci        std::shared_ptr<SmsBroadcastSubscriber> subscriberTest =
68e5d0e473Sopenharmony_ci            std::make_shared<SmsBroadcastSubscriber>(subscriberInfo);
69e5d0e473Sopenharmony_ci        if (subscriberTest == nullptr) {
70e5d0e473Sopenharmony_ci            return;
71e5d0e473Sopenharmony_ci        }
72e5d0e473Sopenharmony_ci        // subscribe a common event
73e5d0e473Sopenharmony_ci        bool subscribeResult = EventFwk::CommonEventManager::SubscribeCommonEvent(subscriberTest);
74e5d0e473Sopenharmony_ci        std::cout << "subscribeResult is " << (subscribeResult ? "true" : "false") << std::endl;
75e5d0e473Sopenharmony_ci    }
76e5d0e473Sopenharmony_ci
77e5d0e473Sopenharmony_ci    void InitGsmFun(const std::unique_ptr<std::vector<TestStruct>> &funArray, const TestParam &param,
78e5d0e473Sopenharmony_ci        const sptr<ISmsServiceInterface> &smsService)
79e5d0e473Sopenharmony_ci    {
80e5d0e473Sopenharmony_ci        funArray->emplace_back(
81e5d0e473Sopenharmony_ci            "TestSendShortText", std::bind(&GsmSmsSenderTest::TestSendShortText, param.gsmSmsSenderTest, smsService));
82e5d0e473Sopenharmony_ci        funArray->emplace_back("TestGsmSendShortData",
83e5d0e473Sopenharmony_ci            std::bind(&GsmSmsSenderTest::TestGsmSendShortData, param.gsmSmsSenderTest, smsService));
84e5d0e473Sopenharmony_ci        funArray->emplace_back(
85e5d0e473Sopenharmony_ci            "TestSendLongText", std::bind(&GsmSmsSenderTest::TestSendLongText, param.gsmSmsSenderTest, smsService));
86e5d0e473Sopenharmony_ci        funArray->emplace_back("TestGsmSendLongData",
87e5d0e473Sopenharmony_ci            std::bind(&GsmSmsSenderTest::TestGsmSendLongData, param.gsmSmsSenderTest, smsService));
88e5d0e473Sopenharmony_ci        funArray->emplace_back(
89e5d0e473Sopenharmony_ci            "TestSendMms", std::bind(&GsmSmsSenderTest::TestSendMms, param.gsmSmsSenderTest, smsService));
90e5d0e473Sopenharmony_ci        funArray->emplace_back(
91e5d0e473Sopenharmony_ci            "TestSetSmscAddr", std::bind(&GsmSmsSenderTest::TestSetSmscAddr, param.gsmSmsSenderTest, smsService));
92e5d0e473Sopenharmony_ci        funArray->emplace_back(
93e5d0e473Sopenharmony_ci            "TestGetSmscAddr", std::bind(&GsmSmsSenderTest::TestGetSmscAddr, param.gsmSmsSenderTest, smsService));
94e5d0e473Sopenharmony_ci        funArray->emplace_back("TestCbMessage", std::bind(&SmsCbMessageTest::ProcessTest, param.smsCbMessageTest));
95e5d0e473Sopenharmony_ci        funArray->emplace_back("TestEnableCBRangeConfig",
96e5d0e473Sopenharmony_ci            std::bind(&GsmSmsSenderTest::TestEnableCBRangeConfig, param.gsmSmsSenderTest, smsService));
97e5d0e473Sopenharmony_ci        funArray->emplace_back("TestDisableCBRangeConfig",
98e5d0e473Sopenharmony_ci            std::bind(&GsmSmsSenderTest::TestDisableCBRangeConfig, param.gsmSmsSenderTest, smsService));
99e5d0e473Sopenharmony_ci        funArray->emplace_back(
100e5d0e473Sopenharmony_ci            "TestEnableCBConfig", std::bind(&GsmSmsSenderTest::TestEnableCBConfig, param.gsmSmsSenderTest, smsService));
101e5d0e473Sopenharmony_ci        funArray->emplace_back("TestDisableCBConfig",
102e5d0e473Sopenharmony_ci            std::bind(&GsmSmsSenderTest::TestDisableCBConfig, param.gsmSmsSenderTest, smsService));
103e5d0e473Sopenharmony_ci        funArray->emplace_back("TestSetDefaultSmsSlotId",
104e5d0e473Sopenharmony_ci            std::bind(&GsmSmsSenderTest::TestSetDefaultSmsSlotId, param.gsmSmsSenderTest, smsService));
105e5d0e473Sopenharmony_ci        funArray->emplace_back("TestGetDefaultSmsSlotId",
106e5d0e473Sopenharmony_ci            std::bind(&GsmSmsSenderTest::TestGetDefaultSmsSlotId, param.gsmSmsSenderTest, smsService));
107e5d0e473Sopenharmony_ci        funArray->emplace_back(
108e5d0e473Sopenharmony_ci            "TestSplitMessage", std::bind(&GsmSmsSenderTest::TestSplitMessage, param.gsmSmsSenderTest, smsService));
109e5d0e473Sopenharmony_ci        funArray->emplace_back("TestGetSmsSegmentsInfo",
110e5d0e473Sopenharmony_ci            std::bind(&GsmSmsSenderTest::TestGetSmsSegmentsInfo, param.gsmSmsSenderTest, smsService));
111e5d0e473Sopenharmony_ci        funArray->emplace_back("TestIsImsSmsSupported",
112e5d0e473Sopenharmony_ci            std::bind(&GsmSmsSenderTest::TestIsImsSmsSupported, param.gsmSmsSenderTest, smsService));
113e5d0e473Sopenharmony_ci        funArray->emplace_back("TestSetImsSmsConfig",
114e5d0e473Sopenharmony_ci            std::bind(&GsmSmsSenderTest::TestSetImsSmsConfig, param.gsmSmsSenderTest, smsService));
115e5d0e473Sopenharmony_ci        funArray->emplace_back("TestGetImsShortMessageFormat",
116e5d0e473Sopenharmony_ci            std::bind(&GsmSmsSenderTest::TestGetImsShortMessageFormat, param.gsmSmsSenderTest, smsService));
117e5d0e473Sopenharmony_ci        funArray->emplace_back(
118e5d0e473Sopenharmony_ci            "TestAddBlockPhone", std::bind(&GsmSmsSenderTest::TestAddBlockPhone, param.gsmSmsSenderTest));
119e5d0e473Sopenharmony_ci        funArray->emplace_back(
120e5d0e473Sopenharmony_ci            "TestRemoveBlockPhone", std::bind(&GsmSmsSenderTest::TestRemoveBlockPhone, param.gsmSmsSenderTest));
121e5d0e473Sopenharmony_ci        funArray->emplace_back("TestHasSmsCapability",
122e5d0e473Sopenharmony_ci            std::bind(&GsmSmsSenderTest::TestHasSmsCapability, param.gsmSmsSenderTest, smsService));
123e5d0e473Sopenharmony_ci    }
124e5d0e473Sopenharmony_ci
125e5d0e473Sopenharmony_ci    void InitSimMessageFun(const std::unique_ptr<std::vector<TestStruct>> &funArray, const TestParam &param,
126e5d0e473Sopenharmony_ci        const sptr<ISmsServiceInterface> &smsService)
127e5d0e473Sopenharmony_ci    {
128e5d0e473Sopenharmony_ci        funArray->emplace_back(
129e5d0e473Sopenharmony_ci            "TestAddSimMessage", std::bind(&GsmSmsSenderTest::TestAddSimMessage, param.gsmSmsSenderTest, smsService));
130e5d0e473Sopenharmony_ci        funArray->emplace_back(
131e5d0e473Sopenharmony_ci            "TestDelSimMessage", std::bind(&GsmSmsSenderTest::TestDelSimMessage, param.gsmSmsSenderTest, smsService));
132e5d0e473Sopenharmony_ci        funArray->emplace_back("TestUpdateSimMessage",
133e5d0e473Sopenharmony_ci            std::bind(&GsmSmsSenderTest::TestUpdateSimMessage, param.gsmSmsSenderTest, smsService));
134e5d0e473Sopenharmony_ci        funArray->emplace_back("TestGetAllSimMessages",
135e5d0e473Sopenharmony_ci            std::bind(&GsmSmsSenderTest::TestGetAllSimMessages, param.gsmSmsSenderTest, smsService));
136e5d0e473Sopenharmony_ci    }
137e5d0e473Sopenharmony_ci
138e5d0e473Sopenharmony_ci    void InitShortMessageFun(const std::unique_ptr<std::vector<TestStruct>> &funArray, const TestParam &param,
139e5d0e473Sopenharmony_ci        const sptr<ISmsServiceInterface> &smsService)
140e5d0e473Sopenharmony_ci    {
141e5d0e473Sopenharmony_ci        funArray->emplace_back(
142e5d0e473Sopenharmony_ci            "TestCreateMessage", std::bind(&ShortMessageTest::TestCreateMessage, param.shortMessageTest));
143e5d0e473Sopenharmony_ci        funArray->emplace_back("TestGetVisibleMessageBody",
144e5d0e473Sopenharmony_ci            std::bind(&ShortMessageTest::TestGetVisibleMessageBody, param.shortMessageTest));
145e5d0e473Sopenharmony_ci        funArray->emplace_back(
146e5d0e473Sopenharmony_ci            "TestShowShortMessage", std::bind(&ShortMessageTest::TestShowShortMessage, param.shortMessageTest));
147e5d0e473Sopenharmony_ci        funArray->emplace_back(
148e5d0e473Sopenharmony_ci            "TestCreate3Gpp2Message", std::bind(&ShortMessageTest::Test3Gpp2CreateMessage, param.shortMessageTest));
149e5d0e473Sopenharmony_ci    }
150e5d0e473Sopenharmony_ci
151e5d0e473Sopenharmony_ci    void InitMmsFun(const std::unique_ptr<std::vector<TestStruct>> &funArray, const TestParam &param,
152e5d0e473Sopenharmony_ci        const sptr<ISmsServiceInterface> &smsService)
153e5d0e473Sopenharmony_ci    {
154e5d0e473Sopenharmony_ci        funArray->emplace_back("TestMmsMsgFunction", std::bind(&MmsMsgTest::ProcessTest, param.mmsMsgTest));
155e5d0e473Sopenharmony_ci    }
156e5d0e473Sopenharmony_ci
157e5d0e473Sopenharmony_ci    void InitCdmaFun(const std::unique_ptr<std::vector<TestStruct>> &funArray, const TestParam &param,
158e5d0e473Sopenharmony_ci        const sptr<ISmsServiceInterface> &smsService)
159e5d0e473Sopenharmony_ci    {
160e5d0e473Sopenharmony_ci        funArray->emplace_back("TestCdmaSmsFunction", std::bind(&CdmaSmsTest::ProcessTest, param.cdmaSmsTest));
161e5d0e473Sopenharmony_ci    }
162e5d0e473Sopenharmony_ci
163e5d0e473Sopenharmony_ci    void InitGsmMessageFun(const std::unique_ptr<std::vector<TestStruct>> &funArray, const TestParam &param,
164e5d0e473Sopenharmony_ci        const sptr<ISmsServiceInterface> &smsService)
165e5d0e473Sopenharmony_ci    {
166e5d0e473Sopenharmony_ci        funArray->emplace_back("TestSmsMessage", std::bind(&SmsGsmMessageTest::ProcessTest, param.smsGsmMessageTest));
167e5d0e473Sopenharmony_ci    }
168e5d0e473Sopenharmony_ci
169e5d0e473Sopenharmony_ci    void InitFunArray(const std::unique_ptr<std::vector<TestStruct>> &funArray, const TestParam &param,
170e5d0e473Sopenharmony_ci        const sptr<ISmsServiceInterface> &smsService)
171e5d0e473Sopenharmony_ci    {
172e5d0e473Sopenharmony_ci        InitGsmFun(funArray, param, smsService);
173e5d0e473Sopenharmony_ci        InitSimMessageFun(funArray, param, smsService);
174e5d0e473Sopenharmony_ci        InitShortMessageFun(funArray, param, smsService);
175e5d0e473Sopenharmony_ci        InitMmsFun(funArray, param, smsService);
176e5d0e473Sopenharmony_ci        InitCdmaFun(funArray, param, smsService);
177e5d0e473Sopenharmony_ci        InitGsmMessageFun(funArray, param, smsService);
178e5d0e473Sopenharmony_ci    }
179e5d0e473Sopenharmony_ci
180e5d0e473Sopenharmony_ci    std::unique_ptr<std::vector<TestStruct>> GetFunArray(const sptr<ISmsServiceInterface> &smsService)
181e5d0e473Sopenharmony_ci    {
182e5d0e473Sopenharmony_ci        static TestParam param;
183e5d0e473Sopenharmony_ci        param.shortMessageTest.TestCreateMessage();
184e5d0e473Sopenharmony_ci        std::unique_ptr<std::vector<TestStruct>> funArray = std::make_unique<std::vector<TestStruct>>();
185e5d0e473Sopenharmony_ci        if (smsService == nullptr || funArray == nullptr) {
186e5d0e473Sopenharmony_ci            return funArray;
187e5d0e473Sopenharmony_ci        }
188e5d0e473Sopenharmony_ci        InitFunArray(funArray, param, smsService);
189e5d0e473Sopenharmony_ci        return funArray;
190e5d0e473Sopenharmony_ci    }
191e5d0e473Sopenharmony_ci};
192e5d0e473Sopenharmony_ci} // namespace Telephony
193e5d0e473Sopenharmony_ci} // namespace OHOS
194e5d0e473Sopenharmony_ci
195e5d0e473Sopenharmony_ciint main()
196e5d0e473Sopenharmony_ci{
197e5d0e473Sopenharmony_ci    OHOS::Telephony::SmsMmsTest smsMmsTest;
198e5d0e473Sopenharmony_ci    smsMmsTest.TestRecev();
199e5d0e473Sopenharmony_ci    sptr<ISystemAbilityManager> systemAbilityMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
200e5d0e473Sopenharmony_ci    sptr<IRemoteObject> remote = nullptr;
201e5d0e473Sopenharmony_ci    sptr<ISmsServiceInterface> smsService = nullptr;
202e5d0e473Sopenharmony_ci    if ((systemAbilityMgr == nullptr) ||
203e5d0e473Sopenharmony_ci        ((remote = systemAbilityMgr->CheckSystemAbility(TELEPHONY_SMS_MMS_SYS_ABILITY_ID)) == nullptr) ||
204e5d0e473Sopenharmony_ci        ((smsService = iface_cast<ISmsServiceInterface>(remote)) == nullptr)) {
205e5d0e473Sopenharmony_ci        std::cout << "connect to sms service failed." << std::endl;
206e5d0e473Sopenharmony_ci        return 0;
207e5d0e473Sopenharmony_ci    }
208e5d0e473Sopenharmony_ci    std::unique_ptr<std::vector<TestStruct>> testFunArray = smsMmsTest.GetFunArray(smsService);
209e5d0e473Sopenharmony_ci    int8_t caseCount = 0;
210e5d0e473Sopenharmony_ci    if (testFunArray == nullptr || ((caseCount = testFunArray->size()) <= 0)) {
211e5d0e473Sopenharmony_ci        std::cout << "Failed to get testFunArray data!\n";
212e5d0e473Sopenharmony_ci        return 0;
213e5d0e473Sopenharmony_ci    }
214e5d0e473Sopenharmony_ci    std::string hint = "[-1]:Exit\n";
215e5d0e473Sopenharmony_ci    for (int index = 0; index < caseCount; ++index) {
216e5d0e473Sopenharmony_ci        hint += "[" + std::to_string(index) + "]:" + (*testFunArray)[index].funName + "\n";
217e5d0e473Sopenharmony_ci    }
218e5d0e473Sopenharmony_ci    while (smsService != nullptr) {
219e5d0e473Sopenharmony_ci        std::cout << hint;
220e5d0e473Sopenharmony_ci        std::cout << "Please input test case number!" << std::endl;
221e5d0e473Sopenharmony_ci        std::string input;
222e5d0e473Sopenharmony_ci        int caseNumber = 0;
223e5d0e473Sopenharmony_ci        std::cin >> input;
224e5d0e473Sopenharmony_ci        caseNumber = std::atoi(input.c_str());
225e5d0e473Sopenharmony_ci        std::cin.clear();
226e5d0e473Sopenharmony_ci        std::cin.ignore();
227e5d0e473Sopenharmony_ci        std::cin.sync();
228e5d0e473Sopenharmony_ci        if (caseNumber < -1 || caseNumber >= caseCount) {
229e5d0e473Sopenharmony_ci            std::cout << "test case is not exist!" << std::endl;
230e5d0e473Sopenharmony_ci            continue;
231e5d0e473Sopenharmony_ci        }
232e5d0e473Sopenharmony_ci        if (caseNumber == -1) {
233e5d0e473Sopenharmony_ci            break;
234e5d0e473Sopenharmony_ci        }
235e5d0e473Sopenharmony_ci        std::cout << "Enter the " << (*testFunArray)[caseNumber].funName << " case!" << std::endl;
236e5d0e473Sopenharmony_ci        if ((*testFunArray)[caseNumber].fun != nullptr) {
237e5d0e473Sopenharmony_ci            (*testFunArray)[caseNumber].fun();
238e5d0e473Sopenharmony_ci        }
239e5d0e473Sopenharmony_ci    }
240e5d0e473Sopenharmony_ci    return 0;
241e5d0e473Sopenharmony_ci}