You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ad...@apache.org on 2004/03/13 23:51:33 UTC

cvs commit: incubator-geronimo/modules/network/src/test/org/apache/geronimo/network/protocol SocketProtocolStressTest.java

adc         2004/03/13 14:51:33

  Added:       modules/network/src/test/org/apache/geronimo/network/protocol
                        SocketProtocolStressTest.java
  Log:
  Stress test
  
  Revision  Changes    Path
  1.1                  incubator-geronimo/modules/network/src/test/org/apache/geronimo/network/protocol/SocketProtocolStressTest.java
  
  Index: SocketProtocolStressTest.java
  ===================================================================
  /**
   *
   * Copyright 2004 The Apache Software Foundation
   *
   *  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 org.apache.geronimo.network.protocol;
  
  import java.net.InetSocketAddress;
  import java.net.URI;
  import java.nio.ByteBuffer;
  import java.nio.ByteOrder;
  import java.util.ArrayList;
  
  import EDU.oswego.cs.dl.util.concurrent.CyclicBarrier;
  import EDU.oswego.cs.dl.util.concurrent.CountDown;
  import junit.framework.TestCase;
  
  import org.apache.geronimo.network.SelectorManager;
  import org.apache.geronimo.system.ClockPool;
  import org.apache.geronimo.system.ThreadPool;
  
  
  /**
   * @version $Revision: 1.1 $ $Date: 2004/03/13 22:51:33 $
   */
  public class SocketProtocolStressTest extends TestCase {
  
      protected ThreadPool tp;
      protected ClockPool cp;
      protected SelectorManager sm;
      protected SocketProtocol spt;
      protected ProtocolFactory pf;
      protected ServerSocketAcceptor ssa;
      protected SocketProtocol sp;
      protected volatile int count;
  
      public void testSimple() throws Exception {
          sp.sendDown(getDatagramPacket());
          sp.sendDown(getDatagramPacket());
          sp.sendDown(getDatagramPacket());
  
          DatagramDownPacket packet = getDatagramPacket();
          sp.sendDown(packet);
          sp.sendDown(packet);
  
          Thread.sleep(5 * 1000);
      }
  
      public void testConcurrentRequests() throws Exception {
  
          final int WORKERS = 100;
          final int MESSAGE_COUNT = 10;
          final CyclicBarrier barrier = new CyclicBarrier(WORKERS);
          final CountDown finished = new CountDown(WORKERS);
  
          for (int i = 0; i < WORKERS; i++) {
  
              new Thread() {
                  /**
                   * @see java.lang.Thread#run()
                   */
                  public void run() {
                      try {
                          barrier.barrier();
  
                          for (int i = 0; i < MESSAGE_COUNT; i++)
                              sp.sendDown(getDatagramPacket());
  
                          finished.release();
  
                      } catch (Exception e) {
                          e.printStackTrace();
                      }
                  }
              }.start();
          }
  
          finished.acquire();
  
          Thread.sleep(5 * 1000);
          
          assertEquals(WORKERS * MESSAGE_COUNT, count);
      }
  
      public void setUp() throws Exception {
          count = 0;
  
          tp = new ThreadPool();
          tp.setKeepAliveTime(60 * 1000);
          tp.setMinimumPoolSize(5);
          tp.setMaximumPoolSize(25);
          tp.setPoolName("TP");
          tp.doStart();
  
          cp = new ClockPool();
          cp.setPoolName("CP");
          cp.doStart();
  
          sm = new SelectorManager();
          sm.setThreadPool(tp);
          sm.setThreadName("SM");
          sm.setTimeout(500);
          sm.doStart();
  
          spt = new SocketProtocol();
          spt.setUp(new Protocol() {
              public Protocol getUp() {
                  throw new NoSuchMethodError();
              }
  
              public void setUp(Protocol up) {
                  throw new NoSuchMethodError();
              }
  
              public Protocol getDown() {
                  throw new NoSuchMethodError();
              }
  
              public void setDown(Protocol down) {
                  throw new NoSuchMethodError();
              }
  
              public void clearLinks() {
              }
  
              public Protocol cloneProtocol() throws CloneNotSupportedException {
                  return (Protocol) super.clone();
              }
  
              public void doStart() {
              }
  
              public void doStop() {
              }
  
              public void sendUp(UpPacket packet) {
                  count++;
              }
  
              public void sendDown(DownPacket packet) {
              }
  
          });
          spt.setTimeout(10 * 1000);
          spt.setSelectorManager(sm);
  
          pf = new ProtocolFactory();
          pf.setClockPool(cp);
          pf.setMaxAge(Long.MAX_VALUE);
          pf.setMaxInactivity(1 * 60 * 60 * 1000);
          pf.setReclaimPeriod(10 * 1000);
          pf.setTemplate(spt);
  
          ssa = new ServerSocketAcceptor();
          ssa.setSelectorManager(sm);
          ssa.setTimeOut(5 * 1000);
          ssa.setUri(new URI("async://localhost:8081/?tcp.nodelay=true&tcp.backlog=5#"));
          ssa.setAcceptorListener(pf);
          ssa.doStart();
  
          sp = new SocketProtocol();
          sp.setUp(new Protocol() {
              public Protocol getUp() {
                  throw new NoSuchMethodError();
              }
  
              public void setUp(Protocol up) {
                  throw new NoSuchMethodError();
              }
  
              public Protocol getDown() {
                  throw new NoSuchMethodError();
              }
  
              public void setDown(Protocol down) {
                  throw new NoSuchMethodError();
              }
  
              public void clearLinks() {
              }
  
              public Protocol cloneProtocol() throws CloneNotSupportedException {
                  return (Protocol) super.clone();
              }
  
              public void doStart() {
              }
  
              public void doStop() {
              }
  
              public void sendUp(UpPacket packet) {
              }
  
              public void sendDown(DownPacket packet) {
              }
  
          });
  
          sp.setTimeout(10 * 1000);
          sp.setInterface(new InetSocketAddress("localhost", 0));
          sp.setAddress(new InetSocketAddress("localhost", 8081));
          sp.setSelectorManager(sm);
  
          sp.doStart();
      }
  
      public void tearDown() throws Exception {
          sp.doStop();
  
          ssa.doStop();
  
          pf.doStop();
  
          spt.doStop();
  
          sm.doStop();
  
          cp.doStop();
  
          tp.doStop();
      }
  
      public DatagramDownPacket getDatagramPacket() {
          DatagramDownPacket packet = new DatagramDownPacket();
          ArrayList list = new ArrayList();
  
          ByteBuffer byteBuffer = ByteBuffer.allocate(6).order(ByteOrder.BIG_ENDIAN);
  
          // Load the ByteBuffer with some bytes
          byteBuffer.put(0, (byte) 'H');
          byteBuffer.put(1, (byte) 'e');
          byteBuffer.put(2, (byte) 'l');
          byteBuffer.put(3, (byte) 'l');
          byteBuffer.put(4, (byte) 'o');
          byteBuffer.put(5, (byte) '!');
  
          list.add(byteBuffer);
  
          packet.setBuffers(list);
  
          return packet;
      }
  }