/**
* Copyright Plugtree LLC
*
* 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 com.plugtree.solrmeter;
import com.plugtree.solrmeter.mock.MockExecutor;
public class AbstractExecutorTestCase extends BaseTestCase {
public void testPrepare() throws InterruptedException {
MockExecutor mockExcecutor = new MockExecutor(10);
assertEquals(0, mockExcecutor.getExecutedThreads());
assertEquals(0, mockExcecutor.getThreadCount());
assertEquals(0, mockExcecutor.getDestroyedThreads());
mockExcecutor.prepare();
assertEquals(10, mockExcecutor.getThreadCount());
assertEquals(0, mockExcecutor.getExecutedThreads());
assertEquals(0, mockExcecutor.getDestroyedThreads());
mockExcecutor.start();
Thread.sleep(100);//until all threads are executed
assertEquals(10, mockExcecutor.getExecutedThreads());
assertEquals(10, mockExcecutor.getThreadCount());
assertEquals(0, mockExcecutor.getDestroyedThreads());
mockExcecutor.stop();
Thread.sleep(100);//until all threads are stopped
assertEquals(0, mockExcecutor.getThreadCount());
assertEquals(10, mockExcecutor.getDestroyedThreads());
}
public void testIncrementThreadsBeforeStart() throws InterruptedException {
MockExecutor mockExcecutor = new MockExecutor(10);
assertEquals(0, mockExcecutor.getExecutedThreads());
assertEquals(0, mockExcecutor.getThreadCount());
mockExcecutor.prepare();
assertEquals(10, mockExcecutor.getThreadCount());
assertEquals(0, mockExcecutor.getExecutedThreads());
mockExcecutor.setOperationsPerSecond(15);
assertEquals(15, mockExcecutor.getThreadCount());
assertEquals(0, mockExcecutor.getExecutedThreads());
mockExcecutor.start();
Thread.sleep(100);//until all threads are executed
assertEquals(15, mockExcecutor.getExecutedThreads());
assertEquals(15, mockExcecutor.getThreadCount());
mockExcecutor.stop();
Thread.sleep(100);//until all threads are stopped
assertEquals(0, mockExcecutor.getThreadCount());
assertEquals(15, mockExcecutor.getDestroyedThreads());
}
public void testIncrementThreadsAfterStart() throws InterruptedException {
MockExecutor mockExcecutor = new MockExecutor(10);
assertEquals(0, mockExcecutor.getExecutedThreads());
assertEquals(0, mockExcecutor.getThreadCount());
mockExcecutor.prepare();
assertEquals(10, mockExcecutor.getThreadCount());
assertEquals(0, mockExcecutor.getExecutedThreads());
mockExcecutor.start();
Thread.sleep(100);//until all threads are executed
assertEquals(10, mockExcecutor.getExecutedThreads());
assertEquals(10, mockExcecutor.getThreadCount());
mockExcecutor.setOperationsPerSecond(16);
Thread.sleep(100);//until the new thrad has executed
assertEquals(16, mockExcecutor.getExecutedThreads());
assertEquals(16, mockExcecutor.getThreadCount());
mockExcecutor.stop();
Thread.sleep(100);//until all threads are stopped
assertEquals(0, mockExcecutor.getThreadCount());
assertEquals(16, mockExcecutor.getDestroyedThreads());
}
public void testDecrementThreadsBeforeStart() throws InterruptedException {
MockExecutor mockExcecutor = new MockExecutor(10);
assertEquals(0, mockExcecutor.getExecutedThreads());
assertEquals(0, mockExcecutor.getThreadCount());
mockExcecutor.prepare();
assertEquals(10, mockExcecutor.getThreadCount());
assertEquals(0, mockExcecutor.getExecutedThreads());
mockExcecutor.setOperationsPerSecond(2);
assertEquals(2, mockExcecutor.getThreadCount());
assertEquals(0, mockExcecutor.getExecutedThreads());
assertEquals(8, mockExcecutor.getDestroyedThreads());//the removed Thread is destroyed
mockExcecutor.start();
Thread.sleep(100);//until all threads are executed
assertEquals(2, mockExcecutor.getExecutedThreads());
assertEquals(2, mockExcecutor.getThreadCount());
mockExcecutor.stop();
Thread.sleep(100);//until all threads are stopped
assertEquals(0, mockExcecutor.getThreadCount());
assertEquals(10, mockExcecutor.getDestroyedThreads());
}
public void testDecrementThreadsAfterStart() throws InterruptedException {
MockExecutor mockExcecutor = new MockExecutor(10);
assertEquals(0, mockExcecutor.getExecutedThreads());
assertEquals(0, mockExcecutor.getThreadCount());
mockExcecutor.prepare();
assertEquals(10, mockExcecutor.getThreadCount());
assertEquals(0, mockExcecutor.getExecutedThreads());
mockExcecutor.start();
Thread.sleep(100);//until all threads are executed
assertEquals(10, mockExcecutor.getExecutedThreads());
assertEquals(10, mockExcecutor.getThreadCount());
mockExcecutor.setOperationsPerSecond(2);
assertEquals(10, mockExcecutor.getExecutedThreads());
assertEquals(2, mockExcecutor.getThreadCount());
assertEquals(8, mockExcecutor.getDestroyedThreads());
mockExcecutor.stop();
Thread.sleep(100);//until all threads are stopped
assertEquals(0, mockExcecutor.getThreadCount());
assertEquals(10, mockExcecutor.getDestroyedThreads());
}
}