1 /*
2  * Copyright (c) 2022-2023 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 <gtest/gtest.h>
17 
18 #include "devicestatus_callback_stub.h"
19 #include "devicestatus_define.h"
20 #include "stationary_manager.h"
21 
22 #undef LOG_TAG
23 #define LOG_TAG "DeviceStatusClientTest"
24 
25 namespace OHOS {
26 namespace Msdp {
27 namespace DeviceStatus {
28 using namespace testing::ext;
29 
30 class DeviceStatusClientTest : public testing::Test {
31 public:
32     class DeviceStatusClientTestCallback : public DeviceStatusCallbackStub {
33     public:
DeviceStatusClientTestCallback()34         DeviceStatusClientTestCallback() {};
~DeviceStatusClientTestCallback()35         virtual ~DeviceStatusClientTestCallback() {};
36         virtual void OnDeviceStatusChanged(const Data& devicestatusData);
37     };
38 };
39 
OnDeviceStatusChanged(const Data & devicestatusData)40 void DeviceStatusClientTest::DeviceStatusClientTestCallback::OnDeviceStatusChanged(const
41     Data& devicestatusData)
42 {
43     GTEST_LOG_(INFO) << "DeviceStatusClientTestCallback type: " << devicestatusData.type;
44     GTEST_LOG_(INFO) << "DeviceStatusClientTestCallback value: " << devicestatusData.value;
45     EXPECT_TRUE(devicestatusData.type == Type::TYPE_VERTICAL_POSITION &&
46         devicestatusData.value >= OnChangedValue::VALUE_INVALID &&
47         devicestatusData.value <= OnChangedValue::VALUE_EXIT) << "DeviceStatusClientTestCallback failed";
48 }
49 
50 /**
51  * @tc.name: DeviceStatusCallbackTest001
52  * @tc.desc: test devicestatus callback in proxy
53  * @tc.type: FUNC
54  */
55 HWTEST_F(DeviceStatusClientTest, DeviceStatusCallbackTest001, TestSize.Level0)
56 {
57     CALL_TEST_DEBUG;
58     sptr<IRemoteDevStaCallback> cb = new (std::nothrow) DeviceStatusClientTestCallback();
59     ASSERT_NE(cb, nullptr);
60     auto stationaryMgr = StationaryManager::GetInstance();
61     ReportLatencyNs latency = ReportLatencyNs::Latency_INVALID;
62     ActivityEvent activityEvent = ActivityEvent::EVENT_INVALID;
63     int32_t result = stationaryMgr->SubscribeCallback(Type::TYPE_VERTICAL_POSITION, activityEvent, latency, cb);
64     ASSERT_EQ(result, RET_OK);
65     result = stationaryMgr->UnsubscribeCallback(Type::TYPE_VERTICAL_POSITION, activityEvent, cb);
66     ASSERT_EQ(result, RET_OK);
67 
68     result = stationaryMgr->SubscribeCallback(Type::TYPE_INVALID, activityEvent, latency, cb);
69     ASSERT_EQ(result, RET_OK);
70     result = stationaryMgr->UnsubscribeCallback(Type::TYPE_INVALID, activityEvent, cb);
71     ASSERT_EQ(result, RET_OK);
72 
73     result = stationaryMgr->SubscribeCallback(Type::TYPE_ABSOLUTE_STILL, activityEvent, latency, cb);
74     ASSERT_EQ(result, RET_OK);
75     result = stationaryMgr->UnsubscribeCallback(Type::TYPE_ABSOLUTE_STILL, activityEvent, cb);
76     ASSERT_EQ(result, RET_OK);
77 
78     result = stationaryMgr->SubscribeCallback(Type::TYPE_HORIZONTAL_POSITION, activityEvent, latency, cb);
79     ASSERT_EQ(result, RET_OK);
80     result = stationaryMgr->UnsubscribeCallback(Type::TYPE_HORIZONTAL_POSITION, activityEvent, cb);
81     ASSERT_EQ(result, RET_OK);
82 
83     result = stationaryMgr->SubscribeCallback(Type::TYPE_LID_OPEN, activityEvent, latency, cb);
84     ASSERT_EQ(result, RET_OK);
85     result = stationaryMgr->UnsubscribeCallback(Type::TYPE_LID_OPEN, activityEvent, cb);
86     ASSERT_EQ(result, RET_OK);
87 
88     result = stationaryMgr->SubscribeCallback(Type::TYPE_MAX, activityEvent, latency, cb);
89     ASSERT_EQ(result, RET_OK);
90     result = stationaryMgr->UnsubscribeCallback(Type::TYPE_MAX, activityEvent, cb);
91     ASSERT_EQ(result, RET_OK);
92 }
93 
94 /**
95  * @tc.name: GetDeviceStatusDataTest001
96  * @tc.desc: test get devicestatus data in proxy
97  * @tc.type: FUNC
98  */
99 HWTEST_F(DeviceStatusClientTest, GetDeviceStatusDataTest001, TestSize.Level0)
100 {
101     CALL_TEST_DEBUG;
102     auto stationaryMgr = StationaryManager::GetInstance();
103     OnChangedValue invalidValue = OnChangedValue::VALUE_INVALID;
104     OnChangedValue exitValue = OnChangedValue::VALUE_EXIT;
105 
106     Type type = Type::TYPE_ABSOLUTE_STILL;
107     Data data = stationaryMgr->GetDeviceStatusData(type);
108     EXPECT_TRUE(data.type == type && data.value >= invalidValue && data.value <= exitValue);
109 
110     type = Type::TYPE_VERTICAL_POSITION;
111     data = stationaryMgr->GetDeviceStatusData(type);
112     EXPECT_TRUE(data.type == type && data.value >= invalidValue && data.value <= exitValue);
113 
114     type = Type::TYPE_HORIZONTAL_POSITION;
115     data = stationaryMgr->GetDeviceStatusData(type);
116     EXPECT_TRUE(data.type == type && data.value >= invalidValue && data.value <= exitValue);
117 
118     type = Type::TYPE_LID_OPEN;
119     data = stationaryMgr->GetDeviceStatusData(type);
120     EXPECT_TRUE(data.type == type && data.value >= invalidValue && data.value <= exitValue);
121 
122     type = Type::TYPE_INVALID;
123     data = stationaryMgr->GetDeviceStatusData(type);
124     EXPECT_TRUE(data.type == type && data.value >= invalidValue && data.value <= exitValue);
125 
126     type = static_cast<Type>(10);
127     data = stationaryMgr->GetDeviceStatusData(type);
128     EXPECT_TRUE(data.type == type && data.value >= invalidValue && data.value <= exitValue);
129 }
130 } // namespace DeviceStatus
131 } // namespace Msdp
132 } // namespace OHOS
133