package rocks.inspectit.shared.cs.indexing.buffer.impl;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.empty;
import static org.hamcrest.Matchers.hasValue;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.not;
import static org.mockito.Mockito.when;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.collections.MapUtils;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import rocks.inspectit.shared.all.communication.DefaultData;
import rocks.inspectit.shared.cs.indexing.ITreeComponent;
import rocks.inspectit.shared.cs.indexing.buffer.IBufferBranchIndexer;
import rocks.inspectit.shared.cs.indexing.buffer.IBufferTreeComponent;
/**
* Testing of the buffer branch class.
*
* @author Ivan Senic
*
*/
@SuppressWarnings("PMD")
public class BranchTest {
/**
* Class under test.
*/
private Branch<DefaultData> branch;
/**
* Indexer needed because of the constructor.
*/
@Mock
private IBufferBranchIndexer<DefaultData> bufferBranchIndexer;
/**
* Init.
*/
@BeforeMethod
public void init() {
MockitoAnnotations.initMocks(this);
branch = Mockito.spy(new Branch<>(bufferBranchIndexer));
}
/**
* Tests that clean of the branch is correct.
*/
@SuppressWarnings("unchecked")
@Test
public void clean() {
IBufferTreeComponent<DefaultData> component1 = Mockito.mock(IBufferTreeComponent.class);
when(component1.clean()).thenReturn(true);
IBufferTreeComponent<DefaultData> component2 = Mockito.mock(IBufferTreeComponent.class);
when(component2.clean()).thenReturn(false);
Map<Object, ITreeComponent<DefaultData, DefaultData>> componentMap = MapUtils.putAll(new HashMap<Object, IBufferTreeComponent<DefaultData>>(),
new Object[] { "c1", component1, "c2", component2 });
when(branch.getComponentMap()).thenReturn(componentMap);
boolean isClean = branch.clean();
assertThat(isClean, is(false));
assertThat(componentMap, not(hasValue((ITreeComponent<DefaultData, DefaultData>) component1)));
assertThat(componentMap, hasValue((ITreeComponent<DefaultData, DefaultData>) component2));
when(component2.clean()).thenReturn(true);
isClean = branch.clean();
assertThat(isClean, is(true));
assertThat(componentMap.values(), is(empty()));
}
/**
* Test that clearing of empty components is correct.
*/
@SuppressWarnings("unchecked")
@Test
public void clearEmptyComponents() {
IBufferTreeComponent<DefaultData> component1 = Mockito.mock(IBufferTreeComponent.class);
when(component1.clearEmptyComponents()).thenReturn(true);
IBufferTreeComponent<DefaultData> component2 = Mockito.mock(IBufferTreeComponent.class);
when(component2.clearEmptyComponents()).thenReturn(false);
Map<Object, ITreeComponent<DefaultData, DefaultData>> componentMap = MapUtils.putAll(new HashMap<Object, IBufferTreeComponent<DefaultData>>(),
new Object[] { "c1", component1, "c2", component2 });
when(branch.getComponentMap()).thenReturn(componentMap);
boolean isClear = branch.clearEmptyComponents();
assertThat(isClear, is(false));
assertThat(componentMap, not(hasValue((ITreeComponent<DefaultData, DefaultData>) component1)));
assertThat(componentMap, hasValue((ITreeComponent<DefaultData, DefaultData>) component2));
when(component2.clearEmptyComponents()).thenReturn(true);
isClear = branch.clearEmptyComponents();
assertThat(isClear, is(true));
assertThat(componentMap.values(), is(empty()));
}
}