[jboss-cvs] JBossAS SVN: r62628 - in branches/JBoss_4_0_3_SP1_CP/testsuite/src/main/org/jboss/test/cluster/web: stress and 2 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Sun Apr 29 23:18:27 EDT 2007


Author: bstansberry at jboss.com
Date: 2007-04-29 23:18:27 -0400 (Sun, 29 Apr 2007)
New Revision: 62628

Added:
   branches/JBoss_4_0_3_SP1_CP/testsuite/src/main/org/jboss/test/cluster/web/stress/
   branches/JBoss_4_0_3_SP1_CP/testsuite/src/main/org/jboss/test/cluster/web/stress/test/
   branches/JBoss_4_0_3_SP1_CP/testsuite/src/main/org/jboss/test/cluster/web/stress/test/SyncReplStressUnitTestCase.java
   branches/JBoss_4_0_3_SP1_CP/testsuite/src/main/org/jboss/test/cluster/web/stress/web/
   branches/JBoss_4_0_3_SP1_CP/testsuite/src/main/org/jboss/test/cluster/web/stress/web/StressTestServlet.java
Log:
[ASPATCH-208] Test for background thread overwriting sessions

Added: branches/JBoss_4_0_3_SP1_CP/testsuite/src/main/org/jboss/test/cluster/web/stress/test/SyncReplStressUnitTestCase.java
===================================================================
--- branches/JBoss_4_0_3_SP1_CP/testsuite/src/main/org/jboss/test/cluster/web/stress/test/SyncReplStressUnitTestCase.java	                        (rev 0)
+++ branches/JBoss_4_0_3_SP1_CP/testsuite/src/main/org/jboss/test/cluster/web/stress/test/SyncReplStressUnitTestCase.java	2007-04-30 03:18:27 UTC (rev 62628)
@@ -0,0 +1,146 @@
+package org.jboss.test.cluster.web.stress.test;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import junit.framework.Test;
+
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.methods.PostMethod;
+import org.jboss.test.JBossClusteredTestCase;
+import org.jboss.test.cluster.test.BaseTest;
+import org.jboss.test.cluster.web.stress.web.StressTestServlet;
+
+public class SyncReplStressUnitTestCase extends BaseTest 
+{
+	private static final String SERVLET_URL = "/http-sync-stress/StressTestServlet";
+	private static final String BYTE_SIZE = "50000";
+	private static final int THREAD_COUNT = Integer.parseInt(System.getProperty("jbosstest.cluster.syncstress.threadcount", "25"));
+    private static final int LOOP_COUNT = 30;    
+	
+	private Map errors = Collections.synchronizedMap(new HashMap());
+	private volatile int threadCount;
+    private volatile int executeCount;
+    
+    public SyncReplStressUnitTestCase(String name)
+    {
+       super(name);
+    }
+
+    public static Test suite() throws Exception
+    {
+       Test t1 = JBossClusteredTestCase.getDeploySetup(SyncReplStressUnitTestCase.class,
+             "http-sync-stress.war");
+       return t1;
+    }
+    
+   protected void setUp() throws Exception
+   {
+      super.setUp();
+   }
+   
+   protected void tearDown() throws Exception
+   {
+      super.tearDown();
+      errors.clear();
+   }
+	
+	public void testConcurrentLoad() throws Exception {
+
+		Caller[] threads = new Caller[THREAD_COUNT];
+		
+		for (int i=0; i<THREAD_COUNT; i++) 
+        {
+			threads[i] = new Caller();
+            threads[i].setDaemon(true);
+		}
+		
+		for (int i=0; i<THREAD_COUNT; i++) 
+        {
+			threads[i].start();
+		}
+		
+        boolean alive = true;
+		while (alive && errors.size() == 0) 
+        {
+            alive = false;
+			Thread.sleep(3000);
+			for (int i=0; i<THREAD_COUNT; i++) 
+            {
+				if (threads[i].isAlive()) 
+                {
+					alive = true;
+                    break;
+				}
+			}
+            log.info("Completed " + executeCount + " cycles out of " + (THREAD_COUNT * LOOP_COUNT));
+		}
+		
+		StringBuffer buf = new StringBuffer();
+		for (Iterator iter = errors.entrySet().iterator(); iter.hasNext(); ) 
+        {
+           Entry entry = (Entry) iter.next();
+           buf.append("Key:").append(entry.getKey()).append(" \tValue:").append(entry.getValue()).append("\n");
+		}
+		System.out.println(buf.toString());
+		System.out.println("error count : " + errors.size());
+		assertEquals("No errors reported", 0, errors.size());
+	}
+	
+	private void execute(HttpClient client) throws Exception 
+    {       
+        int idx = threadCount++;
+        int node = idx % 2; 
+        String[] httpURLs  = getHttpURLs();
+		PostMethod method = new PostMethod(httpURLs[node] + SERVLET_URL);
+		method.setParameter(StressTestServlet.BYTES, BYTE_SIZE);
+		int status = client.executeMethod(method);
+        assertEquals(200, status);
+        method.getResponseBody();
+		method.releaseConnection();
+		
+		for (int i=0; i < LOOP_COUNT; i++) 
+        {           
+            sleepThread(1000);
+            node = node++ %2;
+            setCookieDomainToThisServer(client, servers_[node]);
+			method = new PostMethod(httpURLs[node] + SERVLET_URL);
+            method.setParameter(StressTestServlet.CMD, StressTestServlet.SUBTRACT);
+			method.setParameter(StressTestServlet.BYTES, BYTE_SIZE);
+			status = client.executeMethod(method);
+			method.releaseConnection();
+			assertEquals(200, status);
+			
+            sleepThread(1000);
+            node = node++ %2;
+            setCookieDomainToThisServer(client, servers_[node]);
+            method = new PostMethod(httpURLs[node] + SERVLET_URL);
+            method.setParameter(StressTestServlet.CMD, StressTestServlet.ADD);
+            method.setParameter(StressTestServlet.BYTES, BYTE_SIZE);
+			status = client.executeMethod(method);
+			method.releaseConnection();
+			assertEquals(200, status);
+            
+            executeCount++;
+		}
+	}
+    
+    private class Caller extends Thread
+    {
+       public void run() 
+       {
+            HttpClient client = new HttpClient();
+            try 
+            {
+                execute(client);
+            } 
+            catch (Throwable t) 
+            {
+                errors.put(getName(), t.getLocalizedMessage());
+            }
+        }
+    }
+}

