Search in sources :

Example 6 with DriverLocator

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());
}
Also used : DriverLocator(org.osgi.service.device.DriverLocator) ArrayList(java.util.ArrayList) IOException(java.io.IOException) ServiceReference(org.osgi.framework.ServiceReference) Test(org.junit.Test)

Example 7 with DriverLocator

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);
}
Also used : DriverLocator(org.osgi.service.device.DriverLocator) ArrayList(java.util.ArrayList) Properties(java.util.Properties) Test(org.junit.Test)

Example 8 with DriverLocator

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;
}
Also used : DriverLocator(org.osgi.service.device.DriverLocator) ArrayList(java.util.ArrayList) ServiceReference(org.osgi.framework.ServiceReference)

Example 9 with DriverLocator

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();
}
Also used : Dictionary(java.util.Dictionary) InputStream(java.io.InputStream) Device(org.osgi.service.device.Device) Driver(org.osgi.service.device.Driver) CountDownLatch(java.util.concurrent.CountDownLatch) ServiceReference(org.osgi.framework.ServiceReference) Answer(org.mockito.stubbing.Answer) DriverLocator(org.osgi.service.device.DriverLocator) InvocationOnMock(org.mockito.invocation.InvocationOnMock) BundleException(org.osgi.framework.BundleException) Ignore(org.junit.Ignore)

Example 10 with DriverLocator

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 );
}
Also used : DriverLocator(org.osgi.service.device.DriverLocator) Device(org.osgi.service.device.Device) Driver(org.osgi.service.device.Driver) DriverSelector(org.osgi.service.device.DriverSelector) CountDownLatch(java.util.concurrent.CountDownLatch) Test(org.junit.Test)

Aggregations

DriverLocator (org.osgi.service.device.DriverLocator)16 Test (org.junit.Test)13 ArrayList (java.util.ArrayList)8 ServiceReference (org.osgi.framework.ServiceReference)6 CountDownLatch (java.util.concurrent.CountDownLatch)5 Device (org.osgi.service.device.Device)5 Properties (java.util.Properties)4 Driver (org.osgi.service.device.Driver)4 Dictionary (java.util.Dictionary)3 InvocationOnMock (org.mockito.invocation.InvocationOnMock)3 Answer (org.mockito.stubbing.Answer)3 BundleException (org.osgi.framework.BundleException)3 Bundle (org.osgi.framework.Bundle)2 IOException (java.io.IOException)1 InputStream (java.io.InputStream)1 Ignore (org.junit.Ignore)1 DriverSelector (org.osgi.service.device.DriverSelector)1