package com.blazemeter.jmeter; import org.apache.jmeter.control.LoopController; import org.apache.jmeter.threads.*; import org.apache.jorphan.collections.HashTree; import org.apache.jorphan.util.JMeterStopThreadException; import org.junit.Test; import java.io.File; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import static org.junit.Assert.*; public class DirectoryListingConfigTest { private static final String VARIABLE_NAME = "fname"; @Test public void testShareList() throws Exception { DirectoryListingConfig config = new DirectoryListingConfig(); File rootDir = TestDirectoryListingConfigActionTest.createFileTree(); setDirectoryConfig(config, rootDir.getAbsolutePath(), VARIABLE_NAME, true, false, true, false, false, false); config.testStarted(); testFlow(config); config.testEnded(); } @Test public void testNonShareList() throws Exception { DirectoryListingConfig config = new DirectoryListingConfig(); File rootDir = TestDirectoryListingConfigActionTest.createFileTree(); setDirectoryConfig(config, rootDir.getAbsolutePath(), VARIABLE_NAME, true, false, true, false, true, false); testFlow(config); } @Test public void testThreadStopping() throws Exception { DirectoryListingConfig config = new DirectoryListingConfig(); File rootDir = TestDirectoryListingConfigActionTest.createFileTree(); setDirectoryConfig(config, rootDir.getAbsolutePath(), VARIABLE_NAME, true, false, false, false, true, false); final HashTree hashTree = new HashTree(); hashTree.add(new LoopController()); JMeterThread thread = new JMeterThread(hashTree, null, null); JMeterContextService.getContext().setThread(thread); testFlow(config); try { config.iterationStart(null); } catch (JMeterStopThreadException ex) { assertEquals("All files in the directory have been passed.", ex.getMessage()); } } private void testFlow(DirectoryListingConfig config) { List<File> etalonList = config.createDirectoryListingIterator().getDirectoryListing(); if (config.getRandomOrder()) { DirectoryListingIterator.shuffleList(etalonList); } assertNotNull(etalonList); JMeterContext context = JMeterContextService.getContext(); JMeterVariables variables = context.getVariables(); if (variables == null) { context.setVariables(variables = new JMeterVariables()); } for (File etalonFile : etalonList) { config.iterationStart(null); assertEquals(etalonFile.getAbsolutePath(), variables.get(VARIABLE_NAME)); } } public static void setDirectoryConfig( DirectoryListingConfig config, String srcDir, String varName, boolean useFullPath, boolean isRandomOrder, boolean isRecursiveListing, boolean isRewindOnTheEnd, boolean isIndependentList, boolean isReReadScrDir ) { config.setSourceDirectory(srcDir); config.setDestinationVariableName(varName); config.setUseFullPath(useFullPath); config.setRandomOrder(isRandomOrder); config.setRecursiveListing(isRecursiveListing); config.setRewindOnTheEnd(isRewindOnTheEnd); config.setIndependentListPerThread(isIndependentList); config.setReReadDirectoryOnTheEndOfList(isReReadScrDir); } }