You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@clerezza.apache.org by re...@apache.org on 2010/11/11 22:07:46 UTC

svn commit: r1034127 - in /incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.testing: ./ src/test/java/org/apache/clerezza/platform/testing/blackbox/osgi/

Author: reto
Date: Thu Nov 11 21:07:46 2010
New Revision: 1034127

URL: http://svn.apache.org/viewvc?rev=1034127&view=rev
Log:
added multithreaded request tests

Added:
    incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.testing/src/test/java/org/apache/clerezza/platform/testing/blackbox/osgi/RDFListRootResource.java
    incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.testing/src/test/java/org/apache/clerezza/platform/testing/blackbox/osgi/SimpleRootResource.java
Modified:
    incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.testing/   (props changed)
    incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.testing/src/test/java/org/apache/clerezza/platform/testing/blackbox/osgi/FelixClerezzaPlatformTest.java

Propchange: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.testing/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Thu Nov 11 21:07:46 2010
@@ -1,3 +1,5 @@
 target
 .project
 .log.log.swp
+.classpath
+.settings

Modified: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.testing/src/test/java/org/apache/clerezza/platform/testing/blackbox/osgi/FelixClerezzaPlatformTest.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.testing/src/test/java/org/apache/clerezza/platform/testing/blackbox/osgi/FelixClerezzaPlatformTest.java?rev=1034127&r1=1034126&r2=1034127&view=diff
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.testing/src/test/java/org/apache/clerezza/platform/testing/blackbox/osgi/FelixClerezzaPlatformTest.java (original)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.testing/src/test/java/org/apache/clerezza/platform/testing/blackbox/osgi/FelixClerezzaPlatformTest.java Thu Nov 11 21:07:46 2010
@@ -18,37 +18,51 @@
  */
 package org.apache.clerezza.platform.testing.blackbox.osgi;
 
-import org.junit.runner.RunWith;
-import org.ops4j.pax.exam.Option;
-import org.ops4j.pax.exam.junit.Configuration;
-import org.ops4j.pax.exam.junit.JUnit4TestRunner;
-
-import static org.ops4j.pax.exam.CoreOptions.*;
-import static org.ops4j.pax.exam.container.def.PaxRunnerOptions.*;
-import static org.ops4j.pax.exam.junit.JUnitOptions.*;
+import static org.ops4j.pax.exam.CoreOptions.felix;
+import static org.ops4j.pax.exam.CoreOptions.frameworks;
+import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
+import static org.ops4j.pax.exam.CoreOptions.mavenConfiguration;
+import static org.ops4j.pax.exam.CoreOptions.options;
+import static org.ops4j.pax.exam.CoreOptions.systemProperty;
+import static org.ops4j.pax.exam.container.def.PaxRunnerOptions.configProfile;
+import static org.ops4j.pax.exam.container.def.PaxRunnerOptions.vmOption;
+import static org.ops4j.pax.exam.container.def.PaxRunnerOptions.webProfile;
+import static org.ops4j.pax.exam.junit.JUnitOptions.junitBundles;
 
 import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.io.InputStream;
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.net.URLConnection;
+import java.util.Dictionary;
+import java.util.Hashtable;
 import java.util.logging.Level;
 import java.util.logging.Logger;
+
 import junit.framework.Assert;
+
 import org.apache.clerezza.rdf.core.access.TcManager;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.runner.RunWith;
 import org.ops4j.pax.exam.Inject;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.junit.Configuration;
+import org.ops4j.pax.exam.junit.JUnit4TestRunner;
 import org.osgi.framework.BundleContext;
