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