package com.google.developers.gdgfirenze.dataservice; import static org.junit.Assert.assertEquals; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.Collection; import java.util.Date; import java.util.List; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import com.google.developers.gdgfirenze.model.AbstractSample; import com.google.developers.gdgfirenze.model.NumericValueSample; import com.google.developers.gdgfirenze.model.PositionSample; import com.google.developers.gdgfirenze.model.SampleReport; import com.google.developers.gdgfirenze.model.Sensor; import com.google.developers.gdgfirenze.model.WifiSignalSample; @RunWith(Parameterized.class) public class SensormixJpaIntegrationTest { private String jpaPersistenceUnitName; private SensormixServiceJpaImpl sensormixServiceJpaImpl; private EntityManagerFactory emf; public SensormixJpaIntegrationTest(String jpaPersistenceUnitName) { this.jpaPersistenceUnitName = jpaPersistenceUnitName; } @Parameters public static Collection<Object[]> generateData() { return Arrays.asList(new Object[][] { {"sm_mysql_db_test"}, { "sm_hsql_db_test"}, {"sm_openjpa_mysql_db_test"}}); } @Before public void initialize() { emf = Persistence.createEntityManagerFactory(jpaPersistenceUnitName); sensormixServiceJpaImpl = new SensormixServiceJpaImpl(); sensormixServiceJpaImpl.setEntityManagerFactory(emf); } @After public void close() { emf.close(); } @BeforeClass public static void setUpBeforeClass() throws Exception { } @Test public void testRegisterAndListSensors() { Sensor s = new Sensor(); s.setId("uri:giuseppe:android:77551144"); s.setName("Samsung Galaxy W"); s.setDescription("booooooo"); sensormixServiceJpaImpl.registerSensor(s); List<String> ids = sensormixServiceJpaImpl.listSensorsIds(); assertEquals(1, ids.size()); } @Test public void testRecordingAndListingSamples() { int count = 1000; List<AbstractSample> firstTypeOfSample = new ArrayList<AbstractSample>(); for (int i = 0; i < count; i++) { NumericValueSample s = new NumericValueSample(); s.setSensorId("uri:giuseppe:android:77551144"); s.setType("uri:giuseppe:android:numericType"); s.setTime(new Date(System.currentTimeMillis())); s.setValue((double) i * 152); firstTypeOfSample.add(s); } for (int i = 0; i < count; i++) { PositionSample s = new PositionSample(); s.setSensorId("uri:giuseppe:android:77551145"); s.setType("uri:giuseppe:android:positionType"); s.setTime(new Date(System.currentTimeMillis())); s.setLat(15.00); s.setLng((double) (45 + i / 100)); firstTypeOfSample.add(s); } for (int i = 0; i < count; i++) { WifiSignalSample s = new WifiSignalSample(); s.setSensorId("uri:giuseppe:android:77551146"); s.setType("uri:giuseppe:android:WifiType"); s.setTime(new Date(System.currentTimeMillis())); s.setFrequency(5000000000.0); firstTypeOfSample.add(s); } long checkTime = System.currentTimeMillis(); sensormixServiceJpaImpl.recordSamples(firstTypeOfSample); checkTime = System.currentTimeMillis() - checkTime; System.out.println("recorded " + firstTypeOfSample.size() + " in " + checkTime + " milliseconds"); checkTime = System.currentTimeMillis(); List<AbstractSample> ids = sensormixServiceJpaImpl.getSamples( "uri:giuseppe:android:77551145", null, null, null, null, null); checkTime = System.currentTimeMillis() - checkTime; System.out.println("readed " + ids.size() + " in " + checkTime + " milliseconds"); assertEquals(count, ids.size()); } @Test public void testDateFilterOnListSamples() { int count = 1000; List<AbstractSample> firstTypeOfSample = new ArrayList<AbstractSample>(); Calendar d = Calendar.getInstance(); d.set(2013, 10, 22); for (int i = 0; i < count; i++) { NumericValueSample s = new NumericValueSample(); s.setSensorId("uri:giuseppe:android:77551144"); s.setType("uri:giuseppe:android:numericType"); s.setTime(d.getTime()); s.setValue((double) i * 152); firstTypeOfSample.add(s); } d.set(2013, 9, 22); for (int i = 0; i < count; i++) { PositionSample s = new PositionSample(); s.setSensorId("uri:giuseppe:android:77551145"); s.setType("uri:giuseppe:android:positionType"); s.setTime(d.getTime()); s.setLat(15.00); s.setLng((double) (45 + i / 100)); firstTypeOfSample.add(s); } d.set(2013, 8, 22); for (int i = 0; i < count; i++) { WifiSignalSample s = new WifiSignalSample(); s.setSensorId("uri:giuseppe:android:77551146"); s.setType("uri:giuseppe:android:WifiType"); s.setTime(d.getTime()); s.setFrequency(5000000000.0); firstTypeOfSample.add(s); } long checkTime = System.currentTimeMillis(); sensormixServiceJpaImpl.recordSamples(firstTypeOfSample); checkTime = System.currentTimeMillis() - checkTime; System.out.println("recorded " + firstTypeOfSample.size() + " in " + checkTime + " milliseconds"); d.set(2013, 9, 22); checkTime = System.currentTimeMillis(); List<AbstractSample> ids = sensormixServiceJpaImpl.getSamples(null, null, d.getTime(), null, null, null); checkTime = System.currentTimeMillis() - checkTime; System.out.println("readed " + ids.size() + " in " + checkTime + " milliseconds"); assertEquals(2 * count, ids.size()); d.set(2013, 10, 21); checkTime = System.currentTimeMillis(); ids = sensormixServiceJpaImpl.getSamples(null, null, null, d.getTime(), null, null); checkTime = System.currentTimeMillis() - checkTime; System.out.println("readed " + ids.size() + " in " + checkTime + " milliseconds"); assertEquals(2 * count, ids.size()); d.set(2013, 9, 21); Date to = d.getTime(); d.set(2013, 8, 21); Date from = d.getTime(); checkTime = System.currentTimeMillis(); ids = sensormixServiceJpaImpl.getSamples(null, null, from, to, null, null); checkTime = System.currentTimeMillis() - checkTime; System.out.println("readed " + ids.size() + " in " + checkTime + " milliseconds"); assertEquals(count, ids.size()); } @Test public void testTypeFilterOnListSamples() { int count = 1000; List<AbstractSample> firstTypeOfSample = new ArrayList<AbstractSample>(); Calendar d = Calendar.getInstance(); d.set(2013, 10, 22); for (int i = 0; i < count; i++) { NumericValueSample s = new NumericValueSample(); s.setSensorId("uri:giuseppe:android:77551144"); s.setType("uri:giuseppe:android:numericType"); s.setTime(d.getTime()); s.setValue((double) i * 152); firstTypeOfSample.add(s); } d.set(2013, 9, 22); for (int i = 0; i < count; i++) { PositionSample s = new PositionSample(); s.setSensorId("uri:giuseppe:android:77551145"); s.setType("uri:giuseppe:android:positionType"); s.setTime(d.getTime()); s.setLat(15.00); s.setLng((double) (45 + i / 100)); firstTypeOfSample.add(s); } d.set(2013, 8, 22); for (int i = 0; i < count; i++) { WifiSignalSample s = new WifiSignalSample(); s.setSensorId("uri:giuseppe:android:77551146"); s.setType("uri:giuseppe:android:WifiType"); s.setTime(d.getTime()); s.setFrequency(5000000000.0); firstTypeOfSample.add(s); } long checkTime = System.currentTimeMillis(); sensormixServiceJpaImpl.recordSamples(firstTypeOfSample); checkTime = System.currentTimeMillis() - checkTime; System.out.println("recorded " + firstTypeOfSample.size() + " in " + checkTime + " milliseconds"); checkTime = System.currentTimeMillis(); List<AbstractSample> ids = sensormixServiceJpaImpl.getSamples(null, "uri:giuseppe:android:positionType", null, null, null, null); checkTime = System.currentTimeMillis() - checkTime; System.out.println("readed " + ids.size() + " in " + checkTime + " milliseconds"); assertEquals(count, ids.size()); } @Test public void testCountSamples() { int count = 1000; List<AbstractSample> firstTypeOfSample = new ArrayList<AbstractSample>(); Calendar d = Calendar.getInstance(); d.set(2013, 10, 22); for (int i = 0; i < count; i++) { NumericValueSample s = new NumericValueSample(); s.setSensorId("uri:giuseppe:android:77551144"); s.setType("uri:giuseppe:android:numericType"); s.setTime(d.getTime()); s.setValue((double) i * 152); firstTypeOfSample.add(s); } d.set(2013, 9, 22); for (int i = 0; i < count; i++) { PositionSample s = new PositionSample(); s.setSensorId("uri:giuseppe:android:77551145"); s.setType("uri:giuseppe:android:positionType"); s.setTime(d.getTime()); s.setLat(15.00); s.setLng((double) (45 + i / 100)); firstTypeOfSample.add(s); } d.set(2013, 8, 22); for (int i = 0; i < count; i++) { WifiSignalSample s = new WifiSignalSample(); s.setSensorId("uri:giuseppe:android:77551146"); s.setType("uri:giuseppe:android:WifiType"); s.setTime(d.getTime()); s.setFrequency(5000000000.0); firstTypeOfSample.add(s); } long checkTime = System.currentTimeMillis(); sensormixServiceJpaImpl.recordSamples(firstTypeOfSample); checkTime = System.currentTimeMillis() - checkTime; System.out.println("recorded " + firstTypeOfSample.size() + " in " + checkTime + " milliseconds"); checkTime = System.currentTimeMillis(); long num = sensormixServiceJpaImpl.countSamples(null, "uri:giuseppe:android:positionType", null, null); checkTime = System.currentTimeMillis() - checkTime; System.out.println("readed " + num + " in " + checkTime + " milliseconds"); assertEquals(count, num); } @Test public void testSampleReports() { int count = 1000; List<AbstractSample> firstTypeOfSample = new ArrayList<AbstractSample>(); Calendar d = Calendar.getInstance(); d.set(2013, 10, 22); for (int i = 0; i < count; i++) { NumericValueSample s = new NumericValueSample(); s.setSensorId("uri:giuseppe:android:77551144"); s.setType("uri:giuseppe:android:numericType"); s.setTime(d.getTime()); s.setValue((double) i * 152); firstTypeOfSample.add(s); } d.set(2013, 9, 22); for (int i = 0; i < count; i++) { PositionSample s = new PositionSample(); s.setSensorId("uri:giuseppe:android:77551145"); s.setType("uri:giuseppe:android:positionType"); s.setTime(d.getTime()); s.setLat(15.00); s.setLng((double) (45 + i / 100)); firstTypeOfSample.add(s); } d.set(2013, 8, 22); for (int i = 0; i < count; i++) { WifiSignalSample s = new WifiSignalSample(); s.setSensorId("uri:giuseppe:android:77551146"); s.setType("uri:giuseppe:android:WifiType"); s.setTime(d.getTime()); s.setFrequency(5000000000.0); firstTypeOfSample.add(s); } long checkTime = System.currentTimeMillis(); sensormixServiceJpaImpl.recordSamples(firstTypeOfSample); checkTime = System.currentTimeMillis() - checkTime; System.out.println("recorded " + firstTypeOfSample.size() + " in " + checkTime + " milliseconds"); d.set(2013, 10, 21); Date to = d.getTime(); d.set(2013, 9, 21); Date from = d.getTime(); checkTime = System.currentTimeMillis(); SampleReport num = sensormixServiceJpaImpl.getSampleReport(null, "uri:giuseppe:android:positionType", from, to); checkTime = System.currentTimeMillis() - checkTime; System.out.println("readed " + num.getDailySampleReports().get(1).getSampleCount() + " in " + checkTime + " milliseconds"); assertEquals(count, num.getDailySampleReports().get(1).getSampleCount()); } @Test public void testSateFilterListSensors() { int count = 1000; List<AbstractSample> firstTypeOfSample = new ArrayList<AbstractSample>(); Calendar d = Calendar.getInstance(); d.set(2013, 10, 22); for (int i = 0; i < count; i++) { NumericValueSample s = new NumericValueSample(); s.setSensorId("uri:giuseppe:android:77551144"); s.setType("uri:giuseppe:android:numericType"); s.setTime(d.getTime()); s.setValue((double) i * 152); firstTypeOfSample.add(s); } d.set(2013, 9, 22); for (int i = 0; i < count; i++) { PositionSample s = new PositionSample(); s.setSensorId("uri:giuseppe:android:77551145"); s.setType("uri:giuseppe:android:positionType"); s.setTime(d.getTime()); s.setLat(15.00); s.setLng((double) (45 + i / 100)); firstTypeOfSample.add(s); } d.set(2013, 8, 22); for (int i = 0; i < count; i++) { WifiSignalSample s = new WifiSignalSample(); s.setSensorId("uri:giuseppe:android:77551146"); s.setType("uri:giuseppe:android:WifiType"); s.setTime(d.getTime()); s.setFrequency(5000000000.0); firstTypeOfSample.add(s); } long checkTime = System.currentTimeMillis(); sensormixServiceJpaImpl.recordSamples(firstTypeOfSample); checkTime = System.currentTimeMillis() - checkTime; System.out.println("recorded " + firstTypeOfSample.size() + " in " + checkTime + " milliseconds"); d.set(2013, 10, 21); Date to = d.getTime(); d.set(2013, 9, 21); Date from = d.getTime(); checkTime = System.currentTimeMillis(); List<Sensor> ss = sensormixServiceJpaImpl.getSensors(null, from, to); checkTime = System.currentTimeMillis() - checkTime; System.out.println("readed " + ss.size() + " in " + checkTime + " milliseconds"); assertEquals(1, ss.size()); List<String> ids = new ArrayList<String>(); ids.add("uri:giuseppe:android:77551144"); ss = sensormixServiceJpaImpl.getSensors(ids, null, null); assertEquals(1, ss.size()); } @Test public void testSamplesTypeListing() { int count = 1000; List<AbstractSample> firstTypeOfSample = new ArrayList<AbstractSample>(); Calendar d = Calendar.getInstance(); d.set(2013, 10, 22); for (int i = 0; i < count; i++) { NumericValueSample s = new NumericValueSample(); s.setSensorId("uri:giuseppe:android:77551144"); s.setType("uri:giuseppe:android:numericType"); s.setTime(d.getTime()); s.setValue((double) i * 152); firstTypeOfSample.add(s); } d.set(2013, 9, 22); for (int i = 0; i < count; i++) { PositionSample s = new PositionSample(); s.setSensorId("uri:giuseppe:android:77551145"); s.setType("uri:giuseppe:android:positionType"); s.setTime(d.getTime()); s.setLat(15.00); s.setLng((double) (45 + i / 100)); firstTypeOfSample.add(s); } d.set(2013, 8, 22); for (int i = 0; i < count; i++) { WifiSignalSample s = new WifiSignalSample(); s.setSensorId("uri:giuseppe:android:77551146"); s.setType("uri:giuseppe:android:WifiType"); s.setTime(d.getTime()); s.setFrequency(5000000000.0); firstTypeOfSample.add(s); } long checkTime = System.currentTimeMillis(); sensormixServiceJpaImpl.recordSamples(firstTypeOfSample); checkTime = System.currentTimeMillis() - checkTime; System.out.println("recorded " + firstTypeOfSample.size() + " in " + checkTime + " milliseconds"); checkTime = System.currentTimeMillis(); List<String> ss = sensormixServiceJpaImpl.listSamplesTypes(); checkTime = System.currentTimeMillis() - checkTime; System.out.println("readed " + ss.size() + " in " + checkTime + " milliseconds"); assertEquals(3, ss.size()); } @Test public void testAllMethodsWithoutFilter() { int count = 10; List<AbstractSample> firstTypeOfSample = new ArrayList<AbstractSample>(); Calendar d = Calendar.getInstance(); d.set(2013, 10, 22); for (int i = 0; i < count; i++) { NumericValueSample s = new NumericValueSample(); s.setSensorId("uri:giuseppe:android:77551144"); s.setType("uri:giuseppe:android:numericType"); s.setTime(d.getTime()); s.setValue((double) i * 152); firstTypeOfSample.add(s); } long checkTime = System.currentTimeMillis(); sensormixServiceJpaImpl.recordSamples(firstTypeOfSample); checkTime = System.currentTimeMillis() - checkTime; System.out.println("recorded " + firstTypeOfSample.size() + " in " + checkTime + " milliseconds"); checkTime = System.currentTimeMillis(); List<Sensor> ss = sensormixServiceJpaImpl.getSensors(null, null, null); List<AbstractSample> sa = sensormixServiceJpaImpl.getSamples(null, null, null, null, null, null); SampleReport sr = sensormixServiceJpaImpl.getSampleReport(null, null, null, null); long l = sensormixServiceJpaImpl.countSamples(null, null, null, null); checkTime = System.currentTimeMillis() - checkTime; System.out.println("readed " + ss.size() + " in " + checkTime + " milliseconds"); assertEquals(1, ss.size()); assertEquals(10, l); assertEquals(10, sa.size()); } @Test public void testPartialListingSamples() { int numberOfSampleInserted = 1000; Long numberOfSampleRequested = new Long(333); Long firstSampleRequested = new Long(112); List<AbstractSample> firstTypeOfSample = new ArrayList<AbstractSample>(); Calendar d = Calendar.getInstance(); d.set(2013, 10, 22); for (int i = 0; i < numberOfSampleInserted; i++) { NumericValueSample s = new NumericValueSample(); s.setSensorId("uri:giuseppe:android:77551144"); s.setType("uri:giuseppe:android:numericType"); s.setTime(d.getTime()); s.setValue((double) i * 10); firstTypeOfSample.add(s); } long checkTime = System.currentTimeMillis(); sensormixServiceJpaImpl.recordSamples(firstTypeOfSample); checkTime = System.currentTimeMillis() - checkTime; System.out.println("recorded " + firstTypeOfSample.size() + " in " + checkTime + " milliseconds"); checkTime = System.currentTimeMillis(); List<AbstractSample> sa = sensormixServiceJpaImpl.getSamples(null, null, null, null, firstSampleRequested, numberOfSampleRequested); checkTime = System.currentTimeMillis() - checkTime; System.out.println("readed " + sa.size() + " in " + checkTime + " milliseconds"); assertEquals(numberOfSampleRequested.intValue(), sa.size()); for(int i=0; i< numberOfSampleRequested.intValue(); i++) { NumericValueSample ns=(NumericValueSample)sa.get(i); assertEquals(ns.getValue(), new Double((firstSampleRequested.intValue()+i)*10)); } } }