package rocks.inspectit.shared.all.communication.data;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.hasItem;
import java.util.ArrayList;
import java.util.List;
import org.mockito.Mockito;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import rocks.inspectit.shared.all.communication.DefaultData;
import rocks.inspectit.shared.all.communication.IAggregatedData;
import rocks.inspectit.shared.all.communication.IIdsAwareAggregatedData;
@SuppressWarnings("PMD")
public class AggregatedDataTest {
/**
* Tests the ID aggregation with in {@link IAggregatedData}.
*
* @param aggregated
* {@link IAggregatedData}
* @param data
* Data to be aggregated.
*/
@SuppressWarnings("unchecked")
@Test(dataProvider = "normalDataProvider")
public <E extends DefaultData> void idAggregation(IIdsAwareAggregatedData<E> aggregated, E data) {
aggregated.aggregate(data);
if (data instanceof IIdsAwareAggregatedData) {
for (long id : ((IIdsAwareAggregatedData<E>) data).getAggregatedIds()) {
assertThat(aggregated.getAggregatedIds(), hasItem(id));
}
} else {
assertThat(aggregated.getAggregatedIds(), hasItem(data.getId()));
}
}
@DataProvider(name = "normalDataProvider")
public Object[][] getDataForAggregationOfNormalData() {
Object[][] data = new Object[8][2];
// first normal aggregation
TimerData timerData = new TimerData();
timerData.setId(1);
data[0][0] = new AggregatedTimerData();
data[0][1] = timerData;
SqlStatementData sqlStatementData = new SqlStatementData();
sqlStatementData.setId(1);
data[1][0] = new AggregatedSqlStatementData();
data[1][1] = sqlStatementData;
HttpTimerData httpTimerData = new HttpTimerData();
httpTimerData.setId(1);
data[2][0] = new AggregatedHttpTimerData();
data[2][1] = httpTimerData;
ExceptionSensorData exceptionSensorData = new ExceptionSensorData();
exceptionSensorData.setId(1);
data[3][0] = new AggregatedExceptionSensorData();
data[3][1] = exceptionSensorData;
// then aggregation of already aggregated
List<Long> aggregateId = new ArrayList<Long>();
aggregateId.add(1L);
aggregateId.add(3L);
AggregatedTimerData aggregatedTimerData = Mockito.mock(AggregatedTimerData.class);
Mockito.when(aggregatedTimerData.getAggregatedIds()).thenReturn(aggregateId);
data[4][0] = new AggregatedTimerData();
data[4][1] = aggregatedTimerData;
AggregatedSqlStatementData aggregatedSqlStatementData = Mockito.mock(AggregatedSqlStatementData.class);
Mockito.when(aggregatedSqlStatementData.getAggregatedIds()).thenReturn(aggregateId);
data[5][0] = new AggregatedSqlStatementData();
data[5][1] = aggregatedSqlStatementData;
AggregatedHttpTimerData aggregatedHttpTimerData = Mockito.mock(AggregatedHttpTimerData.class);
Mockito.when(aggregatedHttpTimerData.getAggregatedIds()).thenReturn(aggregateId);
data[6][0] = new AggregatedHttpTimerData();
data[6][1] = aggregatedHttpTimerData;
AggregatedExceptionSensorData aggregatedExceptionSensorData = Mockito.mock(AggregatedExceptionSensorData.class);
Mockito.when(aggregatedExceptionSensorData.getAggregatedIds()).thenReturn(aggregateId);
data[7][0] = new AggregatedExceptionSensorData();
data[7][1] = aggregatedExceptionSensorData;
return data;
}
}