/* * 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.ngrinder.perftest.service; import net.grinder.SingleConsole; import net.grinder.util.ConsolePropertiesFactory; import net.grinder.util.NetworkUtils; import org.junit.Test; import org.ngrinder.common.exception.NGrinderRuntimeException; import org.ngrinder.common.util.ThreadUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.StopWatch; import java.io.IOException; import java.net.ServerSocket; import java.util.List; import static org.hamcrest.Matchers.*; import static org.junit.Assert.assertThat; import static org.junit.Assert.fail; public class ConsoleManagerTest extends AbstractAgentReadyTest { @Autowired private MockConsoleManager manager; @Test public void testConsoleManager() { int initialSize = manager.getAvailableConsoleSize(); SingleConsole availableConsole = manager.getAvailableConsole( ConsolePropertiesFactory.createEmptyConsoleProperties()); assertThat(manager.getAvailableConsoleSize(), is(initialSize - 1)); manager.returnBackConsole("test", availableConsole); sleep(1000); assertThat(manager.getAvailableConsoleSize(), is(initialSize)); } @Test public void testConsoleManagerWhenExceedingLimit() { // Get all console int initialSize = manager.getAvailableConsoleSize(); SingleConsole availableConsole = null; for (int i = 1; i <= initialSize; i++) { availableConsole = manager.getAvailableConsole( ConsolePropertiesFactory.createEmptyConsoleProperties()); } final SingleConsole lastConsole = availableConsole; assertThat(manager.getAvailableConsoleSize(), is(0)); StopWatch elapseTime = new StopWatch(); elapseTime.start(); // Try to get more console, it will take time try { manager.getAvailableConsole(ConsolePropertiesFactory.createEmptyConsoleProperties()); fail("should throw Exception"); } catch (NGrinderRuntimeException e) { } elapseTime.stop(); assertThat(elapseTime.getTotalTimeSeconds(), lessThan(3000D)); // Let's try the case when console is returned back. Thread thread = new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(1000); manager.returnBackConsole("test", lastConsole); } catch (InterruptedException e) { } } }); elapseTime = new StopWatch(); elapseTime.start(); thread.start(); // Try to get more console, it will return console just after console is // returned back SingleConsole anotherConsole = manager.getAvailableConsole( ConsolePropertiesFactory.createEmptyConsoleProperties()); elapseTime.stop(); assertThat(elapseTime.getTotalTimeSeconds(), lessThan(3000D)); assertThat(manager.getAvailableConsoleSize(), is(0)); manager.returnBackConsole("test", anotherConsole); // return console again is always allowed manager.returnBackConsole("test", anotherConsole); ThreadUtils.sleep(2000); assertThat(manager.getAvailableConsoleSize(), is(1)); assertThat(manager.getConsoleInUse().size(), is(initialSize - 1)); } @Test public void testAvailableSocket() throws IOException { ServerSocket serverSocket = null; try { // When port is already used serverSocket = new ServerSocket(20111); int localPort = serverSocket.getLocalPort(); // It should be excluded in available ports List<Integer> availablePorts = NetworkUtils.getAvailablePorts("", 20, 20111, 40000); assertThat(availablePorts.contains(localPort), not(true)); assertThat(availablePorts.size(), is(20)); } finally { if (serverSocket != null) { serverSocket.close(); } } } }