org.ngrinder.perftest.service.ConsoleManagerTest.java Source code

Java tutorial

Introduction

Here is the source code for org.ngrinder.perftest.service.ConsoleManagerTest.java

Source

/* 
 * 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();
            }
        }
    }
}