1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
6 #include "mvnc_tests_common.hpp"
8 // *********************************************** //
9 // Open Device TESTS //
11 class MvncOpenUSBDevice : public MvncTestsCommon {
13 int available_devices = 0;
15 ~MvncOpenUSBDevice() override = default;
16 void SetUp() override {
17 MvncTestsCommon::SetUp();
18 available_devices = getAmountOfNotBootedDevices();
19 ASSERT_TRUE(available_devices > 0);
24 * @brief Open any device with custom firmware path as ncDeviceOpen argument
26 TEST_F(MvncOpenUSBDevice, WithCustomFirmware) {
27 ncDeviceHandle_t *deviceHandle = nullptr;
28 ncDeviceDescr_t deviceDesc = {};
29 deviceDesc.protocol = NC_USB;
30 deviceDesc.platform = NC_ANY_PLATFORM;
32 // Use custom firmware dir path as parameter for ncDeviceOpen
33 ASSERT_NO_ERROR(ncDeviceOpen(&deviceHandle, deviceDesc, watchdogInterval, firmwarePath));
34 ASSERT_NO_ERROR(ncDeviceClose(&deviceHandle));
38 * @brief Open all available devices and close them
40 TEST_F(MvncOpenUSBDevice, AllAvailableDevices) {
41 ncDeviceHandle_t * deviceHandle[MAX_DEVICES] = {nullptr};
42 ncDeviceDescr_t deviceDesc = {};
43 deviceDesc.protocol = NC_USB;
44 deviceDesc.platform = NC_ANY_PLATFORM;
46 for (int index = 0; index < available_devices; ++index) {
47 ASSERT_NO_ERROR(ncDeviceOpen(&deviceHandle[index], deviceDesc, watchdogInterval, firmwarePath));
49 for (int index = 0; index < available_devices; ++index) {
50 ASSERT_NO_ERROR(ncDeviceClose(&deviceHandle[index]));
55 * @brief Open all available devices in parallel threads and close them
57 TEST_F(MvncOpenUSBDevice, AllAvailableMultiThreads) {
58 std::thread requests[MAX_DEVICES];
59 ncDeviceHandle_t * deviceHandle[MAX_DEVICES] = {nullptr};
60 ncStatus_t rc[MAX_DEVICES];
61 ncDeviceDescr_t deviceDesc = {};
62 deviceDesc.protocol = NC_USB;
63 deviceDesc.platform = NC_ANY_PLATFORM;
65 for (int i = 0; i < available_devices; ++i) {
66 requests[i] = std::thread([i, &rc, &deviceHandle, deviceDesc, this]() {
67 rc[i] = ncDeviceOpen(&deviceHandle[i], deviceDesc, watchdogInterval, firmwarePath);
71 for (int i = 0; i < available_devices; ++i) {
73 ASSERT_NO_ERROR(rc[i]);
76 for (int i = 0; i < available_devices; ++i) {
77 ASSERT_NO_ERROR(ncDeviceClose(&deviceHandle[i]));
82 * @brief Open any device with invalid firmware path
84 TEST_F(MvncOpenUSBDevice, WithInvalidFirmwarePath) {
85 const char invalidPath[MAX_PATH] = "./InvalidPath/";
86 ncDeviceDescr_t deviceDesc = {};
87 deviceDesc.protocol = NC_USB;
88 deviceDesc.platform = NC_ANY_PLATFORM;
90 // Use custom firmware dir path as parameter for ncDeviceOpen
91 ncDeviceHandle_t *deviceHandle = nullptr;
92 ASSERT_ERROR(ncDeviceOpen(&deviceHandle, deviceDesc, watchdogInterval, invalidPath));
94 ASSERT_EQ(deviceHandle, nullptr);
97 TEST_F(MvncOpenUSBDevice, OpenAvailableDeviceByName) {
98 ncDeviceHandle_t *deviceHandle = nullptr;
99 char dev_addr_open[NC_MAX_NAME_SIZE];
100 unsigned int data_lenght = NC_MAX_NAME_SIZE;
101 ncDeviceDescr_t deviceDesc = {};
102 deviceDesc.protocol = NC_USB;
103 deviceDesc.platform = NC_ANY_PLATFORM;
105 auto availableDevices = getDevicesList();
107 ASSERT_TRUE(availableDevices.size());
108 strncpy(deviceDesc.name, availableDevices[0].c_str(), NC_MAX_NAME_SIZE);
110 ASSERT_NO_ERROR(ncDeviceOpen(&deviceHandle, deviceDesc, watchdogInterval, firmwarePath));
111 ASSERT_NO_ERROR(ncDeviceGetOption(deviceHandle, NC_RO_DEVICE_NAME,
112 dev_addr_open, &data_lenght));
114 ASSERT_TRUE(strncmp(dev_addr_open, deviceDesc.name, NC_MAX_NAME_SIZE) == 0);
115 ASSERT_NO_ERROR(ncDeviceClose(&deviceHandle));
118 TEST_F(MvncOpenUSBDevice, ErrorWhenWrongDeviceName) {
119 ncDeviceHandle_t *deviceHandle = nullptr;
120 char badName[] = "BadName";
122 ncDeviceDescr_t deviceDesc = {};
123 deviceDesc.protocol = NC_USB;
124 deviceDesc.platform = NC_ANY_PLATFORM;
125 strncpy(deviceDesc.name, badName, NC_MAX_NAME_SIZE);
127 auto availableDevices = getDevicesList();
128 ASSERT_TRUE(availableDevices.size());
130 ASSERT_ERROR(ncDeviceOpen(&deviceHandle, deviceDesc, watchdogInterval, firmwarePath));
133 TEST_F(MvncOpenUSBDevice, OpenTwiceSameHandlerByName) {
134 ncDeviceHandle_t *deviceHandle = nullptr;
135 ncDeviceDescr_t deviceDesc = {};
136 deviceDesc.protocol = NC_USB;
137 deviceDesc.platform = NC_ANY_PLATFORM;
139 char dev_addr_first_open[MAX_DEV_NAME];
140 unsigned int data_lenght_first = MAX_DEV_NAME;
142 char dev_addr_second_open[MAX_DEV_NAME];
143 unsigned int data_lenght_second = MAX_DEV_NAME;
145 auto availableDevices = getDevicesList();
147 ASSERT_TRUE(availableDevices.size());
148 strncpy(deviceDesc.name, availableDevices[0].c_str(), NC_MAX_NAME_SIZE);
150 ASSERT_NO_ERROR(ncDeviceOpen(&deviceHandle, deviceDesc, watchdogInterval, firmwarePath));
151 ASSERT_NO_ERROR(ncDeviceGetOption(deviceHandle, NC_RO_DEVICE_NAME,
152 dev_addr_first_open, &data_lenght_first));
154 // Second open, get device name
155 ASSERT_NO_ERROR(ncDeviceOpen(&deviceHandle, deviceDesc, watchdogInterval, firmwarePath));
156 ASSERT_NO_ERROR(ncDeviceGetOption(deviceHandle, NC_RO_DEVICE_NAME,
157 dev_addr_second_open, &data_lenght_second));
159 ASSERT_NO_ERROR(ncDeviceClose(&deviceHandle));
160 // Should be the same device
161 ASSERT_STREQ(dev_addr_first_open, dev_addr_second_open);
164 TEST_F(MvncOpenUSBDevice, CheckErrorWhenPlatformConflictWithName) {
165 ncDeviceHandle_t *deviceHandle = nullptr;
166 ncDevicePlatform_t wrongPlatform = NC_ANY_PLATFORM;
167 auto availableDevices = getDevicesList();
168 ncDeviceDescr_t deviceDesc = {};
169 deviceDesc.protocol = NC_USB;
171 ASSERT_TRUE(availableDevices.size());
173 if(isMyriadXUSBDevice(availableDevices[0])) {
174 wrongPlatform = NC_MYRIAD_2;
176 wrongPlatform = NC_MYRIAD_X;
179 strncpy(deviceDesc.name, availableDevices[0].c_str(), NC_MAX_NAME_SIZE);
180 deviceDesc.platform = wrongPlatform;
182 ASSERT_ERROR(ncDeviceOpen(&deviceHandle, deviceDesc, watchdogInterval, firmwarePath));
185 // *********************************************** //
186 // Specific device TESTS //
188 class MvncDevicePlatform : public MvncOpenUSBDevice,
189 public testing::WithParamInterface<ncDevicePlatform_t>{
191 long available_myriadX = 0;
192 long available_myriad2 = 0;
193 ncDevicePlatform_t devicePlatform;
195 ~MvncDevicePlatform() override = default;
198 void SetUp() override {
199 MvncOpenUSBDevice::SetUp();
201 available_myriadX = getAmountOfMyriadXDevices();
202 available_myriad2 = getAmountOfMyriad2Devices();
204 ASSERT_TRUE(available_myriadX > 0);
205 ASSERT_TRUE(available_myriad2 > 0);
206 devicePlatform = GetParam();
211 * @brief Open specified device and close it
213 TEST_P(MvncDevicePlatform, OpenAndClose) {
214 ncDeviceHandle_t *deviceHandle = nullptr;
215 ncDeviceDescr_t deviceDesc = {};
216 deviceDesc.protocol = NC_USB;
217 deviceDesc.platform = devicePlatform;
219 ASSERT_NO_ERROR(ncDeviceOpen(&deviceHandle, deviceDesc, watchdogInterval, firmwarePath));
221 char deviceName[MAX_DEV_NAME];
222 unsigned int size = MAX_DEV_NAME;
223 ASSERT_NO_ERROR(ncDeviceGetOption(deviceHandle, NC_RO_DEVICE_NAME, deviceName, &size));
225 EXPECT_TRUE(isSamePlatformDevice(deviceName, devicePlatform));
227 ASSERT_NO_ERROR(ncDeviceClose(&deviceHandle));
231 INSTANTIATE_TEST_CASE_P(MvncTestsPlatform,
233 ::testing::ValuesIn(myriadPlatforms),
234 PrintToStringParamName());