Merge pull request #3720 from zhhl/3709-AllTestCasesForEmbeddedFiles

3709: All test cases for Embedded file tests.
This commit is contained in:
Richard Cordovano 2018-04-27 15:01:21 -04:00 committed by GitHub
commit becc875516
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -126,4 +126,153 @@ public class EmbeddedFileTest extends NbTestCase {
} }
public void testBigFolder() {
final int numOfFilesToTest = 1000;
try {
//Get all files under 'big folder' directory except '.' '..' 'slack' files
List<AbstractFile> results = openCase.getSleuthkitCase().findAllFilesWhere("parent_path LIKE '%big folder/' and name != '.' and name != '..' and extension NOT LIKE '%slack'");
assertEquals(numOfFilesToTest, results.size()); //There are 1000 files
int numOfFilesTested = 0;
for (AbstractFile file : results) {
String fileName = file.getName();
//File name should like file1.txt, file2.txt ... file1000.txt
String errMsg = String.format("File name %s doesn't follow the expected naming convention: fileNaturalNumber.txt, eg. file234.txt.", fileName);
assertTrue(errMsg, file.getName().matches("file[1-9]\\d*.txt"));
String hashValue = file.getMd5Hash();
//All files have the same hash value
assertEquals(HASH_VALUE, hashValue);
numOfFilesTested++;
}
//Make sure 1000 files have been tested
assertEquals(numOfFilesToTest, numOfFilesTested);
} catch (TskCoreException ex) {
Exceptions.printStackTrace(ex);
Assert.fail(ex);
}
}
public void testDeepFolder() {
try {
//Get all files under 'deep folder' directory except '.' '..'
List<AbstractFile> results = openCase.getSleuthkitCase().findAllFilesWhere("parent_path LIKE '%deep folder/' and name != '.' and name != '..'");
assertEquals(1, results.size());
StringBuffer dirReached = new StringBuffer();
ArrayList<String> fileReached = new ArrayList<>();
checkEachFileInDeepFolder(results.get(0), dirReached, fileReached, 0);
//Check that all 25 folders/files have been reached
assertEquals(DEEP_FOLDER_COUNT, fileReached.size());
//Make sure the test reached the last directory 'dir25'. The whole directory is dir1/dir2...dir24/dir25/
assertTrue(dirReached.toString().startsWith("dir1/dir2/"));
assertTrue(dirReached.toString().endsWith("dir24/dir25/"));
//Make sure the test reached the last file.txt in dir1/dir2...dir24/dir25/
assertTrue(fileReached.get(0).endsWith(dirReached.toString() + "file.txt"));
} catch (TskCoreException ex) {
Exceptions.printStackTrace(ex);
Assert.fail(ex);
}
}
public void testEmbeddedFile() {
try {
//Query level3.txt under '/ZIP/embedded/level3.zip/'
List<AbstractFile> results = openCase.getSleuthkitCase().findAllFilesWhere("name = 'level3.txt' and parent_path = '/ZIP/embedded/level3.zip/'");
assertEquals(1, results.size());
//Query level2.txt under '/ZIP/embedded/level3.zip/level2.zip/'
results = openCase.getSleuthkitCase().findAllFilesWhere("name = 'level2.txt' and parent_path = '/ZIP/embedded/level3.zip/level2.zip/'");
assertEquals(1, results.size());
//Query level1.txt under '/ZIP/embedded/level3.zip/level2.zip/level1.zip/'
results = openCase.getSleuthkitCase().findAllFilesWhere("name = 'level1.txt' and parent_path = '/ZIP/embedded/level3.zip/level2.zip/level1.zip/'");
assertEquals(1, results.size());
//Confirm that we can reach level1.txt from the embedded folder
results = openCase.getSleuthkitCase().findAllFilesWhere("parent_path LIKE '%embedded/' and name != '.' and name != '..' and extension NOT LIKE '%slack%'");
assertEquals(1, results.size());
assertTrue(checkFileInEmbeddedFolder(results.get(0)));
} catch (TskCoreException ex) {
Exceptions.printStackTrace(ex);
Assert.fail(ex);
}
}
public void testContent() {
final int numOfFilesToTest = 1029;
try {
//All files with txt extension should have the same hash value,
//except the zip file with txt extension and the .txt files extracted from password protected zip shouldn't have hash value
List<AbstractFile> results = openCase.getSleuthkitCase().findAllFilesWhere(
"extension = 'txt' and name != 'zipFileWithTxtExtension.txt' and parent_path NOT LIKE '%_protected%'");
assertEquals(numOfFilesToTest, results.size());
int numOfHashTested = 0;
for (AbstractFile file : results) {
String fileName = file.getName();
String errMsg = String.format("File name %s doesn't have the extected hash value %s.", fileName, HASH_VALUE);
assertEquals(errMsg, HASH_VALUE, file.getMd5Hash());
numOfHashTested++;
}
//Make sure the hash value of 1029 files have been tested
assertEquals(numOfFilesToTest, numOfHashTested);
} catch (TskCoreException ex) {
Exceptions.printStackTrace(ex);
Assert.fail(ex);
}
}
public void testExtension() {
try {
//Query zipFileWithTxtExtension.txt at extension folder
List<AbstractFile> results = openCase.getSleuthkitCase().findAllFilesWhere("extension = 'txt' and parent_path = '/ZIP/extension/zipFileWithTxtExtension.txt/'");
assertEquals(1, results.size());
assertEquals("file.txt wasn't extracted from the file: zipFileWithTxtExtension.txt", "file.txt", results.get(0).getName());
} catch (TskCoreException ex) {
Exceptions.printStackTrace(ex);
Assert.fail(ex);
}
}
private void checkEachFileInDeepFolder(AbstractFile file, StringBuffer dirReached, ArrayList<String> fileReached, int numOfDir) {
String errMsg = String.format("File/Directory name is not as expected name: %s", file.getName());
if (file.isDir() && !file.getName().equals(".") && !file.getName().equals("..")) {
numOfDir++;
assertEquals(errMsg, String.format("dir%d", numOfDir), file.getName());
dirReached.append(file.getName()).append("/");
try {
List<AbstractFile> children = file.listFiles();
for (AbstractFile child : children) {
checkEachFileInDeepFolder(child, dirReached, fileReached, numOfDir);
}
} catch (TskCoreException ex) {
Exceptions.printStackTrace(ex);
Assert.fail(ex);
}
} else if (file.isFile() && !file.getName().endsWith("slack")) {
assertEquals(errMsg, "file.txt", file.getName());
fileReached.add(file.getParentPath() + file.getName());
}
}
private boolean checkFileInEmbeddedFolder(AbstractFile file) {
if (file.getName().equals("level1.txt")) {
return true;
} else if (file.getNameExtension().equalsIgnoreCase("zip")) {
try {
List<AbstractFile> children = file.listFiles();
for (AbstractFile child : children) {
return checkFileInEmbeddedFolder(child);
}
} catch (TskCoreException ex) {
Exceptions.printStackTrace(ex);
Assert.fail(ex);
}
} else {
assertTrue(file.getNameExtension().equalsIgnoreCase("txt"));
}
return false;
}
} }