package aQute.bnd.deployer.repository.providers; import static aQute.bnd.deployer.repository.api.Decision.accept; import static aQute.bnd.deployer.repository.api.Decision.reject; import static aQute.bnd.deployer.repository.api.Decision.undecided; import java.io.ByteArrayInputStream; import javax.xml.stream.XMLStreamException; import aQute.bnd.deployer.repository.api.CheckResult; import junit.framework.TestCase; public class TestR5Recognition extends TestCase { public static void testRejectNamespace() throws Exception { String testdata = "<?xml version='1.0' encoding='utf-8'?>" + "<repository increment='0' name='index1' xmlns='http://www2.osgi.org/www/obr2html.xsl'>" + "<resource>"; ByteArrayInputStream stream = new ByteArrayInputStream(testdata.getBytes()); assertEquals(reject, new R5RepoContentProvider().checkStream("xxx", stream).getDecision()); } public static void testAcceptNamespace() throws Exception { String testdata = "<?xml version='1.0'?>" + "<repository xmlns='http://www.osgi.org/xmlns/repository/v1.0.0'>"; ByteArrayInputStream stream = new ByteArrayInputStream(testdata.getBytes()); assertEquals(accept, new R5RepoContentProvider().checkStream("xxx", stream).getDecision()); } public static void testRejectRootElementName() throws Exception { String testdata = "<?xml version='1.0' encoding='utf-8'?>" + "<repo name='index1'/>"; ByteArrayInputStream stream = new ByteArrayInputStream(testdata.getBytes()); assertEquals(reject, new R5RepoContentProvider().checkStream("xxx", stream).getDecision()); } public static void testUndecidable() throws Exception { String testdata; ByteArrayInputStream stream; CheckResult result; testdata = "<?xml version='1.0' encoding='utf-8'?><repository name='index1'/>"; stream = new ByteArrayInputStream(testdata.getBytes()); assertEquals(undecided, new R5RepoContentProvider().checkStream("xxx", stream).getDecision()); testdata = "<repository><resource/></repository>"; stream = new ByteArrayInputStream(testdata.getBytes()); result = new R5RepoContentProvider().checkStream("xxx", stream); assertEquals(undecided, result.getDecision()); testdata = "<repository><referral/></repository>"; stream = new ByteArrayInputStream(testdata.getBytes()); result = new R5RepoContentProvider().checkStream("xxx", stream); assertEquals(undecided, result.getDecision()); } public static void testUnparseable() throws Exception { String testdata = "<?xml version='1.0' encoding='utf-8'?>" + "<repository name='index1'>"; ByteArrayInputStream stream = new ByteArrayInputStream(testdata.getBytes()); CheckResult result = new R5RepoContentProvider().checkStream("xxx", stream); assertEquals(reject, result.getDecision()); assertTrue(result.getException() != null && result.getException() instanceof XMLStreamException); } public static void testAcceptOnCapabilityChildElementNames() throws Exception { String testdata; ByteArrayInputStream stream; CheckResult result; // Must be R5 testdata = "<repository><resource><capability><attribute/>..."; stream = new ByteArrayInputStream(testdata.getBytes()); result = new R5RepoContentProvider().checkStream("xxx", stream); assertEquals(accept, result.getDecision()); // Must be R5 testdata = "<repository><resource><capability><directive/>..."; stream = new ByteArrayInputStream(testdata.getBytes()); result = new R5RepoContentProvider().checkStream("xxx", stream); assertEquals(accept, result.getDecision()); // Arbitrary elements under repo, resource and capability are allowed testdata = "<repository><XXX/><resource><YYY/><capability><ZZZ/><attribute/>..."; stream = new ByteArrayInputStream(testdata.getBytes()); result = new R5RepoContentProvider().checkStream("xxx", stream); assertEquals(accept, result.getDecision()); } public static void testAcceptExtensionElementOtherNamespace() throws Exception { String testdata; ByteArrayInputStream stream; CheckResult result; // Arbitrary elements under resource are allowed testdata = "<repository><resource><foo:XXX xmlns:foo='http://org.example/ns'/><YYY/><capability><attribute/></capability><ZZZ/></resource><repo..."; stream = new ByteArrayInputStream(testdata.getBytes()); result = new R5RepoContentProvider().checkStream("xxx", stream); assertEquals(accept, result.getDecision()); } }