package org.infinispan.stream;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.testng.AssertJUnit.assertSame;
import static org.testng.AssertJUnit.fail;
import org.infinispan.Cache;
import org.infinispan.commons.CacheException;
import org.infinispan.configuration.cache.CacheMode;
import org.infinispan.container.DataContainer;
import org.infinispan.test.TestingUtil;
import org.testng.annotations.Test;
/**
* Test to verify stream exception propagation behavior for a local cache.
*
* @author wburns
* @since 7.0
*/
@Test(groups = "functional", testName = "stream.LocalStreamIteratorExceptionTest")
public class LocalStreamIteratorExceptionTest extends BaseSetupStreamIteratorTest {
public LocalStreamIteratorExceptionTest() {
super(false, CacheMode.LOCAL);
}
public void ensureDataContainerExceptionPropagated() {
Cache cache = cache(0, CACHE_NAME);
// Extract real one to replace after
DataContainer dataContainer = TestingUtil.extractComponent(cache, DataContainer.class);
try {
Throwable t = new CacheException();
DataContainer mockContainer = when(mock(DataContainer.class).iterator()).thenThrow(t).getMock();
TestingUtil.replaceComponent(cache, DataContainer.class, mockContainer, true);
try {
cache.entrySet().stream().iterator().hasNext();
fail("We should have gotten a CacheException");
} catch (CacheException e) {
assertSame("We should have found the throwable as a cause", t, e);
}
} finally {
TestingUtil.replaceComponent(cache, DataContainer.class, dataContainer, true);
}
}
}