/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.hive.ptest.execution.conf;
import static org.junit.Assert.assertEquals;
import java.io.File;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicInteger;
import com.google.common.base.Joiner;
import com.google.common.collect.Sets;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class TestUnitTestPropertiesParser {
private static final Logger LOG = LoggerFactory
.getLogger(TestUnitTestPropertiesParser.class);
private static final String MODULE1_NAME = "module1";
private static final String MODULE1_TEST_NAME = "Module1";
private static final String MODULE2_NAME = "module2";
private static final String MODULE2_TEST_NAME = "Module2";
private static final String TOP_LEVEL_TEST_NAME = "tl";
private static final String TWO_LEVEL_MODULE1_NAME = "module2l.submodule1";
private static final String TWO_LEVEL_TEST_NAME = "TwoLevel";
private static final String THREE_LEVEL_MODULE1_NAME = "module3l.sub.submodule1";
private static final String THREE_LEVEL_TEST_NAME = "ThreeLevel";
private static final String MODULE3_REL_DIR = "TwoLevel/module-2.6";
private static final String MODULE3_MODULE_NAME = "TwoLevel.module-2.6";
private static final String MODULE3_TEST_NAME = "Module3";
private static final int BATCH_SIZE_DEFAULT = 10;
private static final String TEST_CASE_PROPERT_NAME = "test";
@Test(timeout = 5000)
public void testSimpleSetup() {
File baseDir = getFakeTestBaseDir();
Context context = getDefaultContext();
FileListProvider flProvider = getTestFileListProvider(baseDir, 5, 4);
UnitTestPropertiesParser parser =
new UnitTestPropertiesParser(context, new AtomicInteger(1), TEST_CASE_PROPERT_NAME, baseDir, LOG, flProvider,
null, true);
Collection<TestBatch> testBatchCollection = parser.generateTestBatches();
verifyBatches(testBatchCollection,
2,
new String[]{MODULE1_NAME, MODULE2_NAME},
new int[]{5, 4},
new boolean[]{true, true});
}
@Test(timeout = 5000)
public void testTopLevelExclude() {
File baseDir = getFakeTestBaseDir();
Context context = getDefaultContext();
context.put(getUtRootPropertyName(UnitTestPropertiesParser.PROP_EXCLUDE),
"Test" + MODULE1_TEST_NAME + "1");
FileListProvider flProvider = getTestFileListProvider(baseDir, 5, 4);
UnitTestPropertiesParser parser =
new UnitTestPropertiesParser(context, new AtomicInteger(1), TEST_CASE_PROPERT_NAME, baseDir, LOG, flProvider,
null, true);
Collection<TestBatch> testBatchCollection = parser.generateTestBatches();
verifyBatches(testBatchCollection,
2,
new String[]{MODULE1_NAME, MODULE2_NAME},
new int[]{4, 4},
new boolean[]{true, true});
}
@Test(timeout = 5000)
public void testTopLevelInclude() {
File baseDir = getFakeTestBaseDir();
Context context = getDefaultContext();
context.put(getUtRootPropertyName(UnitTestPropertiesParser.PROP_INCLUDE),
"Test" + MODULE1_TEST_NAME + "1" + " " + "Test" + MODULE1_TEST_NAME + "2");
FileListProvider flProvider = getTestFileListProvider(baseDir, 5, 4);
UnitTestPropertiesParser parser =
new UnitTestPropertiesParser(context, new AtomicInteger(1), TEST_CASE_PROPERT_NAME, baseDir, LOG, flProvider,
null, true);
Collection<TestBatch> testBatchCollection = parser.generateTestBatches();
verifyBatches(testBatchCollection,
1,
new String[]{MODULE1_NAME},
new int[]{2},
new boolean[]{true});
}
@Test(timeout = 5000)
public void testTopLevelSkipBatching() {
File baseDir = getFakeTestBaseDir();
Context context = getDefaultContext();
context.put(getUtRootPropertyName(UnitTestPropertiesParser.PROP_SKIP_BATCHING),
"Test" + MODULE1_TEST_NAME + "1" + " " + "Test" + MODULE1_TEST_NAME + "2");
FileListProvider flProvider = getTestFileListProvider(baseDir, 5, 4);
UnitTestPropertiesParser parser =
new UnitTestPropertiesParser(context, new AtomicInteger(1), TEST_CASE_PROPERT_NAME, baseDir, LOG, flProvider,
null, true);
Collection<TestBatch> testBatchCollection = parser.generateTestBatches();
verifyBatches(testBatchCollection,
4,
new String[]{MODULE1_NAME, MODULE1_NAME, MODULE1_NAME, MODULE2_NAME},
new int[]{1, 1, 3, 4},
new boolean[]{true, true, true, true});
}
@Test(timeout = 5000)
public void testTopLevelIsolate() {
File baseDir = getFakeTestBaseDir();
Context context = getDefaultContext();
context.put(getUtRootPropertyName(UnitTestPropertiesParser.PROP_ISOLATE),
"Test" + MODULE1_TEST_NAME + "1" + " " + "Test" + MODULE1_TEST_NAME + "2");
FileListProvider flProvider = getTestFileListProvider(baseDir, 5, 4);
UnitTestPropertiesParser parser =
new UnitTestPropertiesParser(context, new AtomicInteger(1), TEST_CASE_PROPERT_NAME, baseDir, LOG, flProvider,
null, true);
Collection<TestBatch> testBatchCollection = parser.generateTestBatches();
verifyBatches(testBatchCollection,
4,
new String[]{MODULE1_NAME, MODULE1_NAME, MODULE1_NAME, MODULE2_NAME},
new int[]{1, 1, 3, 4},
new boolean[]{false, false, true, true});
}
@Test(timeout = 5000)
public void testTopLevelBatchSize() {
File baseDir = getFakeTestBaseDir();
Context context = getDefaultContext();
context
.put(getUtRootPropertyName(UnitTestPropertiesParser.PROP_BATCH_SIZE), Integer.toString(2));
FileListProvider flProvider = getTestFileListProvider(baseDir, 5, 4);
UnitTestPropertiesParser parser =
new UnitTestPropertiesParser(context, new AtomicInteger(1), TEST_CASE_PROPERT_NAME, baseDir, LOG, flProvider,
null, true);
Collection<TestBatch> testBatchCollection = parser.generateTestBatches();
verifyBatches(testBatchCollection,
5,
new String[]{MODULE1_NAME, MODULE1_NAME, MODULE1_NAME, MODULE2_NAME, MODULE2_NAME},
new int[]{2, 2, 1, 2, 2},
new boolean[]{true, true, true, true, true});
}
@Test(timeout = 5000)
public void testModuleLevelExclude() {
File baseDir = getFakeTestBaseDir();
Context context = getDefaultContext();
context.put(getUtRootPropertyName(UnitTestPropertiesParser.PROP_ONE_MODULE, MODULE1_NAME),
MODULE1_NAME);
context.put(getUtSpecificPropertyName(MODULE1_NAME, UnitTestPropertiesParser.PROP_EXCLUDE),
"Test" + MODULE1_TEST_NAME + "1");
FileListProvider flProvider = getTestFileListProvider(baseDir, 5, 4);
UnitTestPropertiesParser parser =
new UnitTestPropertiesParser(context, new AtomicInteger(1), TEST_CASE_PROPERT_NAME, baseDir, LOG, flProvider,
null, true);
Collection<TestBatch> testBatchCollection = parser.generateTestBatches();
verifyBatches(testBatchCollection,
2,
new String[]{MODULE1_NAME, MODULE2_NAME},
new int[]{4, 4},
new boolean[]{true, true});
}
@Test(timeout = 5000)
public void testModuleLevelInclude() {
File baseDir = getFakeTestBaseDir();
Context context = getDefaultContext();
context.put(getUtRootPropertyName(UnitTestPropertiesParser.PROP_ONE_MODULE, MODULE1_NAME),
MODULE1_NAME);
context.put(getUtSpecificPropertyName(MODULE1_NAME, UnitTestPropertiesParser.PROP_INCLUDE),
"Test" + MODULE1_TEST_NAME + "1" + " " + "Test" + MODULE1_TEST_NAME + "2");
FileListProvider flProvider = getTestFileListProvider(baseDir, 5, 4);
UnitTestPropertiesParser parser =
new UnitTestPropertiesParser(context, new AtomicInteger(1), TEST_CASE_PROPERT_NAME, baseDir, LOG, flProvider,
null, true);
Collection<TestBatch> testBatchCollection = parser.generateTestBatches();
verifyBatches(testBatchCollection,
2,
new String[]{MODULE1_NAME, MODULE2_NAME},
new int[]{2, 4},
new boolean[]{true, true});
}
@Test(timeout = 5000)
public void testModuleLevelSkipBatching() {
File baseDir = getFakeTestBaseDir();
Context context = getDefaultContext();
context.put(getUtRootPropertyName(UnitTestPropertiesParser.PROP_ONE_MODULE, MODULE1_NAME),
MODULE1_NAME);
context
.put(getUtSpecificPropertyName(MODULE1_NAME, UnitTestPropertiesParser.PROP_SKIP_BATCHING),
"Test" + MODULE1_TEST_NAME + "1" + " " + "Test" + MODULE1_TEST_NAME + "2");
FileListProvider flProvider = getTestFileListProvider(baseDir, 5, 4);
UnitTestPropertiesParser parser =
new UnitTestPropertiesParser(context, new AtomicInteger(1), TEST_CASE_PROPERT_NAME, baseDir, LOG, flProvider,
null, true);
Collection<TestBatch> testBatchCollection = parser.generateTestBatches();
verifyBatches(testBatchCollection,
4,
new String[]{MODULE1_NAME, MODULE1_NAME, MODULE1_NAME, MODULE2_NAME},
new int[]{1, 1, 3, 4},
new boolean[]{true, true, true, true});
}
@Test(timeout = 5000)
public void testModuleLevelIsolate() {
File baseDir = getFakeTestBaseDir();
Context context = getDefaultContext();
context.put(getUtRootPropertyName(UnitTestPropertiesParser.PROP_ONE_MODULE, MODULE1_NAME),
MODULE1_NAME);
context.put(getUtSpecificPropertyName(MODULE1_NAME, UnitTestPropertiesParser.PROP_ISOLATE),
"Test" + MODULE1_TEST_NAME + "1" + " " + "Test" + MODULE1_TEST_NAME + "2");
FileListProvider flProvider = getTestFileListProvider(baseDir, 5, 4);
UnitTestPropertiesParser parser =
new UnitTestPropertiesParser(context, new AtomicInteger(1), TEST_CASE_PROPERT_NAME, baseDir, LOG, flProvider,
null, true);
Collection<TestBatch> testBatchCollection = parser.generateTestBatches();
verifyBatches(testBatchCollection,
4,
new String[]{MODULE1_NAME, MODULE1_NAME, MODULE1_NAME, MODULE2_NAME},
new int[]{1, 1, 3, 4},
new boolean[]{false, false, true, true});
}
@Test(timeout = 5000)
public void testModuleLevelBatchSize() {
File baseDir = getFakeTestBaseDir();
Context context = getDefaultContext();
context.put(getUtRootPropertyName(UnitTestPropertiesParser.PROP_ONE_MODULE, MODULE1_NAME),
MODULE1_NAME);
context.put(getUtSpecificPropertyName(MODULE1_NAME, UnitTestPropertiesParser.PROP_BATCH_SIZE),
Integer.toString(2));
FileListProvider flProvider = getTestFileListProvider(baseDir, 5, 4);
UnitTestPropertiesParser parser =
new UnitTestPropertiesParser(context, new AtomicInteger(1), TEST_CASE_PROPERT_NAME, baseDir, LOG, flProvider,
null, true);
Collection<TestBatch> testBatchCollection = parser.generateTestBatches();
verifyBatches(testBatchCollection,
4,
new String[]{MODULE1_NAME, MODULE1_NAME, MODULE1_NAME, MODULE2_NAME},
new int[]{2, 2, 1, 4},
new boolean[]{true, true, true, true});
}
@Test(timeout = 5000)
public void testProvidedExclude() {
File baseDir = getFakeTestBaseDir();
Context context = getDefaultContext();
FileListProvider flProvider = getTestFileListProvider(baseDir, 5, 4);
Set<String> excludedProvided = Sets.newHashSet("Test" + MODULE1_TEST_NAME + "1");
UnitTestPropertiesParser parser =
new UnitTestPropertiesParser(context, new AtomicInteger(1), TEST_CASE_PROPERT_NAME, baseDir, LOG, flProvider,
excludedProvided, true);
Collection<TestBatch> testBatchCollection = parser.generateTestBatches();
verifyBatches(testBatchCollection,
2,
new String[]{MODULE1_NAME, MODULE2_NAME},
new int[]{4, 4},
new boolean[]{true, true});
}
@Test(timeout = 5000)
public void testTopLevelBatchSizeIncludeAll() {
File baseDir = getFakeTestBaseDir();
Context context = getDefaultContext();
FileListProvider flProvider = getTestFileListProvider(baseDir, 120, 60);
context
.put(getUtRootPropertyName(UnitTestPropertiesParser.PROP_BATCH_SIZE), Integer.toString(0));
UnitTestPropertiesParser parser =
new UnitTestPropertiesParser(context, new AtomicInteger(1), TEST_CASE_PROPERT_NAME, baseDir, LOG, flProvider,
null, true);
Collection<TestBatch> testBatchCollection = parser.generateTestBatches();
verifyBatches(testBatchCollection,
2,
new String[]{MODULE1_NAME, MODULE2_NAME},
new int[]{120, 60},
new boolean[]{true, true});
}
@Test(timeout = 5000)
public void testModuleLevelBatchSizeIncludeAll() {
File baseDir = getFakeTestBaseDir();
Context context = getDefaultContext();
FileListProvider flProvider = getTestFileListProvider(baseDir, 50, 4);
context
.put(getUtRootPropertyName(UnitTestPropertiesParser.PROP_BATCH_SIZE), Integer.toString(2));
context.put(getUtRootPropertyName(UnitTestPropertiesParser.PROP_ONE_MODULE, MODULE1_NAME),
MODULE1_NAME);
context.put(getUtSpecificPropertyName(MODULE1_NAME, UnitTestPropertiesParser.PROP_BATCH_SIZE),
Integer.toString(0));
UnitTestPropertiesParser parser =
new UnitTestPropertiesParser(context, new AtomicInteger(1), TEST_CASE_PROPERT_NAME, baseDir, LOG, flProvider,
null, true);
Collection<TestBatch> testBatchCollection = parser.generateTestBatches();
verifyBatches(testBatchCollection,
3,
new String[]{MODULE1_NAME, MODULE2_NAME, MODULE2_NAME},
new int[]{50, 2, 2},
new boolean[]{true, true, true});
}
@Test(timeout = 5000)
public void testMultiLevelModules() {
File baseDir = getFakeTestBaseDir();
Context context = getDefaultContext();
FileListProvider flProvider = getTestFileListProviderMultiLevel(baseDir, 4, 30, 6, 9);
context
.put(getUtRootPropertyName(UnitTestPropertiesParser.PROP_BATCH_SIZE), Integer.toString(4));
context.put(getUtRootPropertyName(UnitTestPropertiesParser.PROP_ONE_MODULE, MODULE1_NAME),
MODULE1_NAME);
context.put(getUtSpecificPropertyName(MODULE1_NAME, UnitTestPropertiesParser.PROP_BATCH_SIZE),
Integer.toString(0));
context.put(
getUtRootPropertyName(UnitTestPropertiesParser.PROP_ONE_MODULE, THREE_LEVEL_MODULE1_NAME),
THREE_LEVEL_MODULE1_NAME);
context.put(getUtSpecificPropertyName(THREE_LEVEL_MODULE1_NAME,
UnitTestPropertiesParser.PROP_BATCH_SIZE),
Integer.toString(0));
UnitTestPropertiesParser parser =
new UnitTestPropertiesParser(context, new AtomicInteger(1), TEST_CASE_PROPERT_NAME, baseDir, LOG, flProvider,
null, true);
Collection<TestBatch> testBatchCollection = parser.generateTestBatches();
verifyBatches(testBatchCollection,
5,
new String[]{UnitTestPropertiesParser.PREFIX_TOP_LEVEL, MODULE1_NAME,
TWO_LEVEL_MODULE1_NAME, TWO_LEVEL_MODULE1_NAME, THREE_LEVEL_MODULE1_NAME},
new int[]{4, 30, 4, 2, 9},
new boolean[]{true, true, true, true, true});
}
@Test(timeout = 5000)
public void testTopLevelModuleConfig() {
File baseDir = getFakeTestBaseDir();
Context context = getDefaultContext();
FileListProvider flProvider = getTestFileListProviderMultiLevel(baseDir, 9, 0, 0, 0);
context
.put(getUtRootPropertyName(UnitTestPropertiesParser.PROP_BATCH_SIZE), Integer.toString(4));
context.put(getUtRootPropertyName(UnitTestPropertiesParser.PROP_ONE_MODULE,
UnitTestPropertiesParser.MODULE_NAME_TOP_LEVEL),
UnitTestPropertiesParser.MODULE_NAME_TOP_LEVEL);
context.put(getUtSpecificPropertyName(UnitTestPropertiesParser.MODULE_NAME_TOP_LEVEL,
UnitTestPropertiesParser.PROP_BATCH_SIZE),
Integer.toString(0));
UnitTestPropertiesParser parser =
new UnitTestPropertiesParser(context, new AtomicInteger(1), TEST_CASE_PROPERT_NAME, baseDir, LOG, flProvider,
null, true);
Collection<TestBatch> testBatchCollection = parser.generateTestBatches();
verifyBatches(testBatchCollection,
1,
new String[]{UnitTestPropertiesParser.PREFIX_TOP_LEVEL},
new int[]{9},
new boolean[]{true});
}
@Test(timeout = 5000)
public void testScanMultipleDirectoriesNested() {
File baseDir = getFakeTestBaseDir();
Context context = getDefaultContext();
FileListProvider flProvider = getTestFileListProviderMultiLevel(baseDir, 13, 5, 0, 0);
context.put(getUtRootPropertyName(UnitTestPropertiesParser.PROP_DIRECTORIES),
"./ ./" + MODULE1_NAME);
UnitTestPropertiesParser parser =
new UnitTestPropertiesParser(context, new AtomicInteger(1), TEST_CASE_PROPERT_NAME, baseDir, LOG, flProvider,
null, true);
Collection<TestBatch> testBatchCollection = parser.generateTestBatches();
verifyBatches(testBatchCollection,
3,
new String[]{UnitTestPropertiesParser.PREFIX_TOP_LEVEL,
UnitTestPropertiesParser.PREFIX_TOP_LEVEL, MODULE1_NAME},
new int[]{10, 3, 5},
new boolean[]{true, true, true});
}
@Test(timeout = 5000)
public void testScanMultipleDirectoriesNonNested() {
File baseDir = getFakeTestBaseDir();
Context context = getDefaultContext();
FileListProvider flProvider = getTestFileListProvider(baseDir, 13, 8);
context.put(getUtRootPropertyName(UnitTestPropertiesParser.PROP_DIRECTORIES),
"./" + MODULE1_NAME + " " + "./" + MODULE2_NAME);
UnitTestPropertiesParser parser =
new UnitTestPropertiesParser(context, new AtomicInteger(1), TEST_CASE_PROPERT_NAME, baseDir, LOG, flProvider,
null, true);
Collection<TestBatch> testBatchCollection = parser.generateTestBatches();
verifyBatches(testBatchCollection,
3,
new String[]{MODULE1_NAME, MODULE1_NAME, MODULE2_NAME},
new int[]{10, 3, 8},
new boolean[]{true, true, true});
}
@Test(timeout = 5000)
public void testModuleInclude() {
File baseDir = getFakeTestBaseDir();
Context context = getDefaultContext();
FileListProvider flProvider = getTestFileListProvider(baseDir, 13, 8);
context.put(getUtRootPropertyName(UnitTestPropertiesParser.PROP_MODULE_LIST,
UnitTestPropertiesParser.PROP_INCLUDE), MODULE1_NAME);
UnitTestPropertiesParser parser =
new UnitTestPropertiesParser(context, new AtomicInteger(1), TEST_CASE_PROPERT_NAME, baseDir, LOG, flProvider,
null, true);
Collection<TestBatch> testBatchCollection = parser.generateTestBatches();
verifyBatches(testBatchCollection,
2,
new String[]{MODULE1_NAME, MODULE1_NAME},
new int[]{10, 3},
new boolean[]{true, true});
}
@Test(timeout = 5000)
public void testModuleExclude() {
File baseDir = getFakeTestBaseDir();
Context context = getDefaultContext();
FileListProvider flProvider = getTestFileListProvider(baseDir, 13, 8);
context.put(getUtRootPropertyName(UnitTestPropertiesParser.PROP_MODULE_LIST,
UnitTestPropertiesParser.PROP_EXCLUDE), MODULE1_NAME);
UnitTestPropertiesParser parser =
new UnitTestPropertiesParser(context, new AtomicInteger(1), TEST_CASE_PROPERT_NAME, baseDir, LOG, flProvider,
null, true);
Collection<TestBatch> testBatchCollection = parser.generateTestBatches();
verifyBatches(testBatchCollection,
1,
new String[]{MODULE2_NAME},
new int[]{8},
new boolean[]{true});
}
@Test(timeout = 5000)
public void testModuleWithPeriodInDirName() {
File baseDir = getFakeTestBaseDir();
Context context = getDefaultContext();
FileListProvider flProvider =
getTestFileListProviderSingleModule(baseDir, MODULE3_REL_DIR, MODULE3_TEST_NAME, 13);
context
.put(getUtRootPropertyName(UnitTestPropertiesParser.PROP_ONE_MODULE, MODULE3_MODULE_NAME),
MODULE3_MODULE_NAME);
context.put(
getUtSpecificPropertyName(MODULE3_MODULE_NAME, UnitTestPropertiesParser.PROP_BATCH_SIZE),
Integer.toString(5));
UnitTestPropertiesParser parser =
new UnitTestPropertiesParser(context, new AtomicInteger(1), TEST_CASE_PROPERT_NAME, baseDir, LOG, flProvider,
null, true);
Collection<TestBatch> testBatchCollection = parser.generateTestBatches();
verifyBatches(testBatchCollection,
3,
new String[]{MODULE3_MODULE_NAME, MODULE3_MODULE_NAME, MODULE3_MODULE_NAME},
new int[]{5, 5, 3},
new boolean[]{true, true, true});
}
private void verifyBatches(Collection<TestBatch> testBatchCollection, int numBatches,
String[] moduleNames, int[] testsPerBatch, boolean[] isParallel) {
List<TestBatch> testBatches = new LinkedList<>(testBatchCollection);
assertEquals(String.format("Expected batches=[%d], found=[%d]", numBatches, testBatches.size()),
numBatches, testBatches.size());
assert moduleNames.length == numBatches;
assert testsPerBatch.length == numBatches;
assert isParallel.length == numBatches;
for (int i = 0; i < numBatches; i++) {
TestBatch testBatch = testBatches.get(i);
if (!moduleNames[i].equals(UnitTestPropertiesParser.PREFIX_TOP_LEVEL)) {
moduleNames[i] = moduleNames[i].replace(".", "/");
}
assertEquals(String.format("Expected batchName=[%s], found=[%s] on index=%d", moduleNames[i],
testBatch.getTestModuleRelativeDir(), i), moduleNames[i],
testBatch.getTestModuleRelativeDir());
assertEquals(String.format("Expected size=[%d], found=[%d] on index=%d", testsPerBatch[i],
testBatch.getNumTestsInBatch(), i), testsPerBatch[i], testBatch.getNumTestsInBatch());
assertEquals(String.format("Expected isParallel=[%s], found=[%s] on index=%d", isParallel[i],
testBatch.isParallel(), i), isParallel[i], testBatch.isParallel());
}
}
private static File getFakeTestBaseDir() {
File javaTmpDir = new File(System.getProperty("java.io.tmpdir"));
File baseDir = new File(javaTmpDir, UUID.randomUUID().toString());
return baseDir;
}
/**
* Returns 2 modules. Counts can be specified.
*
* @param module1Count
* @param module2Count
* @return
*/
private static FileListProvider getTestFileListProvider(final File baseDir,
final int module1Count,
final int module2Count) {
return new FileListProvider() {
@Override
public Collection<File> listFiles(File directory, String[] extensions, boolean recursive) {
List<File> list = new LinkedList<>();
File m1F = new File(baseDir, Joiner.on("/").join(MODULE1_NAME, "target", "test", "p1"));
for (int i = 0; i < module1Count; i++) {
list.add(new File(m1F, "Test" + MODULE1_TEST_NAME + (i + 1) + ".class"));
}
File m2F = new File(baseDir, Joiner.on("/").join(MODULE2_NAME, "target", "test"));
for (int i = 0; i < module2Count; i++) {
list.add(new File(m2F, "Test" + MODULE2_TEST_NAME + (i + 1) + ".class"));
}
return list;
}
};
}
private static FileListProvider getTestFileListProviderMultiLevel(final File baseDir,
final int l0Count,
final int l1Count,
final int l2Count,
final int l3Count) {
return new FileListProvider() {
@Override
public Collection<File> listFiles(File directory, String[] extensions, boolean recursive) {
List<File> list = new LinkedList<>();
File l0F = new File(baseDir, Joiner.on("/").join("target", "test", "p1", "p2"));
for (int i = 0; i < l0Count; i++) {
list.add(new File(l0F, "Test" + TOP_LEVEL_TEST_NAME + (i + 1) + ".class"));
}
File l1F = new File(baseDir, Joiner.on("/").join(MODULE1_NAME, "target", "test"));
for (int i = 0; i < l1Count; i++) {
list.add(new File(l1F, "Test" + MODULE1_TEST_NAME + (i + 1) + ".class"));
}
File l2F = new File(baseDir, Joiner.on("/").join(TWO_LEVEL_MODULE1_NAME, "target", "test"));
for (int i = 0; i < l2Count; i++) {
list.add(new File(l2F, "Test" + TWO_LEVEL_TEST_NAME + (i + 1) + ".class"));
}
File l3F =
new File(baseDir, Joiner.on("/").join(THREE_LEVEL_MODULE1_NAME, "target", "test"));
for (int i = 0; i < l3Count; i++) {
list.add(new File(l3F, "Test" + THREE_LEVEL_TEST_NAME + (i + 1) + ".class"));
}
return list;
}
};
}
private static FileListProvider getTestFileListProviderSingleModule(final File baseDir,
final String moduleRelDir,
final String testName,
final int numTests) {
return new FileListProvider() {
@Override
public Collection<File> listFiles(File directory, String[] extensions, boolean recursive) {
List<File> list = new LinkedList<>();
File f = new File(baseDir, Joiner.on("/").join(moduleRelDir, "target", "package", "test"));
for (int i = 0; i < numTests; i++) {
list.add(new File(f, "Test" + testName + (i + 1) + ".class"));
}
return list;
}
};
}
private static Context getDefaultContext() {
Context context = new Context();
context.put(getUtRootPropertyName(UnitTestPropertiesParser.PROP_DIRECTORIES), "./");
context.put(getUtRootPropertyName(UnitTestPropertiesParser.PROP_SUBDIR_FOR_PREFIX), "target");
context.put(getUtRootPropertyName(UnitTestPropertiesParser.PROP_BATCH_SIZE),
Integer.toString(BATCH_SIZE_DEFAULT));
return context;
}
private static String getUtRootPropertyName(String p1, String... rest) {
return Joiner.on(".").join(UnitTestPropertiesParser.PROP_PREFIX_ROOT, p1, rest);
}
private static String getUtSpecificPropertyName(String p1, String... rest) {
return Joiner.on(".").join(UnitTestPropertiesParser.PROP_PREFIX_MODULE, p1, rest);
}
}