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

Java tutorial

Introduction

Here is the source code for org.ngrinder.perftest.service.PerfTestServiceTest.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.StopReason;
import net.grinder.common.GrinderProperties;
import net.grinder.console.model.ConsoleProperties;
import org.junit.Before;
import org.junit.Test;
import org.ngrinder.common.model.Home;
import org.ngrinder.common.util.ThreadUtils;
import org.ngrinder.infra.config.Config;
import org.ngrinder.model.PerfTest;
import org.ngrinder.model.Status;
import org.ngrinder.monitor.controller.model.SystemDataModel;
import org.ngrinder.monitor.share.domain.SystemInfo;
import org.ngrinder.perftest.repository.PerfTestRepository;
import org.ngrinder.perftest.service.monitor.MonitorClientService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;

import java.io.File;
import java.io.IOException;
import java.util.*;

import static org.hamcrest.Matchers.*;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;

/**
 * {@link PerfTestService} test.
 *
 * @author Mavlarn
 * @since 3.0
 */
public class PerfTestServiceTest extends AbstractPerfTestTransactionalTest {

    @Autowired
    private PerfTestService testService;

    @Autowired
    PerfTestRepository perfTestRepository;

    @Before
    public void clearPerfTest() {
        clearAllPerfTest();
    }

    @Test
    public void testGetTestListAll() {
        createPerfTest("new Test1", Status.TESTING, new Date());
        createPerfTest("new Test2", Status.FINISHED, new Date());

        PerfTest candidate = testService.getNextRunnablePerfTestPerfTestCandidate();
        assertThat(candidate, nullValue());

        Pageable pageable = new PageRequest(0, 10);
        Page<PerfTest> testList = testService.getPagedAll(getTestUser(), null, null, null, pageable);
        assertThat(testList.getContent().size(), is(2));
        testList = testService.getPagedAll(getTestUser(), null, null, "F", pageable);
        assertThat(testList.getContent().size(), is(1));

        // test with no paging
        testList = testService.getPagedAll(getTestUser(), null, null, null, null);
        assertThat(testList.getContent().size(), is(2));
        testList = testService.getPagedAll(getTestUser(), null, null, "F", null);
        assertThat(testList.getContent().size(), is(1));

        List<PerfTest> list = testService.getAllTesting();
        assertThat(list.size(), is(1));

        for (PerfTest test : list) {
            long systemTimeMills = System.currentTimeMillis();
            test.setStartTime(new Date(systemTimeMills));

            PerfTest testTemp = testService.getOne(getTestUser(), test.getId());
            assertThat(testTemp.getId(), is(test.getId()));
            assertThat(testTemp.getStartTime().getTime(), is(systemTimeMills));

            testService.markAbnormalTermination(testTemp, StopReason.CANCEL_BY_USER);
            testService.markProgress(testTemp, "this test will be TESTING again");
            testService.markStatusAndProgress(testTemp, Status.TESTING, "this is just test unit");

            List<PerfTest> testingList = testService.getAll(getTestUser(), new Status[] { Status.TESTING });
            assertThat(testingList.size(), is(1));

            Long testCount = testService.count(getTestUser(), new Status[] { Status.TESTING });
            assertThat(testCount, is(1L));

            GrinderProperties properties = testService.getGrinderProperties(test);
            assertThat(properties, not(nullValue()));

        }

        createPerfTest("new Test2", Status.getProcessingOrTestingTestStatus()[0], new Date());
        list = testService.getCurrentlyRunningTest();
        assertThat(list.size(), is(2));

        PerfTest finishedTest = createPerfTest("new Test3", Status.ABNORMAL_TESTING, new Date());
        finishedTest.setPort(0); // need port number for finishing
        list = testService.getAllAbnormalTesting();
        assertThat(list.size(), is(1));

        testService.updatePerfTestAfterTestFinish(finishedTest);

        createPerfTest("new Test3", Status.START_AGENTS, new Date());

        List<PerfTest> errorList = testService.getAll(getTestUser(), new Status[] { Status.START_AGENTS });
        assertThat(errorList.size(), is(1));
        testService.markAbnormalTermination(errorList.get(0), "this is error test");
    }

    @Test
    public void testTestScriptAll() {
        int maxConcurrent = testService.getMaximumConcurrentTestCount();
        assertThat(maxConcurrent, is(10));

        PerfTest testScript = createPerfTest("new TestScript", Status.READY, new Date());
        testService.addCommentOn(getTestUser(), testScript.getId(), "this is TestScript method", "");

        PerfTest testing = testService.markProgressAndStatus(testScript, Status.TESTING,
                "It is testing from ready");
        assertThat(testing.getStatus(), is(Status.TESTING));

        File testPath = testService.getDistributionPath(testScript);
        assertThat(testPath, not(nullValue()));

        List<String> fileList = testService.getLogFiles(testScript.getId());
        assertThat(fileList, not(nullValue()));

        File scriptFile = testService.getLogFile(testScript.getId(), testScript.getScriptName());
        assertThat(scriptFile, not(nullValue()));

        ConsoleProperties consoleProperties = testService.createConsoleProperties(testScript);
        assertThat(consoleProperties, not(nullValue()));

    }

