Package test.asynchronous

Source Code of test.asynchronous.JUnitTestAsynchronousAspects

/*
* JBoss, Home of Professional Open Source.
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package test.asynchronous;
import junit.framework.TestCase;
import org.jboss.aspects.asynchronous.aspects.AsynchronousFacade;
import org.jboss.aspects.asynchronous.aspects.AsynchronousFacadeImpl;
import org.jboss.aspects.asynchronous.AsynchronousResponse;
import org.jboss.aspects.asynchronous.AsynchronousConstants;
import org.jboss.aspects.asynchronous.AsynchronousTask;
import org.jboss.aspects.asynchronous.ThreadManagerResponse;
import org.jboss.aspects.asynchronous.concurrent.ThreadManagerFactory;
import org.jboss.aspects.asynchronous.ThreadManager;
/**
*
* @version <tt>$Revision: 80997 $</tt>
* @author  <a href="mailto:chussenet@yahoo.com">{Claude Hussenet Independent Consultant}</a>.
*/
public class JUnitTestAsynchronousAspects
  extends TestCase
  implements AsynchronousConstants {
  public JUnitTestAsynchronousAspects(String arg0) {
    super(arg0);
    BusinessModel bm1 = new BusinessModel();

    bm1.processBusinessModel();
    AsynchronousTask aT = ((AsynchronousFacade)bm1).getAsynchronousTask();
    ThreadManagerResponse response = aT.getResponse();

  }

  public static void testAsynchronousCall() {
    BusinessModel bm1 = new BusinessModel(200);
    long t0 = System.currentTimeMillis();
    bm1.processBusinessModel();
    long t1 = System.currentTimeMillis();
    assertTrue(
      "Not an asynchronous call:" + (t1 - t0) + " ms.",
      (t1 - t0) < 100);
  }

  public static void testMixinAsynchronousFacadeInterface() {
    BusinessModel bm1 = new BusinessModel();
    assertTrue(
      "not an instance of AsynchronousFacade",
      bm1 instanceof AsynchronousFacade);
  }
  public static void testMixinAsynchronousFacadeInterface2() {
    BusinessModel bm1 = new BusinessModel();
    BusinessModel bm2 = new BusinessModel();
    assertTrue(
      "bm1 is not an instance of AsynchronousFacade",
      bm1 instanceof AsynchronousFacade);
    assertTrue(
      "bm2 is not an instance of AsynchronousFacade",
      bm2 instanceof AsynchronousFacade);
    AsynchronousFacade asynchronousFacade1 = (AsynchronousFacade)bm1;
    AsynchronousFacade asynchronousFacade2 = (AsynchronousFacade)bm2;
    asynchronousFacade1.setId("OK");
    asynchronousFacade2.setId("KO");
    assertNotSame(
      "same instances(ID) of AsynchronousFacade",
      asynchronousFacade1.getId(),
      asynchronousFacade2.getId());
  }
  public static void test2AsynchronousCallOnSameInstance() {
    BusinessModel bm1 = new BusinessModel();
    long res1 = bm1.processBusinessModel2(15);
    AsynchronousFacade asynchronousFacade = (AsynchronousFacade)bm1;
    AsynchronousTask asynchronousTask1 =
      asynchronousFacade.getAsynchronousTask();
    long res2 = bm1.processBusinessModel2(10);
    AsynchronousTask asynchronousTask2 =
      asynchronousFacade.getAsynchronousTask();
    assertEquals(
      "Method is not succesfull !",
      OK,
      asynchronousFacade.getResponseCode(asynchronousTask1));
    assertTrue(
      "value returned is not an instance of Long",
      asynchronousFacade.getReturnValue(asynchronousTask1)
        instanceof Long);
    assertEquals(
      "Method does not return the right value !"
        + ((Long)asynchronousFacade.getReturnValue(asynchronousTask1))
          .longValue(),
      ((Long)asynchronousFacade.getReturnValue(asynchronousTask1))
        .longValue(),
      15);
    assertEquals(
      "Method is not succesfull !",
      asynchronousFacade.getResponseCode(asynchronousTask2),
      OK);
    assertTrue(
      "value returned is not an instance of Long",
      asynchronousFacade.getReturnValue(asynchronousTask2)
        instanceof Long);
    assertEquals(
      "Method does not return the right value !"
        + ((Long)asynchronousFacade.getReturnValue(asynchronousTask2))
          .longValue(),
      ((Long)asynchronousFacade.getReturnValue(asynchronousTask2))
        .longValue(),
      10);
  }
  public static void test2AsynchronousCallOnSameInstance2() {
    BusinessModel bm1 = new BusinessModel();
    AsynchronousFacade asynchronousFacade = (AsynchronousFacade)bm1;
    asynchronousFacade.setTimeout(50);
    long res1 = bm1.processBusinessModel2(1000);
    AsynchronousTask asynchronousTask1 =
      asynchronousFacade.getAsynchronousTask();
    asynchronousFacade.setTimeout(200);
    long res2 = bm1.processBusinessModel2(10);
    AsynchronousTask asynchronousTask2 =
      asynchronousFacade.getAsynchronousTask();
    assertEquals(
      "Method did not timeout !",
      TIMEOUT,
      asynchronousFacade.getResponseCode(asynchronousTask1));
    assertEquals(
      "Method is not succesfull !",
      asynchronousFacade.getResponseCode(asynchronousTask2),
      OK);
    assertTrue(
      "value returned is not an instance of Long",
      asynchronousFacade.getReturnValue(asynchronousTask2)
        instanceof Long);
    assertEquals(
      "Method does not return the right value !"
        + ((Long)asynchronousFacade.getReturnValue(asynchronousTask2))
          .longValue(),
      ((Long)asynchronousFacade.getReturnValue(asynchronousTask2))
        .longValue(),
      10);
  }

  public static void testTimeout() {
    BusinessModel bm1 = new BusinessModel(200);
    AsynchronousFacade asynchronousFacade = (AsynchronousFacade)bm1;
    asynchronousFacade.setTimeout(100);
    bm1.processBusinessModel();
    long t0 = System.currentTimeMillis();
    //System.out.println(
    //  asynchronousFacade.getAsynchronousTask().getResponse());
    assertEquals(
      "Method did not timeout !",
      TIMEOUT,
      asynchronousFacade.getResponseCode());
    long t1 = System.currentTimeMillis();
    assertTrue("Method time out in " + (t1 - t0) + " ms.", (t1 - t0) < 120);
    assertTrue("Method did not run " + (t1 - t0) + " ms.", (t1 - t0) > 80);
  }
  public static void testReturnValue() {
    BusinessModel bm1 = new BusinessModel();
    long value = bm1.processBusinessModel2(10);
    AsynchronousFacade asynchronousFacade = (AsynchronousFacade)bm1;
    assertEquals(
      "Method is not succesfull !",
      OK,
      asynchronousFacade.getResponseCode());
    assertTrue(
      "value returned is not an instance of Long",
      asynchronousFacade.getReturnValue() instanceof Long);
    assertEquals(
      "Method does not return the right value !"
        + ((Long)asynchronousFacade.getReturnValue()).longValue(),
      ((Long)asynchronousFacade.getReturnValue()).longValue(),
      10);
  }
  public static void testCleanupCallWhenTimeout() {
    BusinessModelWithCleanup bm1 = new BusinessModelWithCleanup();
    BusinessModelWithCleanup bm2 = new BusinessModelWithCleanup();
    AsynchronousFacade asynchronousFacade1 = (AsynchronousFacade)bm1;
    AsynchronousFacade asynchronousFacade2 = (AsynchronousFacade)bm2;
    asynchronousFacade1.setTimeout(100);
    long value1 = bm1.processBusinessModel2(200);
    long value2 = bm2.processBusinessModel2(200);
    assertEquals(
      "Method did not timeout !",
      TIMEOUT,
      asynchronousFacade1.getResponseCode());
    assertEquals(
      "Method is not successfull !",
      OK,
      asynchronousFacade2.getResponseCode());
    assertEquals("Cleanup method not called", true, bm1.bCleanupCalled);
    assertEquals("Cleanup method called", false, bm2.bCleanupCalled);
  }
  public static void testIsDone() {
    BusinessModel bm1 = new BusinessModel(200);
    bm1.processBusinessModel();
    AsynchronousFacade asynchronousFacade = (AsynchronousFacade)bm1;
    long t0 = System.currentTimeMillis();
    assertFalse("isDone returns TRUE  !", asynchronousFacade.isDone());
    long t1 = System.currentTimeMillis();
    assertTrue(
      "isDone is a blocking call " + (t1 - t0) + " ms.",
      (t1 - t0) < 20);
    assertEquals(
      "Method is not succesfull !",
      OK,
      asynchronousFacade.getResponseCode());
    assertTrue("isDone returns FALSE  !", asynchronousFacade.isDone());
  }
  public static void testExceptionRaisedInMethodCall() {
    BusinessModel bm1 = new BusinessModel();
    long value = bm1.processBusinessModel2(-1);
    AsynchronousFacade asynchronousFacade = (AsynchronousFacade)bm1;
    assertEquals(
      "EXCEPTIONCAUGHT error not returned !",
      EXCEPTIONCAUGHT,
      asynchronousFacade.getResponseCode());
  }

  public static void testPoolSizeFull() {
    ThreadManagerFactory.getThreadManager().setMaximumPoolSize(10);
    for (int i = 0; i < 10; i++) {
      BusinessModel bm1 = new BusinessModel(200);
      bm1.processBusinessModel();

    }
    BusinessModel bm1 = new BusinessModel(200);
    bm1.processBusinessModel();
    AsynchronousFacade asynchronousFacade = (AsynchronousFacade)bm1;
    assertEquals(
      "Pool size not full !",
      CAN_NOT_PROCESS,
      asynchronousFacade.getResponseCode());
  }

  public static void testPerformance() {
    ThreadManagerFactory.getThreadManager().setMaximumPoolSize(5000);
    long tt0 = System.currentTimeMillis();
    float nbt = 100000;
    for (int i = 0; i < nbt; i++) {
      BusinessModel bm = new BusinessModel(200);
    }
    long tt1 = System.currentTimeMillis();
    float time = (tt1 - tt0) / nbt;
    System.out.println(
      (int)nbt
        + " advised instances created in "
        + (tt1 - tt0)
        + " (ms).Average time "
        + time
        + " (ms).");
    BusinessModel bm = new BusinessModel(10);
    AsynchronousFacade Fbm = (AsynchronousFacade)bm;
    long total = 0;
    int iOk = 0;
    int nb1 = 200;
    int nb2 = 5;
    AsynchronousTask[] Tbm = new AsynchronousTask[nb2];
    for (int j = 0; j < nb1; j++) {
      long t0 = System.currentTimeMillis();
      for (int i = 0; i < nb2; i++) {
        bm.processBusinessModel();
        Tbm[i] = Fbm.getAsynchronousTask();
      }
      long t1 = System.currentTimeMillis();
      total += (t1 - t0);
      for (int i = 0; i < nb2; i++) {
        int ok = Fbm.getResponseCode(Tbm[i]);
        if (ok == OK)
          iOk++;
      }
    }
    System.out.println(
      nb1 * nb2
        + " asynchronous method invocations in "
        + total
        + " (ms).Average time "
        + (total / (float) (nb1 * nb2))
        + " (ms).");
    assertEquals("Some errors:", nb1 * nb2, iOk);
  }
  public static void testResponseTimeReturned() {
    BusinessModel bm1 = new BusinessModel(200);
    int ERROR = 20;
    long t0 = System.currentTimeMillis();
    bm1.processBusinessModel();
    AsynchronousFacade asynchronousFacade1 = (AsynchronousFacade)bm1;
    assertEquals(
      "Method is not succesfull !",
      OK,
      asynchronousFacade1.getResponseCode());
    long t1 = System.currentTimeMillis();
    long startingTime =
      asynchronousFacade1.getThreadManagerResponse().getStartingTime();
    long endingTime =
      asynchronousFacade1.getThreadManagerResponse().getEndingTime();
    assertTrue(
      "starting time issue ? " + (startingTime - t0),
      (startingTime - t0) < ERROR);
    assertTrue(
      "ending time issue ? " + (t1 - endingTime),
      (t1 - endingTime) < ERROR);
  }
  public static void testAsynchronousCallOnPrivateMethod() {
    BusinessModel bm1 = new BusinessModel(200);
    long t0 = System.currentTimeMillis();
    bm1.callPrivateMethod();
    long t1 = System.currentTimeMillis();
    assertTrue(
      "private method not an asynchronous call:" + (t1 - t0) + " ms.",
      (t1 - t0) < 100);
  }
  public static void test2AsynchronousCallsOnSameInstanceFrom2DifferentThreads() {
    BusinessModel bm1 = new BusinessModel(100);
    BusinessThread businessThread1 =
      new BusinessThread(bm1, 100, 100, "First Call");
    BusinessThread businessThread2 =
      new BusinessThread(bm1, 200, 200, "Second Call");
    Thread th1 = new Thread(businessThread1);
    th1.start();
    Thread th2 = new Thread(businessThread2);
    th2.start();
    BusinessModel.sleep(500);
    assertNotSame(
      "The result from 2 differents threads are the same !",
      businessThread1.result,
      businessThread2.result);
  }
  public static void testAsynchronousCallOnStaticMethod() {
    Parameter object = new Parameter();
    long t0 = System.currentTimeMillis();
    BusinessModel.processBusinessModel4(200, object);
    long t1 = System.currentTimeMillis();
    assertTrue(
      "not an instance of AsynchronousFacade",
      object instanceof AsynchronousFacade);
    assertTrue(
      "static method not an asynchronous call:" + (t1 - t0) + " ms.",
      (t1 - t0) < 100);
    AsynchronousFacade asynchronousFacade = (AsynchronousFacade)object;
    AsynchronousTask asynchronousTask1 =
      asynchronousFacade.getAsynchronousTask();
    assertEquals(
      "Method does not return the right value !",
      200,
      ((Long)asynchronousFacade.getReturnValue(asynchronousTask1))
        .longValue());
  }
  public static void testAsynchronousCallOnStaticMethodWithTimeout() {
    int nb = 1;
    for (int i = 0; i < nb; i++) {
         AsynchronousCallOnStaticMethodWithTimeout();
    }
  }
  public static void AsynchronousCallOnStaticMethodWithTimeout() {
    Parameter object1 = new Parameter();
    Parameter object2 = new Parameter();
    Parameter object3 = new Parameter();
    Parameter object4 = new Parameter();
    assertTrue(
      "not an instance of AsynchronousFacade",
      object1 instanceof AsynchronousFacade
        || object2 instanceof AsynchronousFacade);
    ((AsynchronousFacade)object1).setTimeout(100);
    ((AsynchronousFacade)object3).setTimeout(100);
    ((AsynchronousFacade)object4).setTimeout(100);
    long t0 = System.currentTimeMillis();
    BusinessModel.processBusinessModel4(200, object1);
    BusinessModel.processBusinessModel4(150, object2);
    BusinessModelWithStaticCleanup.processBusinessModel4(200, object3);
    BusinessModelWithStaticCleanupWithParameters.processBusinessModel4(
      200,
      object4);
    System.out.println(System.currentTimeMillis()-t0);
    long t1 = System.currentTimeMillis();
    assertTrue(
      "static method not an asynchronous call:" + (t1 - t0) + " ms.",
      (t1 - t0) < 160);
    AsynchronousFacade asynchronousFacade1 = (AsynchronousFacade)object1;
    assertEquals(
      "Method did not timeout !",
      TIMEOUT,
      asynchronousFacade1.getResponseCode());
    AsynchronousFacade asynchronousFacade = (AsynchronousFacade)object2;
    AsynchronousTask asynchronousTask2 =
      asynchronousFacade.getAsynchronousTask();
    assertEquals(
      "Method does not return the right value !",
      150,
      ((Long)asynchronousFacade.getReturnValue(asynchronousTask2))
        .longValue());
  }
}
TOP

Related Classes of test.asynchronous.JUnitTestAsynchronousAspects

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.