package org.skywalking.apm.collector.worker.storage; import org.junit.Assert; import org.junit.Test; import java.lang.reflect.Field; import java.util.Map; /** * @author pengys5 */ public class WindowTestCase { @Test public void switchPointer() throws NoSuchFieldException, IllegalAccessException { Impl impl = new Impl(); Field pointerField = impl.getClass().getSuperclass().getDeclaredField("pointer"); pointerField.setAccessible(true); WindowData<DataImpl> pointer = (WindowData<DataImpl>) pointerField.get(impl); Field windowDataAField = impl.getClass().getSuperclass().getDeclaredField("windowDataA"); windowDataAField.setAccessible(true); WindowData<DataImpl> windowDataA = (WindowData<DataImpl>) windowDataAField.get(impl); Field windowDataBField = impl.getClass().getSuperclass().getDeclaredField("windowDataB"); windowDataBField.setAccessible(true); WindowData<DataImpl> windowDataB = (WindowData<DataImpl>) windowDataBField.get(impl); Assert.assertEquals(false, windowDataA.isHolding()); WindowData<DataImpl> current = impl.getCurrentAndHold(); Assert.assertEquals(current, windowDataA); Assert.assertEquals(true, windowDataA.isHolding()); WindowData<DataImpl> last = impl.getLast(); Assert.assertEquals(last, windowDataB); Assert.assertEquals(pointer, windowDataA); impl.switchPointer(); pointer = (WindowData<DataImpl>) pointerField.get(impl); Assert.assertEquals(pointer, windowDataB); current = impl.getCurrentAndHold(); Assert.assertEquals(current, windowDataB); Assert.assertEquals(true, windowDataB.isHolding()); last = impl.getLast(); Assert.assertEquals(last, windowDataA); impl.switchPointer(); pointer = (WindowData<DataImpl>) pointerField.get(impl); Assert.assertEquals(pointer, windowDataA); } class Impl extends Window<DataImpl> { } class DataImpl implements Data { @Override public String getId() { return null; } @Override public void merge(Map<String, ?> dbData) { } } }