package com.rayo.server.cdr; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.commons.lang.math.RandomUtils; import org.apache.commons.lang.time.DateUtils; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.rayo.core.cdr.Cdr; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations="/rayo-context-activemq-cdr.xml") public class FileCdrStorageStrategyTest { @Autowired FileCdrStorageStrategy storage; @Test public void testFolderIsCreatedOnInit() throws Exception { storage.setBaseFolder("target/test" + RandomUtils.nextInt(10000)); File folder = new File(storage.getBaseFolder()); folder.deleteOnExit(); assertFalse(folder.exists()); storage.init(); assertTrue(folder.exists()); } @Test public void testCdrFileIsCreated() throws Exception { storage.setBaseFolder("target/test" + RandomUtils.nextInt(10000)); File folder = new File(storage.getBaseFolder()); folder.deleteOnExit(); storage.init(); assertEquals(folder.listFiles().length, 0); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date now = new Date(); Cdr cdr = new Cdr(); cdr.setStartTime(now.getTime()); storage.store(cdr); String expectedFile = sdf.format(now) + ".xml"; assertEquals(folder.listFiles().length, 1); assertTrue(folder.listFiles()[0].getName().endsWith(expectedFile)); } @Test public void testCdrFilesRollOver() throws Exception { storage.setBaseFolder("target/test" + RandomUtils.nextInt(10000)); File folder = new File(storage.getBaseFolder()); folder.deleteOnExit(); assertFalse(folder.exists()); storage.init(); assertEquals(folder.listFiles().length, 0); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date now = new Date(); Cdr cdr = new Cdr(); cdr.setStartTime(now.getTime()); storage.store(cdr); String expectedFile = sdf.format(now) + ".xml"; assertEquals(folder.listFiles().length, 1); assertTrue(folder.listFiles()[0].getName().endsWith(expectedFile)); Date tomorrow = DateUtils.addDays(now, 1); cdr = new Cdr(); cdr.setStartTime(tomorrow.getTime()); storage.store(cdr); expectedFile = sdf.format(tomorrow) + ".xml"; assertEquals(folder.listFiles().length, 2); assertTrue(folder.listFiles()[0].getName().endsWith(expectedFile) || folder.listFiles()[1].getName().endsWith(expectedFile)); } @Test public void testAppendCdrs() throws Exception { storage.setBaseFolder("target/test" + RandomUtils.nextInt(10000)); File folder = new File(storage.getBaseFolder()); folder.deleteOnExit(); storage.init(); Date now = new Date(); Cdr cdr = new Cdr(); cdr.setStartTime(now.getTime()); storage.store(cdr); assertEquals(folder.listFiles().length, 1); long length = folder.listFiles()[0].length(); cdr = new Cdr(); cdr.setStartTime(now.getTime()); storage.store(cdr); assertEquals(folder.listFiles().length, 1); assertTrue(folder.listFiles()[0].length() > length); } }