summaryrefslogtreecommitdiff
path: root/bkucommon/src/test/java/at/gv/egiz/bku/binding
diff options
context:
space:
mode:
Diffstat (limited to 'bkucommon/src/test/java/at/gv/egiz/bku/binding')
-rw-r--r--bkucommon/src/test/java/at/gv/egiz/bku/binding/BindingProcessorManagerTest.java51
-rw-r--r--bkucommon/src/test/java/at/gv/egiz/bku/binding/DataUrlConnectionTest.java178
-rw-r--r--bkucommon/src/test/java/at/gv/egiz/bku/binding/DummyStalFactory.java38
-rw-r--r--bkucommon/src/test/java/at/gv/egiz/bku/binding/EmptyMultipartSLRequestTest.java98
-rw-r--r--bkucommon/src/test/java/at/gv/egiz/bku/binding/ExpiryRemoverTest.java70
-rw-r--r--bkucommon/src/test/java/at/gv/egiz/bku/binding/HttpBindingProcessorTest.java328
-rw-r--r--bkucommon/src/test/java/at/gv/egiz/bku/binding/IdFactoryTest.java63
-rw-r--r--bkucommon/src/test/java/at/gv/egiz/bku/binding/InputDecoderFactoryTest.java96
-rw-r--r--bkucommon/src/test/java/at/gv/egiz/bku/binding/MultiTestDataUrlConnection.java49
-rw-r--r--bkucommon/src/test/java/at/gv/egiz/bku/binding/MultipartSLRequestTest.java59
-rw-r--r--bkucommon/src/test/java/at/gv/egiz/bku/binding/NullOperationTest.java54
-rw-r--r--bkucommon/src/test/java/at/gv/egiz/bku/binding/RequestFactory.java116
-rw-r--r--bkucommon/src/test/java/at/gv/egiz/bku/binding/SSLDataUrlConnectionTest.java40
-rw-r--r--bkucommon/src/test/java/at/gv/egiz/bku/binding/TestDataUrlConnection.java150
-rw-r--r--bkucommon/src/test/java/at/gv/egiz/bku/binding/XWWWFormUrlInputIteratorTest.java299
15 files changed, 1689 insertions, 0 deletions
diff --git a/bkucommon/src/test/java/at/gv/egiz/bku/binding/BindingProcessorManagerTest.java b/bkucommon/src/test/java/at/gv/egiz/bku/binding/BindingProcessorManagerTest.java
new file mode 100644
index 00000000..22a7aa3b
--- /dev/null
+++ b/bkucommon/src/test/java/at/gv/egiz/bku/binding/BindingProcessorManagerTest.java
@@ -0,0 +1,51 @@
+/*
+* Copyright 2008 Federal Chancellery Austria and
+* Graz University of Technology
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package at.gv.egiz.bku.binding;
+
+import at.gv.egiz.bku.conf.Configuration;
+import at.gv.egiz.bku.conf.DummyConfiguration;
+import static org.junit.Assert.*;
+
+import java.net.MalformedURLException;
+
+import org.junit.Before;
+import org.junit.Test;
+
+public class BindingProcessorManagerTest {
+
+ @Before
+ public void setUp() {
+ IdFactory.getInstance().setNumberOfBits(24*10);
+ }
+
+
+ @Test(expected = MalformedURLException.class)
+ public void basicCreationTest() throws MalformedURLException {
+ //TODO for the moment empty config sufficient (currently only maxDataURLHops configured)
+ BindingProcessorManager manager = new BindingProcessorManagerImpl(new DummyStalFactory(), new SLCommandInvokerImpl(), new DummyConfiguration());
+ BindingProcessor bp = manager.createBindingProcessor("http://www.at/", null);
+ assertNotNull(bp.getId().toString());
+ assertEquals(40, bp.getId().toString().length());
+ String hansi = "Hansi";
+ bp = manager.createBindingProcessor("http://www.iaik.at",hansi);
+ assertEquals(hansi, bp.getId().toString());
+ bp = manager.createBindingProcessor("HtTp://www.iaik.at", null);
+ assertNotNull(bp);
+ manager.createBindingProcessor("seppl", null);
+ }
+
+}
diff --git a/bkucommon/src/test/java/at/gv/egiz/bku/binding/DataUrlConnectionTest.java b/bkucommon/src/test/java/at/gv/egiz/bku/binding/DataUrlConnectionTest.java
new file mode 100644
index 00000000..6e48e6fa
--- /dev/null
+++ b/bkucommon/src/test/java/at/gv/egiz/bku/binding/DataUrlConnectionTest.java
@@ -0,0 +1,178 @@
+/*
+* Copyright 2008 Federal Chancellery Austria and
+* Graz University of Technology
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package at.gv.egiz.bku.binding;
+
+import at.gv.egiz.bku.conf.Configuration;
+import at.gv.egiz.bku.conf.DummyConfiguration;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.InetSocketAddress;
+import java.net.URL;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import com.sun.net.httpserver.Headers;
+import com.sun.net.httpserver.HttpExchange;
+import com.sun.net.httpserver.HttpHandler;
+import com.sun.net.httpserver.HttpServer;
+
+/**
+ *
+ * @author clemens
+ */
+public class DataUrlConnectionTest {
+
+ public static final String REQUEST_RESOURCE = "at/gv/egiz/bku/binding/NOPMultipartDataUrl.txt";
+
+ private static final Log log = LogFactory.getLog(DataUrlConnectionTest.class);
+
+ static HttpServer server;
+ static BindingProcessor bindingProcessor;
+ static BindingProcessorManager manager;
+
+ protected InputStream requestStream;
+
+ @BeforeClass
+ public static void setUpHTTPServer() throws IOException {
+ log.debug("setting up HTTPServer");
+ InetSocketAddress addr = new InetSocketAddress("localhost", 8081);
+ server = HttpServer.create(addr, 0);
+ server.createContext("/", new DataUrlHandler());
+ server.start();
+
+ log.debug("setting up HTTPBindingProcessor");
+ manager = new BindingProcessorManagerImpl(new DummyStalFactory(),
+ new SLCommandInvokerImpl(), new DummyConfiguration());
+ bindingProcessor = (HTTPBindingProcessor) manager.createBindingProcessor(
+ "http://www.iaik.at", null);
+ Map<String, String> headers = new HashMap<String, String>();
+ headers.put("Content-Type", InputDecoderFactory.MULTIPART_FORMDATA
+ + ";boundary=---------------------------2330864292941");
+ ((HTTPBindingProcessor) bindingProcessor).setHTTPHeaders(headers);
+ }
+
+ @Before
+ public void setUp() {
+ requestStream = getClass().getClassLoader().getResourceAsStream(
+ REQUEST_RESOURCE);
+ }
+
+ @AfterClass
+ public static void stopServer() {
+ if (server != null) {
+ log.debug("stopping HTTPServer");
+ server.stop(0);
+ }
+ }
+
+ @Test
+ public void testBasicNop() {
+ bindingProcessor.consumeRequestStream(requestStream);
+ // manager.process(bindingProcessor);
+ bindingProcessor.run();
+ }
+
+// @Test
+ public void openConnectionTest() throws Exception {
+
+ URL dataUrl = new URL("http://localhost:8081/");
+
+ log.debug("creating DataUrlConnection " + dataUrl.toString());
+ DataUrlConnectionImpl c = new DataUrlConnectionImpl();
+ c.init(dataUrl);
+
+ c.setHTTPHeader("httpHeader_1", "001");
+ ByteArrayInputStream bais = new ByteArrayInputStream("Hello, world!"
+ .getBytes());
+ c.setHTTPFormParameter("formParam_1", bais, "text/plain", "UTF-8", null);
+
+ log.debug("open dataUrl connection");
+ c.connect();
+ //TODO mock SLResult and c.transmit(result);
+ }
+
+ static class DataUrlHandler implements HttpHandler {
+
+ public DataUrlHandler() {
+ log.debug("setting up DataUrlHandler");
+ }
+
+ @Override
+ public void handle(HttpExchange exchange) throws IOException {
+ log.debug("handling incoming request");
+ logHTTPHeaders(exchange.getRequestHeaders());
+ logRequest(exchange.getRequestBody());
+
+ log.debug("sending dummy response");
+ exchange.getResponseHeaders().add("Content-type", "text/html");
+ String response = "<b>" + new Date() + "</b> for "
+ + exchange.getRequestURI();
+ exchange.sendResponseHeaders(200, response.length());
+
+ OutputStream os = exchange.getResponseBody();
+ os.write(response.getBytes());
+ os.close();
+ }
+
+ private void logRequest(InputStream in) throws IOException {
+ StringBuilder reqLogMsg = new StringBuilder("HTTP request: \n");
+ int c = 0;
+ while ((c = in.read()) != -1) {
+ reqLogMsg.append((char) c);
+ }
+ log.debug(reqLogMsg.toString());
+ in.close();
+ }
+
+ private void logHTTPHeaders(Headers headers) {
+ StringBuilder headersLogMsg = new StringBuilder("HTTP headers: \n");
+ Set<String> keys = headers.keySet();
+ Iterator<String> keysIt = keys.iterator();
+ while (keysIt.hasNext()) {
+ String key = keysIt.next();
+ List<String> values = headers.get(key);
+ Iterator<String> valuesIt = values.iterator();
+ headersLogMsg.append(' ');
+ headersLogMsg.append(key);
+ headersLogMsg.append(": ");
+ while (valuesIt.hasNext()) {
+ headersLogMsg.append(valuesIt.next());
+ headersLogMsg.append(' ');
+ }
+ headersLogMsg.append('\n');
+ }
+ log.debug(headersLogMsg.toString());
+ }
+ }
+}
diff --git a/bkucommon/src/test/java/at/gv/egiz/bku/binding/DummyStalFactory.java b/bkucommon/src/test/java/at/gv/egiz/bku/binding/DummyStalFactory.java
new file mode 100644
index 00000000..f832f364
--- /dev/null
+++ b/bkucommon/src/test/java/at/gv/egiz/bku/binding/DummyStalFactory.java
@@ -0,0 +1,38 @@
+/*
+* Copyright 2008 Federal Chancellery Austria and
+* Graz University of Technology
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package at.gv.egiz.bku.binding;
+
+import java.util.Locale;
+
+import at.gv.egiz.stal.STAL;
+import at.gv.egiz.stal.STALFactory;
+
+public class DummyStalFactory implements STALFactory {
+
+ @Override
+ public STAL createSTAL() {
+ // TODO Auto-generated method stub
+ return new at.gv.egiz.stal.dummy.DummySTAL();
+ }
+
+ @Override
+ public void setLocale(Locale locale) {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/bkucommon/src/test/java/at/gv/egiz/bku/binding/EmptyMultipartSLRequestTest.java b/bkucommon/src/test/java/at/gv/egiz/bku/binding/EmptyMultipartSLRequestTest.java
new file mode 100644
index 00000000..ee17f5e9
--- /dev/null
+++ b/bkucommon/src/test/java/at/gv/egiz/bku/binding/EmptyMultipartSLRequestTest.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2008 Federal Chancellery Austria and
+ * Graz University of Technology
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package at.gv.egiz.bku.binding;
+
+import at.gv.egiz.bku.conf.Configuration;
+import iaik.security.ecc.provider.ECCProvider;
+import iaik.security.provider.IAIK;
+import iaik.xml.crypto.XSecProvider;
+
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.security.Provider;
+import java.security.Security;
+import java.security.Provider.Service;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.junit.Before;
+import org.junit.Test;
+
+import at.gv.egiz.bku.conf.Configurator;
+import at.gv.egiz.bku.conf.DummyConfiguration;
+import at.gv.egiz.bku.slcommands.SLCommandFactory;
+import at.gv.egiz.bku.slcommands.impl.xsect.STALProvider;
+
+public class EmptyMultipartSLRequestTest {
+
+ private static Log log = LogFactory.getLog(EmptyMultipartSLRequestTest.class);
+
+ protected String resourceName = "at/gv/egiz/bku/binding/MultipartEmpty.txt";
+
+ protected BindingProcessor bindingProcessor;
+ protected InputStream dataStream;
+ protected BindingProcessorManager manager;
+
+ @Before
+ public void setUp() throws MalformedURLException, ClassNotFoundException {
+ manager = new BindingProcessorManagerImpl(new DummyStalFactory(),
+ new SLCommandInvokerImpl(), new DummyConfiguration());
+ HTTPBindingProcessor http = (HTTPBindingProcessor) manager
+ .createBindingProcessor("http://www.at/", null);
+ Map<String, String> headers = new HashMap<String, String>();
+ headers.put("Content-Type", InputDecoderFactory.MULTIPART_FORMDATA
+ + ";boundary=uW10q_I9UeqKyw-1o5EW4jtEAaGs7-mC6o");
+ http.setHTTPHeaders(headers);
+ dataStream = getClass().getClassLoader().getResourceAsStream(resourceName);
+ bindingProcessor = http;
+ Map<String, String> commandMap = new HashMap<String, String>();
+ commandMap
+ .put(
+ "http://www.buergerkarte.at/namespaces/securitylayer/1.2#:CreateXMLSignatureRequest",
+ "at.gv.egiz.bku.slcommands.impl.CreateXMLSignatureCommandImpl");
+ commandMap
+ .put(
+ "http://www.buergerkarte.at/namespaces/securitylayer/1.2#:InfoboxReadRequest",
+ "at.gv.egiz.bku.slcommands.impl.InfoboxReadCommandImpl");
+ SLCommandFactory.getInstance().setCommandImpl(commandMap);
+ Security.insertProviderAt(new IAIK(), 1);
+ Security.insertProviderAt(new ECCProvider(false), 2);
+ XSecProvider.addAsProvider(false);
+ // registering STALProvider as delegation provider for XSECT
+ STALProvider stalProvider = new STALProvider();
+ Security.addProvider(stalProvider);
+ Set<Service> services = stalProvider.getServices();
+ StringBuilder sb = new StringBuilder();
+ for (Service service : services) {
+ String algorithm = service.getType() + "." + service.getAlgorithm();
+ XSecProvider.setDelegationProvider(algorithm, stalProvider.getName());
+ sb.append("\n" + algorithm);
+ }
+ log.debug(sb);
+ }
+
+ @Test
+ public void testBasicNop() {
+ bindingProcessor.consumeRequestStream(dataStream);
+ // manager.process(bindingProcessor);
+ bindingProcessor.run();
+ }
+
+}
diff --git a/bkucommon/src/test/java/at/gv/egiz/bku/binding/ExpiryRemoverTest.java b/bkucommon/src/test/java/at/gv/egiz/bku/binding/ExpiryRemoverTest.java
new file mode 100644
index 00000000..faf08c54
--- /dev/null
+++ b/bkucommon/src/test/java/at/gv/egiz/bku/binding/ExpiryRemoverTest.java
@@ -0,0 +1,70 @@
+/*
+* Copyright 2008 Federal Chancellery Austria and
+* Graz University of Technology
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package at.gv.egiz.bku.binding;
+
+import at.gv.egiz.bku.conf.Configuration;
+import at.gv.egiz.bku.conf.DummyConfiguration;
+import java.net.MalformedURLException;
+
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+public class ExpiryRemoverTest {
+
+ @Test
+ public void testMe() throws InterruptedException, MalformedURLException {
+ //TODO for the moment empty config sufficient (currently only maxDataURLHops configured)
+ BindingProcessorManager manager = new BindingProcessorManagerImpl(new DummyStalFactory(),
+ new SLCommandInvokerImpl(), new DummyConfiguration());
+ BindingProcessor bp = manager.createBindingProcessor("http://www.at", null);
+ ExpiryRemover remover = new ExpiryRemover();
+ remover.setBindingProcessorManager(manager);
+ remover.execute();
+ manager.process(bp);
+ remover.execute();
+ assertTrue(manager.getManagedIds().size() == 1);
+ remover.setMaxAcceptedAge(1000);
+ Thread.sleep(100);
+ remover.execute();
+ assertTrue(manager.getManagedIds().size() == 1);
+ Thread.sleep(910);
+ remover.execute();
+ assertTrue(manager.getManagedIds().size() == 0);
+ }
+
+ @Test
+ public void testMe2() throws InterruptedException, MalformedURLException {
+ BindingProcessorManager manager = new BindingProcessorManagerImpl(new DummyStalFactory(),
+ new SLCommandInvokerImpl(), new DummyConfiguration());
+ BindingProcessor bp = manager.createBindingProcessor("http://www.iaik.at", null);
+ ExpiryRemover remover = new ExpiryRemover();
+ remover.setBindingProcessorManager(manager);
+ remover.execute();
+ manager.process(bp);
+ remover.execute();
+ assertTrue(manager.getManagedIds().size() == 1);
+ remover.setMaxAcceptedAge(1000);
+ Thread.sleep(500);
+ remover.execute();
+ assertTrue(manager.getManagedIds().size() == 1);
+ bp.updateLastAccessTime();
+ Thread.sleep(510);
+ remover.execute();
+ assertTrue(manager.getManagedIds().size() == 1);
+ }
+
+}
diff --git a/bkucommon/src/test/java/at/gv/egiz/bku/binding/HttpBindingProcessorTest.java b/bkucommon/src/test/java/at/gv/egiz/bku/binding/HttpBindingProcessorTest.java
new file mode 100644
index 00000000..d03e1807
--- /dev/null
+++ b/bkucommon/src/test/java/at/gv/egiz/bku/binding/HttpBindingProcessorTest.java
@@ -0,0 +1,328 @@
+/*
+* Copyright 2008 Federal Chancellery Austria and
+* Graz University of Technology
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package at.gv.egiz.bku.binding;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+import at.gv.egiz.bku.binding.MultiTestDataUrlConnection.DataSourceProvider;
+import at.gv.egiz.bku.conf.Configuration;
+import at.gv.egiz.bku.conf.DummyConfiguration;
+import at.gv.egiz.bku.utils.StreamUtil;
+
+public class HttpBindingProcessorTest {
+
+ public static class TestDataSource implements DataSourceProvider {
+
+ private List<Integer> responseCodes = new ArrayList<Integer>();
+ private List<String> content = new ArrayList<String>();
+ private List<Map<String, String>> responseHeaders = new ArrayList<Map<String, String>>();
+ private int counter = -1;
+
+ public void resetCounter() {
+ counter = -1;
+ }
+
+ public void addResponse(int responseCode, String content,
+ Map<String, String> headerMap) {
+ responseCodes.add(new Integer(responseCode));
+ this.content.add(content);
+ this.responseHeaders.add(headerMap);
+ }
+
+ @Override
+ public int getResponseCode() {
+ return responseCodes.get(counter);
+ }
+
+ @Override
+ public String getResponseContent() {
+ return content.get(counter);
+ }
+
+ @Override
+ public Map<String, String> getResponseHeaders() {
+ return responseHeaders.get(counter);
+ }
+
+ @Override
+ public void nextEvent() {
+ if (++counter >= responseCodes.size()) {
+ counter = 0;
+ }
+ }
+ }
+
+ protected BindingProcessorManager manager;
+ protected HTTPBindingProcessor bindingProcessor;
+ protected Map<String, String> serverHeaderMap;
+ protected Map<String, String> clientHeaderMap;
+ protected TestDataUrlConnection server;
+
+ protected static ApplicationContext appCtx;
+
+ @BeforeClass
+ public static void setUpClass() {
+ appCtx = new ClassPathXmlApplicationContext("at/gv/egiz/bku/slcommands/testApplicationContext.xml");
+ }
+
+
+ @Before
+ public void setUp() throws IOException {
+ server = new TestDataUrlConnection();
+ DataUrl.setDataUrlConnectionImpl(server);
+ serverHeaderMap = new HashMap<String, String>();
+ serverHeaderMap.put("Content-Type", HttpUtil.TXT_XML);
+ server.setResponseCode(200);
+ server.setResponseContent("<ok/>");
+ server.setResponseHeaders(serverHeaderMap);
+ manager = new BindingProcessorManagerImpl(new DummyStalFactory(),
+ new SLCommandInvokerImpl(), new DummyConfiguration());
+ bindingProcessor = (HTTPBindingProcessor) manager.createBindingProcessor(
+ "http://www.iaik.at", null);
+ clientHeaderMap = new HashMap<String, String>();
+ clientHeaderMap.put("Content-Type",
+ "application/x-www-form-urlencoded;charset=utf8");
+ bindingProcessor.setHTTPHeaders(clientHeaderMap);
+ }
+
+ protected String resultAsString(String encoding) throws IOException {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ bindingProcessor.writeResultTo(baos, encoding);
+ return new String(baos.toByteArray(), encoding);
+ }
+
+ @Test
+ public void testWithoutDataUrlWithoutStylesheet() throws IOException {
+ RequestFactory rf = new RequestFactory();
+ rf.addForm("Haßnsi", "Wüurzel");
+ bindingProcessor.consumeRequestStream(rf.getURLencoded());
+ bindingProcessor.run();
+ assertEquals(HttpUtil.TXT_XML, bindingProcessor.getResultContentType());
+ assertTrue(resultAsString("UTF-8").indexOf("NullOperationResponse") != -1);
+ assertEquals(200, bindingProcessor.getResponseCode());
+ assertEquals(0, bindingProcessor.getResponseHeaders().size());
+ }
+
+ @Test
+ public void testWithoutDataUrlWithStylesheet() throws IOException {
+ RequestFactory rf = new RequestFactory();
+ rf.addForm("Hansi", "Wurzel");
+ rf.addFormAsResource("Styleshit", "at/gv/egiz/bku/binding/stylesheet.xslt");
+ rf.addForm(RequestFactory.STYLESHEETURL, "formdata:Styleshit");
+ bindingProcessor.consumeRequestStream(rf.getURLencoded());
+ bindingProcessor.run();
+ assertEquals(HttpUtil.TXT_HTML, bindingProcessor.getResultContentType());
+ assertTrue(resultAsString("UTF-8").indexOf("NullKommaJosef") != -1);
+ assertEquals(200, bindingProcessor.getResponseCode());
+ assertEquals(0, bindingProcessor.getResponseHeaders().size());
+ }
+
+ @Test
+ public void testWithDataUrl301WithStylesheet() throws IOException {
+ RequestFactory rf = new RequestFactory();
+ rf.addForm(RequestFactory.DATAURL, "http://localhost:8080");
+ bindingProcessor.consumeRequestStream(rf.getURLencoded());
+ server.setResponseCode(301);
+ rf = new RequestFactory();
+ rf.addFormAsResource("Styleshit", "at/gv/egiz/bku/binding/stylesheet.xslt");
+ rf.addForm(RequestFactory.STYLESHEETURL, "formdata:Styleshit");
+ server.setResponseContent(rf.getURLencodedAsString());
+ bindingProcessor.run();
+ assertEquals(HttpUtil.TXT_XML, bindingProcessor.getResultContentType());
+ assertTrue(resultAsString("UTF-8").indexOf("NullOperationRequest") != -1);
+ assertEquals(301, bindingProcessor.getResponseCode());
+ assertTrue(bindingProcessor.getResponseHeaders().size() > 0);
+ }
+
+ @Test
+ public void testWithDataUrl302WithStylesheet() throws IOException {
+ RequestFactory rf = new RequestFactory();
+ rf.addForm(RequestFactory.DATAURL, "http://localhost:8080");
+ bindingProcessor.consumeRequestStream(rf.getURLencoded());
+ server.setResponseCode(302);
+ rf = new RequestFactory();
+ rf.addFormAsResource("Styleshit", "at/gv/egiz/bku/binding/stylesheet.xslt");
+ rf.addForm(RequestFactory.STYLESHEETURL, "formdata:Styleshit");
+ server.setResponseContent(rf.getURLencodedAsString());
+ bindingProcessor.run();
+ assertEquals(HttpUtil.TXT_XML, bindingProcessor.getResultContentType());
+ assertTrue(resultAsString("UTF-8").indexOf("NullOperationRequest") != -1);
+ assertEquals(302, bindingProcessor.getResponseCode());
+ assertTrue(bindingProcessor.getResponseHeaders().size() > 0);
+ }
+
+ @Test
+ public void testWithDataUrl303WithStylesheet() throws IOException {
+ RequestFactory rf = new RequestFactory();
+ rf.addForm(RequestFactory.DATAURL, "http://localhost:8080");
+ bindingProcessor.consumeRequestStream(rf.getURLencoded());
+ server.setResponseCode(303);
+ rf = new RequestFactory();
+ rf.addFormAsResource("Styleshit", "at/gv/egiz/bku/binding/stylesheet.xslt");
+ rf.addForm(RequestFactory.STYLESHEETURL, "formdata:Styleshit");
+ server.setResponseContent(rf.getURLencodedAsString());
+ bindingProcessor.run();
+ assertEquals(HttpUtil.TXT_XML, bindingProcessor.getResultContentType());
+ assertTrue(resultAsString("UTF-8").indexOf("NullOperationRequest") != -1);
+ assertEquals(303, bindingProcessor.getResponseCode());
+ assertTrue(bindingProcessor.getResponseHeaders().size() > 0);
+ }
+
+ @Test
+ public void testWithDataUrl306WithStylesheet() throws IOException {
+ RequestFactory rf = new RequestFactory();
+ rf.addForm(RequestFactory.DATAURL, "http://localhost:8080");
+ bindingProcessor.consumeRequestStream(rf.getURLencoded());
+ server.setResponseCode(306);
+ rf = new RequestFactory();
+ rf.addFormAsResource("Styleshit", "at/gv/egiz/bku/binding/stylesheet.xslt");
+ rf.addForm(RequestFactory.STYLESHEETURL, "formdata:Styleshit");
+ server.setResponseContent(rf.getURLencodedAsString());
+ bindingProcessor.run();
+ assertEquals(HttpUtil.TXT_XML, bindingProcessor.getResultContentType());
+ assertTrue(resultAsString("UTF-8").indexOf("ErrorResponse") != -1);
+ assertEquals(200, bindingProcessor.getResponseCode());
+ assertTrue(bindingProcessor.getResponseHeaders().size() == 0);
+ }
+
+ @Test
+ public void testWithDataUrl307NonXML() throws IOException {
+ RequestFactory rf = new RequestFactory();
+ rf.addForm(RequestFactory.DATAURL, "http://localhost:8080");
+ bindingProcessor.consumeRequestStream(rf.getURLencoded());
+ server.setResponseCode(307);
+ serverHeaderMap.put("Content-Type", HttpUtil.TXT_PLAIN);
+ server.setResponseHeaders(serverHeaderMap);
+ rf = new RequestFactory();
+ rf.addFormAsResource("Styleshit", "at/gv/egiz/bku/binding/stylesheet.xslt");
+ rf.addForm(RequestFactory.STYLESHEETURL, "formdata:Styleshit");
+ server.setResponseContent(rf.getURLencodedAsString());
+ bindingProcessor.run();
+ assertEquals(HttpUtil.TXT_PLAIN, bindingProcessor.getResultContentType());
+ assertTrue(resultAsString("UTF-8").indexOf("NullOperationRequest") != -1);
+ assertEquals(307, bindingProcessor.getResponseCode());
+ assertTrue(bindingProcessor.getResponseHeaders().size() > 0);
+ }
+
+ @Test
+ public void testWithInvalidDataUrl307XML() throws IOException {
+ RequestFactory rf = new RequestFactory();
+ rf.addForm(RequestFactory.DATAURL, "http://localhost:8080");
+ bindingProcessor.consumeRequestStream(rf.getURLencoded());
+ server.setResponseCode(307);
+ serverHeaderMap.put("Content-Type", HttpUtil.TXT_XML);
+ serverHeaderMap.put("Location", "noUrl");
+ server.setResponseHeaders(serverHeaderMap);
+ rf = new RequestFactory();
+ server.setResponseContent(rf.getNullOperationXML());
+ bindingProcessor.run();
+ assertEquals(HttpUtil.TXT_XML, bindingProcessor.getResultContentType());
+ assertTrue(resultAsString("UTF-8").indexOf("ErrorResponse") != -1);
+ assertEquals(200, bindingProcessor.getResponseCode());
+ assertTrue(bindingProcessor.getResponseHeaders().size() == 0);
+ }
+
+ @Test
+ public void testWithValidDataUrl307XML() throws IOException, InterruptedException {
+ server = new MultiTestDataUrlConnection();
+ DataUrl.setDataUrlConnectionImpl(server);
+ TestDataSource tds = new TestDataSource();
+ ((MultiTestDataUrlConnection)server).setDataSource(tds);
+
+ // first server response with 307 xml and location
+ RequestFactory rf = new RequestFactory();
+ serverHeaderMap = new HashMap<String, String>();
+ serverHeaderMap.put("Location", "http://localhost:8080");
+ serverHeaderMap.put("Content-Type", HttpUtil.TXT_XML);
+ tds.addResponse(307, rf.getNullOperationXML(), serverHeaderMap);
+
+ // 2nd response with 200 text/plain and != <ok/>
+ String testString = "CheckMe";
+ serverHeaderMap = new HashMap<String, String>();
+ serverHeaderMap.put("Content-Type", HttpUtil.TXT_PLAIN);
+ String testHeader ="DummyHeader";
+ String testHeaderVal ="DummyHeaderVal";
+ serverHeaderMap.put(testHeader, testHeaderVal);
+ tds.addResponse(200, testString, serverHeaderMap);
+
+ rf = new RequestFactory();
+ rf.addForm(RequestFactory.DATAURL, "http://localhost:8080");
+ bindingProcessor.consumeRequestStream(rf.getURLencoded());
+ bindingProcessor.run();
+
+ assertTrue(bindingProcessor.getResponseHeaders().size()>0);
+ assertEquals(testHeaderVal, bindingProcessor.getResponseHeaders().get(testHeader));
+ assertEquals(200,bindingProcessor.getResponseCode());
+ assertEquals(HttpUtil.TXT_PLAIN, bindingProcessor.getResultContentType());
+ assertEquals(testString ,resultAsString("UTF-8"));
+ }
+
+ @Test
+ public void testWithValidDataUrl200Urlencoded() throws IOException {
+ RequestFactory rf = new RequestFactory();
+ rf = new RequestFactory();
+ rf.addForm(RequestFactory.DATAURL, "http://localhost:8080");
+ bindingProcessor.consumeRequestStream(rf.getURLencoded());
+ server.setResponseCode(200);
+ rf = new RequestFactory();
+ rf.addFormAsResource("Styleshit", "at/gv/egiz/bku/binding/stylesheet.xslt");
+ serverHeaderMap.put("Content-Type", HttpUtil.APPLICATION_URL_ENCODED);
+ server.setResponseHeaders(serverHeaderMap);
+ server.setResponseContent(rf.getURLencodedAsString());
+ bindingProcessor.run();
+ assertTrue(bindingProcessor.getResponseHeaders().size()==0);
+ assertEquals(200,bindingProcessor.getResponseCode());
+ assertEquals(HttpUtil.TXT_XML, bindingProcessor.getResultContentType());
+ assertTrue(resultAsString("UTF-8").indexOf("NullOperationResponse") != -1);
+ }
+
+ @Test
+ public void testWithValidDataUrl200UrlencodedAndStylesheet() throws IOException {
+ RequestFactory rf = new RequestFactory();
+ rf = new RequestFactory();
+ rf.addForm(RequestFactory.DATAURL, "http://localhost:8080");
+ bindingProcessor.consumeRequestStream(rf.getURLencoded());
+ server.setResponseCode(200);
+ rf = new RequestFactory();
+ rf.addFormAsResource("Styleshit", "at/gv/egiz/bku/binding/stylesheet.xslt");
+ rf.addForm(RequestFactory.STYLESHEETURL, "formdata:Styleshit");
+ serverHeaderMap.put("Content-Type", HttpUtil.APPLICATION_URL_ENCODED);
+ server.setResponseHeaders(serverHeaderMap);
+ server.setResponseContent(rf.getURLencodedAsString());
+ bindingProcessor.run();
+ assertTrue(bindingProcessor.getResponseHeaders().size()==0);
+ assertEquals(200,bindingProcessor.getResponseCode());
+ assertEquals(HttpUtil.TXT_HTML, bindingProcessor.getResultContentType());
+ assertTrue(resultAsString("UTF-8").indexOf("NullKommaJosef") != -1);
+ }
+
+
+}
diff --git a/bkucommon/src/test/java/at/gv/egiz/bku/binding/IdFactoryTest.java b/bkucommon/src/test/java/at/gv/egiz/bku/binding/IdFactoryTest.java
new file mode 100644
index 00000000..cd75ec38
--- /dev/null
+++ b/bkucommon/src/test/java/at/gv/egiz/bku/binding/IdFactoryTest.java
@@ -0,0 +1,63 @@
+/*
+* Copyright 2008 Federal Chancellery Austria and
+* Graz University of Technology
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package at.gv.egiz.bku.binding;
+
+import static org.junit.Assert.*;
+
+import org.junit.Before;
+import org.junit.Test;
+
+public class IdFactoryTest {
+
+ @Before
+ public void setUp() {
+ IdFactory.getInstance().setNumberOfBits(168);
+
+ }
+
+ @Test
+ public void testWithString() {
+ String testString = "Hansi";
+ Id hansi = IdFactory.getInstance().createId(testString);
+ assertEquals(hansi.toString(), testString);
+ }
+
+ @Test(expected = NullPointerException.class)
+ public void testFactory() {
+ IdFactory.getInstance().setSecureRandom(null);
+ }
+
+ @Test
+ public void testRandom() {
+ IdFactory fab = IdFactory.getInstance();
+ Id id = fab.createId();
+ assertEquals(id.toString().length(), 28);
+ fab.setNumberOfBits(24);
+ id = fab.createId();
+ assertEquals(id.toString().length(), 4);
+ }
+
+ @Test
+ public void testEquals() {
+ String idString = "Hansi";
+ IdFactory fab = IdFactory.getInstance();
+ Id id1 = fab.createId(idString);
+ Id id2 = fab.createId(idString);
+ assertEquals(id1, id2);
+ assertEquals(id1.hashCode(), id2.hashCode());
+ }
+}
diff --git a/bkucommon/src/test/java/at/gv/egiz/bku/binding/InputDecoderFactoryTest.java b/bkucommon/src/test/java/at/gv/egiz/bku/binding/InputDecoderFactoryTest.java
new file mode 100644
index 00000000..7d79889d
--- /dev/null
+++ b/bkucommon/src/test/java/at/gv/egiz/bku/binding/InputDecoderFactoryTest.java
@@ -0,0 +1,96 @@
+/*
+* Copyright 2008 Federal Chancellery Austria and
+* Graz University of Technology
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package at.gv.egiz.bku.binding;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Iterator;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import at.gv.egiz.bku.utils.StreamUtil;
+
+public class InputDecoderFactoryTest {
+
+ protected String resourceName = "at/gv/egiz/bku/binding/Multipart.txt.bin";
+ protected byte[] data;
+
+ @Before
+ public void setUp() throws IOException {
+ InputStream is = getClass().getClassLoader().getResourceAsStream(
+ resourceName);
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ byte[] buffer = new byte[1024];
+ int i;
+
+ while ((i = is.read(buffer)) != -1) {
+ bos.write(buffer, 0, i);
+ }
+ is.close();
+ data = bos.toByteArray();
+ }
+
+ @Test
+ public void testPrefix() {
+ InputDecoder dec = InputDecoderFactory.getDecoder(
+ "multipart/form-data; boundary=AaB03x", null);
+ assertTrue(dec instanceof MultiPartFormDataInputDecoder);
+ }
+
+ @Test
+ public void testMultipart() throws IOException {
+ InputDecoder dec = InputDecoderFactory
+ .getDecoder(
+ "multipart/form-data; boundary=---------------------------15671293698853",
+ new ByteArrayInputStream(data));
+ assertNotNull(dec);
+ for (Iterator<FormParameter> fpi = dec.getFormParameterIterator(); fpi
+ .hasNext();) {
+ FormParameter fp = fpi.next();
+ if (fp.getFormParameterName().equals("XMLRequest")) {
+ assertEquals("text/xml", fp.getFormParameterContentType());
+ return;
+ }
+ }
+ assertTrue(false);
+ }
+
+ @Test
+ public void testUrlEncoded() throws IOException {
+ InputDecoder dec = InputDecoderFactory.getDecoder(
+ "application/x-www-form-urlencoded", null);
+ assertTrue(dec instanceof XWWWFormUrlInputDecoder);
+ dec = InputDecoderFactory.getDecoder(
+ "application/x-WWW-form-urlencoded;charset=UTF-8",
+ new ByteArrayInputStream(
+ "your_name=hansi+wurzel&userid=123&form_name=wasinet".getBytes()));
+ assertTrue(dec instanceof XWWWFormUrlInputDecoder);
+ Iterator<FormParameter> fpi = dec.getFormParameterIterator();
+ FormParameter fp = fpi.next();
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
+ StreamUtil.copyStream(fp.getFormParameterValue(), os);
+ String value = new String(os.toByteArray(), "UTF-8");
+ assertEquals("hansi wurzel", value);
+ }
+}
diff --git a/bkucommon/src/test/java/at/gv/egiz/bku/binding/MultiTestDataUrlConnection.java b/bkucommon/src/test/java/at/gv/egiz/bku/binding/MultiTestDataUrlConnection.java
new file mode 100644
index 00000000..5d2a7544
--- /dev/null
+++ b/bkucommon/src/test/java/at/gv/egiz/bku/binding/MultiTestDataUrlConnection.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2008 Federal Chancellery Austria and
+* Graz University of Technology
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package at.gv.egiz.bku.binding;
+
+import java.io.IOException;
+import java.util.Map;
+
+public class MultiTestDataUrlConnection extends TestDataUrlConnection {
+
+ public static interface DataSourceProvider {
+ public Map<String, String> getResponseHeaders();
+ public String getResponseContent();
+ public int getResponseCode();
+ public void nextEvent();
+ }
+
+
+ protected DataSourceProvider dataSource;
+
+ public void setDataSource(DataSourceProvider dataSource) {
+ this.dataSource = dataSource;
+ }
+
+ public DataUrlResponse getResponse() throws IOException {
+ if (dataSource == null) {
+ return super.getResponse();
+ }
+ dataSource.nextEvent();
+ responseHeaders = dataSource.getResponseHeaders();
+ responseCode = dataSource.getResponseCode();
+ responseContent = dataSource.getResponseContent();
+ return super.getResponse();
+ }
+
+}
diff --git a/bkucommon/src/test/java/at/gv/egiz/bku/binding/MultipartSLRequestTest.java b/bkucommon/src/test/java/at/gv/egiz/bku/binding/MultipartSLRequestTest.java
new file mode 100644
index 00000000..1a9a6a70
--- /dev/null
+++ b/bkucommon/src/test/java/at/gv/egiz/bku/binding/MultipartSLRequestTest.java
@@ -0,0 +1,59 @@
+/*
+* Copyright 2008 Federal Chancellery Austria and
+* Graz University of Technology
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package at.gv.egiz.bku.binding;
+
+import at.gv.egiz.bku.conf.DummyConfiguration;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import org.junit.Before;
+import org.junit.Test;
+
+public class MultipartSLRequestTest {
+
+ protected String resourceName = "at/gv/egiz/bku/binding/MultipartFromTutorial.txt";
+
+ protected BindingProcessor bindingProcessor;
+ protected InputStream dataStream;
+ protected BindingProcessorManager manager;
+
+ @Before
+ public void setUp() throws MalformedURLException {
+ manager = new BindingProcessorManagerImpl(new DummyStalFactory(),
+ new SLCommandInvokerImpl(), new DummyConfiguration());
+ HTTPBindingProcessor http = (HTTPBindingProcessor) manager
+ .createBindingProcessor("http://www.at/", null);
+ Map<String, String> headers = new HashMap<String, String>();
+ headers.put("Content-Type", InputDecoderFactory.MULTIPART_FORMDATA
+ + ";boundary=---------------------------2330864292941");
+ http.setHTTPHeaders(headers);
+ dataStream = getClass().getClassLoader().getResourceAsStream(resourceName);
+ bindingProcessor = http;
+ }
+
+ @Test
+ public void testBasicNop() {
+ bindingProcessor.consumeRequestStream(dataStream);
+ // manager.process(bindingProcessor);
+ bindingProcessor.run();
+ }
+
+}
diff --git a/bkucommon/src/test/java/at/gv/egiz/bku/binding/NullOperationTest.java b/bkucommon/src/test/java/at/gv/egiz/bku/binding/NullOperationTest.java
new file mode 100644
index 00000000..58c82c49
--- /dev/null
+++ b/bkucommon/src/test/java/at/gv/egiz/bku/binding/NullOperationTest.java
@@ -0,0 +1,54 @@
+/*
+* Copyright 2008 Federal Chancellery Austria and
+* Graz University of Technology
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package at.gv.egiz.bku.binding;
+
+import at.gv.egiz.bku.conf.DummyConfiguration;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.junit.Before;
+import org.junit.Test;
+
+public class NullOperationTest {
+
+ protected String resourceName = "at/gv/egiz/bku/binding/NulloperationRequest.txt.bin";
+
+ protected BindingProcessor bindingProcessor;
+ protected InputStream dataStream;
+ protected BindingProcessorManager manager;
+
+ @Before
+ public void setUp() throws MalformedURLException {
+ manager = new BindingProcessorManagerImpl(new DummyStalFactory(), new SLCommandInvokerImpl(), new DummyConfiguration());
+ HTTPBindingProcessor http = (HTTPBindingProcessor) manager.createBindingProcessor("http://www.at/", null);
+ Map<String, String> headers = new HashMap<String, String>();
+ headers.put("Content-Type", "application/x-www-form-urlencoded");
+ http.setHTTPHeaders(headers);
+ dataStream = getClass().getClassLoader().getResourceAsStream(resourceName);
+ bindingProcessor = http;
+ }
+
+ @Test
+ public void testBasicNop() {
+ bindingProcessor.consumeRequestStream(dataStream);
+ //manager.process(bindingProcessor);
+ bindingProcessor.run();
+ }
+
+}
diff --git a/bkucommon/src/test/java/at/gv/egiz/bku/binding/RequestFactory.java b/bkucommon/src/test/java/at/gv/egiz/bku/binding/RequestFactory.java
new file mode 100644
index 00000000..77157a41
--- /dev/null
+++ b/bkucommon/src/test/java/at/gv/egiz/bku/binding/RequestFactory.java
@@ -0,0 +1,116 @@
+/*
+* Copyright 2008 Federal Chancellery Austria and
+* Graz University of Technology
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package at.gv.egiz.bku.binding;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URLEncoder;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import at.gv.egiz.bku.utils.StreamUtil;
+
+public class RequestFactory implements FixedFormParameters {
+
+ protected String requestResourceName = "at/gv/egiz/bku/binding/Nulloperation.xml";
+
+ protected Map<String, String> formString = new HashMap<String, String>();
+ protected Map<String, String> formResources = new HashMap<String, String>();
+
+ public RequestFactory() {
+ formResources.put(XMLREQUEST, requestResourceName);
+ }
+
+ public void addForm(String formName, String content) {
+ formString.put(formName, content);
+ }
+
+ public void addFormAsResource(String formName, String resourceName) {
+ formResources.put(formName, resourceName);
+ }
+
+ public InputStream getURLencoded() throws IOException {
+ StringBuffer sb = new StringBuffer();
+ for (Iterator<String> si = formString.keySet().iterator(); si.hasNext();) {
+ String formName = si.next();
+ String formVal = formString.get(formName);
+ sb.append(URLEncoder.encode(formName, "UTF-8"));
+ sb.append("=");
+ sb.append(URLEncoder.encode(formVal, "UTF-8"));
+ if (si.hasNext()) {
+ sb.append("&");
+ } else {
+ if (formResources.keySet().iterator().hasNext()) {
+ sb.append("&");
+ }
+ }
+ }
+
+ for (Iterator<String> si = formResources.keySet().iterator(); si.hasNext();) {
+ String formName = si.next();
+ String formVal = URLEncoder.encode(StreamUtil.asString(getClass()
+ .getClassLoader().getResourceAsStream(formResources.get(formName)),
+ "UTF-8"), "UTF-8");
+ sb.append(URLEncoder.encode(formName, "UTF-8"));
+ sb.append("=");
+ sb.append(formVal);
+ if (si.hasNext()) {
+ sb.append("&");
+ }
+ }
+ return new ByteArrayInputStream(sb.toString().getBytes("UTF-8"));
+ }
+
+ public String getURLencodedAsString() throws IOException {
+ StringBuffer sb = new StringBuffer();
+ for (Iterator<String> si = formString.keySet().iterator(); si.hasNext();) {
+ String formName = si.next();
+ String formVal = formString.get(formName);
+ sb.append(URLEncoder.encode(formName, "UTF-8"));
+ sb.append("=");
+ sb.append(URLEncoder.encode(formVal, "UTF-8"));
+ if (si.hasNext()) {
+ sb.append("&");
+ } else {
+ if (formResources.keySet().iterator().hasNext()) {
+ sb.append("&");
+ }
+ }
+ }
+
+ for (Iterator<String> si = formResources.keySet().iterator(); si.hasNext();) {
+ String formName = si.next();
+ String formVal = URLEncoder.encode(StreamUtil.asString(getClass()
+ .getClassLoader().getResourceAsStream(formResources.get(formName)),
+ "UTF-8"), "UTF-8");
+ sb.append(URLEncoder.encode(formName, "UTF-8"));
+ sb.append("=");
+ sb.append(formVal);
+ if (si.hasNext()) {
+ sb.append("&");
+ }
+ }
+ return sb.toString();
+ }
+
+ public String getNullOperationXML() throws IOException {
+ return StreamUtil.asString(getClass().getClassLoader().getResourceAsStream(
+ requestResourceName), "UTF-8");
+ }
+}
diff --git a/bkucommon/src/test/java/at/gv/egiz/bku/binding/SSLDataUrlConnectionTest.java b/bkucommon/src/test/java/at/gv/egiz/bku/binding/SSLDataUrlConnectionTest.java
new file mode 100644
index 00000000..79757244
--- /dev/null
+++ b/bkucommon/src/test/java/at/gv/egiz/bku/binding/SSLDataUrlConnectionTest.java
@@ -0,0 +1,40 @@
+/*
+* Copyright 2008 Federal Chancellery Austria and
+* Graz University of Technology
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package at.gv.egiz.bku.binding;
+
+import static org.junit.Assert.assertNotNull;
+
+import java.io.IOException;
+import java.net.URL;
+
+import org.junit.Ignore;
+import org.junit.Test;
+
+@Ignore
+public class SSLDataUrlConnectionTest {
+
+ @Test
+ public void testVerisign() throws IOException {
+ URL url = new URL("https://www.verisign.com:443");
+ DataUrlConnectionImpl uc = new DataUrlConnectionImpl();
+ uc.init(url);
+ uc.connect();
+ assertNotNull(uc.getServerCertificate());
+ //uc.transmit(null);
+ }
+
+}
diff --git a/bkucommon/src/test/java/at/gv/egiz/bku/binding/TestDataUrlConnection.java b/bkucommon/src/test/java/at/gv/egiz/bku/binding/TestDataUrlConnection.java
new file mode 100644
index 00000000..0a24b5c5
--- /dev/null
+++ b/bkucommon/src/test/java/at/gv/egiz/bku/binding/TestDataUrlConnection.java
@@ -0,0 +1,150 @@
+/*
+* Copyright 2008 Federal Chancellery Austria and
+* Graz University of Technology
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package at.gv.egiz.bku.binding;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.SocketTimeoutException;
+import java.net.URL;
+import java.security.cert.X509Certificate;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.SSLSocketFactory;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.junit.Ignore;
+
+import at.gv.egiz.bku.slcommands.SLResult;
+
+@Ignore
+public class TestDataUrlConnection implements DataUrlConnectionSPI {
+
+
+ protected Log log = LogFactory.getLog(TestDataUrlConnection.class);
+ protected X509Certificate serverCertificate;
+ protected Map<String, String> responseHeaders = Collections.EMPTY_MAP;
+ protected Map<String, String> requestHeaders = new HashMap<String, String>();
+ protected String responseContent = "";
+ protected int responseCode = 200;
+
+ protected URL url;
+
+ @Override
+ public void init(URL url) {
+ log.debug("Init Testdataurlconnection to url: " + url);
+ this.url = url;
+ }
+
+ @Override
+ public void connect() throws SocketTimeoutException, IOException {
+ log.debug("Dummy connect to Testdataurlconnection to url: " + url);
+
+ }
+
+ @Override
+ public String getProtocol() {
+ return url.getProtocol();
+ }
+
+ @Override
+ public DataUrlResponse getResponse() throws IOException {
+ String ct = responseHeaders.get(HttpUtil.HTTP_HEADER_CONTENT_TYPE);
+ if (ct != null) {
+ ct = HttpUtil.getCharset(ct, true);
+ } else {
+ ct = HttpUtil.DEFAULT_CHARSET;
+ }
+ DataUrlResponse response = new DataUrlResponse(url.toString(), responseCode, new ByteArrayInputStream(responseContent.getBytes(ct)));
+ response.setResponseHttpHeaders(responseHeaders);
+ return response;
+ }
+
+ @Override
+ public X509Certificate getServerCertificate() {
+ return serverCertificate;
+ }
+
+ @Override
+ public void setHTTPFormParameter(String name, InputStream data,
+ String contentType, String charSet, String transferEncoding) {
+ // TODO Auto-generated method stub
+ }
+
+ @Override
+ public void setHTTPHeader(String key, String value) {
+ requestHeaders.put(key, value);
+ }
+
+ @Override
+ public void transmit(SLResult slResult) throws IOException {
+ log.debug("Dummy transmit to url: " + url);
+ }
+
+ public void setServerCertificate(X509Certificate serverCertificate) {
+ this.serverCertificate = serverCertificate;
+ }
+
+ public void setResponseHeaders(Map<String, String> responseHeaders) {
+ this.responseHeaders = responseHeaders;
+ }
+
+ public void setResponseContent(String responseContent) {
+ this.responseContent = responseContent;
+ }
+
+ public void setResponseCode(int responseCode) {
+ this.responseCode = responseCode;
+ }
+
+ public Map<String, String> getRequestHeaders() {
+ return requestHeaders;
+ }
+
+ @Override
+ public DataUrlConnectionSPI newInstance() {
+ return this;
+ }
+
+ @Override
+ public URL getUrl() {
+ return url;
+ }
+
+ @Override
+ public void setConfiguration(Properties config) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setHostnameVerifier(HostnameVerifier hostnameVerifier) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setSSLSocketFactory(SSLSocketFactory socketFactory) {
+ // TODO Auto-generated method stub
+
+ }
+ }
diff --git a/bkucommon/src/test/java/at/gv/egiz/bku/binding/XWWWFormUrlInputIteratorTest.java b/bkucommon/src/test/java/at/gv/egiz/bku/binding/XWWWFormUrlInputIteratorTest.java
new file mode 100644
index 00000000..4d81f038
--- /dev/null
+++ b/bkucommon/src/test/java/at/gv/egiz/bku/binding/XWWWFormUrlInputIteratorTest.java
@@ -0,0 +1,299 @@
+package at.gv.egiz.bku.binding;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.nio.CharBuffer;
+import java.nio.channels.FileChannel;
+import java.nio.charset.Charset;
+
+import org.junit.Ignore;
+import org.junit.Test;
+
+import at.gv.egiz.bku.utils.URLEncodingWriter;
+import static org.junit.Assert.*;
+
+public class XWWWFormUrlInputIteratorTest {
+
+ @Test
+ public void testEmpty() throws IOException {
+
+ ByteArrayInputStream emptyStream = new ByteArrayInputStream(new byte[] {});
+
+ XWWWFormUrlInputIterator decoder = new XWWWFormUrlInputIterator(emptyStream);
+
+ assertFalse(decoder.hasNext());
+
+ }
+
+ @Test
+ public void testOneParam() throws IOException {
+
+ final String name = "name";
+ final String value = "value";
+
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
+ OutputStreamWriter w = new OutputStreamWriter(os, Charset.forName("UTF-8"));
+ w.write(name);
+ w.write("=");
+ w.write(value);
+ w.flush();
+ w.close();
+
+ ByteArrayInputStream in = new ByteArrayInputStream(os.toByteArray());
+ XWWWFormUrlInputIterator decoder = new XWWWFormUrlInputIterator(in);
+
+ assertTrue(decoder.hasNext());
+ FormParameter param = decoder.next();
+ assertNotNull(param);
+ assertEquals(name, param.getFormParameterName());
+ InputStream vis = param.getFormParameterValue();
+ assertNotNull(vis);
+ InputStreamReader r = new InputStreamReader(vis);
+ char[] buf = new char[value.length() + 1];
+ int len = r.read(buf);
+ assertEquals(value.length(), len);
+ assertEquals(value, new String(buf, 0, len));
+ assertFalse(decoder.hasNext());
+ Exception ex = null;
+ try {
+ decoder.next();
+ } catch (Exception e) {
+ ex = e;
+ }
+ assertNotNull(ex);
+
+ }
+
+ @Test
+ public void testTwoParam() throws IOException {
+
+ final String name1 = "name";
+ final String value1 = "value";
+ final String name2 = "Name_2";
+ final String value2 = "Value 2";
+
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
+ OutputStreamWriter w = new OutputStreamWriter(os, Charset.forName("UTF-8"));
+ w.write(name1);
+ w.write("=");
+ w.write(value1);
+ w.write("&");
+ w.write(URLEncoder.encode(name2, "UTF-8"));
+ w.write("=");
+ w.write(URLEncoder.encode(value2, "UTF-8"));
+ w.flush();
+ w.close();
+
+ ByteArrayInputStream in = new ByteArrayInputStream(os.toByteArray());
+ XWWWFormUrlInputIterator decoder = new XWWWFormUrlInputIterator(in);
+
+ assertTrue(decoder.hasNext());
+ FormParameter param = decoder.next();
+ assertNotNull(param);
+ assertEquals(name1, param.getFormParameterName());
+ InputStream vis = param.getFormParameterValue();
+ assertNotNull(vis);
+ InputStreamReader r = new InputStreamReader(vis);
+ char[] buf = new char[value1.length() + 1];
+ int len = r.read(buf);
+ assertEquals(value1.length(), len);
+ assertEquals(value1, new String(buf, 0, len));
+
+ assertTrue(decoder.hasNext());
+ param = decoder.next();
+ assertNotNull(param);
+ assertEquals(name2, param.getFormParameterName());
+ vis = param.getFormParameterValue();
+ assertNotNull(vis);
+ r = new InputStreamReader(vis);
+ buf = new char[value2.length() + 1];
+ len = r.read(buf);
+ assertEquals(value2.length(), len);
+ assertEquals(value2, new String(buf, 0, len));
+
+ assertFalse(decoder.hasNext());
+ }
+
+ @Test
+ public void testURLEnc() throws IOException {
+
+ String name = "name";
+ byte[] value = new byte[128];
+ for (int i = 0; i < value.length; i++) {
+ value[i] = (byte) i;
+ }
+
+ String encValue = URLEncoder.encode(new String(value, "UTF-8"), "ASCII");
+ System.out.println(encValue);
+
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
+ OutputStreamWriter w = new OutputStreamWriter(os, Charset.forName("UTF-8"));
+ w.write(name);
+ w.write("=");
+ w.write(encValue);
+ w.flush();
+ w.close();
+
+ ByteArrayInputStream in = new ByteArrayInputStream(os.toByteArray());
+ XWWWFormUrlInputIterator decoder = new XWWWFormUrlInputIterator(in);
+
+ assertTrue(decoder.hasNext());
+ FormParameter param = decoder.next();
+ assertNotNull(param);
+ assertEquals(name, param.getFormParameterName());
+ InputStream vis = param.getFormParameterValue();
+ assertNotNull(vis);
+ byte[] buf = new byte[value.length];
+ int len = vis.read(buf);
+ assertArrayEquals(value, buf);
+ assertEquals(value.length, len);
+ assertFalse(decoder.hasNext());
+ Exception ex = null;
+ try {
+ decoder.next();
+ } catch (Exception e) {
+ ex = e;
+ }
+ assertNotNull(ex);
+
+ }
+
+ @Test
+ public void testURLEnc1() throws IOException {
+
+ InputStream urlEncStream = new BufferedInputStream(getClass()
+ .getResourceAsStream("XWWWFormUrlEncoded1.txt"));
+
+ XWWWFormUrlInputIterator decoder = new XWWWFormUrlInputIterator(urlEncStream);
+
+ assertTrue(decoder.hasNext());
+ FormParameter param = decoder.next();
+ assertNotNull(param);
+ assertEquals("XMLRequest", param.getFormParameterName());
+ InputStream vis = param.getFormParameterValue();
+ assertNotNull(vis);
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
+ byte[] buf = new byte[1024];
+ for (int l; (l = vis.read(buf)) != -1;) {
+ os.write(buf, 0, l);
+ }
+ assertEquals(-1, vis.read());
+ assertFalse(decoder.hasNext());
+ assertEquals(-1, urlEncStream.read());
+
+ }
+
+ @Test
+ public void testURLEnc2() throws IOException {
+
+ InputStream urlEncStream = new BufferedInputStream(getClass()
+ .getResourceAsStream("XWWWFormUrlEncoded2.txt"));
+
+ XWWWFormUrlInputIterator decoder = new XWWWFormUrlInputIterator(urlEncStream);
+
+ assertTrue(decoder.hasNext());
+ FormParameter param = decoder.next();
+ assertNotNull(param);
+ assertEquals("XMLRequest", param.getFormParameterName());
+ InputStream vis = param.getFormParameterValue();
+ assertNotNull(vis);
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
+ byte[] buf = new byte[1024];
+ for (int l; (l = vis.read(buf)) != -1;) {
+ os.write(buf, 0, l);
+ }
+ assertEquals(-1, vis.read());
+ vis.close();
+
+ assertTrue(decoder.hasNext());
+ param = decoder.next();
+ assertNotNull(param);
+ assertEquals("EmptyParam", param.getFormParameterName());
+ vis = param.getFormParameterValue();
+ assertNotNull(vis);
+ assertEquals(-1, vis.read());
+ vis.close();
+
+ assertTrue(decoder.hasNext());
+ param = decoder.next();
+ assertNotNull(param);
+ assertEquals("TransferParam__", param.getFormParameterName());
+ vis = param.getFormParameterValue();
+ assertNotNull(vis);
+ for (int l = 0; (l = vis.read(buf)) != -1;) {
+ os.write(buf, 0, l);
+ }
+ assertEquals(-1, vis.read());
+ vis.close();
+
+ }
+
+ @Ignore
+ @Test
+ public void testURLEncLoremIpsum() throws IOException {
+
+ InputStream urlEncStream = new BufferedInputStream(getClass()
+ .getResourceAsStream("UrlEncodedLoremIpsum.txt"));
+
+ XWWWFormUrlInputIterator decoder = new XWWWFormUrlInputIterator(urlEncStream);
+
+ assertTrue(decoder.hasNext());
+ FormParameter param = decoder.next();
+ assertNotNull(param);
+ assertEquals("LoremIpsum", param.getFormParameterName());
+ InputStream vis = param.getFormParameterValue();
+ assertNotNull(vis);
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
+ byte[] buf = new byte[1024];
+ for (int l; (l = vis.read(buf)) != -1;) {
+ os.write(buf, 0, l);
+ }
+ assertEquals(-1, vis.read());
+ vis.close();
+
+ assertFalse(decoder.hasNext());
+
+ }
+
+
+ public static void main(String[] args) throws IOException {
+
+ URL resource = XWWWFormUrlInputIteratorTest.class
+ .getResource("LoremIpsum.txt");
+
+ BufferedInputStream is = new BufferedInputStream(resource.openStream());
+
+ InputStreamReader reader = new InputStreamReader(is, "UTF-8");
+
+ StringBuilder sb = new StringBuilder();
+ char[] b = new char[1024];
+ for (int l; (l = reader.read(b)) != -1;) {
+ sb.append(b, 0, l);
+ }
+ String li = sb.toString();
+
+ FileOutputStream os = new FileOutputStream("UrlEncodedLoremIpsum.txt");
+ OutputStreamWriter writer = new OutputStreamWriter(new BufferedOutputStream(os), "ISO-8859-1");
+ URLEncodingWriter encoder = new URLEncodingWriter(writer);
+
+ for (int i = 0; i < 100; i++) {
+ encoder.write(li);
+ }
+
+ encoder.flush();
+ encoder.close();
+
+ }
+
+}