package rocks.inspectit.server.service;
import java.lang.ref.SoftReference;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ArrayBlockingQueue;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.slf4j.LoggerFactory;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import rocks.inspectit.server.test.AbstractTestNGLogSupport;
import rocks.inspectit.server.util.AgentStatusDataProvider;
import rocks.inspectit.shared.all.communication.DefaultData;
import rocks.inspectit.shared.all.communication.data.TimerData;
import rocks.inspectit.shared.cs.cmr.service.ICmrManagementService;
/**
* Tests the agent storage service.
*
* @author Ivan Senic
*
*/
@SuppressWarnings("PMD")
public class AgentStorageServiceTest extends AbstractTestNGLogSupport {
/**
* Service to be tested.
*/
private AgentStorageService agentStorageService;
/**
* {@link AgentStatusDataProvider}.
*/
@Mock
private AgentStatusDataProvider agentStatusDataProvider;
@Mock
private ICmrManagementService cmrManagementService;
/**
* Initializes the mocks.
*/
@BeforeMethod
public void init() {
MockitoAnnotations.initMocks(this);
agentStorageService = new AgentStorageService(new ArrayBlockingQueue<SoftReference<List<? extends DefaultData>>>(1));
agentStorageService.platformIdentDateSaver = agentStatusDataProvider;
agentStorageService.cmrManagementService = cmrManagementService;
agentStorageService.log = LoggerFactory.getLogger(AgentStorageService.class);
}
/**
* Proves that the data will be dropped after the timeout if there is no place in the queue and
* amount of dropped data be remembered.
*/
@Test
public void dropDataAfterTimeout() {
List<DefaultData> dataList = new ArrayList<>();
TimerData timerData = new TimerData();
timerData.setPlatformIdent(1L);
dataList.add(timerData);
agentStorageService.addDataObjects(dataList);
agentStorageService.addDataObjects(dataList);
Mockito.verify(agentStatusDataProvider, Mockito.times(2)).registerDataSent(1L);
Mockito.verify(cmrManagementService, Mockito.times(1)).addDroppedDataCount(dataList.size());
}
/**
* Provides that data will be processed if there is place in the queue.
*/
@Test
public void acceptData() {
List<DefaultData> dataList = new ArrayList<>();
TimerData timerData = new TimerData();
timerData.setPlatformIdent(1L);
dataList.add(timerData);
agentStorageService.addDataObjects(dataList);
Mockito.verify(agentStatusDataProvider, Mockito.times(1)).registerDataSent(1L);
Mockito.verifyZeroInteractions(cmrManagementService);
}
}