1c29fa5a6Sopenharmony_ci/*
2c29fa5a6Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd.
3c29fa5a6Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4c29fa5a6Sopenharmony_ci * you may not use this file except in compliance with the License.
5c29fa5a6Sopenharmony_ci * You may obtain a copy of the License at
6c29fa5a6Sopenharmony_ci *
7c29fa5a6Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8c29fa5a6Sopenharmony_ci *
9c29fa5a6Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10c29fa5a6Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11c29fa5a6Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12c29fa5a6Sopenharmony_ci * See the License for the specific language governing permissions and
13c29fa5a6Sopenharmony_ci * limitations under the License.
14c29fa5a6Sopenharmony_ci */
15c29fa5a6Sopenharmony_ci
16c29fa5a6Sopenharmony_ci#include <future>
17c29fa5a6Sopenharmony_ci#include <optional>
18c29fa5a6Sopenharmony_ci
19c29fa5a6Sopenharmony_ci#include <unistd.h>
20c29fa5a6Sopenharmony_ci#include <utility>
21c29fa5a6Sopenharmony_ci
22c29fa5a6Sopenharmony_ci#include <gtest/gtest.h>
23c29fa5a6Sopenharmony_ci
24c29fa5a6Sopenharmony_ci#include "cooperate_client.h"
25c29fa5a6Sopenharmony_ci#include "devicestatus_define.h"
26c29fa5a6Sopenharmony_ci#include "devicestatus_errors.h"
27c29fa5a6Sopenharmony_ci
28c29fa5a6Sopenharmony_ci
29c29fa5a6Sopenharmony_ci#undef LOG_TAG
30c29fa5a6Sopenharmony_ci#define LOG_TAG "CooperateClientTest"
31c29fa5a6Sopenharmony_ci
32c29fa5a6Sopenharmony_cinamespace OHOS {
33c29fa5a6Sopenharmony_cinamespace Msdp {
34c29fa5a6Sopenharmony_cinamespace DeviceStatus {
35c29fa5a6Sopenharmony_ciusing namespace testing::ext;
36c29fa5a6Sopenharmony_cinamespace {
37c29fa5a6Sopenharmony_ciconstexpr int32_t TIME_WAIT_FOR_OP_MS { 20 };
38c29fa5a6Sopenharmony_ciconst std::string SYSTEM_BASIC { "system_basic" };
39c29fa5a6Sopenharmony_ci} // namespace
40c29fa5a6Sopenharmony_ci
41c29fa5a6Sopenharmony_ciclass CooperateClientTest : public testing::Test {
42c29fa5a6Sopenharmony_cipublic:
43c29fa5a6Sopenharmony_ci    void SetUp();
44c29fa5a6Sopenharmony_ci    void TearDown();
45c29fa5a6Sopenharmony_ci    static void SetUpTestCase();
46c29fa5a6Sopenharmony_ci    static void TearDownTestCase();
47c29fa5a6Sopenharmony_ci};
48c29fa5a6Sopenharmony_ci
49c29fa5a6Sopenharmony_civoid CooperateClientTest::SetUpTestCase() {}
50c29fa5a6Sopenharmony_ci
51c29fa5a6Sopenharmony_civoid CooperateClientTest::TearDownTestCase() {}
52c29fa5a6Sopenharmony_ci
53c29fa5a6Sopenharmony_civoid CooperateClientTest::SetUp() {}
54c29fa5a6Sopenharmony_ci
55c29fa5a6Sopenharmony_civoid CooperateClientTest::TearDown()
56c29fa5a6Sopenharmony_ci{
57c29fa5a6Sopenharmony_ci    std::this_thread::sleep_for(std::chrono::milliseconds(TIME_WAIT_FOR_OP_MS));
58c29fa5a6Sopenharmony_ci}
59c29fa5a6Sopenharmony_ci
60c29fa5a6Sopenharmony_ciclass CoordinationListenerTest : public ICoordinationListener {
61c29fa5a6Sopenharmony_ci    public:
62c29fa5a6Sopenharmony_ci        CoordinationListenerTest() : ICoordinationListener() {}
63c29fa5a6Sopenharmony_ci        void OnCoordinationMessage(const std::string &networkId, CoordinationMessage msg) override
64c29fa5a6Sopenharmony_ci        {
65c29fa5a6Sopenharmony_ci            FI_HILOGD("Register coordination listener test");
66c29fa5a6Sopenharmony_ci            (void) networkId;
67c29fa5a6Sopenharmony_ci        };
68c29fa5a6Sopenharmony_ci    };
69c29fa5a6Sopenharmony_ci
70c29fa5a6Sopenharmony_ciclass TunnelClientTest : public ITunnelClient {
71c29fa5a6Sopenharmony_ci    public:
72c29fa5a6Sopenharmony_ci        TunnelClientTest() : ITunnelClient() {}
73c29fa5a6Sopenharmony_ci        int32_t Enable(Intention intention, ParamBase &data, ParamBase &reply)
74c29fa5a6Sopenharmony_ci        {
75c29fa5a6Sopenharmony_ci            return RET_ERR;
76c29fa5a6Sopenharmony_ci        }
77c29fa5a6Sopenharmony_ci        int32_t Disable(Intention intention, ParamBase &data, ParamBase &reply)
78c29fa5a6Sopenharmony_ci        {
79c29fa5a6Sopenharmony_ci            return RET_ERR;
80c29fa5a6Sopenharmony_ci        }
81c29fa5a6Sopenharmony_ci        int32_t Start(Intention intention, ParamBase &data, ParamBase &reply)
82c29fa5a6Sopenharmony_ci        {
83c29fa5a6Sopenharmony_ci            return RET_ERR;
84c29fa5a6Sopenharmony_ci        }
85c29fa5a6Sopenharmony_ci        int32_t Stop(Intention intention, ParamBase &data, ParamBase &reply)
86c29fa5a6Sopenharmony_ci        {
87c29fa5a6Sopenharmony_ci            return RET_ERR;
88c29fa5a6Sopenharmony_ci        }
89c29fa5a6Sopenharmony_ci        int32_t AddWatch(Intention intention, uint32_t id, ParamBase &data, ParamBase &reply)
90c29fa5a6Sopenharmony_ci        {
91c29fa5a6Sopenharmony_ci            return RET_OK;
92c29fa5a6Sopenharmony_ci        }
93c29fa5a6Sopenharmony_ci        int32_t RemoveWatch(Intention intention, uint32_t id, ParamBase &data, ParamBase &reply)
94c29fa5a6Sopenharmony_ci        {
95c29fa5a6Sopenharmony_ci            return RET_ERR;
96c29fa5a6Sopenharmony_ci        }
97c29fa5a6Sopenharmony_ci        int32_t SetParam(Intention intention, uint32_t id, ParamBase &data, ParamBase &reply)
98c29fa5a6Sopenharmony_ci        {
99c29fa5a6Sopenharmony_ci            return RET_ERR;
100c29fa5a6Sopenharmony_ci        }
101c29fa5a6Sopenharmony_ci        int32_t GetParam(Intention intention, uint32_t id, ParamBase &data, ParamBase &reply)
102c29fa5a6Sopenharmony_ci        {
103c29fa5a6Sopenharmony_ci            return RET_OK;
104c29fa5a6Sopenharmony_ci        }
105c29fa5a6Sopenharmony_ci        int32_t Control(Intention intention, uint32_t id, ParamBase &data, ParamBase &reply)
106c29fa5a6Sopenharmony_ci        {
107c29fa5a6Sopenharmony_ci            return RET_ERR;
108c29fa5a6Sopenharmony_ci        }
109c29fa5a6Sopenharmony_ci    };
110c29fa5a6Sopenharmony_ci
111c29fa5a6Sopenharmony_ciclass StreamClientTest : public StreamClient {
112c29fa5a6Sopenharmony_ci    public:
113c29fa5a6Sopenharmony_ci        StreamClientTest() = default;
114c29fa5a6Sopenharmony_ci        void Stop() override
115c29fa5a6Sopenharmony_ci        {}
116c29fa5a6Sopenharmony_ci        int32_t Socket() override
117c29fa5a6Sopenharmony_ci        {
118c29fa5a6Sopenharmony_ci            return RET_ERR;
119c29fa5a6Sopenharmony_ci        }
120c29fa5a6Sopenharmony_ci    };
121c29fa5a6Sopenharmony_ci
122c29fa5a6Sopenharmony_ci/**
123c29fa5a6Sopenharmony_ci * @tc.name: CooperateClientTest_RegisterListener_001
124c29fa5a6Sopenharmony_ci * @tc.desc: On Coordination Listener
125c29fa5a6Sopenharmony_ci * @tc.type: FUNC
126c29fa5a6Sopenharmony_ci * @tc.require:
127c29fa5a6Sopenharmony_ci */
128c29fa5a6Sopenharmony_ciHWTEST_F(CooperateClientTest, CooperateClientTest_RegisterListener_001, TestSize.Level1)
129c29fa5a6Sopenharmony_ci{
130c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
131c29fa5a6Sopenharmony_ci    std::shared_ptr<CoordinationListenerTest> consumer =
132c29fa5a6Sopenharmony_ci        std::make_shared<CoordinationListenerTest>();
133c29fa5a6Sopenharmony_ci    bool isCompatible = true;
134c29fa5a6Sopenharmony_ci    TunnelClientTest tunnel;
135c29fa5a6Sopenharmony_ci    CooperateClient cooperateClient;
136c29fa5a6Sopenharmony_ci    int32_t ret = cooperateClient.RegisterListener(tunnel, consumer, isCompatible);
137c29fa5a6Sopenharmony_ci    ASSERT_EQ(ret, RET_OK);
138c29fa5a6Sopenharmony_ci    ret = cooperateClient.RegisterListener(tunnel, consumer, isCompatible);
139c29fa5a6Sopenharmony_ci    ASSERT_EQ(ret, RET_ERR);
140c29fa5a6Sopenharmony_ci}
141c29fa5a6Sopenharmony_ci
142c29fa5a6Sopenharmony_ci/**
143c29fa5a6Sopenharmony_ci * @tc.name: CooperateClientTest_RegisterListener_002
144c29fa5a6Sopenharmony_ci * @tc.desc: On Coordination Listener
145c29fa5a6Sopenharmony_ci * @tc.type: FUNC
146c29fa5a6Sopenharmony_ci * @tc.require:
147c29fa5a6Sopenharmony_ci */
148c29fa5a6Sopenharmony_ciHWTEST_F(CooperateClientTest, CooperateClientTest_RegisterListener_002, TestSize.Level1)
149c29fa5a6Sopenharmony_ci{
150c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
151c29fa5a6Sopenharmony_ci    std::shared_ptr<CoordinationListenerTest> consumer =
152c29fa5a6Sopenharmony_ci        std::make_shared<CoordinationListenerTest>();
153c29fa5a6Sopenharmony_ci    bool isCompatible = true;
154c29fa5a6Sopenharmony_ci    TunnelClientTest tunnel;
155c29fa5a6Sopenharmony_ci    CooperateClient cooperateClient;
156c29fa5a6Sopenharmony_ci    int32_t ret = cooperateClient.RegisterListener(tunnel, consumer, isCompatible);
157c29fa5a6Sopenharmony_ci    ASSERT_EQ(ret, RET_OK);
158c29fa5a6Sopenharmony_ci}
159c29fa5a6Sopenharmony_ci
160c29fa5a6Sopenharmony_ci/**
161c29fa5a6Sopenharmony_ci * @tc.name: CooperateClientTest_OnCoordinationListener_001
162c29fa5a6Sopenharmony_ci * @tc.desc: On Coordination Listener
163c29fa5a6Sopenharmony_ci * @tc.type: FUNC
164c29fa5a6Sopenharmony_ci * @tc.require:
165c29fa5a6Sopenharmony_ci */
166c29fa5a6Sopenharmony_ciHWTEST_F(CooperateClientTest, CooperateClientTest_OnCoordinationListener_001, TestSize.Level1)
167c29fa5a6Sopenharmony_ci{
168c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
169c29fa5a6Sopenharmony_ci    std::shared_ptr<CoordinationListenerTest> consumer =
170c29fa5a6Sopenharmony_ci        std::make_shared<CoordinationListenerTest>();
171c29fa5a6Sopenharmony_ci    bool isCompatible = true;
172c29fa5a6Sopenharmony_ci    TunnelClientTest tunnel;
173c29fa5a6Sopenharmony_ci    CooperateClient cooperateClient;
174c29fa5a6Sopenharmony_ci    int32_t ret = cooperateClient.RegisterListener(tunnel, consumer, isCompatible);
175c29fa5a6Sopenharmony_ci    ASSERT_EQ(ret, RET_OK);
176c29fa5a6Sopenharmony_ci    StreamClientTest client;
177c29fa5a6Sopenharmony_ci    int32_t userData = 0;
178c29fa5a6Sopenharmony_ci    std::string networkId = "networkId";
179c29fa5a6Sopenharmony_ci    CoordinationMessage msg = CoordinationMessage::ACTIVATE_SUCCESS;
180c29fa5a6Sopenharmony_ci    MessageId msgId = MessageId::COORDINATION_ADD_LISTENER;
181c29fa5a6Sopenharmony_ci    NetPacket pkt(msgId);
182c29fa5a6Sopenharmony_ci    pkt << userData << networkId << static_cast<int32_t>(msg);
183c29fa5a6Sopenharmony_ci    ret = cooperateClient.OnCoordinationListener(client, pkt);
184c29fa5a6Sopenharmony_ci    ASSERT_EQ(ret, RET_OK);
185c29fa5a6Sopenharmony_ci}
186c29fa5a6Sopenharmony_ci
187c29fa5a6Sopenharmony_ci/**
188c29fa5a6Sopenharmony_ci * @tc.name: CooperateClientTest_OnCoordinationListener_002
189c29fa5a6Sopenharmony_ci * @tc.desc: On Coordination Listener
190c29fa5a6Sopenharmony_ci * @tc.type: FUNC
191c29fa5a6Sopenharmony_ci * @tc.require:
192c29fa5a6Sopenharmony_ci */
193c29fa5a6Sopenharmony_ciHWTEST_F(CooperateClientTest, CooperateClientTest_OnCoordinationListener_002, TestSize.Level1)
194c29fa5a6Sopenharmony_ci{
195c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
196c29fa5a6Sopenharmony_ci    std::shared_ptr<CoordinationListenerTest> consumer =
197c29fa5a6Sopenharmony_ci        std::make_shared<CoordinationListenerTest>();
198c29fa5a6Sopenharmony_ci    bool isCompatible = true;
199c29fa5a6Sopenharmony_ci    TunnelClientTest tunnel;
200c29fa5a6Sopenharmony_ci    CooperateClient cooperateClient;
201c29fa5a6Sopenharmony_ci    int32_t ret = cooperateClient.RegisterListener(tunnel, consumer, isCompatible);
202c29fa5a6Sopenharmony_ci    ASSERT_EQ(ret, RET_OK);
203c29fa5a6Sopenharmony_ci    StreamClientTest client;
204c29fa5a6Sopenharmony_ci    CoordinationMessage msg = CoordinationMessage::ACTIVATE_SUCCESS;
205c29fa5a6Sopenharmony_ci    MessageId msgId = MessageId::COORDINATION_ADD_LISTENER;
206c29fa5a6Sopenharmony_ci    NetPacket pkt(msgId);
207c29fa5a6Sopenharmony_ci    pkt << static_cast<int32_t>(msg);
208c29fa5a6Sopenharmony_ci    ret = cooperateClient.OnCoordinationListener(client, pkt);
209c29fa5a6Sopenharmony_ci    ASSERT_EQ(ret, RET_ERR);
210c29fa5a6Sopenharmony_ci}
211c29fa5a6Sopenharmony_ci
212c29fa5a6Sopenharmony_ci/**
213c29fa5a6Sopenharmony_ci * @tc.name: CooperateClientTest_OnMouseLocationListener_001
214c29fa5a6Sopenharmony_ci * @tc.desc: On Hot Area Listener
215c29fa5a6Sopenharmony_ci * @tc.type: FUNC
216c29fa5a6Sopenharmony_ci * @tc.require:
217c29fa5a6Sopenharmony_ci */
218c29fa5a6Sopenharmony_ciHWTEST_F(CooperateClientTest, CooperateClientTest_OnMouseLocationListener_001, TestSize.Level1)
219c29fa5a6Sopenharmony_ci{
220c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
221c29fa5a6Sopenharmony_ci    std::shared_ptr<CoordinationListenerTest> consumer =
222c29fa5a6Sopenharmony_ci        std::make_shared<CoordinationListenerTest>();
223c29fa5a6Sopenharmony_ci    bool isCompatible = true;
224c29fa5a6Sopenharmony_ci    TunnelClientTest tunnel;
225c29fa5a6Sopenharmony_ci    CooperateClient cooperateClient;
226c29fa5a6Sopenharmony_ci    int32_t ret = cooperateClient.RegisterListener(tunnel, consumer, isCompatible);
227c29fa5a6Sopenharmony_ci    ASSERT_EQ(ret, RET_OK);
228c29fa5a6Sopenharmony_ci    Event event;
229c29fa5a6Sopenharmony_ci    std::string networkId = "networkId";
230c29fa5a6Sopenharmony_ci    MessageId msgId = MessageId::COORDINATION_ADD_LISTENER;
231c29fa5a6Sopenharmony_ci    NetPacket pkt(msgId);
232c29fa5a6Sopenharmony_ci    pkt << networkId << event.displayX << event.displayY << event.displayWidth << event.displayHeight;
233c29fa5a6Sopenharmony_ci    StreamClientTest client;
234c29fa5a6Sopenharmony_ci    ret = cooperateClient.OnMouseLocationListener(client, pkt);
235c29fa5a6Sopenharmony_ci    ASSERT_EQ(ret, RET_OK);
236c29fa5a6Sopenharmony_ci}
237c29fa5a6Sopenharmony_ci
238c29fa5a6Sopenharmony_ci/**
239c29fa5a6Sopenharmony_ci * @tc.name: CooperateClientTest_OnMouseLocationListener_002
240c29fa5a6Sopenharmony_ci * @tc.desc: On Hot Area Listener
241c29fa5a6Sopenharmony_ci * @tc.type: FUNC
242c29fa5a6Sopenharmony_ci * @tc.require:
243c29fa5a6Sopenharmony_ci */
244c29fa5a6Sopenharmony_ciHWTEST_F(CooperateClientTest, CooperateClientTest_OnMouseLocationListener_002, TestSize.Level1)
245c29fa5a6Sopenharmony_ci{
246c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
247c29fa5a6Sopenharmony_ci    std::shared_ptr<CoordinationListenerTest> consumer =
248c29fa5a6Sopenharmony_ci        std::make_shared<CoordinationListenerTest>();
249c29fa5a6Sopenharmony_ci    bool isCompatible = true;
250c29fa5a6Sopenharmony_ci    TunnelClientTest tunnel;
251c29fa5a6Sopenharmony_ci    CooperateClient cooperateClient;
252c29fa5a6Sopenharmony_ci    int32_t ret = cooperateClient.RegisterListener(tunnel, consumer, isCompatible);
253c29fa5a6Sopenharmony_ci    ASSERT_EQ(ret, RET_OK);
254c29fa5a6Sopenharmony_ci    std::string networkId = "networkId";
255c29fa5a6Sopenharmony_ci    MessageId msgId = MessageId::COORDINATION_ADD_LISTENER;
256c29fa5a6Sopenharmony_ci    NetPacket pkt(msgId);
257c29fa5a6Sopenharmony_ci    StreamClientTest client;
258c29fa5a6Sopenharmony_ci    ret = cooperateClient.OnMouseLocationListener(client, pkt);
259c29fa5a6Sopenharmony_ci    ASSERT_EQ(ret, RET_ERR);
260c29fa5a6Sopenharmony_ci}
261c29fa5a6Sopenharmony_ci} // namespace DeviceStatus
262c29fa5a6Sopenharmony_ci} // namespace Msdp
263c29fa5a6Sopenharmony_ci} // namespace OHOS