mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-17 18:17:43 +00:00
Merge pull request #3720 from zhhl/3709-AllTestCasesForEmbeddedFiles
3709: All test cases for Embedded file tests.
This commit is contained in:
commit
becc875516
@ -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;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user