package biz.aQute.resolve;
import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.osgi.resource.Resource;
import org.osgi.resource.Wire;
import org.osgi.service.repository.Repository;
import aQute.bnd.build.Container;
import aQute.bnd.build.Run;
import aQute.bnd.build.Workspace;
import aQute.bnd.osgi.Builder;
import aQute.bnd.osgi.EmbeddedResource;
import aQute.bnd.osgi.Jar;
import aQute.bnd.osgi.repository.ResourcesRepository;
import aQute.bnd.osgi.resource.ResourceBuilder;
import aQute.bnd.repository.osgi.OSGiRepository;
import aQute.lib.io.IO;
import junit.framework.TestCase;
/**
* Test the project resolver
*/
public class ProjectResolverTest extends TestCase {
private Workspace ws;
private File tmp;
private File local;
private ResourcesRepository fr;
private File home = IO.getFile("testdata/projectresolver");
@Override
protected void setUp() throws Exception {
super.setUp();
ws = Workspace.findWorkspace(IO.getFile("testdata/projectresolver/ws"));
ws.setTrace(true);
tmp = IO.getFile("generated/tmp");
local = IO.getFile("generated/tmp/local");
IO.delete(tmp);
local.mkdirs();
OSGiRepository or = new OSGiRepository();
or.setRegistry(ws);
or.setReporter(ws);
Map<String,String> map = new HashMap<>();
map.put("locations", "https://raw.githubusercontent.com/osgi/osgi.enroute/v1.0.0/cnf/distro/index.xml");
map.put("name", "enroute");
or.setProperties(map);
fr = new ResourcesRepository();
add(fr, IO.getFile(home, "jar/com.example.jerome.application.jar"));
add(fr, IO.getFile(home, "jar/osgi.enroute.base.api.jar"));
ws.addBasicPlugin(fr);
ws.addBasicPlugin(or);
ws.propertiesChanged();
}
private void add(ResourcesRepository fr, File file) throws Exception {
ResourceBuilder rb = new ResourceBuilder();
rb.addFile(file, file.toURI());
Resource resource = rb.build();
fr.add(resource);
}
@Override
protected void tearDown() throws Exception {
ws.close();
IO.delete(tmp);
super.tearDown();
}
// public void testSimple() throws Exception {
// Run run = new Run(ws, IO.work,
// IO.getFile("testdata/projectresolver/simple.bndrun"));
// ProjectResolver pr = new ProjectResolver(run);
// pr.setTrace(true);
// Map<Resource,List<Wire>> resolve = pr.resolve();
// assertTrue(pr.check());
// List<Container> runbundles = pr.getRunBundles();
// assertEquals(2, runbundles.size());
// System.out.println(Strings.join("\n", runbundles));
// pr.close();
// }
public void testAugment() throws Exception {
try (Builder b = new Builder();) {
//
// Create an augment jar. We add a foo capability with bar=1 to
// promises
//
b.setBundleSymbolicName("foo.bar");
b.setProperty("Provide-Capability", "bnd.augment;path=augments.bnd");
Jar build = b.build();
String augm = "-augment.a: osgi.promise;capability:='foo;bar=1'";
build.putResource("augments.bnd", new EmbeddedResource(augm.getBytes(), 10000));
//
// Store it in the repo
//
File out = new File(tmp, "for.bar.jar");
build.write(out);
add(fr, out);
//
// Try to resolve an initial requirement foo;filter:=(bar=1)
//
try (Run run = new Run(ws, IO.work, IO.getFile("testdata/projectresolver/augment.bndrun"));) {
run.setTrace(true);
assertNotNull(ws.getRepositories());
System.out.println(ws.getRepositories());
assertNotNull(run.getWorkspace().getPlugins(Repository.class));
System.out.println(run.getWorkspace().getPlugins(Repository.class));
ProjectResolver pr = new ProjectResolver(run);
pr.setTrace(true);
Map<Resource,List<Wire>> resolve = pr.resolve();
assertTrue(pr.check());
List<Container> runbundles = pr.getRunBundles();
assertEquals(1, runbundles.size());
assertTrue(run.check());
pr.close();
}
}
}
}