mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-06 21:00:22 +00:00
More tests, code cleanup
This commit is contained in:
parent
0144996d4d
commit
2764c5a2ce
@ -21,54 +21,32 @@ package org.sleuthkit.autopsy.mainui.datamodel;
|
|||||||
import com.google.common.cache.Cache;
|
import com.google.common.cache.Cache;
|
||||||
import com.google.common.cache.CacheBuilder;
|
import com.google.common.cache.CacheBuilder;
|
||||||
import java.beans.PropertyChangeEvent;
|
import java.beans.PropertyChangeEvent;
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.logging.Level;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
import org.openide.util.Exceptions;
|
|
||||||
import org.openide.util.NbBundle;
|
import org.openide.util.NbBundle;
|
||||||
import org.openide.util.NbBundle.Messages;
|
import org.openide.util.NbBundle.Messages;
|
||||||
import org.sleuthkit.autopsy.casemodule.Case;
|
import org.sleuthkit.autopsy.casemodule.Case;
|
||||||
import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
|
import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
|
||||||
import org.sleuthkit.autopsy.casemodule.events.BlackBoardArtifactTagAddedEvent;
|
|
||||||
import org.sleuthkit.autopsy.casemodule.events.BlackBoardArtifactTagDeletedEvent;
|
|
||||||
import org.sleuthkit.autopsy.casemodule.events.ContentTagAddedEvent;
|
|
||||||
import org.sleuthkit.autopsy.casemodule.events.ContentTagDeletedEvent;
|
|
||||||
import org.sleuthkit.autopsy.core.UserPreferences;
|
|
||||||
import org.sleuthkit.autopsy.coreutils.TimeZoneUtils;
|
|
||||||
import org.sleuthkit.autopsy.events.AutopsyEvent;
|
|
||||||
import org.sleuthkit.autopsy.ingest.IngestManager;
|
import org.sleuthkit.autopsy.ingest.IngestManager;
|
||||||
import org.sleuthkit.autopsy.ingest.ModuleDataEvent;
|
import org.sleuthkit.autopsy.ingest.ModuleDataEvent;
|
||||||
import org.sleuthkit.autopsy.mainui.nodes.DAOFetcher;
|
import org.sleuthkit.autopsy.mainui.nodes.DAOFetcher;
|
||||||
import org.sleuthkit.datamodel.AbstractFile;
|
|
||||||
import org.sleuthkit.datamodel.Account;
|
import org.sleuthkit.datamodel.Account;
|
||||||
import org.sleuthkit.datamodel.Blackboard;
|
import org.sleuthkit.datamodel.Blackboard;
|
||||||
import org.sleuthkit.datamodel.BlackboardArtifact;
|
import org.sleuthkit.datamodel.BlackboardArtifact;
|
||||||
import org.sleuthkit.datamodel.BlackboardArtifactTag;
|
|
||||||
import org.sleuthkit.datamodel.BlackboardAttribute;
|
import org.sleuthkit.datamodel.BlackboardAttribute;
|
||||||
import org.sleuthkit.datamodel.Content;
|
|
||||||
import org.sleuthkit.datamodel.ContentTag;
|
|
||||||
import org.sleuthkit.datamodel.DataArtifact;
|
|
||||||
import org.sleuthkit.datamodel.SleuthkitCase;
|
import org.sleuthkit.datamodel.SleuthkitCase;
|
||||||
import org.sleuthkit.datamodel.Tag;
|
|
||||||
import org.sleuthkit.datamodel.TagName;
|
|
||||||
import org.sleuthkit.datamodel.TskCoreException;
|
import org.sleuthkit.datamodel.TskCoreException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides information to populate the results viewer for data in the
|
* Provides information to populate the results viewer for data in the
|
||||||
* Communication Accounts section.
|
* Communication Accounts section.
|
||||||
*/
|
*/
|
||||||
@Messages({"CommAccountsDAO.fileColumns.originalName=Source Name",
|
@Messages({"CommAccountsDAO.fileColumns.noDescription=No Description"})
|
||||||
"CommAccountsDAO.fileColumns.noDescription=No Description"})
|
|
||||||
public class CommAccountsDAO {
|
public class CommAccountsDAO {
|
||||||
|
|
||||||
private static final int CACHE_SIZE = Account.Type.PREDEFINED_ACCOUNT_TYPES.size(); // number of cached SearchParams sub-types
|
private static final int CACHE_SIZE = Account.Type.PREDEFINED_ACCOUNT_TYPES.size(); // number of cached SearchParams sub-types
|
||||||
@ -76,10 +54,6 @@ public class CommAccountsDAO {
|
|||||||
private static final TimeUnit CACHE_DURATION_UNITS = TimeUnit.MINUTES;
|
private static final TimeUnit CACHE_DURATION_UNITS = TimeUnit.MINUTES;
|
||||||
private final Cache<SearchParams<?>, SearchResultsDTO> searchParamsCache = CacheBuilder.newBuilder().maximumSize(CACHE_SIZE).expireAfterAccess(CACHE_DURATION, CACHE_DURATION_UNITS).build();
|
private final Cache<SearchParams<?>, SearchResultsDTO> searchParamsCache = CacheBuilder.newBuilder().maximumSize(CACHE_SIZE).expireAfterAccess(CACHE_DURATION, CACHE_DURATION_UNITS).build();
|
||||||
|
|
||||||
private static final List<ColumnKey> FILE_TAG_COLUMNS = Arrays.asList(
|
|
||||||
getFileColumnKey(Bundle.CommAccountsDAO_fileColumns_originalName()) // GVDTODO handle translation
|
|
||||||
);
|
|
||||||
|
|
||||||
private static CommAccountsDAO instance = null;
|
private static CommAccountsDAO instance = null;
|
||||||
|
|
||||||
synchronized static CommAccountsDAO getInstance() {
|
synchronized static CommAccountsDAO getInstance() {
|
||||||
@ -90,10 +64,6 @@ public class CommAccountsDAO {
|
|||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ColumnKey getFileColumnKey(String name) {
|
|
||||||
return new ColumnKey(name, name, Bundle.CommAccountsDAO_fileColumns_noDescription());
|
|
||||||
}
|
|
||||||
|
|
||||||
public SearchResultsDTO getCommAcounts(CommAccountsSearchParams key, long startItem, Long maxCount, boolean hardRefresh) throws ExecutionException, IllegalArgumentException {
|
public SearchResultsDTO getCommAcounts(CommAccountsSearchParams key, long startItem, Long maxCount, boolean hardRefresh) throws ExecutionException, IllegalArgumentException {
|
||||||
if (key.getType() == null) {
|
if (key.getType() == null) {
|
||||||
throw new IllegalArgumentException("Must have non-null type");
|
throw new IllegalArgumentException("Must have non-null type");
|
||||||
@ -165,51 +135,10 @@ public class CommAccountsDAO {
|
|||||||
// Populate the attributes for paged artifacts in the list. This is done using one database call as an efficient way to
|
// Populate the attributes for paged artifacts in the list. This is done using one database call as an efficient way to
|
||||||
// load many artifacts/attributes at once.
|
// load many artifacts/attributes at once.
|
||||||
blackboard.loadBlackboardAttributes(pagedArtifacts);
|
blackboard.loadBlackboardAttributes(pagedArtifacts);
|
||||||
List<RowDTO> fileRows = new ArrayList<>();
|
|
||||||
|
|
||||||
DataArtifactDAO dataArtDAO = MainDAO.getInstance().getDataArtifactsDAO();
|
DataArtifactDAO dataArtDAO = MainDAO.getInstance().getDataArtifactsDAO();
|
||||||
BlackboardArtifactDAO.TableData tableData = dataArtDAO.createTableData(BlackboardArtifact.Type.TSK_ACCOUNT, pagedArtifacts);
|
BlackboardArtifactDAO.TableData tableData = dataArtDAO.createTableData(BlackboardArtifact.Type.TSK_ACCOUNT, pagedArtifacts);
|
||||||
return new DataArtifactTableSearchResultsDTO(BlackboardArtifact.Type.TSK_ACCOUNT, tableData.columnKeys, tableData.rows, cacheKey.getStartItem(), allArtifacts.size());
|
return new DataArtifactTableSearchResultsDTO(BlackboardArtifact.Type.TSK_ACCOUNT, tableData.columnKeys, tableData.rows, cacheKey.getStartItem(), allArtifacts.size());
|
||||||
|
|
||||||
/*
|
|
||||||
while (rs.next()) {
|
|
||||||
tempList.add(rs.getLong("artifact_obj_id")); // NON-NLS
|
|
||||||
}
|
|
||||||
|
|
||||||
long totalResultsCount = getTotalResultsCount(cacheKey, numResults);
|
|
||||||
|
|
||||||
|
|
||||||
for (DataArtifact account : arts) {
|
|
||||||
Account blackboardTag = (Account) account;
|
|
||||||
|
|
||||||
String name = blackboardTag.getContent().getName(); // As a backup.
|
|
||||||
try {
|
|
||||||
name = blackboardTag.getArtifact().getShortDescription();
|
|
||||||
} catch (TskCoreException ignore) {
|
|
||||||
// it's a WARNING, skip
|
|
||||||
}
|
|
||||||
|
|
||||||
String contentPath;
|
|
||||||
try {
|
|
||||||
contentPath = blackboardTag.getContent().getUniquePath();
|
|
||||||
} catch (TskCoreException ex) {
|
|
||||||
contentPath = NbBundle.getMessage(this.getClass(), "BlackboardArtifactTagNode.createSheet.unavail.text");
|
|
||||||
}
|
|
||||||
|
|
||||||
List<Object> cellValues = Arrays.asList(name,
|
|
||||||
null, // GVDTODO translation column
|
|
||||||
contentPath,
|
|
||||||
blackboardTag.getArtifact().getDisplayName(),
|
|
||||||
blackboardTag.getComment(),
|
|
||||||
blackboardTag.getUserName());
|
|
||||||
|
|
||||||
fileRows.add(new BlackboardArtifactTagsRowDTO(
|
|
||||||
blackboardTag,
|
|
||||||
cellValues,
|
|
||||||
blackboardTag.getId()));
|
|
||||||
}
|
|
||||||
|
|
||||||
return new BaseSearchResultsDTO(BlackboardArtifactTagsRowDTO.getTypeIdForClass(), Bundle.ResultTag_name_text(), RESULT_TAG_COLUMNS, fileRows, 0, allAccounts.size());*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -136,8 +136,8 @@ public class TableSearchTest extends NbTestCase {
|
|||||||
private static final String EMAIL_A = "aaa@yahoo.com";
|
private static final String EMAIL_A = "aaa@yahoo.com";
|
||||||
private static final String EMAIL_B = "bbb@gmail.com";
|
private static final String EMAIL_B = "bbb@gmail.com";
|
||||||
private static final String EMAIL_C = "ccc@funmail.com";
|
private static final String EMAIL_C = "ccc@funmail.com";
|
||||||
private static final String PHONENUM_1 = "111 777 1111";
|
private static final String PHONENUM_1 = "1117771111";
|
||||||
private static final String PHONENUM_2 = "222 333 7777";
|
private static final String PHONENUM_2 = "2223337777";
|
||||||
|
|
||||||
/////////////////////////////////////////////////
|
/////////////////////////////////////////////////
|
||||||
// Data to be used across the test methods.
|
// Data to be used across the test methods.
|
||||||
@ -509,9 +509,11 @@ public class TableSearchTest extends NbTestCase {
|
|||||||
// Add communication accounts
|
// Add communication accounts
|
||||||
openCase.getSleuthkitCase().getCommunicationsManager().createAccountFileInstance(Account.Type.EMAIL, EMAIL_A, "Test Module", fileA1);
|
openCase.getSleuthkitCase().getCommunicationsManager().createAccountFileInstance(Account.Type.EMAIL, EMAIL_A, "Test Module", fileA1);
|
||||||
openCase.getSleuthkitCase().getCommunicationsManager().createAccountFileInstance(Account.Type.EMAIL, EMAIL_B, "Test Module", fileA2);
|
openCase.getSleuthkitCase().getCommunicationsManager().createAccountFileInstance(Account.Type.EMAIL, EMAIL_B, "Test Module", fileA2);
|
||||||
AccountFileInstance deviceAccount_2 = openCase.getSleuthkitCase().getCommunicationsManager().createAccountFileInstance(Account.Type.DEVICE, "devId1", "Test Module", fileA2);
|
openCase.getSleuthkitCase().getCommunicationsManager().createAccountFileInstance(Account.Type.DEVICE, "devId1", "Test Module", fileA2);
|
||||||
|
openCase.getSleuthkitCase().getCommunicationsManager().createAccountFileInstance(Account.Type.PHONE, PHONENUM_1, "Test Module", fileA2);
|
||||||
|
|
||||||
openCase.getSleuthkitCase().getCommunicationsManager().createAccountFileInstance(Account.Type.EMAIL, EMAIL_C, "Test Module", customFile);
|
openCase.getSleuthkitCase().getCommunicationsManager().createAccountFileInstance(Account.Type.EMAIL, EMAIL_C, "Test Module", customFile);
|
||||||
|
openCase.getSleuthkitCase().getCommunicationsManager().createAccountFileInstance(Account.Type.PHONE, PHONENUM_2, "Test Module", customFile);
|
||||||
|
|
||||||
} catch (TestUtilsException | TskCoreException | BlackboardException | TagsManager.TagNameAlreadyExistsException | OsAccountManager.NotUserSIDException ex) {
|
} catch (TestUtilsException | TskCoreException | BlackboardException | TagsManager.TagNameAlreadyExistsException | OsAccountManager.NotUserSIDException ex) {
|
||||||
if (trans != null) {
|
if (trans != null) {
|
||||||
@ -633,23 +635,21 @@ public class TableSearchTest extends NbTestCase {
|
|||||||
assertTrue(db != null);
|
assertTrue(db != null);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Get all contacts
|
|
||||||
CommAccountsDAO commAccountsDAO = MainDAO.getInstance().getCommAccountsDAO();
|
CommAccountsDAO commAccountsDAO = MainDAO.getInstance().getCommAccountsDAO();
|
||||||
|
|
||||||
|
// Get emails from all data sources
|
||||||
CommAccountsSearchParams param = new CommAccountsSearchParams(Account.Type.EMAIL, null);
|
CommAccountsSearchParams param = new CommAccountsSearchParams(Account.Type.EMAIL, null);
|
||||||
SearchResultsDTO results = commAccountsDAO.getCommAcounts(param, 0, null, false);
|
SearchResultsDTO results = commAccountsDAO.getCommAcounts(param, 0, null, false);
|
||||||
//assertEquals(BlackboardArtifact.Type.TSK_CONTACT, results.getArtifactType());
|
|
||||||
assertEquals(3, results.getTotalResultsCount());
|
assertEquals(3, results.getTotalResultsCount());
|
||||||
assertEquals(3, results.getItems().size());
|
assertEquals(3, results.getItems().size());
|
||||||
|
|
||||||
// Get contacts from data source 2
|
// Get device accounts from data source 1
|
||||||
param = new CommAccountsSearchParams(Account.Type.DEVICE, dataSource1.getId());
|
param = new CommAccountsSearchParams(Account.Type.DEVICE, dataSource1.getId());
|
||||||
results = commAccountsDAO.getCommAcounts(param, 0, null, false);
|
results = commAccountsDAO.getCommAcounts(param, 0, null, false);
|
||||||
//assertEquals(BlackboardArtifact.Type.TSK_CONTACT, results.getArtifactType());
|
|
||||||
assertEquals(1, results.getTotalResultsCount());
|
assertEquals(1, results.getTotalResultsCount());
|
||||||
assertEquals(1, results.getItems().size());
|
assertEquals(1, results.getItems().size());
|
||||||
|
|
||||||
// Get bookmarks from data source 2
|
// Get email accounts from data source 2
|
||||||
param = new CommAccountsSearchParams(Account.Type.EMAIL, dataSource2.getId());
|
param = new CommAccountsSearchParams(Account.Type.EMAIL, dataSource2.getId());
|
||||||
results = commAccountsDAO.getCommAcounts(param, 0, null, false);
|
results = commAccountsDAO.getCommAcounts(param, 0, null, false);
|
||||||
assertEquals(1, results.getTotalResultsCount());
|
assertEquals(1, results.getTotalResultsCount());
|
||||||
@ -665,10 +665,31 @@ public class TableSearchTest extends NbTestCase {
|
|||||||
assertTrue(rowDTO instanceof DataArtifactRowDTO);
|
assertTrue(rowDTO instanceof DataArtifactRowDTO);
|
||||||
DataArtifactRowDTO accountResultRowDTO = (DataArtifactRowDTO) rowDTO;
|
DataArtifactRowDTO accountResultRowDTO = (DataArtifactRowDTO) rowDTO;
|
||||||
|
|
||||||
// Check that some of the expected result tag column values are present
|
// Check that some of the expected result column values are present
|
||||||
assertTrue(accountResultRowDTO.getCellValues().contains(EMAIL_C));
|
assertTrue(accountResultRowDTO.getCellValues().contains(EMAIL_C));
|
||||||
assertTrue(accountResultRowDTO.getCellValues().contains(customFile.getName()));
|
assertTrue(accountResultRowDTO.getCellValues().contains(customFile.getName()));
|
||||||
|
|
||||||
|
// Get phone accounts from all data sources
|
||||||
|
param = new CommAccountsSearchParams(Account.Type.PHONE, null);
|
||||||
|
results = commAccountsDAO.getCommAcounts(param, 0, null, false);
|
||||||
|
assertEquals(2, results.getTotalResultsCount());
|
||||||
|
assertEquals(2, results.getItems().size());
|
||||||
|
|
||||||
|
// Get phone accounts from data source 2
|
||||||
|
param = new CommAccountsSearchParams(Account.Type.PHONE, dataSource2.getId());
|
||||||
|
results = commAccountsDAO.getCommAcounts(param, 0, null, false);
|
||||||
|
assertEquals(1, results.getTotalResultsCount());
|
||||||
|
assertEquals(1, results.getItems().size());
|
||||||
|
|
||||||
|
// Get the row
|
||||||
|
rowDTO = results.getItems().get(0);
|
||||||
|
assertTrue(rowDTO instanceof DataArtifactRowDTO);
|
||||||
|
accountResultRowDTO = (DataArtifactRowDTO) rowDTO;
|
||||||
|
|
||||||
|
// Check that some of the expected result column values are present
|
||||||
|
assertTrue(accountResultRowDTO.getCellValues().contains(PHONENUM_2));
|
||||||
|
assertTrue(accountResultRowDTO.getCellValues().contains(customFile.getName()));
|
||||||
|
|
||||||
} catch (ExecutionException ex) {
|
} catch (ExecutionException ex) {
|
||||||
Exceptions.printStackTrace(ex);
|
Exceptions.printStackTrace(ex);
|
||||||
Assert.fail(ex.getMessage());
|
Assert.fail(ex.getMessage());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user