Map<Requirement, Collection<Capability>> result = repo.findProviders(Collections.singleton(req));
assertEquals(1, result.size());
Collection<Capability> caps = result.values().iterator().next();
assertEquals(1, caps.size());
Capability cap = caps.iterator().next();
assertEquals("foo", cap.getNamespace());
assertEquals(0, cap.getDirectives().size());
assertEquals(1, cap.getAttributes().size());
Entry<String, Object> fooCap = cap.getAttributes().entrySet().iterator().next();
assertEquals("bar", fooCap.getKey());
assertEquals("toast", fooCap.getValue());
Resource res = cap.getResource();
List<Capability> idCaps = res.getCapabilities(IdentityNamespace.IDENTITY_NAMESPACE);
assertEquals(1, idCaps.size());
Capability idCap = idCaps.iterator().next();
assertEquals("org.apache.felix.bundlerepository.test_file_3", idCap.getAttributes().get(IdentityNamespace.IDENTITY_NAMESPACE));
assertEquals(Version.parseVersion("1.2.3.something"), idCap.getAttributes().get(IdentityNamespace.CAPABILITY_VERSION_ATTRIBUTE));
assertEquals("osgi.bundle", idCap.getAttributes().get(IdentityNamespace.CAPABILITY_TYPE_ATTRIBUTE));
List<Capability> contentCaps = res.getCapabilities(ContentNamespace.CONTENT_NAMESPACE);
assertEquals(1, contentCaps.size());
Capability contentCap = contentCaps.iterator().next();
assertEquals("b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78",
contentCap.getAttributes().get(ContentNamespace.CONTENT_NAMESPACE));
assertEquals(new Long(3), contentCap.getAttributes().get(ContentNamespace.CAPABILITY_SIZE_ATTRIBUTE));
assertEquals("application/vnd.osgi.bundle", contentCap.getAttributes().get(ContentNamespace.CAPABILITY_MIME_ATTRIBUTE));
URL fileURL = getClass().getResource("/repo_files/test_file_3.jar");
byte[] expectedBytes = Streams.suck(fileURL.openStream());
String resourceURL = (String) contentCap.getAttributes().get(ContentNamespace.CAPABILITY_URL_ATTRIBUTE);
byte[] actualBytes = Streams.suck(new URL(resourceURL).openStream());
assertEquals(3L, actualBytes.length);
assertTrue(Arrays.equals(expectedBytes, actualBytes));
}