Package org.apache.niolex.commons.seda

Source Code of org.apache.niolex.commons.seda.ConstructTest$C1Stage

/**
* ConstructTest.java
*
* Copyright 2012 Niolex, Inc.
*
* Niolex 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.niolex.commons.seda;

import static org.junit.Assert.assertEquals;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;

import org.apache.niolex.commons.test.MockUtil;
import org.apache.niolex.commons.test.SleepStage;
import org.apache.niolex.commons.test.TInput;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

/**
* @author <a href="mailto:xiejiyun@gmail.com">Xie, Jiyun</a>
* @version 1.0.0, $Date: 2012-11-17$
*/
public class ConstructTest {

  public static class C1Stage extends SleepStage {

    private Stage<TInput> s10;
    private Stage<TInput> s1;

    /**
     * Constructor
     * @param stageName
     * @param sleepTime
     */
    public C1Stage(String stageName, long sleepTime) {
      super(stageName, sleepTime);
    }

    @Override
    public void construct() {
      s10 = dispatcher.getStage("s10");
      s1 = dispatcher.getStage("s1");
    }

    @Override
    protected void process(TInput in, Dispatcher dispatcher) {
      super.process(in, dispatcher);
      if (in.getTag() % 2 == 0) {
        s10.addInput(in);
      } else {
        s1.addInput(in);
      }
    }

  }

  public static class S1Stage extends SleepStage {

    private Stage<TInput> e1;
    private Stage<TInput> e8;
    private Stage<TInput> e20;

    /**
     * Constructor
     * @param stageName
     * @param sleepTime
     */
    public S1Stage(String stageName, long sleepTime) {
      super(stageName, sleepTime);
    }

    @Override
    public void construct() {
      e1 = dispatcher.getStage("e1");
      e8 = dispatcher.getStage("e8");
      e20 = dispatcher.getStage("e20");
    }

    @Override
    protected void process(TInput in, Dispatcher dispatcher) {
      super.process(in, dispatcher);
      int k = (in.getTag() >> 3) % 3;
      switch (k) {
      case 1:
        e1.addInput(in);
        break;
      case 2:
        e20.addInput(in);
        break;
      case 0:
      default:
        e8.addInput(in);
      }
    }

  }

  public static class S10Stage extends SleepStage {

    private Stage<TInput> e1;

    /**
     * Constructor
     * @param stageName
     * @param sleepTime
     */
    public S10Stage(String stageName, long sleepTime) {
      super(stageName, 50000, sleepTime);
    }

    @Override
    public void construct() {
      e1 = dispatcher.getStage("e1");
    }

    @Override
    protected void process(TInput in, Dispatcher dispatcher) {
      super.process(in, dispatcher);
      e1.addInput(in);
    }

  }

  public static class EndStage extends SleepStage {

    private CountDownLatch latch;

    /**
     * Constructor
     * @param stageName
     * @param sleepTime
     */
    public EndStage(String stageName, long sleepTime, CountDownLatch latch) {
      super(stageName, sleepTime);
      this.latch = latch;
    }

    @Override
    protected void process(TInput in, Dispatcher dispatcher) {
      super.process(in, dispatcher);
      latch.countDown();
    }

  }


  static Dispatcher disp = Dispatcher.getInstance();

  static CountDownLatch latch;

  static int computeSize = 5000;

  /**
   * Test method for {@link org.apache.niolex.commons.seda.Dispatcher#register(org.apache.niolex.commons.seda.Stage)}.
   */
  @BeforeClass
  public static final void register() {
      latch = new CountDownLatch(computeSize);
    disp.register(new EndStage("e8", 8, latch));
    disp.register(new EndStage("e20", 20, latch));
    disp.register(new EndStage("e1", 1, latch));
    disp.register(new S10Stage("s10", 10));
    disp.register(new S1Stage("s1", 1));
    disp.register(new C1Stage("c1", 1));
    disp.construction();
    disp.startAdjust(1005);
  }

  @AfterClass
  public static final void clear() {
    disp.clear();
  }

  @Test
  public void testDispatch() throws Exception {
    for (int i = 0; i < computeSize; ++i) {
      disp.dispatch("c1", new TInput(MockUtil.randInt(1000)));
      Thread.sleep(1);
    }

    latch.await(10, TimeUnit.SECONDS);
    disp.shutdown();

    for (Stage<?>s : disp.getAllStages()) {
      SleepStage ss = (SleepStage)s;
      System.out.println(ss.getStageName() + "\t-> " + ss.getStageStatus() + " -> " + ss.getProcessedCount());
    }
    assertEquals(0, latch.getCount());
  }

  public static void main(String[] args) throws Exception {
    computeSize = 30000;
    register();
    new ConstructTest().testDispatch();
  }
}
TOP

Related Classes of org.apache.niolex.commons.seda.ConstructTest$C1Stage

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.