package nl.tno.sensorstorm.syncbuffertest; import java.util.List; import junit.framework.TestCase; import nl.tno.sensorstorm.api.particles.DataParticle; import nl.tno.sensorstorm.api.particles.MetaParticle; import nl.tno.sensorstorm.api.particles.Particle; import nl.tno.sensorstorm.impl.SyncBuffer; public class SyncBufferTest extends TestCase { private static class TestDataParticle implements DataParticle { private final long timestamp; public TestDataParticle(long timestamp) { this.timestamp = timestamp; } @Override public long getTimestamp() { return timestamp; } @Override public void setTimestamp(long timestamp) { } } private static class TestMetaParticle implements MetaParticle { private final long timestamp; public TestMetaParticle(long timestamp) { this.timestamp = timestamp; } @Override public long getTimestamp() { return timestamp; } @Override public void setTimestamp(long timestamp) { } @Override public String getOriginId() { return null; } @Override public void setOriginId(String originId) { } @Override public boolean equalMetaParticle(MetaParticle obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } TestMetaParticle other = (TestMetaParticle) obj; if (timestamp != other.timestamp) { return false; } return true; } } public void testOrderingFlush() { SyncBuffer b = new SyncBuffer(10); b.pushParticle(new TestDataParticle(2)); b.pushParticle(new TestDataParticle(3)); b.pushParticle(new TestDataParticle(1)); assertEquals(3, b.size()); List<Particle> flush = b.flush(); assertEquals(1, flush.get(0).getTimestamp()); assertEquals(2, flush.get(1).getTimestamp()); assertEquals(3, flush.get(2).getTimestamp()); } public void testBufferSize() { SyncBuffer b = new SyncBuffer(3); List<Particle> l; l = b.pushParticle(new TestDataParticle(1)); assertEquals(0, l.size()); l = b.pushParticle(new TestDataParticle(2)); assertEquals(0, l.size()); l = b.pushParticle(new TestDataParticle(3)); assertEquals(0, l.size()); l = b.pushParticle(new TestDataParticle(5)); assertEquals(2, l.size()); assertEquals(1, l.get(0).getTimestamp()); assertEquals(2, l.get(1).getTimestamp()); l = b.pushParticle(new TestDataParticle(6)); assertEquals(1, l.size()); assertEquals(3, l.get(0).getTimestamp()); l = b.pushParticle(new TestDataParticle(4)); assertEquals(0, l.size()); l = b.pushParticle(new TestDataParticle(7)); assertEquals(1, l.size()); assertEquals(4, l.get(0).getTimestamp()); assertEquals(3, b.size()); List<Particle> flush = b.flush(); assertEquals(5, flush.get(0).getTimestamp()); assertEquals(6, flush.get(1).getTimestamp()); assertEquals(7, flush.get(2).getTimestamp()); } public void testDuplicateMetaParticle() { SyncBuffer b = new SyncBuffer(10); b.pushParticle(new TestMetaParticle(5)); b.pushParticle(new TestMetaParticle(5)); b.pushParticle(new TestMetaParticle(5)); assertEquals(1, b.size()); } public void testDuplicateDataParticle() { SyncBuffer b = new SyncBuffer(10); b.pushParticle(new TestDataParticle(5)); b.pushParticle(new TestDataParticle(5)); b.pushParticle(new TestDataParticle(5)); assertEquals(3, b.size()); } public void testReject() { SyncBuffer b = new SyncBuffer(10); List<Particle> l; l = b.pushParticle(new TestDataParticle(1)); assertEquals(0, l.size()); l = b.pushParticle(new TestDataParticle(100)); assertEquals(1, l.size()); assertEquals(1, l.get(0).getTimestamp()); l = b.pushParticle(new TestDataParticle(200)); assertEquals(1, l.size()); assertEquals(100, l.get(0).getTimestamp()); try { // This should fail, timestamp 100 was already sent out b.pushParticle(new TestDataParticle(2)); fail(); } catch (Exception e) { } } public void testSizeZero() { SyncBuffer b = new SyncBuffer(0); List<Particle> l; TestDataParticle particle = new TestDataParticle(1); l = b.pushParticle(particle); assertEquals(1, l.size()); assertEquals(particle, l.get(0)); } }