-
 import org.osgi.util.tracker.ServiceTracker;
 
 /**
- *
+ * 
  * @author mir, reto
  */
 @RunWith(JUnit4TestRunner.class)
 public class FelixClerezzaPlatformTest {
 
+	private static final int REQUESTS_PER_THREAD = 50;
+	private static final int THREADS_COUNT = 10;
+
 	@Configuration
 	public static Option[] configuration() {
 		return options(
@@ -59,8 +73,6 @@ public class FelixClerezzaPlatformTest {
 				"org.osgi.compendium").versionAsInProject(),
 				mavenBundle().groupId("org.apache.clerezza.ext").artifactId(
 				"com.hp.hpl.jena").versionAsInProject(),
-				/*mavenBundle().groupId("org.apache.felix").artifactId(
-				"org.apache.felix.log").versionAsInProject(),*/
 				mavenBundle().groupId("org.ops4j.pax.logging").artifactId(
 				"pax-logging-api").versionAsInProject(),
 				mavenBundle().groupId("org.ops4j.pax.logging").artifactId(
@@ -175,13 +187,12 @@ public class FelixClerezzaPlatformTest {
 				"org.apache.clerezza.platform.language.core").versionAsInProject(),
 				mavenBundle().groupId("org.apache.httpcomponents").artifactId(
 				"httpcore-osgi").versionAsInProject(),
-				//dsProfile(),
+				// dsProfile(),
 				configProfile(),
 				webProfile(),
 				junitBundles(),
 				vmOption("-XX:MaxPermSize=200m"),
-				frameworks(
-				felix()),
+				frameworks(felix()),
 				systemProperty("org.osgi.service.http.port").value(
 				Integer.toString(testHttpPort)));
 	}
@@ -191,22 +202,43 @@ public class FelixClerezzaPlatformTest {
 	private boolean webServerExist;
 
 	@Before
-	public void registerServices()
-			throws Exception {
+	public void registerServices() throws Exception {
 		webServerExist = waitForWebserver();
-		Assert.assertTrue("webserver running on port "+testHttpPort, webServerExist);
+		Assert.assertTrue("webserver running on port " + testHttpPort,
+				webServerExist);
 		Thread.sleep(10000);
 	}
 
+	/**
+	 * multiple tests that run within the lifetime of the same instance
+	 * 
+	 * @throws Exception
+	 */
 	@Test
-	public void checkTcManagerService()
-			throws Exception {
-		Object service = waitFor(TcManager.class, 20000);
-		Assert.assertTrue(service != null);
+	public void multi() throws Exception {
+		checkTcManagerService();
+		testJaxRsRegistration();
+	}
 
+	private void testJaxRsRegistration() throws InterruptedException, IOException {
+		final Dictionary<String, Object> jaxRsResourceProperty = new Hashtable<String, Object>();
+		{
+			jaxRsResourceProperty.put("javax.ws.rs", Boolean.TRUE);
+			jaxRsResourceProperty.put("service.pid", SimpleRootResource.class.getName());
+		}
+		bundleContext.registerService(Object.class.getName(),
+				new SimpleRootResource(), jaxRsResourceProperty);
+		URL url = new URL("http://localhost:" + testHttpPort + "/foo");
+		Thread.sleep(4000);
+		requestUrl(url);//"/admin/users/list-users"));
+		runRequestThreads(url);
 	}
 
+	private void checkTcManagerService() throws Exception {
+		Object service = waitFor(TcManager.class, 20000);
+		Assert.assertTrue(service != null);
 
+	}
 
 	private Object waitFor(Class<?> aClass, long timeout)
 			throws InterruptedException {
@@ -217,8 +249,7 @@ public class FelixClerezzaPlatformTest {
 		return service;
 	}
 
-	private boolean waitForWebserver()
-			throws InterruptedException {
+	private boolean waitForWebserver() throws InterruptedException {
 		int j = 0;
 		try {
 			URL serverURL = new URL("http://localhost:" + testHttpPort + "/");
@@ -237,8 +268,59 @@ public class FelixClerezzaPlatformTest {
 				break;
 			}
 		} catch (MalformedURLException ex) {
-			Logger.getLogger(FelixClerezzaPlatformTest.class.getName()).log(Level.SEVERE, null, ex);
+			Logger.getLogger(FelixClerezzaPlatformTest.class.getName()).log(
+					Level.SEVERE, null, ex);
 		}
 		return j < 100;
 	}
+
+	private void runRequestThreads(final URL url) throws MalformedURLException,
+			InterruptedException {
+		RequestThread[] requestThread = new RequestThread[THREADS_COUNT];
+		for (int i = 0; i < THREADS_COUNT; i++) {
+			requestThread[i] = new RequestThread(url);
+		}
+		for (int i = 0; i < THREADS_COUNT; i++) {
+			requestThread[i].start();
+		}
+		int successfulRequests = 0;
+		for (int i = 0; i < THREADS_COUNT; i++) {
+			requestThread[i].join();
+			successfulRequests += requestThread[i].successfulRequests;
+		}
+		Assert.assertEquals(REQUESTS_PER_THREAD * THREADS_COUNT,
+				successfulRequests);
+	}
+
+	static class RequestThread extends Thread {
+
+		private URL url;
+		int successfulRequests = 0;
+
+		public RequestThread(URL url) {
+			this.url = url;
+		}
+
+		@Override
+		public void run() {
+			try {
+				for (int i = 0; i < REQUESTS_PER_THREAD; i++) {
+					requestUrl(url);
+					successfulRequests++;
+				}
+			} catch (IOException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+
+		}
+	}
+
+	private static void requestUrl(URL url) throws IOException {
+		URLConnection urlConnection = url.openConnection();
+		InputStream in = urlConnection.getInputStream();
+		for (int ch = in.read(); ch != -1; ch = in.read()) {
+			System.out.print((char) ch);
+		}
+	}
 }

Added: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.testing/src/test/java/org/apache/clerezza/platform/testing/blackbox/osgi/RDFListRootResource.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.testing/src/test/java/org/apache/clerezza/platform/testing/blackbox/osgi/RDFListRootResource.java?rev=1034127&view=auto
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.testing/src/test/java/org/apache/clerezza/platform/testing/blackbox/osgi/RDFListRootResource.java (added)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.testing/src/test/java/org/apache/clerezza/platform/testing/blackbox/osgi/RDFListRootResource.java Thu Nov 11 21:07:46 2010
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.clerezza.platform.testing.blackbox.osgi;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+
+import org.apache.clerezza.rdf.core.BNode;
+import org.apache.clerezza.rdf.core.TripleCollection;
+import org.apache.clerezza.rdf.core.impl.PlainLiteralImpl;
+import org.apache.clerezza.rdf.core.impl.SimpleMGraph;
+import org.apache.clerezza.rdf.utils.GraphNode;
+import org.apache.clerezza.rdf.utils.RdfList;
+
+/**
+ *
+ * @author reto
+ */
+@Path("/list")
+public class RDFListRootResource {
+
+	static final public String greeting = "hello";
+	
+	@GET
+	@Produces("text/plain")
+	public GraphNode sayHello() {
+		TripleCollection resultGraph = new SimpleMGraph();
+		GraphNode result = new GraphNode(new BNode(), resultGraph);
+		RdfList list = new RdfList(result);
+		for (int i = 0; i < 10 ; i++) {
+			list.add(new PlainLiteralImpl("number "+i));
+		}
+		return result;
+	}
+}

Added: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.testing/src/test/java/org/apache/clerezza/platform/testing/blackbox/osgi/SimpleRootResource.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.testing/src/test/java/org/apache/clerezza/platform/testing/blackbox/osgi/SimpleRootResource.java?rev=1034127&view=auto
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.testing/src/test/java/org/apache/clerezza/platform/testing/blackbox/osgi/SimpleRootResource.java (added)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.testing/src/test/java/org/apache/clerezza/platform/testing/blackbox/osgi/SimpleRootResource.java Thu Nov 11 21:07:46 2010
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.clerezza.platform.testing.blackbox.osgi;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+
+/**
+ *
+ * @author reto
+ */
+@Path("/foo")
+public class SimpleRootResource {
+
+	static final public String greeting = "hello";
+	
+	@GET
+	@Produces("text/plain")
+	public String sayHello() {
+		return greeting;
+	}
+}