-
Notifications
You must be signed in to change notification settings - Fork 110
Expand file tree
/
Copy pathLibUsbHotplugTest.java
More file actions
132 lines (118 loc) · 3.73 KB
/
LibUsbHotplugTest.java
File metadata and controls
132 lines (118 loc) · 3.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*
* Copyright (C) 2014 Klaus Reimer <[email protected]>
* See LICENSE.md for licensing information.
*/
package org.usb4java;
import static org.junit.Assert.assertEquals;
import static org.usb4java.test.UsbAssume.assumeHotplugAvailable;
import static org.usb4java.test.UsbAssume.isUsbTestsEnabled;
import java.util.ArrayList;
import java.util.List;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
* Tests the hotplug part of the {@link LibUsb} class.
*
* @author Klaus Reimer ([email protected])
*/
public class LibUsbHotplugTest
{
/** The libusb context. */
private Context context;
/**
* Set up the test.
*/
@Before
public void setUp()
{
if (isUsbTestsEnabled())
{
this.context = new Context();
LibUsb.init(this.context);
}
}
/**
* Tear down the test.
*/
@After
public void tearDown()
{
if (isUsbTestsEnabled())
{
if (this.context != null)
{
LibUsb.exit(this.context);
}
}
}
/**
* Tests the enumeration of connected devices through the hotplug API. This
* test simply compares the number of enumerated devices with the device
* list. When no devices are connected then this test is pretty much useless
* but won't fail because of that.
*/
@Test
public void testHotplugEnumeration()
{
assumeHotplugAvailable();
final List<Integer> events = new ArrayList<Integer>();
HotplugCallbackHandle callbackHandle = new HotplugCallbackHandle();
int result = LibUsb.hotplugRegisterCallback(this.context,
LibUsb.HOTPLUG_EVENT_DEVICE_ARRIVED,
LibUsb.HOTPLUG_ENUMERATE,
LibUsb.HOTPLUG_MATCH_ANY,
LibUsb.HOTPLUG_MATCH_ANY,
LibUsb.HOTPLUG_MATCH_ANY,
new HotplugCallback()
{
@Override
public int processEvent(Context context, Device device,
int event,
Object userData)
{
events.add(event);
return 0;
}
}, null, callbackHandle);
assertEquals(result, LibUsb.SUCCESS);
LibUsb.hotplugDeregisterCallback(this.context, callbackHandle);
DeviceList devices = new DeviceList();
LibUsb.getDeviceList(this.context, devices);
int numDevices = devices.getSize();
LibUsb.freeDeviceList(devices, true);
assertEquals(numDevices, events.size());
}
/**
* Ensures that no hotplug event is fired when enumeration is deactivated.
* When no devices are connected then this test is pretty much useless but
* won't fail because of that.
*/
@Test
public void testHotplugEnumerationOff()
{
assumeHotplugAvailable();
final List<Integer> events = new ArrayList<Integer>();
HotplugCallbackHandle callbackHandle = new HotplugCallbackHandle();
int result = LibUsb.hotplugRegisterCallback(this.context,
LibUsb.HOTPLUG_EVENT_DEVICE_ARRIVED,
0,
LibUsb.HOTPLUG_MATCH_ANY,
LibUsb.HOTPLUG_MATCH_ANY,
LibUsb.HOTPLUG_MATCH_ANY,
new HotplugCallback()
{
@Override
public int processEvent(Context context, Device device,
int event,
Object userData)
{
events.add(event);
return 0;
}
}, null, callbackHandle);
assertEquals(result, LibUsb.SUCCESS);
LibUsb.hotplugDeregisterCallback(this.context, callbackHandle);
assertEquals(0, events.size());
}
}