/* * 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.controller; import org.apache.commons.io.FileUtils; import org.junit.Before; import org.junit.Test; import org.ngrinder.common.constant.WebConstants; import org.ngrinder.common.exception.NGrinderRuntimeException; import org.ngrinder.common.util.CompressionUtils; import org.ngrinder.infra.config.Config; import org.ngrinder.model.PerfTest; import org.ngrinder.model.Role; import org.ngrinder.model.Status; import org.ngrinder.model.User; import org.ngrinder.perftest.service.AbstractPerfTestTransactionalTest; import org.ngrinder.script.repository.MockFileEntityRepository; import org.ngrinder.service.IUserService; 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 org.springframework.data.domain.Sort; import org.springframework.http.HttpEntity; import org.springframework.mock.web.MockHttpServletResponse; import org.springframework.ui.ModelMap; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.util.Date; import java.util.List; import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; /** * PerfTest Controller Test. * * @author mavlarn * @since 3.0 */ public class PerfTestControllerTest extends AbstractPerfTestTransactionalTest implements WebConstants { @Autowired private MockPerfTestController controller; @Autowired private Config config; @Autowired private IUserService userService; @Autowired public MockFileEntityRepository repo; @Before public void beforeCleanUp() throws IOException { clearAllPerfTest(); } @Test public void testGetPerfTestDetail() { ModelMap model = new ModelMap(); controller.getOne(getTestUser(), null, model); assertThat(model.get(PARAM_TEST), notNullValue()); model.clear(); controller.getOne(getTestUser(), 0L, model); assertThat(model.get(PARAM_TEST), notNullValue()); model.clear(); long invalidId = 123123123123L; controller.getOne(getTestUser(), invalidId, model); assertThat(model.get(PARAM_TEST), notNullValue()); PerfTest createPerfTest = createPerfTest("hello", Status.READY, new Date()); model.clear(); controller.getOne(getTestUser(), createPerfTest.getId(), model); assertThat(model.get(PARAM_TEST), notNullValue()); } @Test public void testGetResourcesOnScriptFolder() throws IOException { File file = new File(System.getProperty("java.io.tmpdir"), "repo"); FileUtils.deleteQuietly(file); CompressionUtils.unzip(new ClassPathResource("TEST_USER.zip").getFile(), file); repo.setUserRepository(new File(file, getTestUser().getUserId())); controller.getResources(getTestUser(), "filefilter.txt", null); } @Test public void testDeleteTests() { String testName = "test1"; PerfTest test = createPerfTest(testName, Status.READY, new Date()); ModelMap model = new ModelMap(); controller.delete(getTestUser(), String.valueOf(test.getId())); model.clear(); PerfTest test1 = createPerfTest(testName, Status.READY, new Date()); PerfTest test2 = createPerfTest(testName, Status.READY, new Date()); String delIds = "" + test1.getId() + "," + test2.getId(); controller.delete(getTestUser(), delIds); model.clear(); controller.getOne(getTestUser(), test1.getId(), model); assertThat(((PerfTest) model.get(PARAM_TEST)).getId(), nullValue()); model.clear(); controller.getOne(getTestUser(), test2.getId(), model); assertThat(((PerfTest) model.get(PARAM_TEST)).getId(), nullValue()); } @Test public void testSavePerfTestCloneAndLeaveCommentAndStop() { String testName = "test1"; PerfTest test = createPerfTest(testName, Status.READY, null); long preId = test.getId(); PerfTest cloneTest = newPerfTest(testName, Status.READY, null); cloneTest.setId(test.getId()); // set cloned test's ID as previous test ModelMap model = new ModelMap(); controller.saveOne(getTestUser(), cloneTest, true, model); assertThat(preId, not(cloneTest.getId())); // test leave comment controller.leaveComment(getTestUser(), cloneTest.getId(), "TestComment", ""); model.clear(); controller.getOne(getTestUser(), cloneTest.getId(), model); PerfTest testInDB = (PerfTest) model.get(PARAM_TEST); assertThat(testInDB.getTestComment(), is("TestComment")); // test stop test cloneTest.setStatus(Status.TESTING); perfTestService.save(getTestUser(), cloneTest); controller.stop(getTestUser(), String.valueOf(cloneTest.getId())); } /** * for "saved" or "ready" test, can be modified, but for running or finished test, can not * modify */ @Test public void testSavePerfTestExist() { String testName = "test1"; String newName = "new test1"; PerfTest test = createPerfTest(testName, Status.READY, new Date()); test.setTestName(newName); PerfTest newTest = new PerfTest(); newTest.setId(test.getId()); newTest.setTestName(newName); newTest.setStatus(Status.SAVED); newTest.setThreshold(test.getThreshold()); newTest.setDuration(test.getDuration()); newTest.setVuserPerAgent(test.getVuserPerAgent()); newTest.setScheduledTime(test.getScheduledTime()); newTest.setIgnoreSampleCount(test.getIgnoreSampleCount()); newTest.setTargetHosts(test.getTargetHosts()); newTest.setScriptName(test.getScriptName()); newTest.setProcesses(2); newTest.setThreads(2); newTest.setVuserPerAgent(newTest.getProcesses() * newTest.getThreads()); newTest.setRegion(config.getRegion()); newTest.setAgentCount(1); ModelMap model = new ModelMap(); controller.saveOne(getTestUser(), newTest, false, model); controller.getOne(getTestUser(), newTest.getId(), model); PerfTest testInDB = (PerfTest) model.get(PARAM_TEST); assertThat(testInDB.getTestName(), is(newName)); assertThat(testInDB.getId(), is(test.getId())); model.clear(); newTest.setStatus(Status.READY); controller.saveOne(getTestUser(), newTest, false, model); controller.getOne(getTestUser(), newTest.getId(), model); testInDB = (PerfTest) model.get(PARAM_TEST); assertThat(testInDB.getTestName(), is(newName)); assertThat(testInDB.getId(), is(test.getId())); // test status id "START_TESTING", can not be saved. newTest.setStatus(Status.START_TESTING); try { newTest.setStatus(Status.START_TESTING); controller.saveOne(getTestUser(), newTest, false, model); fail("test status id START_TESTING, can not be saved"); } catch (IllegalArgumentException e) { } } @SuppressWarnings("unchecked") @Test public void testGetTestList() { createPerfTest("new test1", Status.READY, new Date()); ModelMap model = new ModelMap(); controller.getAll(getTestUser(), null, null, null, new PageRequest(0, 10), model); Page<PerfTest> testPage = (Page<PerfTest>) model.get("testListPage"); List<PerfTest> testList = testPage.getContent(); assertThat(testList.size(), is(1)); } @Test public void testGetTestListByAdmin() { String testName = "new test1"; createPerfTest(testName, Status.READY, new Date()); ModelMap model = new ModelMap(); User testAdmin = new User(); testAdmin.setUserId("testAdmin"); testAdmin.setPassword("testAdmin"); testAdmin.setRole(Role.ADMIN); testAdmin.setTimeZone("Asia/Seoul"); testAdmin = userService.save(testAdmin); controller.getAll(testAdmin, null, null, null, new PageRequest(0, 10), model); @SuppressWarnings("unchecked") Page<PerfTest> testPage = (Page<PerfTest>) model.get("testListPage"); List<PerfTest> testList = testPage.getContent(); boolean success = false; for (PerfTest perfTest : testList) { if (perfTest.getTestName().equals(testName)) { success = true; } } assertTrue(success); } @Test public void testGetTestListByOtherUser() { String testName = "new test1"; PerfTest test = createPerfTest(testName, Status.READY, new Date()); ModelMap model = new ModelMap(); User otherTestUser = new User(); otherTestUser.setUserId("testUser"); otherTestUser.setPassword("testUser"); otherTestUser.setRole(Role.USER); otherTestUser = userService.save(otherTestUser); otherTestUser.setTimeZone("Asia/Seoul"); controller.getAll(otherTestUser, null, null, null, new PageRequest(0, 10), model); @SuppressWarnings("unchecked") Page<PerfTest> testPage = (Page<PerfTest>) model.get("testListPage"); List<PerfTest> testList = testPage.getContent(); assertThat(testList.size(), is(0)); // test no permission for other user model.clear(); try { controller.getOne(otherTestUser, test.getId(), model); assertTrue(false); } catch (NGrinderRuntimeException e) { assertTrue(true); } } @SuppressWarnings("unchecked") @Test public void testGetTestListByKeyWord() { String strangeName = "DJJHG^%R&*^%^565(^%&^%(^%(^"; createPerfTest(strangeName, Status.READY, new Date()); ModelMap model = new ModelMap(); Sort sort = new Sort("testName"); Pageable pageable = new PageRequest(0, 10, sort); controller.getAll(getTestUser(), strangeName, null, null, pageable, model); Page<PerfTest> testPage = (Page<PerfTest>) model.get("testListPage"); List<PerfTest> testList = testPage.getContent(); assertThat(testList.size(), is(1)); controller.getAll(getTestUser(), strangeName.substring(2, 10), null, null, new PageRequest(0, 10), model); testPage = (Page<PerfTest>) model.get("testListPage"); testList = testPage.getContent(); assertThat(testList.size(), is(1)); } @Test public void testGetReportData() { String testName = "test1"; PerfTest test = createPerfTest(testName, Status.FINISHED, new Date()); ModelMap model = new ModelMap(); controller.getReport(model, test.getId()); model.clear(); controller.getPerfGraph(test.getId(), "TPS,mean_time(ms)", true, 0); model.clear(); controller.getReportSection(getTestUser(), model, test.getId(), 700); } @Test public void testGetMonitorData() { String testName = "test1"; PerfTest test = createPerfTest(testName, Status.FINISHED, new Date()); controller.getMonitorGraph(test.getId(), "127.0.0.1", 0); long testId = 123456L; controller.getMonitorGraph(testId, "127.0.0.1", 700); } @Test public void testDownloadReportData() { String testName = "test1"; PerfTest test = createPerfTest(testName, Status.FINISHED, new Date()); HttpServletResponse resp = new MockHttpServletResponse(); try { controller.downloadCSV(getTestUser(), test.getId(), resp); } catch (IllegalStateException e) { // the report file doesn't exist assertTrue(true); } resp.reset(); controller.downloadLog(getTestUser(), test.getId(), "log", resp); } @Test public void testRefreshTestRunning() { String testName = "test1"; // it is not a running test, can not test get statistic data. PerfTest test = createPerfTest(testName, Status.TESTING, new Date()); test.setPort(11011); try { controller.refreshTestRunning(getTestUser(), test.getId()); } catch (NullPointerException e) { assertTrue(true); } } @Test public void testUpdateStatus() { String testName = "test1"; PerfTest test = createPerfTest(testName, Status.TESTING, new Date()); String testName2 = "test1"; PerfTest test2 = createPerfTest(testName2, Status.START_AGENTS, new Date()); String ids = test.getId() + "," + test2.getId(); HttpEntity<String> rtnJson = controller.getStatuses(getTestUser(), ids); assertThat(rtnJson.getBody(), notNullValue()); } @Test public void testSearchTag() { HttpEntity<String> rtn = controller.searchTag(getAdminUser(), ""); assertThat(rtn.getBody(), notNullValue()); rtn = controller.searchTag(getAdminUser(), "test"); assertThat(rtn.getBody(), notNullValue()); } }