Added: branches/JBoss_4_0_3_SP1_CP/testsuite/src/main/org/jboss/test/cluster/web/stress/web/StressTestServlet.java
===================================================================
--- branches/JBoss_4_0_3_SP1_CP/testsuite/src/main/org/jboss/test/cluster/web/stress/web/StressTestServlet.java	                        (rev 0)
+++ branches/JBoss_4_0_3_SP1_CP/testsuite/src/main/org/jboss/test/cluster/web/stress/web/StressTestServlet.java	2007-04-30 03:18:27 UTC (rev 62628)
@@ -0,0 +1,88 @@
+package org.jboss.test.cluster.web.stress.web;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+public class StressTestServlet extends HttpServlet
+{   
+   private static final long serialVersionUID = 1L;
+   
+   public static final String CMD = "cmd";
+   public static final String ADD = "ADD";
+   public static final String SUBTRACT = "SUBTRACT";
+   public static final String BYTES = "bytes";
+   
+   protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
+   {
+      String cmd = req.getParameter(CMD);
+      if (cmd == null || cmd.length() == 0)
+      {
+         handleNew(req);
+      }
+      else if (ADD.equals(cmd))
+      {
+         handleAdd(req);
+      }
+      else if (SUBTRACT.equals(cmd))
+      {
+         handleSubtract(req);
+      }
+      
+      PrintWriter writer = res.getWriter();
+      writer.println("OK");
+      writer.close();
+   }
+   
+   private void handleNew(HttpServletRequest req)
+   {
+      HttpSession sess = req.getSession(false);
+      if (sess != null)
+         throw new RuntimeException("Session already exists");
+      
+      addBytes(req);
+   }
+   
+   private void handleAdd(HttpServletRequest req)
+   {
+      HttpSession sess = req.getSession();
+      if (sess == null)
+         throw new RuntimeException("Session already exists");
+      
+      if (sess.getAttribute(BYTES) != null)
+         throw new RuntimeException("bytes already stored");
+      
+      addBytes(req);
+   }
+   
+   private void handleSubtract(HttpServletRequest req)
+   {
+      HttpSession sess = req.getSession();
+      if (sess == null)
+         throw new RuntimeException("Session already exists");
+   
+      byte[] bytes = (byte[]) sess.getAttribute(BYTES);
+      if (bytes == null)
+         throw new RuntimeException("bytes not stored");
+   
+      int size = Integer.parseInt(req.getParameter(BYTES));
+      if (bytes.length != size)
+         throw new RuntimeException("bytes are incorrect length; should be " + size + 
+               " but is " + bytes.length);
+      
+      sess.removeAttribute(BYTES);      
+   }
+   
+   private void addBytes(HttpServletRequest req)
+   {
+      HttpSession sess = req.getSession();
+      int size = Integer.parseInt(req.getParameter(BYTES));
+      sess.setAttribute(BYTES, new byte[size]);
+   }
+
+}




More information about the jboss-cvs-commits mailing list