package org.skywalking.apm.collector.worker.storage;
import com.google.gson.JsonObject;
import org.junit.Assert;
import org.junit.Test;
import org.skywalking.apm.collector.worker.Const;
import java.lang.reflect.Field;
/**
* @author pengys5
*/
public class RecordPersistenceTestCase {
@Test
public void testGetElseCreate() {
String id = "2016" + Const.ID_SPLIT + "A" + Const.ID_SPLIT + "B";
JsonObject record = new JsonObject();
record.addProperty("Column_1", "Value_1");
RecordPersistenceData recordPersistenceData = new RecordPersistenceData();
recordPersistenceData.hold();
RecordData recordData = recordPersistenceData.getOrCreate(id);
recordData.set(record);
Assert.assertEquals(id, recordData.getId());
RecordData recordData1 = recordPersistenceData.getOrCreate(id);
Assert.assertEquals("Value_1", recordData1.get().get("Column_1").getAsString());
}
@Test
public void testClear() {
String id_1 = "2016" + Const.ID_SPLIT + "A" + Const.ID_SPLIT + "B";
String id_2 = "2016" + Const.ID_SPLIT + "B" + Const.ID_SPLIT + "C";
RecordPersistenceData recordPersistenceData = new RecordPersistenceData();
recordPersistenceData.hold();
recordPersistenceData.getOrCreate(id_1);
Assert.assertEquals(1, recordPersistenceData.getCurrentAndHold().size());
recordPersistenceData.getOrCreate(id_2);
Assert.assertEquals(2, recordPersistenceData.getCurrentAndHold().size());
recordPersistenceData.getCurrentAndHold().clear();
Assert.assertEquals(0, recordPersistenceData.getCurrentAndHold().size());
}
@Test
public void hold() throws NoSuchFieldException, IllegalAccessException {
RecordPersistenceData persistenceData = new RecordPersistenceData();
persistenceData.hold();
Field testAField = persistenceData.getClass().getDeclaredField("lockedWindowData");
testAField.setAccessible(true);
WindowData<JoinAndSplitData> windowData = (WindowData<JoinAndSplitData>) testAField.get(persistenceData);
Assert.assertEquals(true, windowData.isHolding());
}
@Test
public void release() throws NoSuchFieldException, IllegalAccessException {
RecordPersistenceData persistenceData = new RecordPersistenceData();
persistenceData.hold();
Field testAField = persistenceData.getClass().getDeclaredField("lockedWindowData");
testAField.setAccessible(true);
WindowData<JoinAndSplitData> windowData = (WindowData<JoinAndSplitData>) testAField.get(persistenceData);
Assert.assertEquals(true, windowData.isHolding());
persistenceData.release();
Assert.assertEquals(false, windowData.isHolding());
}
}