1 /*
2 * Copyright (c) 2021-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 "usbd_device_test.h"
17
18 #include <iostream>
19 #include <vector>
20
21 #include "UsbSubscriberTest.h"
22 #include "hdf_log.h"
23 #include "v1_0/iusb_interface.h"
24 #include "v1_0/usb_types.h"
25
26 using namespace testing::ext;
27 using namespace OHOS;
28 using namespace OHOS::USB;
29 using namespace std;
30 using namespace OHOS::HDI::Usb::V1_0;
31
32 const int SLEEP_TIME = 3;
33 const uint8_t BUS_NUM_INVALID = 255;
34 const uint8_t DEV_ADDR_INVALID = 255;
35 UsbDev UsbdDeviceTest::dev_ = {0, 0};
36 sptr<UsbSubscriberTest> UsbdDeviceTest::subscriber_ = nullptr;
37
38 namespace {
39 sptr<IUsbInterface> g_usbInterface = nullptr;
40
SwitchErrCode(int32_t ret)41 int32_t SwitchErrCode(int32_t ret)
42 {
43 return ret == HDF_ERR_NOT_SUPPORT ? HDF_SUCCESS : ret;
44 }
45
SetUpTestCase(void)46 void UsbdDeviceTest::SetUpTestCase(void)
47 {
48 g_usbInterface = IUsbInterface::Get();
49 if (g_usbInterface == nullptr) {
50 HDF_LOGE("%{public}s:IUsbInterface::Get() failed.", __func__);
51 exit(0);
52 }
53 auto ret = g_usbInterface->SetPortRole(1, 1, 1);
54 sleep(SLEEP_TIME);
55 HDF_LOGI("UsbdDeviceTest::[Device] %{public}d SetPortRole=%{public}d", __LINE__, ret);
56 ret = SwitchErrCode(ret);
57 ASSERT_EQ(0, ret);
58 if (ret != 0) {
59 exit(0);
60 }
61
62 subscriber_ = new UsbSubscriberTest();
63 if (g_usbInterface->BindUsbdSubscriber(subscriber_) != HDF_SUCCESS) {
64 HDF_LOGE("%{public}s: bind usbd subscriber_ failed", __func__);
65 exit(0);
66 }
67 dev_ = {subscriber_->busNum_, subscriber_->devAddr_};
68
69 std::cout << "please connect device, press enter to continue" << std::endl;
70 int c;
71 while ((c = getchar()) != '\n' && c != EOF) {}
72 }
73
TearDownTestCase(void)74 void UsbdDeviceTest::TearDownTestCase(void)
75 {
76 g_usbInterface->UnbindUsbdSubscriber(subscriber_);
77 }
78
SetUp(void)79 void UsbdDeviceTest::SetUp(void) {}
80
TearDown(void)81 void UsbdDeviceTest::TearDown(void) {}
82
83 /**
84 * @tc.name: UsbdDevice001
85 * @tc.desc: Test functions to OpenDevice
86 * @tc.desc: int32_t OpenDevice(const UsbDev &dev);
87 * @tc.desc: 正向测试:参数正确
88 * @tc.type: FUNC
89 */
90 HWTEST_F(UsbdDeviceTest, UsbdOpenDevice001, TestSize.Level1)
91 {
92 struct UsbDev dev = dev_;
93 auto ret = g_usbInterface->OpenDevice(dev);
94 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d OpenDevice result =%{public}d", __LINE__, ret);
95 ASSERT_EQ(0, ret);
96 }
97
98 /**
99 * @tc.name: UsbdDevice002
100 * @tc.desc: Test functions to OpenDevice
101 * @tc.desc: int32_t OpenDevice(const UsbDev &dev);
102 * @tc.desc:
103 * @tc.type: FUNC
104 */
105 HWTEST_F(UsbdDeviceTest, UsbdOpenDevice002, TestSize.Level1)
106 {
107 struct UsbDev dev = {BUS_NUM_INVALID, dev_.devAddr};
108 auto ret = g_usbInterface->OpenDevice(dev);
109 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d OpenDevice result=%{public}d", __LINE__, ret);
110 ASSERT_NE(ret, 0);
111 }
112
113 /**
114 * @tc.name: UsbdDevice003
115 * @tc.desc: Test functions to OpenDevice
116 * @tc.desc: int32_t OpenDevice(const UsbDev &dev);
117 * @tc.desc:
118 * @tc.type: FUNC
119 */
120 HWTEST_F(UsbdDeviceTest, UsbdOpenDevice003, TestSize.Level1)
121 {
122 struct UsbDev dev = {dev_.busNum, DEV_ADDR_INVALID};
123 auto ret = g_usbInterface->OpenDevice(dev);
124 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d OpenDevice result=%{public}d", __LINE__, ret);
125 ASSERT_NE(ret, 0);
126 }
127
128 /**
129 * @tc.name: UsbdDevice004
130 * @tc.desc: Test functions to OpenDevice
131 * @tc.desc: int32_t OpenDevice(const UsbDev &dev);
132 * @tc.desc:
133 * @tc.type: FUNC
134 */
135 HWTEST_F(UsbdDeviceTest, UsbdOpenDevice004, TestSize.Level1)
136 {
137 struct UsbDev dev = {BUS_NUM_INVALID, DEV_ADDR_INVALID};
138 auto ret = g_usbInterface->OpenDevice(dev);
139 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d OpenDevice result=%{public}d", __LINE__, ret);
140 ASSERT_NE(ret, 0);
141 }
142
143 /**********************************************************************************************************/
144
145 /**
146 * @tc.name: UsbdDevice011
147 * @tc.desc: Test functions to CloseDevice
148 * @tc.desc: int32_t CloseDevice(const UsbDev &dev);
149 * @tc.desc: 正向测试:参数正确
150 * @tc.type: FUNC
151 */
152 HWTEST_F(UsbdDeviceTest, UsbdCloseDevice001, TestSize.Level1)
153 {
154 struct UsbDev dev = dev_;
155 auto ret = g_usbInterface->OpenDevice(dev);
156 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d OpenDevice result=%{public}d", __LINE__, ret);
157 ASSERT_EQ(0, ret);
158 ret = g_usbInterface->CloseDevice(dev);
159 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d Close result=%{public}d", __LINE__, ret);
160 ASSERT_EQ(0, ret);
161 }
162
163 /**
164 * @tc.name: UsbdDevice012
165 * @tc.desc: Test functions to CloseDevice
166 * @tc.desc: int32_t CloseDevice(const UsbDev &dev);
167 * @tc.desc:
168 * @tc.type: FUNC
169 */
170 HWTEST_F(UsbdDeviceTest, UsbdCloseDevice002, TestSize.Level1)
171 {
172 struct UsbDev dev = dev_;
173 auto ret = g_usbInterface->OpenDevice(dev);
174 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d OpenDevice result=%{public}d", __LINE__, ret);
175 ASSERT_EQ(0, ret);
176 dev.busNum = BUS_NUM_INVALID;
177 ret = g_usbInterface->CloseDevice(dev);
178 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d Close result=%{public}d", __LINE__, ret);
179 ASSERT_NE(ret, 0);
180 dev = dev_;
181 g_usbInterface->CloseDevice(dev);
182 }
183
184 /**
185 * @tc.name: UsbdDevice013
186 * @tc.desc: Test functions to CloseDevice
187 * @tc.desc: int32_t CloseDevice(const UsbDev &dev);
188 * @tc.desc:
189 * @tc.type: FUNC
190 */
191 HWTEST_F(UsbdDeviceTest, UsbdCloseDevice003, TestSize.Level1)
192 {
193 struct UsbDev dev = dev_;
194 auto ret = g_usbInterface->OpenDevice(dev);
195 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d OpenDevice result=%{public}d", __LINE__, ret);
196 ASSERT_EQ(0, ret);
197 dev.devAddr = DEV_ADDR_INVALID;
198 ret = g_usbInterface->CloseDevice(dev);
199 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d Close result=%{public}d", __LINE__, ret);
200 ASSERT_NE(ret, 0);
201 dev = dev_;
202 g_usbInterface->CloseDevice(dev);
203 }
204
205 /**
206 * @tc.name: UsbdDevice014
207 * @tc.desc: Test functions to CloseDevice
208 * @tc.desc: int32_t CloseDevice(const UsbDev &dev);
209 * @tc.desc:
210 * @tc.type: FUNC
211 */
212 HWTEST_F(UsbdDeviceTest, UsbdCloseDevice004, TestSize.Level1)
213 {
214 struct UsbDev dev = dev_;
215 auto ret = g_usbInterface->OpenDevice(dev);
216 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d OpenDevice result=%{public}d", __LINE__, ret);
217 ASSERT_EQ(0, ret);
218 dev.busNum = BUS_NUM_INVALID;
219 dev.devAddr = DEV_ADDR_INVALID;
220 ret = g_usbInterface->CloseDevice(dev);
221 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d Close result=%{public}d", __LINE__, ret);
222 ASSERT_NE(ret, 0);
223 dev = dev_;
224 g_usbInterface->CloseDevice(dev);
225 }
226 } // namespace
227