/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF 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.ignite.internal.util;
import org.apache.ignite.logger.java.JavaLogger;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
/**
*
*/
public class StripedExecutorTest extends GridCommonAbstractTest {
/** */
private StripedExecutor stripedExecSvc;
/** {@inheritDoc} */
@Override public void beforeTest() {
stripedExecSvc = new StripedExecutor(3, "foo name", "pool name", new JavaLogger());
}
/** {@inheritDoc} */
@Override public void afterTest() {
stripedExecSvc.shutdown();
}
/**
* @throws Exception If failed.
*/
public void testCompletedTasks() throws Exception {
stripedExecSvc.execute(0, new TestRunnable());
stripedExecSvc.execute(1, new TestRunnable());
sleepASec();
assertEquals(2, stripedExecSvc.completedTasks());
}
/**
* @throws Exception If failed.
*/
public void testStripesCompletedTasks() throws Exception {
stripedExecSvc.execute(0, new TestRunnable());
stripedExecSvc.execute(1, new TestRunnable());
sleepASec();
long[] completedTaks = stripedExecSvc.stripesCompletedTasks();
assertEquals(1, completedTaks[0]);
assertEquals(1, completedTaks[1]);
assertEquals(0, completedTaks[2]);
}
/**
* @throws Exception If failed.
*/
public void testStripesActiveStatuses() throws Exception {
stripedExecSvc.execute(0, new TestRunnable());
stripedExecSvc.execute(1, new TestRunnable(true));
sleepASec();
boolean[] statuses = stripedExecSvc.stripesActiveStatuses();
assertFalse(statuses[0]);
assertTrue(statuses[1]);
assertFalse(statuses[0]);
}
/**
* @throws Exception If failed.
*/
public void testActiveStripesCount() throws Exception {
stripedExecSvc.execute(0, new TestRunnable());
stripedExecSvc.execute(1, new TestRunnable(true));
sleepASec();
assertEquals(1, stripedExecSvc.activeStripesCount());
}
/**
* @throws Exception If failed.
*/
public void testStripesQueueSizes() throws Exception {
stripedExecSvc.execute(0, new TestRunnable());
stripedExecSvc.execute(0, new TestRunnable(true));
stripedExecSvc.execute(0, new TestRunnable(true));
stripedExecSvc.execute(1, new TestRunnable(true));
stripedExecSvc.execute(1, new TestRunnable(true));
stripedExecSvc.execute(1, new TestRunnable(true));
sleepASec();
int[] queueSizes = stripedExecSvc.stripesQueueSizes();
assertEquals(1, queueSizes[0]);
assertEquals(2, queueSizes[1]);
assertEquals(0, queueSizes[2]);
}
/**
* @throws Exception If failed.
*/
public void testQueueSize() throws Exception {
stripedExecSvc.execute(1, new TestRunnable());
stripedExecSvc.execute(1, new TestRunnable(true));
stripedExecSvc.execute(1, new TestRunnable(true));
sleepASec();
assertEquals(1, stripedExecSvc.queueSize());
}
/**
*
*/
private final class TestRunnable implements Runnable {
/** */
private final boolean infinitely;
/**
*
*/
public TestRunnable() {
this(false);
}
/**
* @param infinitely {@code True} if should sleep infinitely.
*/
public TestRunnable(boolean infinitely) {
this.infinitely = infinitely;
}
/** {@inheritDoc} */
@Override public void run() {
try {
while (infinitely)
sleepASec();
}
catch (InterruptedException e) {
info("Got interrupted exception while sleeping: " + e);
}
}
}
/**
* @throws InterruptedException If interrupted.
*/
private void sleepASec() throws InterruptedException {
Thread.sleep(1000);
}
}