Package org.ngrinder.perftest.service

Source Code of org.ngrinder.perftest.service.PerfTestCancellationTest

/*
* 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.console.model.SampleModelImplementationEx;
import org.apache.commons.io.IOUtils;
import org.junit.Before;
import org.junit.Test;
import org.ngrinder.common.constant.ControllerConstants;
import org.ngrinder.common.util.CompressionUtils;
import org.ngrinder.model.PerfTest;
import org.ngrinder.model.Status;
import org.ngrinder.perftest.controller.PerfTestController;
import org.ngrinder.script.model.FileEntry;
import org.ngrinder.script.repository.MockFileEntityRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;

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

import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.notNullValue;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;

public class PerfTestCancellationTest extends AbstractAgentReadyTest implements ControllerConstants {

  @Autowired
  private MockPerfTestRunnableForCancellation perfTestRunnable;

  @Autowired
  public MockFileEntityRepository fileEntityRepository;

  @Autowired
  public ConsoleManager consoleManager;

  @Autowired
  public PerfTestController perfTestController;

  private PerfTest perfTest = null;

  @Before
  public void before() throws IOException {
    File tempRepo = new File(System.getProperty("java.io.tmpdir"), "repo");
    fileEntityRepository.setUserRepository(new File(tempRepo, getTestUser().getUserId()));
    File testUserRoot = fileEntityRepository.getUserRepoDirectory(getTestUser()).getParentFile();

    testUserRoot.mkdirs();
    CompressionUtils.unzip(new ClassPathResource("TEST_USER.zip").getFile(), testUserRoot);
    testUserRoot.deleteOnExit();

    FileEntry fileEntry = new FileEntry();
    fileEntry.setPath("test1.py");
    String worldString = IOUtils.toString(new ClassPathResource("world.py").getInputStream());
    if (fileEntry.getFileType().isEditable()) {
      fileEntry.setContent(worldString);
    } else {
      fileEntry.setContentBytes(worldString.getBytes());
    }
    fileEntityRepository.save(getTestUser(), fileEntry, "UTF-8");

    clearAllPerfTest();
    perfTest = createPerfTest("test1", Status.READY, null);
    List<PerfTest> allPerfTest = perfTestService.getAllPerfTest();
    assertThat(allPerfTest.size(), is(1));
    assertThat(consoleManager.getConsoleInUse().size(), is(0));

  }

  @Test
  public void testTestCancellationDuringPreparation() throws IOException {
    doCancel(1);
  }

  @Test
  public void testTestCancellationDuringPreparation2() throws IOException {
    doCancel(2);
  }

  private void doCancel(int substep) {
    // When the stop perftest is requested
    perfTestRunnable.setRunnable(new Runnable() {
      @Override
      public void run() {
        SingleConsole singleConsole = consoleManager.getConsoleInUse().get(0);
        SampleModelImplementationEx sampleModelMock = mock(SampleModelImplementationEx.class);
        singleConsole.setSampleModel(sampleModelMock);
        assertThat(singleConsole, notNullValue());
        perfTestController.stop(getTestUser(), String.valueOf(perfTest.getId()));
      }
    }, substep);
    perfTestRunnable.doStart();
    List<PerfTest> allPerfTest = perfTestService.getAllPerfTest();
    perfTestRunnable.doFinish(false);
    // Then
    assertThat(allPerfTest.get(0).getStatus(), is(Status.CANCELED));
    assertThat(consoleManager.getConsoleInUse().size(), is(0));
  }

  @Test
  public void testTestCancellationDuringExecutionPhase() throws IOException {
    // Given the testing perftest
    perfTest = createPerfTest("test1", Status.TESTING, null);
    // When the stop is requested
    perfTestController.stop(getTestUser(), String.valueOf(perfTest.getId()));
    perfTestRunnable.doFinish();
    // Then it should be canceled.
    assertThat(perfTestService.getOne(perfTest.getId()).getStatus(), is(Status.CANCELED));
    assertThat(consoleManager.getConsoleInUse().size(), is(0));

  }

}
TOP

Related Classes of org.ngrinder.perftest.service.PerfTestCancellationTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.