package org.openmuc.framework.datalogger.ascii.test;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openmuc.framework.core.datamanager.LogRecordContainerImpl;
import org.openmuc.framework.data.DoubleValue;
import org.openmuc.framework.data.Record;
import org.openmuc.framework.data.ValueType;
import org.openmuc.framework.datalogger.ascii.AsciiLogger;
import org.openmuc.framework.datalogger.ascii.LogFileWriter;
import org.openmuc.framework.datalogger.ascii.LogIntervalContainerGroup;
import org.openmuc.framework.datalogger.ascii.utils.LoggerUtils;
import org.openmuc.framework.datalogger.spi.LogChannel;
import org.openmuc.framework.datalogger.spi.LogRecordContainer;
public class LoggerUtilsTest {
LogFileWriter lfw = new LogFileWriter(TestUtils.TESTFOLDERPATH, true);
private static int loggingInterval = 1; // ms;
private static int loggingTimeOffset = 0; // ms;
private static String ch01 = "Double";
private static String dummy = "dummy";
private static HashMap<String, LogChannel> logChannelList = new HashMap<>();
private static Calendar calendar = new GregorianCalendar();
@BeforeClass
public static void setup() {
int sub = (int) (calendar.getTimeInMillis() % 10l);
calendar.add(Calendar.MILLISECOND, -loggingInterval * 5 - sub);
TestSuite.createTestFolder();
TestUtils.deleteExistingFile(loggingInterval, loggingTimeOffset, calendar);
LogChannelTestImpl ch1 = new LogChannelTestImpl(ch01, "dummy description", dummy, ValueType.DOUBLE,
loggingInterval, loggingTimeOffset);
logChannelList.put(ch01, ch1);
long timeStamp = calendar.getTimeInMillis();
for (int i = 0; i < 5; ++i) {
LogFileWriter lfw = new LogFileWriter(TestUtils.TESTFOLDERPATH, false);
LogIntervalContainerGroup group = getGroup(timeStamp, i);
lfw.log(group, loggingInterval, loggingTimeOffset, calendar, logChannelList);
AsciiLogger.setLastLoggedLineTimeStamp(loggingInterval, loggingTimeOffset, calendar.getTimeInMillis());
calendar.add(Calendar.MILLISECOND, loggingInterval);
}
}
@Test
public void tc_501_test_getFilenames() {
List<String> expecteds = new ArrayList<>();
expecteds.add("20151005_1000_500.dat");
expecteds.add("20151006_1000_500.dat");
expecteds.add("20151007_1000_500.dat");
expecteds.add("20151008_1000_500.dat");
List<String> actual = LoggerUtils.getFilenames(1000, 500, 1444031465000l, 1444290665000l);
int i = 0;
for (String expected : expecteds) {
assertEquals(actual.get(i++), expected);
}
}
@Test
public void tc_502_test_getFilename() {
String expected = "20151005_1000_500.dat";
String actual = LoggerUtils.getFilename(1000, 500, 1444031465000l);
assertEquals(actual, expected);
}
@Test
public void tc_503_test_fillUpFileWithErrorCode() {
long lastTimestamp = AsciiLogger.fillUpFileWithErrorCode(TestUtils.TESTFOLDERPATH,
Integer.toString(loggingInterval), calendar);
AsciiLogger.setLastLoggedLineTimeStamp(loggingInterval, loggingTimeOffset, lastTimestamp);
LogIntervalContainerGroup group = getGroup(calendar.getTimeInMillis(), 3);
calendar = new GregorianCalendar();
int sub = (int) (calendar.getTimeInMillis() % 10l);
calendar.add(Calendar.MILLISECOND, -sub + 10);
lfw.log(group, loggingInterval, loggingTimeOffset, calendar, logChannelList);
AsciiLogger.setLastLoggedLineTimeStamp(loggingInterval, loggingTimeOffset, calendar.getTimeInMillis());
LogChannelTestImpl ch1 = new LogChannelTestImpl(ch01, "dummy description", dummy, ValueType.DOUBLE,
loggingInterval, loggingTimeOffset);
}
// ####################################################################################################################
// ####################################################################################################################
// ####################################################################################################################
private static LogIntervalContainerGroup getGroup(long timeStamp, int i) {
LogIntervalContainerGroup group = new LogIntervalContainerGroup();
LogRecordContainer container1 = new LogRecordContainerImpl(ch01,
new Record(new DoubleValue(i * 7 - 0.555), timeStamp));
group.add(container1);
return group;
}
}