package biz.karms.sinkit.ejb.impl;
import biz.karms.sinkit.ejb.ArchiveService;
import biz.karms.sinkit.ejb.BlacklistCacheService;
import biz.karms.sinkit.ejb.WhitelistCacheService;
import biz.karms.sinkit.ejb.cache.pojo.WhitelistedRecord;
import biz.karms.sinkit.ioc.IoCFeed;
import biz.karms.sinkit.ioc.IoCRecord;
import biz.karms.sinkit.ioc.IoCSource;
import biz.karms.sinkit.ioc.IoCSourceId;
import biz.karms.sinkit.ioc.IoCSourceIdType;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import java.util.ArrayList;
import java.util.Calendar;
import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;
/**
* @author Tomas Kozel
*/
@RunWith(MockitoJUnitRunner.class)
public class CoreServiceEJBTest {
@Mock
private WhitelistCacheService whitelistCacheService;
@Mock
private ArchiveService archiveService;
@Mock
private BlacklistCacheService blacklistCacheService;
@InjectMocks
private CoreServiceEJB coreService;
@Test
public void processExistingCompletedNoUpdateTest() throws Exception {
Calendar expiresAt = Calendar.getInstance();
expiresAt.add(Calendar.DAY_OF_MONTH, 1);
WhitelistedRecord white = createWhite("whalebone.io", "whalebone", expiresAt, true);
IoCRecord ioc = getIoCForWhitelist(null, "whalebone.io", "whalebone", true);
when(whitelistCacheService.get("whalebone.io")).thenReturn(white);
assertTrue(coreService.processWhitelistIoCRecord(ioc));
verify(whitelistCacheService).get("whalebone.io");
verifyNoMoreInteractions(whitelistCacheService);
verifyZeroInteractions(archiveService);
verifyZeroInteractions(blacklistCacheService);
}
@Test
public void processExistingNotCompletedNoUpdateTest() throws Exception {
Calendar expiresAt = Calendar.getInstance();
expiresAt.add(Calendar.DAY_OF_MONTH, 1);
WhitelistedRecord white = createWhite("whalebone.io", "whalebone", expiresAt, false);
IoCRecord ioc = getIoCForWhitelist(null, "whalebone.io", "whalebone", true);
IoCRecord iocToBeWhite1 = getIoCForWhitelist(null, "whalebone.io", "someFeed", true);
IoCRecord iocToBeWhite2 = getIoCForWhitelist(null, "greate.whaelobne.io", "someOtherFeed", true);
ArrayList<IoCRecord> toBeWhiteListed = new ArrayList<>();
toBeWhiteListed.add(iocToBeWhite1);
toBeWhiteListed.add(iocToBeWhite2);
when(whitelistCacheService.get("whalebone.io")).thenReturn(white);
when(archiveService.findIoCsForWhitelisting("whalebone.io")).thenReturn(toBeWhiteListed);
when(blacklistCacheService.removeWholeObjectFromCache(any(IoCRecord.class))).thenReturn(true);
when(whitelistCacheService.setCompleted(white)).thenReturn(white);
assertTrue(coreService.processWhitelistIoCRecord(ioc));
verify(whitelistCacheService).get("whalebone.io");
verify(archiveService).findIoCsForWhitelisting("whalebone.io");
verify(archiveService).setRecordWhitelisted(iocToBeWhite1, "whalebone");
verify(archiveService).setRecordWhitelisted(iocToBeWhite2, "whalebone");
verify(blacklistCacheService).removeWholeObjectFromCache(iocToBeWhite1);
verify(blacklistCacheService).removeWholeObjectFromCache(iocToBeWhite2);
verify(whitelistCacheService).setCompleted(white);
verifyNoMoreInteractions(whitelistCacheService);
verifyNoMoreInteractions(blacklistCacheService);
verifyNoMoreInteractions(archiveService);
}
@Test
public void processExistingCompletedUpdateTest() throws Exception {
coreService.setWhitelistValidSeconds(1 * 60 * 60); // 1 hour
Calendar expiresAt = Calendar.getInstance();
expiresAt.add(Calendar.MINUTE, 30);
WhitelistedRecord white = createWhite("whalebone.io", "whalebone", expiresAt, true);
Calendar expiresAt2 = Calendar.getInstance();
expiresAt2.add(Calendar.HOUR, 1);
WhitelistedRecord white2 = createWhite("whalebone.io", "whalebone2", expiresAt2, true);
IoCRecord ioc = getIoCForWhitelist(null, "whalebone.io", "whalebone2", true);
when(whitelistCacheService.get("whalebone.io")).thenReturn(white);
when(whitelistCacheService.put(any(IoCRecord.class), eq(true))).thenReturn(white2);
assertTrue(coreService.processWhitelistIoCRecord(ioc));
verify(whitelistCacheService).get("whalebone.io");
verify(whitelistCacheService).put(ioc, true);
verifyNoMoreInteractions(whitelistCacheService);
verifyZeroInteractions(blacklistCacheService);
verifyZeroInteractions(archiveService);
}
@Test
public void processExistingNotCompletedUpdateTest() throws Exception {
coreService.setWhitelistValidSeconds(1 * 60 * 60); // 1 hour
Calendar expiresAt = Calendar.getInstance();
expiresAt.add(Calendar.MINUTE, 30);
WhitelistedRecord white = createWhite("whalebone.io", "whalebone", expiresAt, false);
Calendar expiresAt2 = Calendar.getInstance();
expiresAt2.add(Calendar.HOUR, 1);
WhitelistedRecord white2 = createWhite("whalebone.io", "whalebone2", expiresAt2, true);
IoCRecord ioc = getIoCForWhitelist(null, "whalebone.io", "whalebone2", true);
IoCRecord iocToBeWhite1 = getIoCForWhitelist(null, "whalebone.io", "someFeed", true);
IoCRecord iocToBeWhite2 = getIoCForWhitelist(null, "greate.whaelobne.io", "someOtherFeed", true);
ArrayList<IoCRecord> toBeWhiteListed = new ArrayList<>();
toBeWhiteListed.add(iocToBeWhite1);
toBeWhiteListed.add(iocToBeWhite2);
when(whitelistCacheService.get("whalebone.io")).thenReturn(white);
when(whitelistCacheService.put(any(IoCRecord.class), eq(false))).thenReturn(white2);
when(archiveService.findIoCsForWhitelisting("whalebone.io")).thenReturn(toBeWhiteListed);
when(blacklistCacheService.removeWholeObjectFromCache(any(IoCRecord.class))).thenReturn(true);
when(whitelistCacheService.setCompleted(white2)).thenReturn(white2);
assertTrue(coreService.processWhitelistIoCRecord(ioc));
verify(whitelistCacheService).get("whalebone.io");
verify(whitelistCacheService).put(ioc, false);
verify(archiveService).findIoCsForWhitelisting("whalebone.io");
verify(archiveService).setRecordWhitelisted(iocToBeWhite1, "whalebone2");
verify(archiveService).setRecordWhitelisted(iocToBeWhite2, "whalebone2");
verify(blacklistCacheService).removeWholeObjectFromCache(iocToBeWhite1);
verify(blacklistCacheService).removeWholeObjectFromCache(iocToBeWhite2);
verify(whitelistCacheService).setCompleted(white2);
verifyNoMoreInteractions(whitelistCacheService);
verifyNoMoreInteractions(blacklistCacheService);
verifyNoMoreInteractions(archiveService);
}
@Test
public void processNotExistingTest() throws Exception {
coreService.setWhitelistValidSeconds(1 * 60 * 60); // 1 hour
Calendar expiresAt = Calendar.getInstance();
expiresAt.add(Calendar.HOUR, 1);
WhitelistedRecord white = createWhite("whalebone.io", "whalebone", expiresAt, false);
IoCRecord ioc = getIoCForWhitelist(null, "whalebone.io", "whalebone", true);
IoCRecord iocToBeWhite1 = getIoCForWhitelist(null, "whalebone.io", "someFeed", true);
IoCRecord iocToBeWhite2 = getIoCForWhitelist(null, "greate.whaelobne.io", "someOtherFeed", true);
ArrayList<IoCRecord> toBeWhiteListed = new ArrayList<>();
toBeWhiteListed.add(iocToBeWhite1);
toBeWhiteListed.add(iocToBeWhite2);
when(whitelistCacheService.get("whalebone.io")).thenReturn(null);
when(whitelistCacheService.put(any(IoCRecord.class), eq(false))).thenReturn(white);
when(archiveService.findIoCsForWhitelisting("whalebone.io")).thenReturn(toBeWhiteListed);
when(blacklistCacheService.removeWholeObjectFromCache(any(IoCRecord.class))).thenReturn(true);
when(whitelistCacheService.setCompleted(white)).thenReturn(white);
assertTrue(coreService.processWhitelistIoCRecord(ioc));
verify(whitelistCacheService).get("whalebone.io");
verify(whitelistCacheService).put(ioc, false);
verify(archiveService).findIoCsForWhitelisting("whalebone.io");
verify(archiveService).setRecordWhitelisted(iocToBeWhite1, "whalebone");
verify(archiveService).setRecordWhitelisted(iocToBeWhite2, "whalebone");
verify(blacklistCacheService).removeWholeObjectFromCache(iocToBeWhite1);
verify(blacklistCacheService).removeWholeObjectFromCache(iocToBeWhite2);
verify(whitelistCacheService).setCompleted(white);
verifyNoMoreInteractions(whitelistCacheService);
verifyNoMoreInteractions(blacklistCacheService);
verifyNoMoreInteractions(archiveService);
}
private WhitelistedRecord createWhite(String rawId, String sourceName, Calendar expiresAt, boolean completed) {
WhitelistedRecord white = new WhitelistedRecord();
white.setCompleted(completed);
white.setRawId(rawId);
white.setExpiresAt(expiresAt);
white.setSourceName(sourceName);
return white;
}
public IoCRecord getIoCForWhitelist(String ip, String fqdn, String sourceName, boolean withId) {
IoCRecord ioc = new IoCRecord();
ioc.setSource(new IoCSource());
ioc.getSource().setIp(ip);
ioc.getSource().setFQDN(fqdn);
ioc.setFeed(new IoCFeed());
ioc.getFeed().setName(sourceName);
if (withId) {
ioc.getSource().setId(new IoCSourceId());
if (fqdn != null) {
ioc.getSource().getId().setValue(fqdn);
ioc.getSource().getId().setType(IoCSourceIdType.FQDN);
} else if (ip != null) {
ioc.getSource().getId().setValue(ip);
ioc.getSource().getId().setType(IoCSourceIdType.IP);
}
}
return ioc;
}
@Test
public void test() {
System.out.println(System.getProperty("java.io.tmpdir"));
System.out.println(Math.ceil((1001 - 1000) / 1000.00));
}
}