    @Test
    public void testGetReportDataWithExistingData() throws IOException {
        long testId = 123456L; // there is sample monitor data in test resources.

        // Given
        File testHomeDir = new ClassPathResource("world.py").getFile().getParentFile();
        Home mockHome = new Home(testHomeDir);
        LOG.debug("mock home dir is:{}", mockHome.getDirectory());
        Config mockConfig = spy(config);
        when(mockConfig.getHome()).thenReturn(mockHome);
        PerfTestService mockService = spy(testService);
        mockService.setConfig(mockConfig);

        // When
        // TPS,Errors,Mean_Test_Time_(ms)
        int interval = mockService.getReportDataInterval(testId, "TPS", 700);

        // Then
        assertThat(mockService.getSingleReportDataAsJson(testId, "TPS", interval).length(), greaterThan(100));
        assertThat(mockService.getSingleReportDataAsJson(testId, "Mean_Test_Time_(ms)", interval).length(),
                greaterThan(100));
    }

    @Test
    public void testGetMonitorDataWithExistingData() throws IOException {
        // Given
        long testId = 123456L; // there is sample monitor data in test resources.
        File testHomeDir = new ClassPathResource("world.py").getFile().getParentFile();
        Home mockHome = new Home(testHomeDir);
        LOG.debug("mock home dir is:{}", mockHome.getDirectory());
        Config mockConfig = spy(config);
        when(mockConfig.getHome()).thenReturn(mockHome);
        PerfTestService mockService = spy(testService);
        mockService.setConfig(mockConfig);

        // When
        int interval = mockService.getMonitorGraphInterval(testId, "127.0.0.1", 700);
        Map<String, String> reportDataMap = mockService.getMonitorGraph(testId, "127.0.0.1", interval);

        // Then
        assertThat(reportDataMap.get("cpu").length(), greaterThanOrEqualTo(300));
        assertThat(reportDataMap.get("memory").length(), greaterThanOrEqualTo(300));
        assertThat(reportDataMap.get("received").length(), greaterThanOrEqualTo(300));
        assertThat(reportDataMap.get("sent").length(), greaterThanOrEqualTo(300));
    }

    @Test
    public void testGetProperSizedStatusString() {
        File tempRepo = new File(System.getProperty("java.io.tmpdir"), "test-repo");
        tempRepo.mkdir();
        tempRepo.deleteOnExit();
        MonitorClientService client = new MonitorClientService("127.0.0.1", 13243);
        client.init();
        Map<String, SystemDataModel> rtnMap = new HashMap<String, SystemDataModel>();

        Random random = new Random();
        for (int i = 0; i < 80; i++) {
            client.update();
            SystemInfo info = client.getSystemInfo();
            if (info == null) {
                return;
            }
            info.setCustomValues(random.nextInt() + "," + random.nextInt());
            SystemDataModel data1 = new SystemDataModel(info, "3.1.2");
            rtnMap.put("test-" + random.nextInt(), data1);
            ThreadUtils.sleep(100);
        }
        String statusString = perfTestService.getProperSizedStatusString(rtnMap);
        System.out.println("Status string size is:" + statusString.length());
        assertTrue(statusString.length() < 9950);
    }

    @Test
    public void testCleanUpRuntimeOnlyData() {

        PerfTest test = createPerfTest("new test", Status.READY, new Date());
        test.setAgentState(
                "{\"NC-PL-DEV013\":{\"freeMemory\":2937684,\"totalMemory\":8301204,\"cpuUsedPercentage\":31.234259,\"receivedPerSec\":1874668,\"sentPerSec\":1881129}}");
        test.setMonitorState(
                "{\"127.0.0.1\":{\"freeMemory\":1091352,\"totalMemory\":4042436,\"cpuUsedPercentage\":0.24937657,\"receivedPerSec\":102718,\"sentPerSec\":135072}}");
        test.setRunningSample(
                "{\"process\":1,\"peakTpsForGraph\":2192.0,\"lastSampleStatistics\":[{\"Peak_TPS\":0.0,\"Tests\":2145.0,\"Mean_time_to_first_byte\":0.3142191142191142,\"testDescription\":\"Test1\",\"Response_bytes_per_second\":62205.0,\"Errors\":0.0,\"TPS\":2145.0,\"testNumber\":1,\"Mean_Test_Time_(ms)\":0.4205128205128205}],\"thread\":1,\"cumulativeStatistics\":[{\"Peak_TPS\":2192.0,\"Tests\":197185.0,\"Mean_time_to_first_byte\":0.3229910997286812,\"testDescription\":\"Test1\",\"Response_bytes_per_second\":57481.98148390145,\"Errors\":0.0,\"TPS\":1982.1372925483258,\"testNumber\":1,\"Mean_Test_Time_(ms)\":0.4425539468012273}],\"tpsChartData\":2145.0,\"success\":true,\"totalStatistics\":{\"Peak_TPS\":2192.0,\"Tests\":197185.0,\"Mean_time_to_first_byte\":0.3229910997286812,\"Response_bytes_per_second\":57481.98148390145,\"Errors\":0.0,\"TPS\":1982.1372925483258,\"Mean_Test_Time_(ms)\":0.4425539468012273},\"test_time\":105}");
        perfTestService.save(getTestUser(), test);

        PerfTest testInDB = perfTestService.getOne(test.getId());
        assertTrue(testInDB.getAgentState().length() > 0 && testInDB.getMonitorState().length() > 0);
        test.setAgentState(null);
        test.setMonitorState(null);
        test.setRunningSample(null);
        perfTestService.save(getTestUser(), test);
        testInDB = perfTestService.getOne(test.getId());
        assertTrue(testInDB.getAgentState() == null && testInDB.getMonitorState() == null);

    }
}