use of org.osgi.service.device.DriverLocator in project felix by apache.
the class DriverLoaderTest method loadDrivers_LoadFails.
@Test
public void loadDrivers_LoadFails() throws IOException, BundleException {
List<DriverLocator> locators = new ArrayList<DriverLocator>();
DriverLocator dl = Mockito.mock(DriverLocator.class, "dl");
locators.add(dl);
String[] driverIds = new String[] { "org.apache.felix.driver-1.0", "org.apache.felix.driver-1.1" };
for (String string : driverIds) {
Mockito.when(dl.loadDriver(string)).thenThrow(new IOException("test exception"));
}
List<ServiceReference> refs = m_loader.loadDrivers(locators, driverIds);
Assert.assertEquals("", 0, refs.size());
}
use of org.osgi.service.device.DriverLocator in project felix by apache.
the class DriverLoaderTest method findDriversWithDriverLocatorFails.
@Test
public void findDriversWithDriverLocatorFails() {
Properties dict = new Properties();
List<DriverLocator> locators = new ArrayList<DriverLocator>();
DriverLocator dl = Mockito.mock(DriverLocator.class, "dl");
locators.add(dl);
Mockito.when(dl.findDrivers(Mockito.eq(dict))).thenThrow(new RuntimeException("test exception"));
Set<String> driverIds = m_loader.findDrivers(locators, dict);
Assert.assertTrue("should be an empty list", driverIds.size() == 0);
}
use of org.osgi.service.device.DriverLocator in project felix by apache.
the class DriverLoader method loadDriver.
private List<ServiceReference> loadDriver(List<DriverLocator> locators, String driverId) {
List<ServiceReference> driverRefs = new ArrayList<ServiceReference>();
for (DriverLocator driverLocator : locators) {
List<ServiceReference> drivers = loadDriver(driverLocator, driverId);
driverRefs.addAll(drivers);
if (drivers.size() > 0) {
break;
}
}
return driverRefs;
}
use of org.osgi.service.device.DriverLocator in project felix by apache.
the class DeviceManagerTest method DriverReferral_ReferralFails.
/**
* This test verified correct behavior when after a driver
* attach led to a referral, this referral leads to an exception.
*
* @throws Exception
*/
@Ignore
public void DriverReferral_ReferralFails() throws Exception {
final String referredDriver = "org.apache.felix.driver-2.0";
String[] driverIds = new String[] { "org.apache.felix.driver-1.0", "org.apache.felix.driver-1.1" };
int[] driverMatches = new int[] { 1, Device.MATCH_NONE };
DriverLocator locator = Mockito.mock(DriverLocator.class, "locator for v1.x");
Map<String, Driver> drivers = tstExpectDriverLocatorFor(locator, driverIds, driverMatches);
DriverLocator locatorv2 = Mockito.mock(DriverLocator.class, "locator for v2.x (fails always)");
Mockito.when(locatorv2.findDrivers(Mockito.isA(Dictionary.class))).thenReturn(null);
Mockito.when(locatorv2.loadDriver(Mockito.startsWith("org.apache.felix.driver-1"))).thenReturn(null);
InputStream referredInputStream = Mockito.mock(InputStream.class);
Mockito.when(locatorv2.loadDriver(referredDriver)).thenReturn(referredInputStream);
// this is what initial driver referral eventually leads
// to: the loading of a driver bundle
// we fake it, so that it fails
Mockito.when(m_context.installBundle(Mockito.anyString(), Mockito.isA(InputStream.class))).thenThrow(new BundleException("test exception"));
Driver matched = drivers.get("org.apache.felix.driver-1.0");
final CountDownLatch latch = new CountDownLatch(1);
Answer<String> driver10_attach = new Answer<String>() {
public String answer(InvocationOnMock invocation) throws Throwable {
System.out.println("driver10_attach()");
latch.countDown();
return referredDriver;
}
};
Device device = tstCreateDevice(new String[] { "org.apache.felix" });
Mockito.when(matched.match(m_osgi.getReference(device))).thenReturn(10);
Mockito.when(matched.attach(Mockito.isA(ServiceReference.class))).thenAnswer(driver10_attach);
// for ( String driverId : driverIds )
// {
// Driver driver = drivers.get( driverId );
// tstExpectBundleUninstall( driver );
// }
// the actual test
m_manager.locatorAdded(locator);
m_manager.locatorAdded(locatorv2);
// depman induced callback
m_manager.deviceAdded(m_osgi.getReference(device), device);
if (!latch.await(5, TimeUnit.SECONDS)) {
Assert.fail("expected an attach to: " + driverIds[0]);
}
Mockito.verify(device).noDriverFound();
}
use of org.osgi.service.device.DriverLocator in project felix by apache.
the class DeviceManagerTest method EqualMatchWithDriverSelector.
/**
* Two drivers equally match the device. There is a driver selector
* that comes to the rescue that selects driver2.
*
* @throws Exception
*/
@Test
public void EqualMatchWithDriverSelector() throws Exception {
final String driverId1 = "org.apache.felix.driver-1.0";
final String driverId2 = "org.apache.felix.driver-1.1";
DriverLocator locator = Mockito.mock(DriverLocator.class);
Map<String, Driver> drivers = tstExpectDriverLocatorFor(locator, new String[] { driverId1, driverId2 }, new int[] { 20, 20 });
Device device = tstCreateDevice(new String[] { "org.apache.felix" });
DriverSelector selector = Mockito.mock(DriverSelector.class);
SelectorMatcher matcher = new SelectorMatcher(driverId2);
Mockito.when(selector.select(Mockito.eq(m_osgi.getReference(device)), Mockito.isA(Match[].class))).thenAnswer(matcher);
final CountDownLatch attachLatch = tstExpectAttach(drivers.get(driverId2), device);
Utils.inject(m_manager, DriverSelector.class, selector);
m_manager.locatorAdded(locator);
m_manager.deviceAdded(m_osgi.getReference(device), device);
if (!attachLatch.await(5, TimeUnit.SECONDS)) {
Assert.fail("expected an attach");
}
// driver2 is attached, so driver1 bundle should uninstall.
// Driver driver = drivers.get( driverId1 );
// tstVerifyBundleUninstall( driver );
}
Aggregations