You are viewing a plain text version of this content. The canonical link for it is here.
Posted to watchdog-dev@jakarta.apache.org by rl...@apache.org on 2002/01/11 23:22:34 UTC

cvs commit: jakarta-watchdog-4.0/src/server/servlet-tests/WEB-INF/classes/tests/javax_servlet/SingleThreadModel STMClientServlet.java

rlubke      02/01/11 14:22:34

  Added:       src/server/servlet-tests/WEB-INF/classes/tests/javax_servlet/SingleThreadModel
                        STMClientServlet.java
  Log:
   - Added STMClientServlet to act as an HTTP client to access SingleModelTestServlet
     which validates the containers support of the SingleThreadModel.
  
  Revision  Changes    Path
  1.1                  jakarta-watchdog-4.0/src/server/servlet-tests/WEB-INF/classes/tests/javax_servlet/SingleThreadModel/STMClientServlet.java
  
  Index: STMClientServlet.java
  ===================================================================
  /*
  *
  */
  
  package tests.javax_servlet.SingleThreadModel;
  
  import javax.servlet.*;
  import javax.servlet.http.*;
  import java.io.*;
  import java.net.*;
  
  public class STMClientServlet extends HttpServlet {
  
      public void init(ServletConfig config) throws ServletException {
          super.init(config);
      }
  
      public void destory() {
      }
  
      protected void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
  
  	int errors = 0;
  	try {
  	    int threadCount = Integer.valueOf( request.getParameter( "count" ) ).intValue();
  	    String path = "/servlet-tests/" + request.getParameter( "path" );
  	    ThreadClient tc = new ThreadClient( request.getServerName(), request.getServerPort(),
  					    threadCount, path );
  	    errors = tc.runTest();	   
  	} catch ( Exception e ) {
  	    throw new ServletException( "SingleThreadModel Test FAILED!", e );
  	}
  	if ( errors > 0 ) {
  	    throw new ServletException( "SingleThreadModel Test FAILED!" );
  	}
      }
      
      public String getServletInfo() {
          return "SingleThreadModel Client Servlet";
      }
  
      private class ThreadClient {
          
          private final int SLEEPTIME      = 5000;
  	private final int NUM_REQUESTS   = 3;
  
  	// For Thread Synchronization
  	private int threadCount          = 0;
  	private int threadsDone          = 0;
  	private int errors               = 0;
  	private int port                 = 0;
  	private Object lock              = new Object();
  	private Object startLock         = new Object();
  	private Object workLock          = new Object();
  	private String hostname          = null;
  	private String requestPath       = null;
  
  	public ThreadClient( String hostname, int port, int threadCount, String requestPath ) {
  	    this.hostname    = hostname;
  	    this.port        = port;
  	    this.threadCount = threadCount;
  	    this.requestPath  = requestPath;
  	}
  
  	public int runTest() throws Exception {
  
  	    try {
  		Thread[] testThread = new Thread[ threadCount ];
  
  		for ( int i = 0; i < threadCount; i++ ) {
  		    testThread[ i ] = new Thread( new TestThread( i ), "TestThread-"
  + i );
  		    testThread[ i ].setPriority( Thread.MAX_PRIORITY );
  		    testThread[ i ].start();
  		}
  
  		synchronized( lock ) {
  		    while ( threadsDone < testThread.length ) {
  			lock.wait();
  		    }
  
  		    try {
  			Thread.sleep( SLEEPTIME );
  		    } catch ( Exception e ) {
  			;
  		    }
  		}
  
  		//notify all to start
  		synchronized( startLock ) {
  		    threadsDone = 0;
  		    startLock.notifyAll();
  		}
  		//wait for completion
  		synchronized( lock ) {
  		    while ( threadsDone < testThread.length ) {
  			lock.wait();
  		    }
  		}
  
  		if ( errors > 0 ) {
  		    log( "[STMClient] Number of Errors: " + errors );
  		    log( "[STMClient] Test FAILED" );
  		} else {
  		    log( "[STMClient] No Errors.  Test PASSED" );
  		}
  	    } catch ( Exception e ) {
  		throw e;
  	    }
  	    return errors;
  	}
  
  	private class TestThread implements Runnable {
  
  	    // Instance variables
  	    private int threadNum       = 0;
  	    private boolean synchronize = true;
  
  	    public TestThread( int threadNum ) {
  		this.threadNum = threadNum;
  	    }
  
  	    public void run() {
  
  		synchronized( lock ) {
  		    ++threadsDone;
  		    lock.notifyAll();
  		}
  
  		synchronized( startLock ) {
  		    try {
  			startLock.wait();
  		    } catch ( InterruptedException ie ) {
  			;
  		    }
  		}
  		this.runSingleThreadModelTest();
  		
  		synchronized( lock ) {
  		    ++threadsDone;
  		    lock.notifyAll();
  		}
  	    }
  
  	    public void runSingleThreadModelTest() {
  		
  		for ( int i = 0; i < 3; i++ ) {
  		    try {
  			URL url = new URL( "http://" + hostname + ":" + port +
  					   requestPath );
  			HttpURLConnection conn = (HttpURLConnection)
  			    url.openConnection();
  			conn.setRequestMethod( "GET" );
  			conn.connect();
  			int code = conn.getResponseCode();
  			if ( code != HttpURLConnection.HTTP_OK ) {
  			    synchronized( lock ) {
  				++errors;
  			    }
  			}
  			Thread.sleep( 1000 );
  		    } catch ( Exception e ) {
  			log( "[STMClient] Unexpected Exception in runSingleThreadModelTest()!" );
  			log( "[STMClient] Exception: " + e.toString() );
  			log( "[STMClient] Message: " + e.getMessage() );
  			e.printStackTrace();
  			synchronized( lock ) {
  			    ++errors;
  			}
  		    }
  		}
  		
  	    }
  	}
      }
  }
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>