package cc.blynk.server.tools; import cc.blynk.utils.FileUtils; import org.junit.Before; import org.junit.Test; import java.io.File; import java.nio.ByteBuffer; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import static org.junit.Assert.assertEquals; /** * The Blynk Project. * Created by Dmitriy Dumanskiy. * Created on 05.02.17. */ public class ReportingDataCleanerTest { private static Path reportingPath = Paths.get("/tmp/test_reporting"); private static Path userPath = Paths.get("/tmp/test_reporting/test@test.gmail.com"); @Before public void init() throws Exception { deleteDirectory(userPath.toFile()); Files.createDirectories(userPath); } @Test public void testDoNotOverrideSmallFile() throws Exception { Path userFile = Paths.get(userPath.toString(), "123_minute.bin"); int count = 1; fillWithData(userFile, count); ReportingDataCleaner.main(new String[] {reportingPath.toString()}); assertEquals(16 * count, Files.size(userFile)); } @Test public void testDoNotOverrideSmallFile2() throws Exception { Path userFile = Paths.get(userPath.toString(), "123_minute.bin"); int count = 360; fillWithData(userFile, count); ReportingDataCleaner.main(new String[] {reportingPath.toString()}); assertEquals(16 * count, Files.size(userFile)); } @Test public void testOverrideCorrectFlowAndCheckContent() throws Exception { Path userFile = Paths.get(userPath.toString(), "123_minute.bin"); int count = 361; fillWithData(userFile, count); ReportingDataCleaner.main(new String[] {reportingPath.toString()}); assertEquals(16 * 360, Files.size(userFile)); ByteBuffer userReportingData = FileUtils.read(Paths.get(userPath.toString(), "123_minute.bin"), 360); userReportingData.flip(); for (int i = 1; i < 361; i++) { double value = userReportingData.getDouble(); long ts = userReportingData.getLong(); assertEquals(i, (int) value); assertEquals(ts, i); } } @Test public void testOverrideCorrectFlowAndCheckContent2() throws Exception { Path userFile = Paths.get(userPath.toString(), "123_minute.bin"); int count = 720; fillWithData(userFile, count); ReportingDataCleaner.main(new String[] {reportingPath.toString()}); assertEquals(16 * 360, Files.size(userFile)); ByteBuffer userReportingData = FileUtils.read(Paths.get(userPath.toString(), "123_minute.bin"), 360); userReportingData.flip(); for (int i = 360; i < 720; i++) { double value = userReportingData.getDouble(); long ts = userReportingData.getLong(); assertEquals(i, (int) value); assertEquals(ts, i); } } private static void fillWithData(Path path, int count) throws Exception { for (int i = 0; i < count; i++) { FileUtils.write(path, (double) i, (long) i); } } public static boolean deleteDirectory(File dir) { if (dir.isDirectory()) { File[] children = dir.listFiles(); if (children != null) { for (File aChildren : children) { boolean success = deleteDirectory(aChildren); if (!success) { return false; } } } } return dir.delete(); } }