From 131ee65dbb72b70bf65b0800e325ab4f467f515d Mon Sep 17 00:00:00 2001 From: Greg DiCristofaro Date: Wed, 30 Sep 2020 17:11:58 -0400 Subject: [PATCH] need to fix mocking logger --- .../datamodel/UserActivitySummaryTests.java | 96 ++++++++++++++++--- .../autopsy/testutils/TskMockUtils.java | 5 +- 2 files changed, 84 insertions(+), 17 deletions(-) diff --git a/Core/test/unit/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/UserActivitySummaryTests.java b/Core/test/unit/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/UserActivitySummaryTests.java index f4162d266d..9b1cc5e08e 100644 --- a/Core/test/unit/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/UserActivitySummaryTests.java +++ b/Core/test/unit/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/UserActivitySummaryTests.java @@ -18,26 +18,33 @@ */ package org.sleuthkit.autopsy.datasourcesummary.datamodel; -import java.util.Arrays; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.Map.Entry; import java.util.function.Function; -import java.util.logging.Logger; import org.apache.commons.lang3.tuple.Pair; -import org.apache.poi.ss.formula.functions.T; import org.junit.Assert; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.Mockito.description; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import org.sleuthkit.autopsy.datasourcesummary.datamodel.SleuthkitCaseProvider.SleuthkitCaseProviderException; +import org.sleuthkit.autopsy.datasourcesummary.datamodel.UserActivitySummary.TopAccountResult; +import org.sleuthkit.autopsy.datasourcesummary.datamodel.UserActivitySummary.TopDeviceAttachedResult; +import org.sleuthkit.autopsy.datasourcesummary.datamodel.UserActivitySummary.TopDomainsResult; +import org.sleuthkit.autopsy.datasourcesummary.datamodel.UserActivitySummary.TopProgramsResult; +import org.sleuthkit.autopsy.datasourcesummary.datamodel.UserActivitySummary.TopWebSearchResult; import org.sleuthkit.autopsy.testutils.TskMockUtils; import org.sleuthkit.autopsy.texttranslation.NoServiceProviderException; -import org.sleuthkit.autopsy.texttranslation.TextTranslationService; import org.sleuthkit.autopsy.texttranslation.TranslationException; import org.sleuthkit.datamodel.Blackboard; import org.sleuthkit.datamodel.BlackboardArtifact; @@ -54,9 +61,33 @@ import org.sleuthkit.datamodel.TskCoreException; public class UserActivitySummaryTests { private interface DataFunction { - List retrieve(UserActivitySummary userActivitySummary, DataSource datasource, int count); + List retrieve(UserActivitySummary userActivitySummary, DataSource datasource, int count) throws + SleuthkitCaseProviderException, TskCoreException; } + private static final DataFunction WEB_SEARCH_QUERY = + (userActivity, dataSource, count) -> userActivity.getMostRecentWebSearches(dataSource, count); + + private static final DataFunction ACCOUNT_QUERY = + (userActivity, dataSource, count) -> userActivity.getRecentAccounts(dataSource, count); + + private static final DataFunction DOMAINS_QUERY = + (userActivity, dataSource, count) -> userActivity.getRecentDomains(dataSource, count); + + private static final DataFunction DEVICE_QUERY = + (userActivity, dataSource, count) -> userActivity.getRecentDevices(dataSource, count); + + private static final DataFunction PROGRAMS_QUERY = + (userActivity, dataSource, count) -> userActivity.getTopPrograms(dataSource, count); + + private static final Map> USER_ACTIVITY_METHODS = new HashMap>() {{ + put("getMostRecentWebSearches", WEB_SEARCH_QUERY); + put("getRecentAccounts", ACCOUNT_QUERY); + put("getRecentDomains", DOMAINS_QUERY); + put("getRecentDevices", DEVICE_QUERY); + put("getTopPrograms", PROGRAMS_QUERY); + }}; + @Rule public ExpectedException thrown = ExpectedException.none(); @@ -90,32 +121,69 @@ public class UserActivitySummaryTests { ); } - private void testMinCount(DataFunction funct) throws TskCoreException, NoServiceProviderException, TranslationException { + private void testMinCount(DataFunction funct, String id) + throws TskCoreException, NoServiceProviderException, TranslationException, SleuthkitCaseProviderException { Pair tskPair = getArtifactsTSKMock(null); UserActivitySummary summary = getTestClass(tskPair.getLeft(), false, null); thrown.expect(IllegalArgumentException.class); funct.retrieve(summary, TskMockUtils.mockDataSource(1), -1); + verify(tskPair.getRight(), never()).getArtifacts(anyInt(), anyInt()); Pair tskPair2 = getArtifactsTSKMock(null); UserActivitySummary summary2 = getTestClass(tskPair.getLeft(), false, null); thrown.expect(IllegalArgumentException.class); funct.retrieve(summary2, TskMockUtils.mockDataSource(1), -1); + verify(tskPair.getRight(), never()).getArtifacts(anyInt(), anyInt()); } + @Test + public void testMinCountInvariant() + throws TskCoreException, NoServiceProviderException, TranslationException, SleuthkitCaseProviderException{ + + for (Entry> query : USER_ACTIVITY_METHODS.entrySet()) { + testMinCount(query.getValue(), query.getKey()); + } + } - private void testNullDataSource(DataFunction funct) throws TskCoreException, NoServiceProviderException, TranslationException { - Pair tskPair = getArtifactsTSKMock(RET_ARR); + private void testNullDataSource(DataFunction funct) + throws TskCoreException, NoServiceProviderException, TranslationException, SleuthkitCaseProviderException { + Pair tskPair = getArtifactsTSKMock(null); UserActivitySummary summary = getTestClass(tskPair.getLeft(), false, null); - List retArr = funct.retrieve(summary, TskMockUtils.mockDataSource(1), -1); + List retArr = funct.retrieve(summary, TskMockUtils.mockDataSource(1), -1); + verify(tskPair.getRight(), never()).getArtifacts(anyInt(), anyInt()); Assert.assertTrue(retArr != null); + Assert.assertTrue(retArr.isEmpty()); } - + @Test + public void testNullDataSource() + throws TskCoreException, NoServiceProviderException, TranslationException, SleuthkitCaseProviderException{ + + for (DataFunction query : USER_ACTIVITY_METHODS.values()) { + testNullDataSource(query); + } + } + private void testNoResultsReturned(DataFunction funct, String id) + throws TskCoreException, NoServiceProviderException, TranslationException, SleuthkitCaseProviderException { + long dataSourceId = 1; + Pair tskPair = getArtifactsTSKMock(new ArrayList<>()); + UserActivitySummary summary = getTestClass(tskPair.getLeft(), false, null); + List retArr = funct.retrieve(summary, TskMockUtils.mockDataSource(dataSourceId), 10); + verifyCalled(tskPair.getRight(), anyInt(), dataSourceId); + Assert.assertTrue(String.format("Expected non null empty list returned from %s", id), retArr != null); + Assert.assertTrue(String.format("Expected non null empty list returned from %s", id), retArr.isEmpty()); + } + + @Test + public void testNoResultsReturned() + throws TskCoreException, NoServiceProviderException, TranslationException, SleuthkitCaseProviderException{ + + for (Entry> query : USER_ACTIVITY_METHODS.entrySet()) { + testNoResultsReturned(query.getValue(), query.getKey()); + } + } - // what happens on count <= 0 - // datasource = null - // no results returned // does not contain excluded // ROOT HUB // queries correct data sources (i.e. the 3 messages) diff --git a/Core/test/unit/src/org/sleuthkit/autopsy/testutils/TskMockUtils.java b/Core/test/unit/src/org/sleuthkit/autopsy/testutils/TskMockUtils.java index a0fe238ed8..0916492ba4 100644 --- a/Core/test/unit/src/org/sleuthkit/autopsy/testutils/TskMockUtils.java +++ b/Core/test/unit/src/org/sleuthkit/autopsy/testutils/TskMockUtils.java @@ -128,9 +128,8 @@ public class TskMockUtils { public static Logger getTSKLogger() { Logger logger = mock(Logger.class); - doNothing().when(logger.log(any(Level.class), anyString(), any(Throwable.class))); - doNothing().when(logger.log(any(Level.class), anyString())); - doNothing().when(logger.log(any(Level.class), any(Throwable.class))); + doNothing().when(logger).log(any(Level.class), anyString(), any(Throwable.class)); + doNothing().when(logger).log(any(Level.class), anyString()); return logger; }