ns-usbloader/src/test/java/nsusbloader/com/usb/MergeTest.java
2021-08-09 22:47:52 +03:00

87 lines
2.8 KiB
Java

package nsusbloader.com.usb;
import nsusbloader.NSLMain;
import nsusbloader.Utilities.splitmerge.SplitMergeTaskExecutor;
import org.junit.jupiter.api.*;
import org.junit.jupiter.api.io.TempDir;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class MergeTest {
private List<File> files;
@TempDir
File testFilesLocation;
@TempDir
File saveToPath;
static Random random;
@BeforeAll
static void init(){
NSLMain.isCli = true;
MergeTest.random = new Random();
}
void makeSplittedFiles() throws Exception{
String parentLocation = testFilesLocation.getAbsolutePath();
this.files = new ArrayList<>();
for (int i = 0; i < 7; i++) {
files.add(createSplitFile(parentLocation, "TestFile4Merge_" + i));
}
}
File createSplitFile(String parent, String name) throws Exception{
Path file = Paths.get(parent, name);
File newlyCreatedSplitFile = Files.createDirectory(file).toFile();
Assertions.assertTrue(newlyCreatedSplitFile.exists());
Assertions.assertTrue(newlyCreatedSplitFile.canRead());
Assertions.assertTrue(newlyCreatedSplitFile.canWrite());
int chunksCount = random.nextInt(6 + 1) + 1; // At min = 1, max = 6
populateSplittedFile(newlyCreatedSplitFile, chunksCount);
return newlyCreatedSplitFile;
}
void populateSplittedFile(File splitFileContainer, int chunksCount) throws Exception{
int chunkSize = random.nextInt(8192 + 1) + 8192; // At min = 8192, max = 8192*2
for (int i = 0; i < chunksCount; i++){
File chunkFile = new File(splitFileContainer, String.format("%02d", i));
try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(chunkFile))){
byte[] zero = new byte[chunkSize];
bos.write(zero);
}
Assertions.assertTrue(chunkFile.exists());
Assertions.assertTrue(chunkFile.canRead());
}
}
@DisplayName("Test test-files location for merge")
@Test
void testTempLocation(){
Assertions.assertTrue(testFilesLocation.isDirectory());
}
// @Disabled("Current test is not ready")
@DisplayName("Test merge functionality")
//@Timeout(value = 60000, unit = TimeUnit.MILLISECONDS)
@Test
void testMerge() throws Exception{
makeSplittedFiles();
SplitMergeTaskExecutor splitMergeTaskExecutor = new SplitMergeTaskExecutor(false, files, saveToPath.getAbsolutePath());
Thread thread = new Thread(splitMergeTaskExecutor);
thread.setDaemon(true);
thread.start();
thread.join();
}
}